Author(s):
Need
Too often, students write poor code – code that is correct, but is hard to read, modify or extend. Since the code is correct, students have no incentive to revise it, and therefore, get no opportunity to address the important issue of poor coding practices. Computer Science educators have found it hard to teach good coding practices. Current approaches such as tutor/peer code review, live coding, and refactoring instruction are resource-intensive and/or do not scale. Software utilities developed to address poor coding practices help students reactively improve their code, not proactively learn good coding practices. The few software tutors developed to help students learn good coding practices allow for freehand input of code, and therefore, suffer the hazards of false positive and false negative grading. There is a need for software tutors that facilitate mastery learning of good coding practices without the ambiguity or confusion of false grading.
Guiding Questions
Can software tutors be developed to help students learn good semantic coding practices by solving refactoring problems? Can the tutors be constrained to disallow freehand input of code and still cover most of the semantic anti-patterns of interest? Will solving problems using the software tutors help students demonstrably improve their understanding of better coding practices? Will any improved understanding of better coding practices resulting from the use of software tutors lead to students writing better code?
We attempt to answer these questions in this to help students learn from their mistakes and adapt to the learning needs of students by presenting problems on only those coding practices that they have not yet mastered. The tutors will eventually cover 100 semantic coding practices, with 5 – 10 problems encoded per coding practice. They will be usable for C++, Java and Python.
Outcomes
The outcomes of this project are a suite of software tutors to help students learn good semantic coding practices by solving problems; a measurable pre-post improvement in students’ ability to correctly solve refactoring problems; and improvement in the quality of code written by students in course assignments and projects.
Practitioners have long held that it is imperative to use good coding practices when writing code, and poor coding practices seriously hinder the ability to maintain and enhance software.