While watching Terminator: The Sarah Connor’s chronicles, I began to wonder about certain things regarding artificial intelligence. After doing a quick research on the subject, I noticed that a lot of the approaches used to AI involved data analysis. This means the application is “learning” through data that it can capture itself or data that is submitted by humans in a controlled fashion. That might be the most elegant end-all be all solution to AI, but what if there was another alternative?
I think one approach that could be used to achieve maybe not exactly AI but really smart applications is to build a software that could learn from other software. This means if an application needs to add two numbers together, it could look around (locally, Network, Internet) for an application who knows how to achieve this. Once that is found, it could take part of the binary or interface with the application that achieves the desired result and integrate it. I don’t need to know how to build a CPU to use one.
To obtain such a result, a few of ways could be used such as:
Automated reverse engineering from the binaries directly
Semantic describing what a method or function does
Right now applications can’t express what they can or cannot do. Web services are a step forward in this direction, but there is a major concept missing. In web services, you know the method name and its input and output. For instance you could call a method hotPotato that takes integers and you would have no way of knowing what that method does without looking at its code or reverse engineer it by submitting input and analyzing outputs (which is error prone). Once we figure out a way to enhance the expressiveness of an application, we will be able to build applications that can understand other pieces of code. It would be important that such a language could be apply to existing pieces of codes as it could bring a level of efficiency never seen before in application development.
Think about it, how much code is really truly unique in the world? If a system would allow you to find pieces of codes automatically by leveraging the current code base available worldwide, wouldn’t that revolutionize development forever?
Code learning code, watch out Skynet!