Many professions throughout human history faced extinction and other evolution. Software programming is facing a revolution, not an evolution.
AI is replacing mental labor like the industrial revolution replaced manual labor.
We’re surrounded by software. It’s been coined (2011, Marc Andreessen) that software is eating the world and that every company is a software company (2019, Satya Nadella). It’s become transparent and partakes in most daily activities.
A new way will replace the practice of programming software. The old way was to program code by highly trained, exceptionally bright individuals. The new course will be for code to write code (“Code code”), i.e., to write new programs, slowly replacing more software programmers’ responsibility shifting their profession. It’s all part of AI replacing mental labor like the industrial revolution replaced manual labor. That’s not a tautology. That’s one of the most remarkable upcoming changes of our lifetime. Input a specification, initially written in an easy-to-digest format, and the output is a software program — the software program code it requires. Later: talk to a machine and get a program as an output. Is something wrong? Talk to the device again, so that’s fixed.
Interestingly there are two approaches at the moment, one by DeepMind called AlphaCode, and another not intended (yet) for writing code, instead of for natural language generation called GPT3 by open AI that, in what appears magical, can write human text. Others, like Deepmind, are working on their approach to GPT3-like models.
Deepcode recently participated in a software completion, where developers compete for bragging points. They get written problems or tasks and have to solve them with a program they develop within a time constraint. DeepCode finished about the middle of the pack. If one thing is obvious — it’s that, like AlphaFold (protein breakthrough of generations), AlphaZero, etc. — the AlphasCode team won’t stop until their program takes first place, and it likely won’t take long. However, it’s not open for mere mortal software developers yet, and it may take a long time, if ever, until it does.
The other approach — GPT3-like — where the idea was to generate human text ended up being able to generate software code as a by-product of how sophisticated it is. I ran into a developer who uses it as a starting point for the program he needs to write, then uses another AI-like code generation tool (Copilot) to turn it into a finished product.
Today software programmers turn requirements into software code. This code ‘abstracts’ the low-level instructions a computer can perform (initially, programmers could only program using the basic low-level commands a computer’s central processing unit could execute).
This level of abstraction keeps increasing as new software languages and concepts evolve. Today a software programmer could have a computer (virtual or real) spin up, an entire program installed on it, and serve millions of users, and if needed, more of these computers spun up. All this with a few lines of software code. Special software called ‘compiler’ can now translate this code into the basic instructions a computer can perform. What happens ‘behind the scenes is a billion times more complex, but thanks to abstraction and compilers, virtually no software programmer ever needs to understand that, except the rare few who build these abstraction and automation layers.
Another angle of separating software programs can be considered one of three distinct types: 1) only code, 2) low code, and 3) no code. I suggest a fourth and the most dramatic — Code-code.
Only code means the programmer writes a program that ‘does’ what it should, and that’s that. Low code means the program is programmed such that the user has excellent control over what and how it works with little knowledge of how to program but still requires some. No code means the software programmer develops the program so users can make significant changes to what it does and how it works without writing new code. Instead, they use the built-in flexibility introduced into the program by the program developers.
However, in all these cases, there are software programmers who wrote the original software code that created this software offering these capabilities.
I propose a new, next-generation method of programming: Code-code, e.g., software that will write other software. Initially with some human software programmers involvement, later with very different software programmers involved than the one we know today. A new skillset will be required from great software programmers, as a new person-machine way of programming will emerge. It reminds me of chess players (myself being one) — those who evolved to use artificial intelligence and embed that into their workflow, changing how they learn, analyze and play chess. However, those who didn’t,t went the dinosaur way.
We already see signs of that with Deepmind’s AlphaCode, OpenAI language model GPT3, Copilot that assists programmers in daily programming, and more. Google them up!
All these are baby steps. In the not too distant future, the role of software developers will gain another level of abstraction, the biggest yet. They will describe the program they are after, and a software program will be created. It will then evolve into a software program that better understands the critical needs as it programs its code. That leads to the inevitable — a program that will create new programs rapidly improving itself.
Does software writing software mean ‘singularity’ and Terminator-like concise forming? I can’t answer that. I also can’t rule that out, considering the speed of evolution of such a code-code enterprise.
One comment I received is that Code-code sounds like a compiler. Allow me to retort: the idea is that a software code is created in response to input — such as a person’s written or spoken specification. A most sophisticated one. That, in turn, will still need to be compiled into machine code. However…. It can also be looked at that Code-code is a way to compile human requests (written or spoken) into code as another abstraction layer of compilation. In the case of AlphaCode, the input was a written set of programming quiz questions, and the outcome was working programs that allowed the Deepmind team to finish around the middle of the pack. Pretty insane result. What’s more insane is that they won’t stop there: give them a couple of years, and based on an input programming ‘quiz’ or specification — it will write the best god damn software code.
P.p.s. GPT3 and other language models have become so incredible I heard of programmers who start as input to GPT3 what they think their program should be with, take the output, and use it with Copilot to turn it into the working code they needed. Hardly any keyboard clicking. Shocking but true. Lazy people always get the most and find the most incredible shortcuts first.