Generative AI for Programming Education

Situating our response to generative AI in disciplinary identity

One promise of generative AI for programming is that it can help us build software by quickly translating specifications into implementations. Setting aside the question of whether generative AI actually helps novice programmers or even expert programmers, if we follow the premise, then skills like analyzing the qualities of specifications and evaluating the correctness of implementations could be more important to emphasize. But this presumes we know what software we want to build in the first place. This question is often answered by the instructor: we select the assignments, the motivating examples, and the specific concepts that we want to teach. Our choices shape not only what skills students learn but also their disciplinary values interpretation: “a process by which students reflect on the values of a disciplinary domain, as well as who they are and might become in relation to the domain” (Vakil 2020).

💡 How do students see themselves in relation to the field of computing today?

My scholarship has explored redesigning technologies as a way to shape disciplinary values interpretation by drawing on design methods such as iterative design. Iterative design is a software development practice that involves prototyping, testing, analyzing, and refining technology. Instead of assigning students a complete specification of a program to implement and focusing on evaluating the qualities of the final product, iterative design provides a canvas for students to showcase their software development process over time. We can ask students questions about each step of their process and help students evaluate how they contribute to each step of the process. Generative AI is often framed as a productivity tool, but what does productivity free us to do? Teaching students design methods could empower them to ask bigger questions about their work and challenge them to reflect on what exactly they hope to achieve in their future computing careers.

💡 How can we change what we ask students to build, and how we ask them to build it?