We all are aware of computers and their enormous computing power these days which use highly complex softwares but little do we know how it all began. This blog articulates and highlights the major events that occurred in the last 70 years which shaped the way for Digital computers and programming languages as we know them today.
The journey of computer softwares (or perhaps the code which we can identify as software) began at the Bletchley Park in 1936 when Alan Turing wrote the first piece of code. Yes, there were many other accounts of the first instruction but the credit for writing first piece of code which was executed on an electronic device (essentially a crude computer) goes to Alan Turing. He was a remarkable genius of his time. He wrote the infamous paper titled “On computable numbers with an application to Entscheidungs Problem” in 1936. Charles Petzold in 2008 wrote a book titled The Annotated Turing where he takes the Alan Turing’s paper and chops it up into bits and pieces and surrounds it with history and explanations and walks you through what Turing might have been facing.
The kinds of machines which Alan Turing used to write code in those days used to have relays. Back in those days, Relays were fairly common in the circuits. Essentially, a relay is an electronic switch which has a wire passing through a coil and by passing current in wire, a magnetic field can be induced in the coil which attracts a metallic head towards it thereby latching it and completing the circuit. A relay can be turned on or off reliably well on the millisecond scale, which was very fast at that time (today it would be considered painfully slow). A relay itself was not specifically designed to be used in the computers rather, at that time, telegraph was used extensively as a medium of communication. But the telegraph signal could only be sent over short distance of approximately 20 miles. So, relays were invented to receive the telegraph signal, amplify it and transmit the signal again, Hence the name RELAY.
Vacuum tubes were also there, which could work much faster than relays but they were unreliable. In 1942, Colossus was built, which used many vacuum tubes. By 1945, when the war was over, they came up with the ACE (Automated Computing Engine). It was the machine that Alan Turing helped in designing. Alan designed the Instruction set, the word width , the concept of machine etc. The memory ACE used was unique at that time. It didn’t have a semi-conductor memory like we have these days. Rather ACE used something called ”Mercury Delay Line” which was a type of sequential memory. It had a cylindrical shaped tube filled with Mercury with a speaker on one end and Microphone on the other end. Very High frequency audio signals were sent through Mercury via speaker and picked up by the microphone on the other end. And this cycle keeps on repeating, thus creating a loop. At max, it could store about 1024 bits in each cylinder. ACE worked with approximately 22 attached cylinders as ACE was a 22 bit word size machine.
Another technology which replaced the Mercury Delay Line was the Cathod Ray Tube (CRT). Cathod ray tubes were basically the vacuum tubes with a couple of electron guns that fires electron beams on a phosphorescent screen. Turing used the CRT memory as output device to read bits directly from memory by merely looking at the screen. For some reason, Turing used Base 32 for all his calculations. Actually, he used Base 32 Reversed (from right to left)
Turing also invented the concept of subroutines. While working in 1945, he invents the concept of “Stack”. The operations push and pop (as we know today), Turing called them ‘Bury’ and ‘Unbury’. He also conceives the idea that stack would be used to save subroutine’s return address which was a novel idea of that time. He invents the concept of Floating point numbers.
In 1950, the scenario started to change. Vacuum tubes started in Mass Production. This changed a lot many things. Tubes were not only used in computers itself. Radios, Televisions all used vacuum tubes.
In 1958, first functional programming language called LISP is invented. In 1966, first object oriented programming language called Simula-67 is invented. In 1968 Edgar Dijkstra wrote the famous paper “Goto statement considered Harmful“. This marked the onset of Structural Programming Language
In 1968, While working at Bell Labs, Dennis Ritchie and Ken Thompson invented programming language C and Unix operating system respectively. In 1969, NASA’s first Manned space mission to moon took place which was the Apollo-11 mission. For the mission, Apollo Guidance Computer (AGC) was used. AGC had a 16 bit word length with 15 data bits and one parity bit for error checking. It weighed around 32 Kg and had a processor running at approximately 2 MHz, which was really fast for that time. AGC was the first Intergrated circuit based computer.
So, what can we observe from all this. In 1939, there were hardly a couple of so-called programmer that existed. In 1970, the number of programmers grew tremendously to over a Million. The increasing number of programmers with every year passing clearly shows the increasing popularity of computer science in our society. Today, most programmers know more than a single programming language, they however, still lack the discipline which the programmers in 1940s and 1950s showcased. While today most programmers know the syntax of programming language but many programmers pay no attention to the design patterns or the SOLID principles (Didn't read the book 'Clean Architecture' by Robert Martin yet? That's what I was talking about...).
We know, what we have achieved so far is incredible but there’s lot more which has to be done. And without discipline among the members of the developer community, it is going to be very tough. We have reached Moon already, now it is time to reach for the stars