I have just been in a very interesting email conversation with a renowned senior researcher and scientist. Since I am not entirely certain about whether or not she wants to bring our communication into the public space, I will avoid disclosing who she is. However, our communication illustrates a very good use-case for what I like to refer as the “hard computer literacy problem”.
The researcher I have been communicating with, is a native French speaker, while I am a native Norwegian speaker. Obviously, if we communicated in our native tongues, we would not be able to understand each other. Hence, a common interface between myself and the other party needs to be established – English does a decent job at this!
The same problem exists between computers and humans. Humans understands spoken and written words, while computer understands only computing instructions – And the gap between these two very different mental frameworks, leads to huge communication problems. It doesn’t matter if you exchange “machine instructions” with whatever programming language on the planet here either, since the gap between any current computer language, and any existing human language, is simply to great for most people to be able to engage in a meaningful communication with a computer, to communicate their “intentions”.
Hence, the results becomes that of, only roughly 2% of the population in the western hemisphere, are capable of “communicating with computers”. Which creates an “illiterate gap” between “those who know” and “those who don’t know”. Arguably the same problem as Europe faced in the 15th century in regards to general literacy, before Gutenberg’s invention of the printing press, commoditised the Bible, facilitating for everybody learning how to read the Bible themselves. Needless to say obviously, but the effects of this, made the very concept of power become significantly much more evenly distributed, facilitating for the Enlightenment, modern science, and Democracy, etc.
Linguistics, the framework of the human mind, and the foundation of civilisations
However, if you break down “communication” into its abstract parts, you realise that there’s actually a lot of common ground we can rely upon, to communicate in a much more natural and intuitive way, with our computers. For instance, most sentences have a verb, a noun, etc. The verb might be “move”, the noun might be “car”. OOP was supposed to solve this. Unfortunately, OOP is complicating matters, instead of making things simpler. Hyperlambda though, due to its relative naive structure, seems to perfectly solve this problem though. Below is an example of a piece of Hyperlambda, which might look like pseudo code, but could easily be implemented such that it becomes *actual working code*.
vehicles.car.move noun:my-car from:work to:home
Notice, I want to emphasise that the above is *not pseudo code*! Still, understanding what the above Hyperlambda would do if evaluated, is so simple that it wouldn’t even require explanation to make a child understand it. Compare the above Hyperlambda with the OOP equivalent.
ICar vehicle = Factory.Find ("my-car"); IAction action = AnotherFactory.CreateAction (Action.Move); action.SetSubject (vehicle); IPosition pos = YetAnotherFactory.CreatePosition (); pos.SetSource (Locations.Work); pos.SetDestination (Locations.Home); action.Parametrise (pos); action.Execute ();
You don’t need to be a rocket scientist to understand how one of the above examples are much more easily understood. And you don’t need many years of OOP to realise that the above description of how to perform some simple action with an object in OO, is a highly realistic description of the necessary pre-requisites for being able to even communicate a simple thing, such as moving an object from one position to another position.
In fact, if anything, I’m willing to bet most OO programmers would perceive my above usage of OO as naive, compared to what they have often had to implement, to create “SOLID” code themselves.
Even ignoring the parentheses, semicolons, object decorations, and cohesion problems – The OOP solution is still “Greek” for most people. While the Hyperlambda solution can be intuitively understood, by everyone having nothing but basic understanding of English.
For a “human 2 computer” interface, Hyperlambda is simply superior. Sure, you can understand how to “communicate” with a computer today, if you spend some 10 years studying some dark and mystical programming language – But why is this necessary …?
Why can’t we use the existing rules of Linguistics and natural language, to find a common ground for communication between computers and humans …?
Why is it necessary having to spend half our lives, before we can create basic programming instructions, communicating our intentions to a computer? I can easily tell a human being to “please turn off the lights before you leave home tonight”. If I asked a computer illiterate to tell their computer the same thing, they’d freeze, unless another software developer had already created a “button” to allow for such an action. Which leads us to the following question …
How many buttons should we have in our software systems?
To communicate ANYTHING to any other human being, requires only 26 “buttons” (the Latin alphabet and a keyword), still most human beings can use those 26 buttons to communicate an infinite amount of different permutations of intentions. So why does my WordPress dashboard have ~1,000 different buttons? It cannot even do 0.0001% of what I can do, using natural speech, or a keyboard with 26 characters.
In fact, the above Hyperlambda example is so close to natural language, that I have taken the liberty of creating a bridge between computers and humans, which allows you to literally speak natural English to your computer, and have the computer evaluate computing instructions as a consequence – Effectively even eliminating the need for even being literate to become a “computer programmer”!