Acknowledging Good Java Code with Code Perfumes
Philipp Straubinger, Florian Obermüller, Gordon Fraser
TL;DR
This paper introduces code perfumes for Java as positive, constructive feedback to complement traditional linting in programming education. It defines a catalogue of 20 Java code perfumes across five categories and develops the Perfumator tool to detect these patterns in student submissions, evaluating them on 816 student programs (with a ProgPedia comparison). The empirical results show code perfumes occur frequently, especially defensive programming patterns, and exhibit weak but meaningful associations with correctness metrics such as functionality, readability, and course grades, suggesting perfumes can inform instructors about learning progress. The work highlights practical implications for teaching, such as IDE integration and gamified feedback, while acknowledging the need for more perfumes to broaden coverage of beginner to advanced concepts.
Abstract
Java remains one of the most popular programming languages in education. Although Java programming education is well supported by study materials, learners also need more immediate support on the problems they face in their own code. When this support cannot be offered by educators personally, learners can resort to automated program analysis tools such as linters, which provide feedback on potential bugs or code issues. This is constructive feedback, but it may nevertheless feel like criticism. This paper introduces code perfumes for Java, a simple program analysis technique similar to linting, but commending the correct application of good programming practices. We present a catalogue of 20 Java code perfumes related to common Java language constructs for beginner to immediate learners. Our evaluation shows that these code perfumes occur frequently in learners' code, and programs with more code perfume instances tend to have better functionality and readability. Moreover, students who incorporate more code perfumes tend to achieve higher grades. Thus, code perfumes serve as a valuable tool to acknowledge learners' successes, and as a means to inform instructors about their learners' progress.
