ChatGPT, the Abacus, and Education
I’ve remained skeptical of AI code generation for a long time, until I began chatting with ChatGPT last week. It effortlessly worked through problems in Java, Python, C++, and helped me solve a configuration issue in Pickcode’s backend. Plenty has been written about how impressive this is, and there are hundreds of examples being shared online every day. The quick summary of all of this is that AI code completion and large language models will be an invaluable tool to everyone writing software going forward, and I certainly agree.
The important question for me is how does ChatGPT change computer science education? For seemingly the first time, computers have achieved supremacy in writing nested loops in Java to print out Xs and Os in alternating order. ChatGPT is also demonstrably better at writing Python programs to calculate a basketball player’s free throw percentage, and every other intro to programming assignment you might think of. This does not mean that we can hand every kid Copilot or Replit Ghostwriter and watch them code circles around Linus Torvalds. This means we need to rethink what it means to learn how to program.
David Krakauer discusses two types of cognitive artifacts -- tools we use to augment our intelligence:
- Complementary: aid the human in completing a task in a way that increases their skills even in the absence of the tool
- Competitive: aid the human in completing a task in a way that diminishes their abilities when the tool is removed
Krakauer gives two examples of these artifacts, the abacus (complementary), and the calculator (competitive). Both tools aid in performing arithmetic, but a well trained user of an abacus can continue to visualize the abacus in their mind, improving their skills even when the physical tool is unavailable. The same cannot be said for the calculator, a black box that completely abstracts away the process.
ChatGPT/Copilot/Ghostwriter have demonstrated a step change in the ability of computers to aid humans in programming. Why teach students about the low level details of string representations when AI can deal with this for them? AI powered code completion clearly falls in the category of competitive artifact. If every loop you’ve ever “written” has been authored by a large language model, what happens when it’s time to write software without it?
Abacuses for Programming
The high level programming language is our abacus for programming, the cognitive artifact that organizes the student’s mind regardless of where they need to write code. While
reduce stop a student from writing loops, they still build a concept of how iteration facilitates the processing and summarization of data. A drag and drop GUI builder reduces the amount of time spent writing markup, but still builds the requisite design thinking skills a front end engineer needs to be successful.
Leveraging abstractions to aid novice programmers is not a new idea, but until now there hasn’t been an alternative. To make education tools that are competitive with AI, we need them to do a better job of helping students leverage coding concepts without competing those concepts out of their minds. Our curriculum can’t focus on nested loops and format strings -- we need to find ways to empower students to create software that is powerful, that is reflective of their creative skills, and that is deeply human.