Why your grandkid won’t be learning any programming language for their computer science major
Posted | Reading time: 6 minutes and 29 seconds.
I still remember the days when I had to write assembly code for my university course. It was a tedious and frustrating process, requiring me to fill countless pages of A4 paper with hexadecimal numbers and mnemonics. I had to manually manage registers, memory addresses, and stack operations while keeping track of every instruction and its effect on the flags. After spending hours coding, debugging, and testing, I finally managed to create a simple calculator that could perform basic arithmetic operations. I was so proud of my achievement, but also so exhausted that I almost felt relieved to go back to Java, which seemed like a breeze in comparison.
Fast forward to today, and I can hardly believe how much things have changed. Now, I can use Github Copilot1, an AI-powered code assistant, to generate software with just a few keystrokes. I simply type a comment describing what I want to do, and Copilot suggests the code for me. I can tab through different options, tweak them as I like, and run them in seconds. It feels like magic, like having a super-smart partner who can read my mind and write the code for me. Combining that with modern languages that make it easy for me to understand what the AI-generated assistant has come up with, like Rust or Python, has entirely changed my productivity and way of expressing my creativity. It’s like going from cuneiform to oil canvas.
But oil canvas was not the end of art. It was just one of the many mediums that humans have used to express their creativity and vision. As technology advanced, we developed new forms of art, such as photography, cinema, animation, and digital art. These forms allowed us to create more realistic, dynamic, and immersive experiences, that could capture the attention and emotion of the audience. We might waste it all on Marvel Movies, but the mere fact of what has been enabled by digital postproduction is still breathtaking. And things like Sora2 are showing where this is going next.
Compared with that, using English to ask an AI to generate Rust or Python is still painfully ancient. Because we added an abstraction, we added work. We still have to translate our natural language into a programming language, and then let the AI translate that into a machine language. This is a double conversion, which introduces unnecessary complexity and inefficiency. It also limits the expressiveness and flexibility of our communication with the machine. We have to conform to the syntax and semantics of the programming language, which may not always match our intentions and expectations.
Thus, the obvious next step is to remove the translation from English to the computer (AI) to a programming language to machine language (runtime). Enabling us to directly communicate with the machine in our natural language, and let the AI understand and execute our commands. This will be a radical simplification, eliminating the need for programming languages altogether. We will be able to interact with the machine as we do with another human, using natural, conversational, and intuitive language. The journeys of software languages, bridging the gap between computer code and human language, would end. Software languages will lose their purpose.
Now, where does that leave the computer scientist?
I’m not worried we will be replaced by AI anytime soon. Because the job of a computer scientist is not just about writing code. It’s also about requirement engineering, edge case study and context. You have to understand the problem domain, the needs of the users, the business goals, and the technical constraints. You have to identify the risks, the assumptions, the dependencies, and the trade-offs. You have to design, test, and evaluate the solution, and ensure its quality, security, and performance. Much of this is in close collaboration with other business departments. 3
To replace programmers with Robots, clients will have to accurately describe what they want. We're safe.
— @BUDESCODE / July 20, 2020
The job of a computer scientist, or software developer, won’t be to write code, though; it will be to have constant communication with the AI writing the code. Providing specifications and helping to navigate around edge cases. Testing the generated software and validating its completeness. It will be a back and forth of discussions around the best way to solve the problem, with the AI creating a multitude of solutions, presenting the computer scientist a visualisation of the created software architecture.
So, am I proposing that the AI will be a junior software developer? No, not at all. I’m proposing that AI will be a powerful tool that will enable us to create software faster, easier, and better. It will become the needed abstraction to leverage the platforms ahead. Platforms that are more complex, diverse, and dynamic than ever before. Platforms that require us to deal with quantum phenomena, distributed systems, and adaptive environments. Platforms that demand us to think beyond the code, and focus on the problem, the solution, and the value.
Quantum computing and connected devices are two of the most exciting and promising fields of technology today. They have the potential to revolutionize many domains, such as cryptography, optimization, simulation, artificial intelligence, and the Internet of Things. They could enable us to solve problems that are currently intractable and create new possibilities that we can’t even imagine.
But these systems are not something that your fellow everyday developer can easily develop. They are too complicated and too complex for humans to comprehend and manipulate, especially on the scale of today’s Software Landscapes. Quantum computing requires us to deal with concepts such as superposition, entanglement, interference, and measurement, which defy our classical intuition and logic. Connected devices require us to deal with networks, protocols, sensors, actuators, and data, which pose many challenges and risks, and are very hard to integrate without any weirdness (ask any car manufacturer). Developing software for these systems is not a trivial task. It requires a high level of expertise, skill, and creativity. A level that very few people can achieve.
That’s why we need AI to help us. AI has to become a direct translation to the computer and bypass the programming language layer. It has to understand our natural language and directly, like a compiler, translate it into quantum or machine instructions. And it has to handle the complexity and uncertainty of these systems and optimize the performance and reliability of the software.
But how will we communicate with AI? How will we express our requirements, expectations, and feedback? How will we ensure that the software meets our needs and standards? How will we collaborate with AI effectively and efficiently? Because, honestly, we are really bad at doing so between real people, and after the first bad prompt results with GitHub Copilot you will get to the conclusion that this will only get worse if we just apply what we have.
We will need a new form of language, a new way of thinking, and a new paradigm of software engineering. We will need a language that is simple, precise, and consistent, but also expressive, flexible, and adaptable. We will need a language that can capture the essence of the problem, the solution, and the value, without being bogged down by the details, the syntax, and the semantics. We will need a language that can bridge the gap between human and machine and between classical and quantum.
It will be much closer to our everyday language while being as far away from current programming languages as those programming languages are from assembler. Neither will it be a full equivalent of our everyday language, as even in a human-to-human interaction we have a specialised language for each domain in our workplace. With our own set of abbreviations, terms, and sometimes even grammar.
Maybe we will use a specialised, highly optimised form of language, such as Simplified Technical English, designed to improve clarity, readability, and comprehension. Maybe we will use a language as thorough as German, which is known for its complex grammar, long words, and precise meanings. Maybe we will use a combination of both, or something entirely different. I secretly hope it will be Klingon.
The point is, that we will have to find our language to suit the needs of the new era of software development. And this language won’t be a Turing-complete programming language.