Software development and software engineering are booming right now. Engineers are in high demand and commanding high wages. There are simply not enough software engineers available to fulfill the needs of companies looking to build applications and services.
While it seems demand for software developers will be strong for the foreseeable future, how long will it be before these engineers are replaced by the very software that they are tasked to create?
We have seen a steady progression of the abstraction of programming from the setting of bytes and bits in registers to modern ‘human readable’ programming languages. We’ve also seen advancements in ‘self-serve’ applications, where end users can create websites and even their own applications with no formal knowledge of programming or programming languages at all.
In addition to these advancements in programming languages and applications, we’ve also seen rapid progress in machine learning and language recognition. Tools like Apple’s Siri allow non-technical users communicate with computers in a non-precise way, yet still have their intentions understood. These developments do not bode well for the software developer.
I can envision a not too distant future where sapient computer systems can take very general instructions (either verbally or written) and translate those into the applications or media assets that currently require a skilled technician to generate. At that point computers will have become ‘self-programming’; it’s debatable whether human programmers would be necessary at all once that happens. These systems would be self-sufficient, except perhaps for access to the energy that runs them.
Predicting the timing of these events is difficult. I can see how we might actually want to prevent this scenario from unfolding. For example, could a computer worm or virus start off a chain reaction where computers start to program themselves and replicate this ability across the network? Losing control of our computer systems would be a very bad situation.
It is interesting to speculate on how a self-programming system would behave. Would it obey the commands of its human creators? How would it decide between right and wrong? Is there a fundamental technical barrier where certain self-modification of the code that runs the computer system is impossible? I can’t see it personally. Humans use computer programs to program computers today, so what is stopping the computers from cutting out the middle man?
When will it be time for software engineers to start looking for a new profession? :-)