Ever since the dawn of the assembly line, the idea of automation replacing human labour has divided opinion.
On the one hand, reducing the need for manual labour opens the door to a more diverse range of jobs and limits the need for staff to become bogged down in menial or repetitive tasks. On the other hand, automation also holds the power to render certain jobs or skills redundant, threatening the value of hard-earned staff knowledge and experience. This is reflected in a recent report conducted by the Office of National Statistics (ONS), which found up to 1.5m UK workers at risk of losing their jobs to automation, a number which could grow further.
Historically, automation has gone hand in hand with the development of the technologies which enable it, and the creation of new ways of working. Now, with the practical business applications of AI becoming more and more of a reality, automation will likely have more of an impact on a wider range of jobs – even transforming the roles of the developers who create it.
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”, as described by Andrej Karpathy, director of AI at Tesla, 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. However, the need for software engineering is not going away anytime soon. In fact, the shift in dynamic between developers and the machines they work on will empower the practitioners.
Here are some possible benefits that traditional software engineers and data scientists could achieve in an era of Software 2.0:
Automation, iteration and implementation
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 is 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.
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.
AI will empower, not replace, software developers
This raises the ultimate concern: will machines just replace software engineers altogether? It is more likely that machines will only be able to competently write code 90% of the time, while the need remains for a human monitoring system to ensure that the code works. By bringing their experience to the table, and by monitoring the code generated, the human element will help achieve closer to 100% accuracy rate.
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 well as improving the 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.
Closing the gap between expectation and reality
For years, we’ve been using automated helpers to refactor and save time writing boilerplate code, and we’re now welcoming the emergence of AI-driven assistants in more complex software development as well. Lately, they have been appearing among product teams in the form of supercharged IDE features that can suggest better code completion. Now imagine a far more advanced AI assistant playing a much larger role in the future. When writing code, a machine partner 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 approves it.
Practically, AI will do much more to empower software developers than hinder them. For example, 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.
Collaborating with AI
Looking at pair programming, there are many different ways to complete a problem by sharing the reins with someone else. 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. The more pairs brought together, the more solutions result. With Software 2.0, a new partner is added to help developers do their job better. The rise of a more energetic collaborative environment that leads to ever more, and ever more effective, solutions. And that’s good for everyone.
Ian Huston, Data Scientist and Engineering Director, Pivotal Software