Software & Web Development
This is a contributed article by Ian Huston, Data Scientist and Engineering Director at Pivotal Software Inc. Dublin .
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.
What is 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.
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. Recent research findings in this area of program synthesis show lots of potential. Essentially the machine writes the rest of the code, then the developer can adapt and approve it. Just like a smartphone uses machine learning to automatically check spelling and suggest a 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.
How will it benefit software developers?
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 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. This could help speed up idea-to-production cycles, improving business efficiency and the ability to respond to market changes.
What are the challenges?
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 not only improving the underlying code and deployment environment, but also improving the size and accuracy of 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 well with deep learning, and there are other parts that won’t.
Collaborating with AI
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. And that’s good for everyone.
Ian Huston is a Data Scientist and Engineering Director at Pivotal and has worked on a wide range of topics from fraud detection to transport & logistics. He now runs Pivotal’s R&D engineering team in Dublin working on Cloud Foundry. Huston has a background in theoretical physics and numerical simulations of the expansion of the early universe.