For decades, scientists have tried to use artificial intelligence techniques and algorithms to equip computers with knowledge and behavior similar to that of humans. Although more sophisticated than traditional programming, the techniques used have focused mainly on manually growing and improving the knowledge base of the system, which has always been limited. Limited knowledge of the domain has proven to be a poor substitute for the experience of humans; that is, the AI systems are as good as their programming (performed manually by a human).
The new approach is to build systems that learn from themselves, becoming experts who model and abstract rules from the data that is fed to them. These systems improve their accuracy, adapt to the unknown and expand their capabilities beyond the original programming. Traditional natural language processing (NLP) techniques, rule-based reasoning and knowledge representation are being augmented by machine learning -especially deep learning- to improve AI (see figure 1). The preliminary results are promising: we are seeing new apps emerge with some “intelligence” in a variety of domains.
This wave of artificial intelligence will impact the work of software developers, so it’s important to be prepared. Developers must understand what these technologies consist of and how they can be applied, both in the enterprise software development life cycle and in the applications themselves.
Impact on the development cycle
SENLA prepared a list some of the possibilities of artificial intelligence applied to software development:
Quickly convert an idea into code. Taking a business idea and implementing it in software code is still a big problem, despite the improvements that have been made in this area thanks to agile methods and practical business analysis. Imagine that a development team could simply describe an idea in natural language and that the system understood it and turned it into executable code? Although that is still science fiction, it is possible that through natural language processing and expert systems changes and improvements to an application can be suggested. The IA will enrich the requirements models and test cases with more sophisticated text recognition, resulting in better code generators.
Improve the accuracy of estimates. The estimation of software projects is still a complicated activity with low precision, in which it is necessary to involve experts with extensive knowledge of the context. Imagine a solution to estimate software that analyzes historical data from previous projects of the company to find statistics and correlations, and use predictive analytics and business rules to provide more accurate estimates of time and effort.
Accelerate the detection of defects and solutions. When a system has production failures, the teams spend a great deal of time and effort to reproduce these faults in order to locate and correct them, and in most cases the team that made the development is no longer available. Through AI you could analyze the skills of the person who wrote the original code and locate someone available with a similar profile.
Automate the decisions of what to build and then test. An IA could analyze the usage patterns of an application in production and based on this, decide which backlog requirement (s) should have higher priority, or be implemented first. This analysis of usage behavior could also be used to generate automated test scripts.
Impact on applications
A new generation of applications that can speak, listen, feel, reason, think and act is coming to our computers, phones and devices. The list of companies building applications rich with AI grows rapidly.
There are some capabilities in the new generation applications that are possible thanks to the AI:
Natural interaction with humans. Throughout the history of computing we have had to interact with computers through non-natural interfaces: punched cards, keyboards, mouse, capture forms, and so on. AI is enabling computers to see and listen to their users, in addition to answering by means of voice in natural language.
Expert systems. Coding policies and business rules of a specific domain through traditional programming languages is a complex and effort-intensive activity. Artificial intelligence gives the option to build expert systems focused on a specific domain that can support novices in an activity or help managers in their decision making. Although expert systems are nothing new, until now we will begin to see that they become popular, and that they will be enriched through deep learning.
Software that learns by itself. Deep learning combined with big data is one of the technologies that will cause the greatest disruption in the applications we build. It will be very interesting to see what applications we will be building soon when unsupervised learning is available to everyone.
AI enables new types of applications
Thanks to artificial intelligence, we will gradually build unprecedented types of applications. Companies need to develop imagination and experience to build these AI-enabled applications. Companies will adopt IA gradually. Forrester Research visualizes that this process has 3 stages:
Make the existing apps more “conversational” and fluent. Initially, AI experiments focus on adding “cool” things with limited scope to improve user experience and interest.
Improve understanding, reasoning and decision making. Through an adequate combination of data and ontologies enriched with machine learning algorithms, applications will have the ability to reason and deduce information.
Build apps that are more than apps Traditional desktop or web applications will gradually give way to bots and smart agents. Developers will no longer focus on programming but training.
I recommend avoiding the notion of the data scientist as this super endowed with knowledge of the business domain, mathematical, analytical, programming and infrastructure management skills. It is more realistic to have peopled specialized in artificial intelligence (mathematics) that collaborate with people specialized in data engineering (programming and infrastructure management).
The enterprise software development process is a candidate for improvement through artificial intelligence. However, for this to happen we require that the processes be defined and instrumented. Mature organizations already have this and will be the first to reap these benefits, which in turn will allow them to build better software with less effort.