We users use Artificial Intelligence (AI) almost every day, often without even realising it i.e. a large amount of the apps and online services we all connect with have a degree of Machine Learning (ML) and AI in them in order to provide predictive intelligence, autonomous internal controls and smart data analytics designed to make the end user User Interface (UI) experience a more fluid and intuitive experience.
That’s great. We’re glad the users are happy and getting some AI-goodness. But what about the developers?
What has AI ever done for the programming toolsets and coding environments that developers use every day? How can we expect developers to develop AI-enriched applications if they don’t have the AI advantage at hand at the command line, inside their Integrated Development Environments (IDEs) and across the Software Development Kits (SDKs) that they use on a daily basis?
What can AI do for code logic, function direction, query structure and even for basic read/write functions… what tools are in development? In this age of components, microservices and API connectivity, how should AI work inside coding tools to direct programmers to more efficient streams of development so that they don’t have to ‘reinvent the wheel’ every time?
This Computer Weekly Developer Network series features a set of guest authors who will examine this subject — this post comes from Boris Paskalev, CEO and co-founder of AI-based code review software company DeepCode.
AI, infused into code
AI has permeated nearly every aspect of society today, but some developers may think that infusing it in their development process is a step too far. After all, developers take great pride in their code and can view AI as a threat to their jobs and creativity.
As we’ve seen with technology like GPT-3, AI can in fact be a helpful tool to streamline the creation of simple elements and actions, but it’s nowhere near replacing developers.
With that said, there are areas where AI can be used in the development process to supercharge the productivity of developers and help them create quality code in a way that doesn’t feel like a hostile takeover by machines. One of the key proof points of this is using AI to find bugs and security vulnerabilities in code.
Symbolic vs. Sub-Symbolic AI
Static Code Analysis is actually a form of AI and it always has been since its invention in the mid-seventies of the last century. We simply have to understand that there are two schools of AI: Symbolic [sometimes called human-readable AI] and… secondly Sub-symbolic [lower level raw information] in the Machine Learning arena.
Symbolic AI uses a combination of facts and rules to model the world and then infer knowledge. This is exactly what you’ve seen in Static Code Analysis tools for decades now. Static Code Analysis starts from the source code, which means your app does not need to run or even compile to start using these tools. Your source code is transferred into an intermediate representation (like a tree structure) and then rules are applied to extract facts (e.g. bugs).
Not another AI winter, please
But, in the past few years, we have seen enormous developments in the field of Machine Learning, so much so that nowadays the public sees AI as equalling Machine Learning. The danger of that is that experts warn of another “AI Winter” [a period of reduced interest, investment or development in AI] if we focus solely on Machine Learning.
At DeepCode, we bring both worlds together by using a Machine Learning element to identify rules and facts for the Symbolic AI.
To train the Machine Learning element, we are using the vast amount of changes (fixed bugs) in all open source repositories. By doing this, we can overcome the linearity in the growth of rules as we no longer need a developer to write each rule – we have a system providing the rules. Still, we are using an Augmented AI, meaning an engineer oversees the rule generation and signs off before we ship the new rule.
So what has AI ever done for developers?
Static Code Analysis for sure.