{'fraction_non_alphanumeric': 0.026026604973973393, 'fraction_numerical': 0.006940427993059572, 'mean_word_length': 5.245487364620939, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Understanding Coding Behaviors in Intermediate CS Students

Gaining proficiency in code design, implementation, testing, and debugging in the context of large projects are essential parts of progressing beyond introductory programming. In intermediate (post CS2) programming courses, many students fail to complete one or more projects on time. The problem starts with poor time-management when developing projects with a 3-5 week lifecycle. These projects become even more difficult to manage if not developed incrementally. Many students neglect to write sufficient test cases and so miss that bugs exist. Then, they have trouble with locating a bug once it is identified. Our goal is to identify bad coding behaviors so that we can provide feedback to students long before the project is due. Therefore, we plan to analyze the time-management, incremental development, testing, and debugging behavior of students to distinguish better coding practice from worse. We have used mixed-method research techniques. First, we collected students' IDE-based clickstream data. From the clickstream data, we deduced the students' personal development process, such as to what extent they use a debugger vs print statements for debugging. We found 90% and 75% of students use print statements and debugger, respectively. We interviewed 12 students to understand their process for time-management, incremental development, testing, and debugging. We also plan to survey 300+ students to see if the interview findings represent the larger population. Our research will be extended to recognize bad coding behaviors in real-time and provide necessary feedback about best coding practices with the help of an intelligent developer assistant.