Getty Images/iStockphoto
The past, present and future of AI coding tools
Though AI-assisted software development has seemingly hit a historical turning point, things like intelligent code completion, static code analysis arguably led the way.
AI-assisted software development tools automatically suggest or generate software source code to programmers. This may feel like cutting-edge technology -- in some respects, it is. However, AI-assisted development isn't entirely new. In fact, it has a longer history that stretches back to other tools that used AI or algorithmic processing to help coders do their work.
To understand why AI-assisted development is important today, it's important to understand its past and to see how these modern tools differ from their predecessors. Let's look at the history of AI coding tools to see how we got where we are.
The early faces of AI coding tools
AI-assisted software development refers to the use of machine learning, neural networks and other facets of AI to make autonomous decisions regarding things like when to write new code, where to make improvements to existing code or how to identify errors that might exist within the codebase.
However, there are numerous categories of software development tools that appeared long before these modern AI-assisted development came along. Although these existing tools and approaches aren't, strictly speaking, the same as AI-assisted development, they prefigured it in some important ways.
Intelligent code completion
Intelligent code completion refers to a type of development tool that helps programmers complete lines of code that they've started writing. It can also correct relatively simple syntax or spelling errors found within the code.
A simple example of intelligent code completion is the command-line completion feature typically associated with shell scripts like Bash. If you open a terminal on a Linux-based system like Ubuntu, start typing a letter or two and press the tab key. The terminal will respond with a list of valid commands that you might want to enter based on the initial characters, shown in this example using the initial characters "bas."
chris@chris-Gazelle:~$ bas
base32 base64 basename basenc bash bashbug
chris@chris-Gazelle:~$ bas
In a similar manner, the terminal will detect instances where the user may have misspelled a command and provide suggestions for what the user might have meant to enter.
chris@chris-Gazelle:~$ bassh
Command 'bassh' not found, did you mean:
command 'bash' from deb bash (5.1-6ubuntu1)
command 'bssh' from deb avahi-ui-utils (0.8-5ubuntu5)
Try: sudo apt install <deb name>chris@chris-Gazelle:~$
Intelligent code completion arguably dates to the 1950s, when programmers realized they could improve the accuracy of their code using basic spellcheck features capable of detecting typos that might cause problems with the application. Of course, intelligent code completion is not the same as AI-assisted development or code checking but instead relies on older validation methods like comparing user input against pre-configured lists of valid input options.
Low-code development
Low-code development tools lets developers and non-technical users write software with little manual coding. Unlike intelligent code completion tools, low-code development platforms are designed to write entire programs, not just help to complete or validate individual lines of code.
Low-code programming tools don't use AI. Instead they depend on prebuilt modules of code that users stitch together to create software. This means low-code tools typically support a narrower set of use cases as they are only used to build the types of applications that their preconfigured modules support.
While not as revolutionary an approach as AI-assisted development is intended to be, low-code development concepts have arguably existed since the 1970s when fourth-generation programming languages like FOCUS and SQL first stepped into the scene.
Static code analysis
For years, developers have used static code analysis tools to automatically parse source code in search of security vulnerabilities, bugs or other issues buried within a codebase. Static code analysis tools are typically run on source code post-deployment, rather than during the development process -- a stark contrast to AI-assisted development tools that would be involved from the beginning of build cycles.
However, while source code analyzers do not traditionally rely on AI to perform analyses, tools like DeepCode are starting to combine the concepts of static code analysis and machine learning to facilitate this type of real-time code scanning.
Today's plans for tomorrow's AI coding tools
Over the past several years, a handful of production-ready AI-assisted programming tools have found traction in the software development market. One early example of these tools, IntelliCode, was added to Microsoft Visual Studio in 2018 in the hope that it could provide recommendations to programmers as they code. IntelliCode supports about a half-dozen programming languages, like C++, JavaScript and Python. It also offers a relatively narrow set of recommendation types, such as those related to argument completion.
GitHub Copilot, which debuted in 2021, is another tool powered by AI algorithms from OpenAI and trained by parsing real application codebases. Because of this, Copilot can make coding suggestions for software in almost any language or framework, including code aimed at functional programming. Amazon's version of an AI-assisted development tool, CodeWhisperer, aims to do a similar task: suggest or auto-generate complete snippets of code for virtually any language or framework.
Copilot and CodeWhisperer, along with similar AI-assisted development tools, are ready to use for real-world use. However, what they offer represents only a subset of what's likely to emerge in the field of AI coding tools:
- Support for writing entire programs from scratch, rather than just snippets of programs.
- The capability to independently write code that is optimized for performance and security, as opposed to code that simply runs.
- A means to work across codebases, including those that consist of more than one language.
- An ability to guide developers through specialized coding operations, such as configuring infrastructure-as-code templates.
- Increased clarity surrounding the licensing status of AI coding tools and efforts to prevent misuse of open source code.