From Writing Code to Supervising AI Developers
Traditionally, developers have written software as a series of hard-coded rules: If X happens then do Y. The human instructs the machine, line by line. In the near future, with advances in deep learning, we will be able to build a neural network that learns which instructions or rules are needed for a desired outcome and have the machine generate clean, pristine code. New applications, such as computer vision, speech recognition, machine translation, gaming, robotics, and databases, are so complex that is is beyond the scope of manual programming. Already, Google’s search algorithms are so complex that no engineer can keep track of the machine built code.
Traditionally, developing computer programs required you to specify in advance exactly what you want the system to do and then hand engineer every feature in your technology. Encoding many tasks in an explicit a way as is possible. However, there are many tasks that are far too complex to teach to computers in a rigid, rules-based way. Even an activity as seemingly simple as identifying the visual differences between a pedestrian, a tree and a vehicle is beyond the reach of traditional software development. Given the vast possible permutations that pedestrians and trees and vehicles can take, no team of engineers can possibly enumerate all of the rules that would reliably recognize the objects accurately.
In the future, we won’t really be writing the code. We’ll be training machines to do that for us. We will be curating data that will define successful and unsuccessful outcomes and feeding it into machine learning systems. The machine will use trial and error and mathematics to figure out a path to success. The role of software engineer will become less coder and more data curator. We won’t be maintaining complex software repositories, writing intricate programs or analyze their running times. Instead we will collect, clean, manipulate, label, analyze and visualize the data that feeds the neural networks.
This is not a clean break from the past, we’ve been using automated helpers to refactor and save time writing boilerplate code. When you are writing code, there are tools that highlight possible errors. There are even apps that can suggest better code completion. AI will supercharge this process. Essentially, you tell the machine what you are trying to achieve, the machine writes the the code for you, then you approve it.
AI Already Assisting Software Development
Early interest in applying AI to software development lies in automated testing and bug detection tools. However, AI has begun to influence all characteristics of software development. This includes open conceptualization of software, development, testing, disposition and continuous maintenance. The initial effect of AI on the developer function has been to assist developers to code well and for quality assurance (QA) specialists to test more efficiently. AI assists testers in locating errors and then fixing the code automatically after discovering a bug.
Today, AI helps developers to become better programmers. In agile development, AI can be used to improve estimates. Agile teams can be much more precise in defining deliverables and timing with the benefit of AI. Machine learning can also forecast the potential failure rate for an agile sprint. AI can help prioritize certain sections of code that need to be completed earlier. So, AI is already being used to optimize the project management of software development programs.
Technologies developed using manual software development are benefiting from machine learning in the following ways:
- Rapid Prototyping. Turning business requirements into technology products typically requires months if not years of planning, but machine learning is shortening this process by enabling less technical domain experts to develop technologies using either natural language or visual interfaces.
- Intelligent Programming Assistants. Developers spend the vast majority of their time reading documentation and debugging code. Smart programming assistants can reduce this time by offering just-in-time support and recommendations, such as relevant document, best practices, and code examples. Examples of such assistants include Kite for Python and Codota for Java.
- Automatic Analytics & Error Handling. Programming assistants can also learn from past experience to identify common errors and flag them automatically during the development phase. Once a technology has been deployed, machine learning can also be used to analyze system logs to quickly and even proactively flag errors. In the future, it would also be possible to enable software to change dynamically in response to errors without human intervention.
- Automatic Code Refactoring. Clean code is critical for team collaboration and long-term maintenance. As enterprises upgrade their technologies, large-scale refactoring are unavoidable and often painful necessities. Machine learning can be used to analyze code and automatically optimize it for interpretability and performance.
- Precise Estimates. Software development notoriously goes over budget and over timelines. Reliable estimates require deep expertise, understanding of context, and familiarity with the implementation team. Machine learning can train on data from past projects – such as user stories, feature definitions, estimates, and actuals – to predict effort and budget more accurately.
- Strategic Decision-Making. A significant portion of time is spent debating which products and features to prioritize and which to cut. An AI solution trained on both past development projects and business factors can assess the performance of existing applications and help both business leaders and engineering teams identify efforts that would maximize impact and minimize risk.
AI is Supercharging Some Applications Today
Enterprises want to deliver extremely personalized and customized services for customers, which can be tedious for manual programming, and it precisely the functionality that AI can embed into software. Presently, there are numerous examples of AI enhancing apps, whether it is the natural language processing on automated chatbots or the AI written news articles in your favorite newspaper.
You are not alone in your quest to assimilate AI functionality into your software development. All the big tech companies want to help you and to cement their future as the enterprise tech resource of choice. You can choose from 29 Microsoft Cognitive Services to integrate AI with only a few lines of code. Microsoft APIs assist developers in effortlessly assimilating AI into the apps they are creating. You can develop a custom AI chatbot for your business using Facebook Messenger. Google Cloud Platform will host apps built with TensorFlow, while Amazon Web Services (AWS) will serve the hardcore AI developer and application hosting market.
Machine Learning Will Transform Software Development
With AI techniques such as machine learning and deep learning, an engineer does not give the computer rules for how to make decisions and take actions. Instead, she or he curates and prepares domain-specific data which is fed into learning algorithms which are iteratively trained and continuously improved. A machine learning model can deduce from data what features and patterns are important, without a human explicitly encoding this knowledge. The outputs of ML models can even surprise humans and highlight perspectives or details we haven’t thought of ourselves.
Over time, these systems have become incredibly complex, requiring multiple dependencies and integrations as well as layers upon layers of functionality and interfaces. When these components are manually managed and updated by humans, it creates inconsistencies and unresolvable bugs. By contrast, machine learning models extrapolate important features and patterns in data. They generate code written in the form of neural network weights not by humans but by machine learning methods such as back propagation and stochastic gradient descent. Updating models entails retraining algorithms with new data, which will change how the model will behave and perform.
AI written software code will become both highly viable and valuable because it will be much easier for humans to identify a desirable behavior and collect the data than to explicitly write the program. There are also several benefits to the machine developed code:
- More homogeneous and easier to manage
- Can easily be baked into hardware
- Constant running time and memory use
- High degree of portability
- High degree of agility and integrability
- Easier to learn for future developers
- Better than the best human coder in certain functions (i.e. images/video, sound/speech, and text)
On the flip side, there are critical limitations to AI developments software, First is our human inability to fully comprehend how such complex systems work, limiting our ability to diagnose and fix issues within the code block. Another challenge is the unintended and embarrassing consequences that arise from flawed models such as algorithmic bias and bigoted bots. For example, Tay (acronym for “Thinking About You”), the infamous AI developed by Microsoft, replied to tweets, composed image captions, and revealed itself to be a sexist, a racist, and a Nazi sympathizer after less than a day of learning from us.
AI is the new technological frontier over which companies and countries are vying for control. Google / Alphabet invested roughly $30 billion in developing AI technologies. Baidu, which is the Chinese equivalent of Alphabet, invested $20 billion in AI last year. It will give software developers Superhuman powers by taking over the routine and the mundane, and freeing up developers to dream big and supervise and army of bots. Embrace it. Be Superhuman.