It’s not time for developers to hunker down for the AI apocalypse just yet. In fact, machine learning is eventually slated to become part of a programmer’s toolkit rather than a replacement for human programmers.
Nonetheless, the fear of AI as an adversarial force waiting in the wings to replace developers is something many of us in the tech industry deal with. A quick look at Google searches shows that I’m not the only one to ask this question.
It’s no wonder that everybody is talking about artificial intelligence, Gartner ranks it at the height of peak hype. With AI and machine learning popping up everywhere from watercooler talk to the nightly news, people are becoming worried what this means for their future. This has become so acute, that 29% of developers rank being replaced by AI as their main professional fear.
Before we tackle the bogeyman head on, let’s back up and take a look at the history of artificial intelligence and the hype surrounding it.
The first rumblings of AI began in the 1950s with computers that could play checkers. The ante kept getting upped: computers beat humans at checkers, backgammon, chess up and eventually defeated humanity at go. This first wave of AI saw computers use simple rules to beat humans at games with a finite number of moves and clear outcomes.
This is good as far as it goes, but developers hardly face an existential threat from computers that are at good at chess. Writing a set of rules and steps to make a decision in each given situation quickly runs into limitations in the wild. Few real-life scenarios are as simple as chess.
In traditional programming, code is a series of rule-based decisions nested in increasingly complex conditionals. This works really well in simple, predictable situations, but the larger a project becomes the more the limitations of this approach become apparent.
Testing traditional code has to anticipate every possible situation and this process grows exponentially. Even relatively simple programs require extensive testing to uncover bugs. This creates a real scalability issue with code; at a certain point it just becomes too unwieldy to keep adding more and more lines of code to the original code base. Refactoring or starting from scratch is an expensive and time consuming option that will eventually run into the same problem.
The fragility of large programs is another serious issue facing traditional coding. Adding one line of code breaks something else that was seemingly unrelated. There’s a hard limit to how big traditional, non-AI programs can get.
You don’t teach your dog to fetch by writing a detailed set of instructions with every possible contingency covered. Instead, you throw a stick, perhaps demonstrate fetching and repeat the process a few times. Within a few minutes your dog will have more or less become a fetching expert without you ever having told your dog how to fetch. Welcome to machine learning!
The difference between our canine friends and a supercomputer crunching through machine learning algorithms, is that computers use vast amounts of data without a specific set of rules. The computer uses this training data to ‘learn’. Ecce Machina!
Machine Learning’s approach is look at data and learn, rather than writing a multitude of rules. This removes the scalability and testing problems associated with rule-based programming.
The biggest drawback is that machine learning is a black box. Even the engineers who build a machine learning algorithm don’t know how decisions are made.
Machine translation began as an endeavor to program the complex rules of natural language. Adding to the difficulty, the lexical richness of regular speech requires dozens of specialized dictionaries. Even with all of this, a single unrecognized word, be it slang, dialect or professional jargon, makes a sentence unparsable. This lead to clunky and unreliable translations.
Translators that are based on machine learning are much better at guessing the meaning of unfamiliar words and producing intelligible translations. Data is taken from the millions of webpages in any given language to train the AI that powers Google Translate.
Let’s take a look at a phrase that is easy for human to parse, yet would be tricky for a rule-based translator to handle:
The Future of Work event organized by Brainware
online-translator.com translated our phrase into Russian as:
Будущее события Работы организовано Brainware
Google Translate gives us this:
Событие Future of Work, организованное Brainware
The first translation really isn’t understandable for a Russian speaker, whereas the machine learning powered result is. Google Translate figured out that Future of Work was the name of an event, so didn’t translate it and used the correct word order in Russian.
One of the remarkable things behind the current rise of AI is that many of the algorithms we’re using for machine learning are from the 80s and 90s. For an industry that’s enamoured with the latest thing, the underlying logic of artificial intelligence is remarkably old.
Three factors have liberated machine learning from the ivory tower: storing data has become cheap, the amount of accessible data has grown exponentially and computer processing power has increased.
It’s ominous to look at the raw data about job automation. I understand why my colleagues are antsy. Web developers stand a decent chance of being automated, while computer support specialists face a 72% chance of automation. Without some context these numbers protend a techno-apocalypse that’s not warranted.
The real future of AI in engineering is using technology so that human engineers work more efficiently, faster and with fewer bugs. Thus, AI is going to turn human developers into far more robust programmers rather than entirely replace humans.
Each stage of the software journey is going to be augmented by AI. During the planning phase, a project will see better analysis, technology selection and opportunities to reuse code from other projects. Human developers will able to work faster as AI generates large pieces of code. Testing will be far more comprehensive and rigorous as AI assists QA engineers. Automating deployment will also be less error-prone and faster when AI can assist.
Just take a look at the video that demonstrates Accenture myWizard, a platform that hosts intelligent virtual agents that use machine learning to collaborate with their human co-workers. According to Harvard Business Review, the AI project manager is already helping Accenture to deliver projects by correctly predicting red flags 80% of the time.
None of this is some far off pipe dream. DeepCode is already using machine learning to analyze and clean up existing code. It’s hailed as the Grammarly of code. In the same way that spelling and grammar checkers haven’t eliminated proofreaders and editors, AI is working to assist developers.
Other startups are taking AI a step further. Logojoy usings machine learning to generate logos and simple designs. UIzard converts handwritten designs into HTML and CSS.
Let’s return to our initial question of whether software engineering will be automated. The answer is both yes and no. Certainly, many aspects of development are going to be automated. This doesn’t necessarily means jobs will be lost, though.
Automation reduces costs for companies that develop software. This in turn means that more software can be produced in less time. The demand for software is increasing, and with automation lowering the costs of production business opportunities will only increase.
There’s no need to head to the hills just yet if you’re a software engineer. While the field is changing and our workflow will include much more automation in the future, it’s unlikely that developers will be completely out of work anytime soon.
The takeaway from this is that we have no reason to cower in fear of our impending replacement. Instead, we need to focus on the human skills that are the least automatible.
Traditional programming took a rationalist approach, machine learning is the ultimate empiricism. As humans, we need to study both and know when which approach is better suited to a particular engineering problem.
In the future, every programmer will need to have a deeper understanding of algorithms and data structures. Of course, this is only the beginning, but we’ll likely see a new computer science curriculum that trains engineers to work in tandem with AI.
Non-technical skills that aren’t easy to automate are going to be the factor that distinguishes programmers. Domain expertise and creativity are going to matter more. Better soft skills and emotional intelligence will also set engineers apart.
There are times when even AI throws in the towel. When I ask Siri to tell me a joke, she’s at a loss for words.
Thus, my advice to developers is to continue learning. Hone your non-technical skills and be more ready to work with data structures, machine learning and AI in the future.
If you are not willing to learn, no one can help you. If you are determined to learn, no one can stop you.