Computers writing software

One of the earliest leaps in productivity was moving from machine code to assembly language and then on to high-level languages (Ruby, Javascript, Java). Advances in computing capacity for memory and processors has also meant that developers can spend less time optimizing their software for constraints and more time adding functionality.

Similarly, code reuse either through libraries or services has dramatically reduced developer efforts - allowing developers to stand on the shoulders of giants. Today, we experience this through frameworks such as Angular, and libraries or integrations like Node Package Manager. The really exciting examples of code reuse include cloud services such as image recognition, text-to-speech, natural language processing, and a host of other AI-capabilities that can be invoked remotely.

How we construct and architect code has evolved: both to provide the ability to scale to large endeavors (assuring developers can reason about increasingly complex code) and to gracefully facilitate future modifications as software and systems and requirements evolve.

We've also seen advances in how we organize work: for example, moving from waterfall to agile (or scrum, kanban, or lean) and adopting CI/CD practices. Test-first design improves productivity by avoiding costly rework late in the software development cycle. And customers are engaged early and often in short iterations to ensure the team is developing what's necessary, versus what's assumed.

Automation also has been a key contributor. Continuous Delivery wouldn't be possible without extensive test automation to assure code is ready before it's shipped. Our IDEs are increasingly providing utility through automation of code standards, enforcement of best practices, and early detection of defects and possible issues. Cloud providers have reduced time-to-market through increasingly automated management of the infrastructure and coordination of services.

Looking forward

This is all to say that there won't be just one leap, but many leaps in numerous aspects of writing software. We can expect to see continued evolution in languages and language ergonomics. Hardware will get faster and the libraries we use will continue to give us ever-growing functionality. How we develop software will continue to evolve and improve in fits and spurts. And we will continue to have growing access to capabilities that can only be offered today through teams of hardware working in unison - such as image recognition or knowledge retrieval through cloud-based web services.

That said, one area that stands out with the potential to have an outsized impact is computers writing software.

Computers are creating art

Computers are creating art, making music, and writing stories, so why not software?

We have many examples of computers creating something normally reserved for the domain of humans. For example, the Painting Fool has been producing art for nearly two decades and the works created are good enough for exhibition; Google's DeepMind project has produced a work of art that sold for $8000 at auction; and the game, "No Man's Sky," is set in an infinite, procedurally-generated world that's gorgeous (even if the game isn't really that much fun).

But similar activities are even more remarkable due to recent advances in AI. One way to describe modern AI/ML is it's "advanced pattern matching" - that is, using neural networks and similar technologies, they can consume large amounts of data to identify patterns (image recognition, speech recognition, etc.) that would be impossible using traditional rules-based structures. And they can do so on some tasks with the same or better accuracy than humans.

These approaches have garnered great interest and investment. Amper, a startup to write music, just raised $4m. Another startup, Jukedeck, has raised nearly $4m to compose music using, what the NYTimes references as, "...feeding hundreds of scores into its artificial neural networks, which then analyze them so they can work out things like the probability of one musical note’s following another, or how chords progress."

Notably, these examples illustrate the approach taking the inverse of that advanced pattern matching software to produce - as opposed to processing or consuming.

Computers are writing software

Today, computers are helping us generate code - as well as test, detect issues, build code, navigate, and more. But we are in the very early stage of computers moving beyond this; of computers writing software using modern AI.

Importantly, because the tedious, time-consuming solutions required of developers are often repetitions of previously solved problems, we likely don't need Artificial General Intelligence (1) to achieve this leap in productivity - which would be a long way off. Instead, we need Artificial Narrow Intelligence (2) - which is here today. 

And with recent advances in the field, AI is now writing it's own software. Examples "...include researchers at the nonprofit research institute OpenAI (which was cofounded by Elon Musk), MIT, the University of California, Berkeley, and Google’s artificial intelligence research group, DeepMind." (Source: MIT Technology Review)

It's not surprising that the scientists working directly with AI are the ones having the most success in AI writing AI. However, other companies are now introducing utilities aimed at general software development. In the short term, we can see code AI for code completion from AI.codes and JetBrains who both are writing an IntelliJ plugins. A longer term example is the research effort called DeepCoder, a collaboration between Microsoft and the University of Cambridge, to identify "best fit" code based on a specification.

It's early days for these efforts, but the results are promising.

What of developers?

If we have computers that can write code, do we still need developers? Yes, of course.

Many people in our field point to this Oxford study and say, "Software Developers have a 13% chance of being automated by computers". And I think that's right, software developers will continue to be valued even as the nature of our work changes. This is no different than today - technology rapidly advances and we thrive by adapting to the tools at hand. We strive to learn new techniques and approaches that improve what we do, because we know there's so much more that we can do.

As our computers evolve to do more, so do we evolve to do more.

 

(1) Artificial General Intelligence is where a computer can perform any task that a human can.
(2) Artificial Narrow Intelligence is where a computer can perform similarly to a human on a single task.