HAMBURG, GERMANY – DECEMBER 28: Participant holds his laptops in front of an illuminated wall in … [+]
A few weeks ago he brought one announcement by Google that over 25% of all new code created at the company is generated by AI. That’s a remarkable statement from a company that makes some of the most advanced software on the planet — suggesting that artificial intelligence has a lot to add to streamlining 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 are looking 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 artificial intelligence?
Code and software differentiation
I believe the key lies in the difference between code and software. Until now, the distinction between them hasn’t always been clear, mostly because it didn’t need to be. However, with current developments in artificial intelligence, this distinction is becoming more critical. So what’s the difference?
- Code is the artifact of a computer program. The code contained in one or more files, with some number of lines per file, is the set of instructions that the program executes.
- Software, usually consisting of code, is the final product used for a purpose.
Why is the distinction important? Don’t they sound basically the same? The difference is the difference between the steps required to perform a function and all the work required to make 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 developers. Each unit is a code. The product we use is the software created when all that code is integrated, often with older code or with 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, version management, updates, system-level testing, etc. are part of software engineering.
Why does this matter for computer science education?
K-12 computer science education almost always focuses on coding (that is, the syntax, language structure, and other details needed 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. In universities and some high schools, one can find courses on applied topics about how to use coding to build systems – courses such as bioinformatics (applying software and algorithms to understand biological systems), compilers (the structure of complex programs whose mission 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 perfectly structured and logically acceptable code to implement a well-defined task), the first set of lessons becomes less critical than the second (in my opinion). Students should be able to read, update, modify and extend the code, but it may no longer be so important that they can write it from scratch with perfect correctness.
Why do they even need to read the code?
Experts who have used AI coding have commented that their development cycle is now about prompting and processingwith 80% of the code generated by AI. This form of it direct programming leverages a combination of human ability to read, understand, and improve code and artificial intelligence to generate correctly written code for specific tasks. Being productive in this style of software development requires human dexterity in reading and understanding code, as well as sufficient 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 view a key element and challenge of this new process. I have personally found the prompt-driven programming model to be very effective. That being said, I learned to code by writing code from scratch in multiple languages. It’s hard to estimate how well I could read code today if I hadn’t been forced to write code without help. There are no simple answers here. Some 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 a strong focus on coding skills is no longer appropriate for the current landscape. While the analogy of the calculator to artificial intelligence is both well-liked and derided 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 be learning a collaborative software development model where a human and an AI assistant work together to create code. However, there is a larger question of whether computer science skills as we define them today are even appropriate for the future workforce. There is growing evidence of new tech graduates struggling to find entry-level jobs. A bigger change in computer science and computer science education may be the shift from a heavy focus on coding to skills needed in enterprise software engineering, such as quality assurance mechanisms, continuous integration, collaborative work on large codebases, etc. etc. In any case, there is evidence that AI could (and should) lead to fundamental changes in computer science education as we seek to empower the next generation of human resources.