Pairing coders with artificial intelligence to write software

(Image credit: Image Credit: John Williams RUS / Shutterstock)

We’re often warned that many of the jobs that people build their careers around today will cease to exist in the future due to automation. With all the hype around automation, it’s not difficult to imagine a bleak future where organisations are ruthlessly swapping loyal staff with cheaper machine-based alternatives for the simple purpose of saving money. The reality is much less black and white: instead of replacing human labour, the real value of automation will be in the form of relieving staff of time-consuming and repetitive tasks, allowing them to focus on new experiences and new opportunities. By viewing automation as something which empowers rather than replaces staff, organisations are likely to see its benefits impact much more than just the bottom line.

Technological innovation – most notably AI – is expanding the potential applications of automation to a wider range of tasks and job roles. For example, organisations are building Business Process Automation (BPA) into their operational strategy to remedy pain points in business areas such as marketing, sales and workflow, or Robotic Process Automation (RPA) to eliminate the need for humans to perform repetitive tasks. Ironically, the benefits of automation are even being applied to those we typically associate for building automated systems. As described by Andrej Karpathy, director of AI at Tesla, so-called “Software 2.0” will use automation to cause a shift in dynamic between developers and the machines they work on.

Recent developments in computing speed and capacity have helped bring AI out of the realms of science fiction and into the real world, as more and more organisations have used it to become smarter, quicker and more efficient. The practical benefits of giving systems and networks the capacity to learn and perform problem-solving functions have applications in almost every industry, and as a result, it is likely that a number of job roles will be transformed.

AI systems are typically built by software development teams, coding general problem-solving logic into the algorithms needed to roughly simulate cognitive functions characteristic of AI. Software development is an iterative process: a programmer writes a few lines of code, tests it, and then builds upon the results to inform the next few lines of code. Interestingly, these types of processes are exactly what AI systems can automate, taking over the job of iteration from software developers and freeing up time to focus on new and innovative solutions.

While the use of AI in software development will transform the roles of developers, these roles will by no means disappear. Instead, as Tesla’s Director of AI Andrej Karpathy recently stated, collaboration between human and AI programmers will create a new paradigm for coding, known as “Software 2.0.”

The current model of software development (Software 1.0) consists of programmers creating oft-repeated segments of code as a series of rules: if X happens then do Y. Software 2.0 will be based on a neural network that learns which instructions or rules are needed for a desired outcome, replacing the need for developers to “write” software with developers now focused on feeding data into machine learning systems.

Machine partner

A machine partner, focused on program synthesis, might determine what kind of function is being written and fill in the rest based on style, using high-level predictive analysis. Essentially the machine writes the rest of the code, then the developer can tweak and approve it. Just like a smartphone uses machine learning to automatically check spelling and suggests word, a similar tool can be used to highlight possible errors when writing code. Considering the advances in machine learning and conversational interfaces, it’s conceivable that a machine could one day be an indispensable member of a programming team.

Down the line, Software 2.0 might even help guide test-driven development and suggest the next test to be run, providing justifications along the way. Imagine the marketing people go to the development team and say they want such and such functionality. If they can express what they want in a way the machine can understand,  the machine could help choose the tests that are needed and then suggest next steps, leading to faster idea-to-execution cycles.

One successful approach to writing software is taking an iterative, test-driven approach. With AI-enabled Software 2.0, a human could write the tests while the machine partner searches for a suitable implementation, iterating millions of times to find the right piece of code to solve those tests. Instead of doing both jobs (i.e. writing the tests and making the pass tests) a developer constructs the former while a machine counterpart does the latter. As a result, less time spent writing implementation code, freeing up developers to spend more time on identifying and understanding new areas in which business problems can be solved creatively through software.

Today, it’s clear that deep learning neural networks do well in supervised learning settings, if they’re provided training data with good examples and bad examples, they can learn what to output correctly. But those systems are only as good as the training data they’re fed. As a result, improving a model’s performance frequently involves improving the underlying code and deployment environment as usual, but also providing clearer and more accurate training data. The reality is that neural networks are not a silver bullet. Rather, we need to design neural networks to work with other solutions. There are certain parts of software development that will work really well with deep learning and there are other parts that won’t.

AI-based automation stands more to help than to hinder software developers. As the effectiveness of pair programming shows us, software development is a process of constant collaboration with other colleagues. Every time a new pair comes together, the partners bring different experiences and different approaches to tackling a problem. With Software 2.0, a new partner is constantly available to help developers do their job better. This gives rise to a more energetic collaborative environment that leads to ever more effective solutions.

Ian Huston, Data Scientist and Engineering Director, Pivotal Software Inc. Dublin