Proactive Programming
We believe that students who are taught to be proactive programmers will know how to avoid technical debt and then create more ethical software. This includes developing efficient and correctly working tools that are well-documented and can be easily used and integrated by other developers. In teaching students how to be proactive programmers we require them to use best practices in documentation, comments, and Git practices. For this purpose and to facilitate our two introductory courses, we developed the Proactive Programmers website, which not only equips students with technical skills in areas such as setting up a robust development environment, using version control and continuous integration, and automatically testing and linting their programs but also invites students to think deeply about and to practice professional skills such as effective communication, time management, and goal setting. Along with helping them to become ethical programmers, the repeated cultivation of these two skill types will both enable students to persist in the discipline of Computer Science and to flourish as team members in the upper-level Computer Science courses. The written content and assignments, available through the Proactive Programmers website and the affiliated GitHub organization, invite students to practice these proactive skills and to then reflect on and assess their attainment of them. This culminates in a plan for personal development that includes both OKRs (i.e., “Objectives and Key Results”) that set their sights on high-level objectives and SMART goals (i.e., “Specific, Measurable, Achievable, Relevant, and Time-Bound goals”) that establish practical steps for goal attainment.
To assist in the development of proactive skills, we collaborated with several undergraduate student Technical Leaders to design, implement, test, and deploy on GitHub three free and open-source software tools, as described in the following list. Although initially designed for student use in our introductory courses, our experience has shown that each of these tools work in a variety of realistic scenarios, making them potentially valuable to a variety of stakeholders.
- The AFLuent tool, automatically runs a test suite and uses test coverage information and statistical fault localization equations to pinpoint where in a program defects are most likely to exist. Students who use AFLuent to locate the defective location in their program can invest more time in program repair, thus helping them to finish high-quality programs that are less likely to operate unethically.
- The TaDa tool, runs automated doubling experiments that help students to predict the likely worst-case time complexity of the functions in their program. Since poor program performance can negatively influence a program’s correctness, security, and energy efficiency, TaDa focuses student attention and effort on those functions that are too slow and thus may lead to unethical behavior.
- The CommitCanvas tool, helps to ensure that students write high-quality commit messages when they are modifying the source code and documentation in the GitHub repository for a course project. Students who use CommitCanvas as a pre-commit hook receive alerts when their commit message does not meet a project’s standard, thereby giving them the opportunity to revise it and, ultimately, create a consistent and intelligible project revision history for their team.
- The SheetShuttle, that enables a course instructor to quickly report the assessment of student projects stored in a Google Sheet to GitHub repositories that students create through GitHub Classroom. Along with providing feedback through the GitHub issue tracker in the student’s project repository, instructors who use SheetShuttle can quickly report overall grades and provide targeted feedback to students who are facing challenges in a Computer Science course. Students who receive SheetShuttle-created grade reports can proactively take steps to best ensure that they are mastering the technical and professional knowledge and skills developed in their course.