The Future of Software Design

A few years back I took time to think about the future of programming. However before exposing what I think the future of programming can be, let’s take a look at a really interesting experiment I was made aware of today.

Ryan Kiros of the Machine Learning Group at the University of Toronto made an interesting experiment consisting in training a recurrent neural network with passages of romance novels and Taylor Swift Lyrics. That trained model was presented images from which it was extracting a context and then produced small romantic stories about those images. Ryan calls that experiment the neural-storyteller.

I found a nice article about this: Generating Stories about Images. Note that the author wrote a number of articles on the topic of generating content from machine learning processes that are of interest as well:

  • Generating Comics assisted with Neural Algorithm,
  • Generating Captions with the use of machine learning techniques,
  • And an Artificial Intelligence for Astrology.

We are on the verge of a revolution in the artistic content generation. Content generation is already widely used especially in the sport news domain where tools like Wordsmith created by Automated Insight are used to generate sport event narration and news for newspaper. Content generation by tools like Narrative Science are also used for writing stories minutes after a disaster or an event occurs for instant publishing by news outlets like Fortune and Los Angeles Times. While technology is mature for automatic news reporting, the artistic content generation is not fully mature yet. Creative AIs prowesses are going to expand in the coming years and it will transform artistic creation in ways we can barely imagine today.

As the author of the articles mentioned above concludes: “In the near future, authors will be training custom models, combining styles across genres and generating text with images & sounds.”

Where does it lead us for software development? Well, software writing is mostly assimilated as a mix of art and science. We call it computer science but we say writing good software is an art… If we can already write text for reports and news and are growing our capacity of producing computer generated artistic content, how long will it be before an “AI” can generate computer code?

We tend to think a computer could not program another computer, although this starts to be false as exposed by a presentation I have seen about two years ago by Westley Weimer about his research. His research at the University of Virginia is around automatic program repair where their algorithm can be used to automatically fix certain classes of computer program bugs.

Certainly in a near future, programmers will become a kind of program herders where they will train custom models, combining styles and patterns to help the computer generate code itself. Maybe the first step will be to document the behavior of a system via its test suite, as is the first step of Test Driven Design but then instead of writing the code, will guide the computer to generate it so that it pass the test suite. Next step could be to write high level documentation via Architectural Description language which would in turn generate test cases that would be used with the help of the program herder to guide the computer in generating the solution. Further along the way, I envision us having a conversation with that programming AI to provide him in plain text our requirements and guiding him to write the software. At the end of the road we might not even have to guide the AI to write the software…

Many technologies come into play to reach that goal. It might require: cloud, machine learning, genetic algorithms and genetic programming, domain specific languages, maybe even quantum computing. Some of those technologies will still need to make progress and we will need to put them together. About two years ago I was asked by my boss to describe my vision of the future of Software Design as after all I’m considered the Senior Specialist of Software Design Evolution. I wrote a quick document about it and reading it today I still find it mostly true as to what can come into play to make this dream a reality. So if you think that software programming is immune to automation, maybe you should rethink your position.