“Automation threatens 800 million jobs,” read the headlines . Artificial intelligence always knew how to stoke our most primal fears.
Wouldn’t it be ironic if, after insurance brokers and journalists, the latest profession under siege from automation was the very people who write the software which makes technology tick?
Today, few jobs are more highly prized than those of software developers. Developers sit in a golden seat because employers think only skilled human beings can write great code.
If you believe the advocates of self-writing code, even this gig is up. For example, Microsoft and academics have teamed to build DeepCoder , a system that, by ingesting existing functions and fragments, is able to author new projects all by itself.
This is often touted as the holy grail, but I don’t believe it will ever be realised.
Self-writing software is a self-defeating fallacy. If you tell Alexa, “Build an app that helps me manage my accounts”, the complexity involved in those permutations is so immense, it is barely solvable, unless we all decide to have the same accounting app. But alas, that’s not how we humans or even organisations function.
But that doesn’t mean artificial intelligence has no application in software development – quite the opposite in fact.
What is AI if not a series of smart algorithms that make users’ systems better, business processes more frictionless, and everyday lives simpler? Auto-correct inside word processors may not be discussed in the same breath as artificial intelligence, but the transformative effect is the same.
In software development, I imagine the application of AI as like an auto-correct for coding, but with far more dimensions to its utility.
Let me explain. Today, human developers are celebrated, but fallible, and are principally working within three areas – architecture, understanding, and testing.
Architecture: Great coders don’t necessarily make good designers. Just as civil engineers assessing your home don’t rush to the problem wall before checking the structural design of the house, any good software project starts not with line-level planning but with an overview of how key components will bolt together. For developers in the weeds of coding, it can be difficult to operate at that breadth, causing the major building blocks of projects to disconnect.
Understanding: These days, everyone is singing from the agile hymn sheet – ship it fast and go again – but still using desk-based principals. That is, when you are shipping as often as agile development demands, code quality becomes even more critical; testing needs to be carried out far more regularly. That places a high burden on development teams.
AI to solve software challenges
Testing: A key challenge with testing today is that code quality is mediated across different constituencies. Development, requirement and testing teams each have different skill sets and different goals. Someone reporting a “bug” may not actually understand inner functionality, two people may disagree on a “critical” issue. Everybody is running against the clock but has a different spin on things.
These are the software challenges to which I think AI can be applied valuably. Just like in many other machine learning-based systems, I think of AI not as a replacement for human professionals but as “Augmenting Intelligence” – using vast repositories of available data and new riches in processing power to surface previously-unseen meaning to workers who remain in control, but who are newly enlightened.
In development, those repositories are the entirety of the open-source community. Today, the depths of GitHub, Apache Software Foundation, Android Open Source Project, RedHat’s Linux and countless others are available for us all to see. Their histories are an open book – documents of commits, bugs, issues and, crucially, fixes.
To a machine learning algorithm hungry for training data, such a collection represents an extraordinary opportunity to learn from the aggregated knowledge of communities of software developers who, working together, have broken, fixed and documented their iterative software improvement.
Artificial intelligence can read these evolutions to understand how particular software has changed over time and, crucially, mine those learnings to present advice and warnings when the same patterns are identified in developers’ new work.
This is how humans learn, too – after learning the alphabet and piecing together words and sentences, you develop the confidence to know the rules of spelling and grammar that make for effective communication. For software development, unlike natural language, though, the transformation brought by AI could be greater – after all, programming languages operate using a finite number of functions, each with tightly defined usages and consequences.
What does all of this mean? That, in the AI age, developers will become vastly more efficient. In the near future, programmers should be able to receive real-time feedback on their design, code debt, excess duplication and the urgency of all their issues, using simple-to-understand numbers and traffic-light systems.
Operating in real-time, such a system would augment, not replace, existing developers, bringing testing right into the “here” and “now” of writing, and making refactoring a smooth and seamless task, not an asynchronous labour.
Transforming the work
Artificial intelligence is already helping augment other professions and tools in the same way. For example, in the UK, Google’s DeepMind is helping NHS medics better make crucial condition diagnoses with the scale and accuracy that humans alone cannot.
But neither clinicians nor coders are for the scrapheap. Artificial intelligence – in other words, deriving meaning from vast collections of relevant data and providing relevant feedback – will transform the work of these professionals.
There are some people who would have you believe that a developer who is automatically told that her code is sub-optimal – and how she can fix it – will become a lazier one, reverting to resting on her laurels and letting the tech take the strain.
I disagree profoundly. Information doesn’t do your job, it helps you do your job better, and gentle course-correction and learning from your mistakes is the best way to ensure problems are not repeated.
I have seen it first-hand. When developers experience the joy of real-time improvement recommendations, they are liberated to think about software design at a higher, more strategic level. They’re able to zoom out and think about how the bigger building blocks join together – not to spend their lives constantly functioning at the line level – but to fix bugs, onboard people faster and enjoy a better work-life balance.
Today, big software companies spend billions employing talented developers to tinker with fixing the minutiae of their software. I hope they can differentiate between the small and big picture, to what really matters. That is why we have dedicated our company efforts to bring about such a future. My hope is that this will ultimately change the world.