Cogs from a reconstruction of Charles Babbage's Difference Engine, the predecessor of the Analytical Engine. Note the decimal system instead of binary.

Cogs from a reconstruction of Charles Babbage's Difference Engine, the predecessor of the Analytical Engine. Note the decimal system instead of binary.

Surely, many can identify with the following scenario:

You're incredibly fascinated about where the world is going tech-wise. There's Facebook planning a virtual and augmented reality takeover, there are autonomous cars driving passengers around in Pittsburgh (though not quite as smoothly as expected), hackers seizing computer systems around the world and demanding ransom in bitcoin, cyber warfare and autonomous armed drones, big data influencing elections, electronic athletes and virtual sports events with millions of dollars in prizes... But, you ask, what exactly is the computer anyway? What is the internet? What about all these acronyms we use daily in our online worlds -- HTTP, URL, HTML, bits, bytes, what have you...

I'm determined to find out how all of it works, what it is, and where it's going, and to share my progress here. To start with, I figured it'd be useful to just dive in and learn some programming, as that's what everything is based on. So I did.

The first thing to know is that, ultimately,  the computer is a physical thing. Though it processes information in binary form, in ones and zeros, these are actually physical states of the circuitry. A component of the machine can have two distinct states, say, electrical current on or off -- symbolized by 1 or 0, respectively. In the olden, mechanical days of Babbage's analytical engine, the 19th century computer, the machine states were manipulated by directly  inserting punched cards, which then moved certain pegs and levers powered by steam.

By now, a lot has changed in practice, if not as much in principle. Everything is electrical, and nearly nano-scale, but the basic idea of storing certain information and manipulating it according to certain programs remains. What's new is what the users and the programmers interact with - the interface. 

To control the physical states of the computer, programmers use what is called an interpreter (or, a compiler; the difference needn't concern us here). An interpreter is like the interpreter translating between humans: It takes in one language, translates it, and outputs another language. In the case of a computer, the interpreter transforms what is called a programming language into the ones and zeros the computer can use.

These programming languages, therefore, are a kind of halfway house between pure physical information and natural human language. A certain language is directly and relatively easily readable by a human who has studied it; yet a programming language is fixed in its syntax (its structure) and semantics (vocabulary), so as to enable the interpreter to transform the programmers messages into "computerese."

By way of example, here are the first lines of code I wrote (in a language called Python) and gave to the interpreter. See if you can decipher how the little program works:

    print ("What's your name, darling?")
    myName = input()

    if myName == "Vinski" or myName == "Vinski Valos":
        print ("Hello, my creator, " + myName + "!")
        print ("It's good to meet you again!")
    else :
        print ("Hi there
," + myName + "! Am I supposed to know you?")

The so-called hardcoded vocabulary of Python includes signs such as the brackets, numbers, the colon, the doubled equation sign, and quotes, as well as keywords such as "print," "if," "else" and "input()" The interpreter recognizes these as it follows the program from top to bottom, and and tells the computer to work accordingly.

As you may have guessed, the "print" command first makes the computer show the bracketed question on the screen (or to print it on a piece of paper, 1950s style). The input command, then, allows the user to type in their name. Depending on the answer (effected by the commands "if" and "else") the program either greets you as its creator, or inquires how you reached the program in the first place.

In principle, all applications, webpages, programs from maps to photoshop to word processing, video games, and social networks all work according to this same idea -- only with much more complexity and finesse.

The beauty of computer programming is its universality. The interpreter itself is a program designed by someone, allowing others to use it as a tool to program things that themselves may work as tools for someone else with no programming knowledge themselves.

Programmed computers are a chain of ever simpler-to-use and more specified tools, ranging from the pure machine states via programming interfaces to the end user creating, for instance an image on Photoshop.

So far, these chains of interfaces have been getting longer, as technology has developed. First programmers of mainframe computers were the end users themselves, and since then, all kinds of intermediary services have simplified computer usage and made it accessible for people with different levels of proficiency. For instance, webpages can nowadays be programmed without any programming knowledge using a mediating service that employs pre-coded templates and parameters for personalization.

The ultimate stage, of course, would be a natural-language programmable interface -- an interpreter able to understand not only code bound by strict rules, but also imprecise and ambiguous human speech or movement, and program the computer accordingly. 


Here's the complete python program, press the  play arrow to start. You can also try and modify the code on the left to change the program.