Enhancing Online Programming Education: Leveraging Professional Tools for Personalized Feedback and Code Quality Improvement
Abstract
The growing popularity of online programming learning platforms, such as Massive Open Online Courses (MOOCs), has transformed how students learn programming. These platforms offer flexibility, enabling students to learn at their own pace and from any location. However, challenges remain, such as providing effective feedback, creating personalized curriculums, and helping them solve their mistakes, especially on a large scale. As tasks become more complex, students often need to switch to a professional Integrated Development Environment (IDE), which adds difficulty as they must also learn to use these advanced tools. This thesis addresses these challenges by leveraging professional programming tools, such as static analyzers and IDE-integrated features, to deliver personalized feedback in online programming learning platforms. Specifically, it explores two types of feedback: (1) code quality feedback to help students improve their code and (2) next-step hints to assist students when they get stuck solving programming tasks. The first part introduces Hyperstyle, a tool designed to assess code quality in student submissions and filter issues to show only those relevant for beginners. It helps students fix style problems and follow best practices. To enable large-scale evaluation, a new method was developed to identify code quality issues in task templates created by task authors. This method analyzes frequent patterns in submitted solutions and filters out issues that were already present in the templates. A large-scale evaluation of Hyperstyle, using over 1.8 million Java and Python submissions, demonstrated its positive impact on improving code, with students addressing feedback even when it was not required to complete the task. The second part of the thesis focuses on creating personalized hints using static analysis, IDE features and emerging technologies like LLMs to provide students working on a task with two types of hints: textual and code-based. The approach was tested in a classroom, where students used the system during programming tasks and found the system helpful. A deeper analysis, using process mining and interviews, was then conducted to identify interaction patterns and explore less common scenarios for working with the hints. This highlighted new possibilities for designing such systems in the future. In conclusion, this thesis addresses challenges in code quality assessment and next-step hints for programming courses. By leveraging professional tools and emerging technologies, it offers algorithms, tools, and empirical findings that benefit both students in their learning and researchers building on these results.