Ever since OpenAI released its artificial intelligence (AI) chatbot late last year, it’s been almost impossible to go a week without reading AI-themed headlines about how similar capabilities will save humanity—or doom us to some inglorious demise. But what will it do for software?
While fears about the future of technology go back at least as far as the written word in some way, shape or form, the industrial revolution and 20th century brought with it a far more intense foreboding, with AI now stoking the deepest terrors. In the last month alone, innumerable tech titans have chimed in on recent AI developments urging a pause on research, Google’s AI “godfather” has resigned citing concerns, and even the White House has weighed in on the matter. While Terminator, The Matrix and I, Robot have captured the imaginations of billions around the concept of a technical singularity—a hypothetical future time in which technological growth becomes uncontrollable and irreversible, yielding unforeseeable changes to our world (usually viewed as bad ones)—there is far from a consensus that we’re hurtling irrevocably into a technological Armageddon.
This concept clearly captured the attention (and near paranoia) of many of the greatest academics and scientists of our time including John Von Neumann, and more recently Ray Kurzweil and Nick Bostrom. At the same time, Stephen Hawking, Steven Pinker, Paul Allen, and Daniel Dennett have subjected the idea to withering criticism.
Our place at the Software Intelligence Pulse isn’t to weigh in (let alone settle!) this heady debate. But some may be tempted to believe AI will—in short order—be able decipher, decode and/or ‘understand’ the most complex home-grown software applications and automatically take the steps needed to digitally transform them (discover, maintain, refactor, modernize, etc.). Or maybe even create software that programs itself!
A provocative claim, no doubt. Perhaps slightly more mundane than “we’re like children playing with a bomb [AI],” but is it so? Before we get to the bottom of it, we need to define some basic terms.
What’s the difference between AI and machine learning, and how are they different than software intelligence?
According to the United States National Institute of Standards and Technology (NIST), artificial intelligence (AI) refers to "technologies that enable machines to perform tasks that would require human-like perception, cognition, planning, learning, communication, or physical action." In short, it’s a field of computer science wherein machines execute tasks that typically require human intelligence.
Although it’s often incorrectly used interchangeably with AI, the subfield of machine learning (ML), is focused on building algorithms that make data-informed predictions and/or decisions. It gives computers the ability to learn without explicitly being programmed.
Given we are talking about learning and understanding (software), we will focus specifically on ML, which falls into three kinds of models:
- Supervised learning: where an algorithm is trained on input data with a correct output that enables an algorithm to predict outputs for new data based on learned patterns. One example is something as mundane as classifying spam in a separate folder from your inbox.
- Unsupervised learning: where an algorithm is trained on unlabeled data and must find data groupings. Common examples include visualization and user categorization by social media activity.
- Reinforcement learning: where an algorithm learns to make decisions based on trial and error. This type of learning achieved recognition in the DeepMind documentary AlphaGo (well worth bookmarking for later if you haven’t seen it).
Software intelligence, in contrast, is quite different than any kind of AI or ML. It refers to actionable insights into the inner working and structural condition of software. It enables interpretation of data definitions, source code structures, and other artifacts making up applications so that business and technology leaders can better understand and control the complex software systems underpinning their business processes.
Digital leaders can use this contextual information to make smarter decisions around portfolio governance, cloud migration, enhance their software faster, and exert better ongoing control of the risks involved.
So while artificial intelligence is a branch of technology at heart, software intelligence refers to contextual information/insights. Which gets us to the question above—can AI techniques be used to generate that kind of insight for complicated home-grown software applications?
Well, in order to do so, it would require running a mix of the first and the second of the three types of ML above: supervised learning on the raw code to extract all elements that make up the application— data entities and source code objects—and unsupervised learning on all the connections between all these elements. But what would happen if one was to run the most sophisticated of these models on custom-built applications entailing multiple layers, languages, frameworks, databases, tens of thousands of objects, and numerous relationships across them?
This is the question we’ll take up in the thrilling conclusion of our two-part series on AI, ML, and software intelligence.