A few weeks ago brought an announcement from Google that over 25% of all new code created within the company is generated by AI. That’s a remarkable statement from a company that creates some of the most advanced software on the planet—suggesting that AI has a lot to add to improving and speeding up code written by career professionals. But what does this mean for the student in school today (whether K-12 or university)? What will the landscape look like when they look for work? Should they learn to code? If not, then what should they learn? What does it mean for Computer Science education in the age of AI?
Differentiation of code and software
I believe the key lies in the difference between code and software. Until now, the distinction between these wasn’t always clear, mostly because it didn’t need to be. However, with current AI developments, this distinction is becoming more critical. So what’s the difference?
- Code is the object of a computer program. Placed in one or more files, with a fixed number of lines per file, code is the set of instructions that the program executes.
- Software, usually consisting of code, is the end product that is used for some purpose.
Why is the distinction important? Don’t they sound basically the same? The difference is the difference between the steps needed to execute a function and all the work that goes into making the set of steps into a usable product.
Common software packages such as word processing, mobile applications, or databases contain thousands to millions of lines of code, often written by hundreds of programmers. Each unit is code. The product we use is the software that is created when all that code is integrated, often with older code or other services, tested, packaged, and delivered to us in some form. The process that creates such software products is called software engineering. Software engineering contains many practices and skills beyond writing code. For example, integrations, release management, updates, system level tests, etc. they are all part of software engineering.
Why does this matter for computer science education?
K-12 computer science education almost always focuses on coding (which is the syntax, language structure, and other details required to create correct computer programs). This type of knowledge is reinforced in standardized tests (such as AP Computer Science A) that assess a student’s rigorous understanding of these details. At universities and some high schools, courses can be found on applied topics of how coding is used to create systems—courses such as bioinformatics (the application of software and algorithms to understand biological systems), compilers (the structure of complex programs, the task of which is to process other programs to be ready for hardware) and so on.
As AI tools become adept at the details of code generation (often generating syntax-perfect and logically acceptable code to implement a well-defined task), the first set of courses becomes less critical than the second (for thinking mine). Students should be able to read, update, modify and extend the code, but it may not be so important that they can write it from scratch with perfect correctness.
Why should they even read the code?
Experts who have used AI coding have commented that their development cycle is now about pushing and modifying, with 80% of AI-generated code. This form of speed-driven programming uses a combination of human skills to read, understand and improve code and AI to generate syntactically correct code for specific tasks. Being productive in this style of software development requires human skill in reading and understanding code, as well as enough knowledge to evaluate and request fixes (or make them directly if necessary).
How can you learn to read code if you can’t write it?
This is, in my opinion, a key element and challenge of this new process. I have personally found the contingency-driven programming model to be very effective. That said, I learned to code by writing code from scratch in multiple languages. It’s hard to estimate how well I would be able to read code today if I hadn’t been forced to write code without any help. There are no easy answers here. A certain amount of code writing is required to develop the necessary software development skills and work effectively with AI code generators. However, the previous model of heavy focus on code creation skills is no longer a good fit for the current landscape. While the calculator analogy with AI is loved and mocked depending on who you ask, there may be a parallel here. We now teach students how to solve higher level problems using calculators, but we also have exam sections where calculators are not allowed. A similar kind of balance may need to be struck here.
What does this mean for computer science education and AI education?
At a basic level, the trends suggest that students should learn a collaborative model of software development where a human and an AI assistant work together to generate code. However, there is a larger question of whether computer science skills as we define them today are even suitable for the future workforce. Evidence is mounting of new tech grads struggling to land entry-level jobs. A bigger change in computer science and computer science education may be the shift from a heavy focus on coding to the skills required in enterprise software engineering, such as quality assurance mechanisms, continuous integration, collaborative work in large codebases, etc. In any case, the indications are that AI can (and should) drive fundamental change in computer science education as we seek to empower the next generation of the human workforce.