Can you imagine a world where software writes itself? Sounds like the premise of a sci-fi story, one that ends with the machines overthrowing humanity. But as far-fetched as the idea might seem, you’d be surprised to know that such a day isn’t too far away.
It’s no secret that AI has seen exponential growth in the last couple of decades, a trend that doesn’t seem like it’s stopping anytime soon. Almost every market has seen AIs enter their field in one way or another and software development is not the exception.
We’ve seen how easier software development has become with the inception of powerful IDEs, how enjoyable it is to write code with a linter, and how useful method extractions are when we want to refactor a program. Those are examples of static solutions that provide tremendous value but what if we could have those tools learning alongside us? What if we could have software that automatically fixes its bugs? That’s the AI promise for software development.
AI is already shaping software engineering
The idea of automating software development isn’t new. According to Bataresh and collaborators, artificial intelligence has played a significant role in SDLC since at least 1975. Each stage of software engineering (requirements, design, development, testing, release, and maintenance) has something to gain from artificial intelligence.
Even no-code solutions like Bubble will reap the benefits of more refined AIs, since the basis of these tools is to create algorithms based on a specific set of parameters chosen by the user. The results can be limited, but with AI we will eventually see more dynamic tools that adapt and build code more flexibly.
Here are some of the ways in which artificial intelligence could help software engineers.
Software developers base the initial goals of their projects on 2 sets of requirements: the needs as established by the client’s vision and the nature of the data. For example, an application that gathers and works with unstructured data is a whole different beast than one that gets information from a relational database.
AIs are a great asset for information gathering which in turn makes them an amazing addition at this stage. Let’s take NLP (Natural Language Processing) as an example. An AI could use it to help software developers analyze their interviews with their clients, flagging important keywords which in turn can help predict features and challenges that may arise down the pipeline.
On the other hand, if the project involves a great amount of unstructured data, it might be hard for the developer to code for all eventualities, and going over the data might not be humanly possible.
In those cases, AI can parse and categorize the data and show irregularities that could cause no small amounts of headaches in the long run.
Every software development project requires coding, and as any seasoned developer can attest to, working with code is fulfilling, but also extremely frustrating at times. Nothing is quite as maddening as failing to compile code just to realize that you missed a semicolon someplace.
Powerful IDEs like Visual Studio Code and PyCharm are already implementing AI-assisted coding suggestions, offering immediate feedback to the developer about errors and suggesting changes to the code.
On top of that, we have addons like Codota that use deep learning to scan open source projects all over the web to learn coding patterns. Simply put, the AI compares our code with the patterns it has seen all over the web and heuristically auto-completes the code, saving both time and energy.
Error management is another area where AI can provide help. For example, it’s a well-known fact that memory management in C++ can be a major pain even for experienced developers. AI’s can run simulations with the code and create predictions about the program’s behavior to prevent issues like stack overflows.
Trained AIs can catch errors in blocks of code faster and more efficiently than even the best software developers. They can check predefined syntax, compare the project with documented code guides, check system logs, and flag errors before they are finalized.
In the future developers are aiming for intelligent assistants that not only flag the code, but that also rewrite or refactor the code and iterate until it finds the most efficient solution.
Testing your software
Unit testing is like a sewage pipe: no one likes it, but we can all agree that it’s a necessity. No software developer can take into account every variable when writing code. Sooner or later a bug will go unchecked, waiting for that corner case scenario to rear its ugly head.
Even if we are extremely careful, there is only so much we can prepare for. Creating tests and executing them takes time, so much so that some developers do defensive coding and write their software taking into account the worst scenario situation just to be on the safe side from the get-go.
AIs can run hundreds if not thousands of tests in the blink of an eye, and they can either brute force their testing, trying everything until the program breaks. They can even heuristically flag odd behaviors and build their testing strategy around them.
As we’ve stated before, with enough refinement, the software could potentially become self-sustaining, learning from tests and rewriting itself to iron out the bugs and keep downtime to a bare minimum.
Both Amazon Web Services and Azure have tools for budget prediction. Based on very simple variables you can get an estimate of how much processing power your software is going to need and how much it’s going to cost.
Similar tools can be developed to predict more precise budgeting. For example, if you are designing a web app and you have information about the traffic pattern of your user base, you can get a pretty decent idea of how much bandwidth you are going to need from month to month.
Predictive scheduling is another aspect that is well served by AIs. Imagine an assistant that can analyze your infrastructure and predict when you are going to need to scale or when you need to reboot your servers to optimize performance without affecting your user base or an AI that automatically deals with disk balancing. The sky’s the limit.
It’s a revolution…
AI is a field that has grown exponentially and every year we are seeing more refined models. It won’t be long before we start seeing intelligent programs that work hand in hand with software developers to develop better projects in less time. That, or we might have to kneel to our new computer overlords.