The change in the way code is delivered becomes more and more evident with AI tools demonstrating strong code-writing capabilities. The amount of AI-written code in production increases every hour, and nobody really knows what the near future looks like, or what skills software developers should train in today to be efficient tomorrow. Interestingly, the first AI developer - named Devin, was just introduced 3 weeks ago.
Some people argue that software development is becoming obsolete and that we need to prepare for most IT-related jobs being taken over by AI soon. Others believe that we are all safe because it's impossible to replace humans by simply predicting the most probable answer to questions, which is essentially what Large Language Models do. Internet forums are flooded with people asking about future-proof jobs in IT. The times have not been this turbulent for a long time, raising the question: What is the right way forward? When it comes to computer science and software development, what should we teach, how should we teach it, and will it be helpful in the real job?
This reminds me somewhat of Isaac Asimov's novella, "Profession." In his story, Asimov imagines a future where education and career assignments are determined by scanning and directly imprinting knowledge into young people's brains using "ribbons." A ribbon contains all you need to know about a subject; by scanning it and writing the knowledge directly into your brain, you become a professional. It's as simple as that.
The protagonist, George Platen, eagerly anticipates his "Book Day" at the age of eighteen, when he will learn his profession. However, he is devastated when he is deemed "Unassigned" and sent to a House for the Feeble-minded.
While reading this, I was completely drawn into the story, and everything seemed logical until George encountered the question: "Who creates new ribbons?"
This question sent shivers down my spine because it exposes a significant flaw in the concept of "predetermined" education devoid of creativity. If your knowledge is limited to what is contained in ribbons, and you've never learned how to learn on your own, how could you invent anything new?
There is no way. People, or at least a group of people, need to receive education "the old way," understanding concepts one at a time, sometimes through hard work and struggle. This is how creativity is fostered. This is how new ribbons are created.
The new curricula need to blend the traditional "write your own code" approach with the use of AI code generation tools. The optimal strategy to avoid becoming obsolete as a professional is to embrace these innovative AI tools, learn to use them efficiently and enhance your productivity through their use.
Here's how I envision it:
And now, for a bit more detail.
Regardless of whether AI is involved, the essence of software development lies in problem-solving. We tackle a wide array of challenges: UI issues, performance bottlenecks, gameplay mechanics, AI behaviors, data analysis, and any other problem life might present. Problem-solving is a crucial skill that will always be in demand. Even as we shift towards using AI for code writing, imagine a scenario where your AI tool loses internet connectivity – that's a problem requiring a solution. Here are more instances where human intervention is necessary, even with AI code generation:
Until AI can operate autonomously, problem-solving skills remain as vital as they've always been.
Even though AI can generate code, we are not yet at the point where we can rely entirely on AI for writing applications. As software developers, it's crucial that we understand how to write our own code. This skill may seem less critical now, but it remains a common requirement in job interviews and will continue to be for the foreseeable future.
Using programming to solve problems is an excellent way to train emerging talent.
Note: Assessment becomes challenging, as entry-level programming tasks can be easily completed using ChatGPT and similar tools. You need to set clear boundaries to ensure students are learning to program and not just how to use AI tools. An effective method to deter cheating at this stage is to have brief one-on-one discussions with students, which can quickly reveal whether they have written the code themselves or relied on AI.
By "something real," I mean any software that fulfills more than just an educational role. Whether it's a game, a website, a phone app, or anything else you can imagine, this involves integrating code across various files, utilizing third-party libraries, ensuring functionality at least on your own computer, and occasionally collaborating with other students along the way.
When I mention working "without AI code generation," I don't mean to exclude AI assistance altogether. It can indeed be a valuable educational aid. For instance, you could use it to guide you in a certain direction without actually generating the code for you, similar to how we utilized smart hints in CodeEasy.
Once the project is completed, the student will have gained sufficient knowledge to venture into...
Now it's time to go wild. We are beyond 2010, even beyond 2020. We have AI code generation at our fingertips. What possibilities does it unlock? Here are some ways to leverage ChatGPT(as an example) for educational purposes:
Reflect: Was the process quicker? Is the outcome superior? Could this have been achieved without first manually coding the project?
Reflect: Examine the review points—what adjustments are necessary? Is the solution improved with these changes?
Reflect: Did ChatGPT generate meaningful tests? How comprehensive is the test coverage? Was this approach efficient?
Reflect: How does the code alter with each focus area? Which coding style is preferable depending on the project's needs?
Reflect: How does one select the most suitable language for a given problem? Why is it important for AI to understand human-readable programming languages?
AI is here to stay, and it's imperative that both the industry and academia recognize this. The optimal way to equip young talents for utilizing AI tools is by incorporating them into their studies, enabling them to become adept with these technologies.
Conversely, although AI code generation possesses considerable potential, we are not yet at a point where we can rely exclusively on AI-generated code. This underscores the ongoing and significant need for problem-solving skills among software developers. To cultivate these abilities effectively, it's crucial to initially learn programming without resorting to AI code generation. The ability to innovate and create new solutions — "new ribbons" — remains essential. Let's stay creative!