Since the first computers were mass produced in the 70s, the universities of the world have assumed the duty to train and instruct students in the understanding, creation and development of computer programs to increase productivity. These universities fulfill this duty to varying degrees, with methods that differ from one establishment to another. Yet the basis of this education remains the same: the best way to architect a system and implement an algorithm is to separate the data from the algorithm. The algorithm must be as generic as possible so that it can be reused.
Now let’s take a step back and analyze what a computer program really is. One can see that it is in fact a finite-state graph, with each vertex representing a possible step in the program. The links participate in evaluating the passage from one step to another. Each vertex can be labelled and each link can be labelled. This part is the logical representation of a program. Technically, when a developer writes a program, they use words to name their variables, functions, classes and methods. In doing so, they give a minimal specific meaning to the program they are writing. In its logical representation, the task comes down to assigning names to sums and links. The semantics of a program are very important because they are the very essence of the program’s utility and therefore of its existence. To push the analysis further, we can consider that an operating system is a set of graphs of graphs making another set of graphs of graphs work. Any program we use has a specific meaning and a certain nomenclature. It’s an abstract way of seeing information processing.
If we stretch the vision a little further, it is easy to conjure up some graphs and ask ourselves whether there isn’t a method to optimize the development of these graphs and therefore of these programs. What’s more, certain programs use the same symbols. Pushing it even further, we can start to ask ourselves if there is a way for these programs to develop themselves in order to give the system as a whole a certain autonomy. This would optimize the symbolic system and increase the level of abstraction necessary to interact with the system. For users and industries requiring ease of use and program reuse, it would appear to be just the type of thing they would need.
A cognitive system is a digital system which possesses great plasticity in terms of graph processing in both recursive and deployment modes. Such a system possesses all the known symbols of a natural language in an ontology that is also in the form of a graph. It appears that instead of the programs developing themselves, it is the graphs that create themselves and deploy themselves in real time, using a constantly evolving ontology of which they are integrally a part. This set of totally dynamic graphs, integrated into and interrelated with a single system, represents a cognitive system whose physical behaviour is extremely sensitive to any modification of its knowledge: this is the merger of data and algorithms.