Plato’s Cave Meets the Matrix - How we Communicate with Computers
In the movie “The Matrix”, Thomas Anderson is a computer programmer by day, elite hacker by night. He has what he perceives to be a full and complete life until events start to unwind in his life, and he discovers everything that he understood to be real is actual an abstraction of his real primal existence. This story has ancient roots, echoing the story told by the Greek philosopher Plato, in his work “The Republic”. In Plato’s Allegory of the Cave, Plato envisions all people but those most enlightened, the philosophers, to be like a group of people chained to the wall of a cave, living in the dark, trying to understand what is going on in the world about them. All the people are able to see and perceive are the shadows projected on the wall. The people’s view of the world is a highly simplified version of a full dimensional reality outside of their cave. Just as when a prisoner in the cave is freed from the cave and cannot comprehend what he sees outside of the cave in a fully dimensional, full color world, Thomas Anderson cannot believe what he is shown when he leaves the simulation of existence that he has always lived in.
Why do I bring up this interesting historic linkage between “The Matrix” and its ancestor “The Republic”? Not to create another Joseph Campbell style essay on universal myth cycles, but to illustrate the different ways in which we communicate with computers. Stick with me here, and I’ll keep drawing this picture until my pen closes the circle, and this all makes sense. A computer, a collection of nanoscopic electronic components, is designed to fundamentally speak a single language, binary, via billions of combinations of binary logic gates and memory cells. All of these tiny electronic patterns end up responding to either 1’s (power being applied) or 0’s (no power being
Machine Language is the most basic means we can use to communicate with a computer in a complex way. It is a series of commands and addresses of discreet memory locations described as a series of ones and zeroes. To all but those who dedicate extraordinary resources, it is not readable by most human beings. When a program is turned into executable code, it essentially is being transformed by a Compiler into a package of machine code that a particular hardware platform can understand. Assembly is a slightly higher level language that enables variables and some common commands to be used. Like an obscure language artificially designed to streamline communication, Assembly is still very far from the way humans have learned to communicate, resulting in a very cryptic and difficult to digest language, in spite of the insistence by David S. Touretzky in his paper “Source vs. Object Code: A False Dichotomy”.
A higher level programming language allows a human being to look at the instructions that are being presented to a computer, and see in a more natural language manor what is being asked of the computer. What a person is looking at in a high level language is the Source Code, which not what the computer will see in the end. In the case of programs that are designed for an English language audience, the high level language appears to be somewhat cryptic english that nonetheless is fallowing a clear logic. Once the program is complete, it can either be run through an Interpreter, which will parse the Source Code to the computer a line at a time, dynamically translating the English to machine language, or to a Compiler, which will package it into a bundle of Executable Code (something.exe) of machine language.
All of this brings us back to the dilemma faced by Thomas Anderson, or Plato’s philosopher in the cave. Programmers of high level computer languages can read and understand their code that they are feeding to computers, but the high level language code created by JAVA, C++, Python, or any other high level language is actually just a construct designed to be read and consumed by the humans viewing it. If one delves deep under the layers of programming, the real physical hardware running at billions of instructions per second at nanoscopic scales is consuming a diet of 1’s and 0’s, a reality that looks nothing like the logical constructs that a programmer views.
Interesting, yes?