The Tortuous Path of Early Programming. In the perpetual darkness more than two miles below the surface of the North Atlantic, a submersible sled slowly traced the alpine contours of the ocean bottom in the summer of 1985. Named the Argo after the ship in which the legendary Greek Hero Jason sought the Golden Fleece, the 16-foot-long craft resembled a section of scaffolding flung on its side and stuffed with equipment, Powerful lights, sonar, Video cameras. Far above, arrayed in front of a video screen in the control room of the U.S. Navy research vessel Knorr, Members of a joint French-American scientific expedition intently watched the images transmitted by the submersible as it was towed above a desolate landscape of canyons and mud slides.
After 16 days of patient search, A scattering of metallic debris appeared on the screen, followed by the unmistakable outline of a ship’s boiler. A jubilant cry arose from the scientists. The ocean liner Titanic sunk 73 years earlier with more than 1,500 of its 2,200 passengers on board had finally been found. The quest for the remains of the Titanic in the crushing depths of the sea was a remarkable application of computer technology, as exotic in its means as in its venue.
Not least of the keys to the successful outcome was the agility of modern computer programming. Argos’s ensemble of sonar, lights and cameras was orchestrated by an array of computers that each programmed in a different computer language. The computer on the unmanned Argo itself was programmed in FORTH, a concise but versatile language originally designed to regulate movement of telescopes and also used to control devices and processes ranging from heart monitors to special-effects video cameras. The computer on the Knorr was programmed in C, a powerful but rather cryptic language capable of precisely specifying computer operations.
The telemetry System at either end of the finger thick Co-ax cable connecting the vessels, which in effect enabled their computers to talk to each other, was programmed in a third, rudimentary tongue known as assembly language. Programming languages are the carefully and Ingeniously conceived sequences of words, letters, numerals and abbreviated mnemonics used by people to communicate with their computers. Without them, computers and their allied equipment would be useless hardware. Its own grammar and syntax regulate each language. A programming language that approximates human language and can generate more than one instruction with a single statement is deemed to be high-level. But computer languages tend to be much more sober and precise than human languages.
They do not indulge in multiple meanings, inflections or twists of iron. Like computers themselves, computer languages have no sense of humour. Today there are several hundred such languages, considerably more than a thousand if their variations, called Dialects, are counted. They enable their users to achieve a multitude of purposes, from solving complex mathematical problems and manipulating (or crunching) business statistics to creating musical scores and computer graphics. No existing Language is perfect for every situation. One or more of three factors usually determines the choice among them: The language is convenient to the programmer; it is useable on the available computer; it is well suited to the problem at hand.
The multiple tongues employed on the Titanic expedition are a case in point. For the computers aboard the surface ship Knorr, C was the preferred language because it provided more direct control of the computerised hardware. FORTH was the only high-level language that could be used on the submersible Argo’s computer. And the precise timing required timing required of the signals passed by cable between the two vessels was best accomplished by rigid assembly language. As varied languages have become the all build on a common base.
At their most fundamental level, Computers respond to only a single language, The high and low of electric voltages representing the ones and zeros of binary code. Depending on how these signals are fed into a computer’s memory. Another might be a piece of data yet to be processed. Yet another collection of binary digits, or bits, might command the machine to perform a certain action, such as adding to numbers. The circuitry of each type of computer is designed to respond to a specific and finite set of these binary encoded machines, which may be combined and recombined to enable the machine to perform a vast range of tasks.
Though straightforward enough this so-called machine is a forbidding, alien language to human beings. A computer program of any size, in its machine-code form, consists of thousands or even millions of ones and zeros, strung together like beads on a seemingly interminable string. A mistake in even one of these digits can make the difference between a program’s success and failure. Less than half a century ago, machine code was the only means of communicating with computers. Since then, generations of language designers have harnessed the power of the computer to make it serve as its own translator.
Now, when a programmer uses the command PRINT Hello or the statement LET A = B * (C – D) in a program, a translating program is called into action, converting those commands into the ones and zeros that the machine can understand. Paper Tape and Plug-Boards The methods used to program the world’s first general-purpose computers were as cumbersome and primitive as the machines they served. The historic Mark 1, assembled at Harvard University during World War 2, was a five-ton conglomeration of relays, shafts, gears and dials, 51 feet long. It received its instructions for solving problems from the spools of punched paper tape that were prepared and fed into a computer by small corps if technicians. A more advanced machine, ENIAC (for Electronic Numerical Integrator and Computer), was completed in 1945 at the University of Pennsylvania’s Moore School of Electrical Engineering. Unlike the Mark 1, which was electromechanical, ENIAC was fully electronic.
But it was still devilishly difficult to program. Its primary developers, Physicist John W. Mauchly and engineer J. Presper Eckert, had responded to the urgencies of wartime by concentrating on ENIAC’s hardware. Programming took a back seat. ENIAC was not even equipped to receive instructions on paper tape.
To prepare it for operation, ma team of technicians had to set thousands of switches by hand and insert hundreds of cables into plug boards until the front of the computer resembled a bowl of spaghetti. Not surprisingly, ENIAC’s users tried to squeeze the last drop of information out of any given configuration before they undertook to change it. These early experiences made it all too plain that a better means of communicating with the machine with the machine was needed if computers were to approach their potential. And even as ENIAC hummed through its first electronic calculations, some forward-looking work on a higher level programming was being done elsewhere.
In at least one case, however, many years would pass before the results came to light. The Plan Calculus Konrad Zuse’s world was crashing down around him early in 1945 as the allied military noose tightened on Berlin, his home city. The young German engineer had been working since before the war on a series of relatively small, general-purpose computers, using the living room of his parents apartment as his laboratory. Zuse’s efforts were a notable example of parallel yet independent developments in science; he had no idea of the similar progress being made in other nations, and his own government had shown little interest in his computer work. Shortly before the fall of Berlin, Zuse loaded his only surviving computer, dubbed the Z4, onto a wagon and fled with a convoy of other refugees to a small town in the Bavarian Alps. During the grim years immediately after the war, Zuse found himself without either funds or facilities to work on computer hardware.
Turning his energies to theory instead, he sought a better way to program a computer, not specifically the Z4, but any similar machine. What was needed, he decided, was a system of symbolic and numeric notations based on a logical sequence, in affect a calculus of problem-solving steps. Working alone, Zuse devised a programming system that he named Plan Calculus, or, in Germen, Plankakl. He wrote a manuscript explaining his creation and applying it to a variety of problems, including sorting numbers and doing arithmetic by means of binary notation (other computers of the day operated in decimal).
He also taught himself to play chess and then produced 49 pages of program fragments in Plankakl that would allow a computer to assess a player’s position. It was interesting for me to test the efficiency and general scope of the Plankakl, Zuse later wrote, by applying it to chess problems. Zuse never expected to see his language actually run on a computer. The Plankakl he wrote, arose purely as a piece of desk work, without regard to whether or not machines suitable for Plankakl programs would be available in the foreseeable future. Although he briefly visited the United States in the late 1940s, only small portions of his manuscript were published, much less implemented, in the decade after the war; many of his ideas for a systematic, logical language remained unknown to an entire generation of computer linguists. Not until 1972 did Zuses’s experts to wonder what effect Plankakl would have had if it had been disseminated earlier.
it shows us how different things might have been, one critic of subsequent languages has noted, how what we have today is not necessarily the best of all possible worlds. While Zuse was labouring in isolation, a collegial effort to develop a programming language for real machine was under way at academic centres in Great Britain and the United States, where the earliest computers were beginning to be used. But progress was slow. Not only did each computer have its own machine code and programming method, but also developing the machines themselves required the lion’s share of the scientists’ time and talent. During the years immediately after the war, most programmers continued to work on machine code, the binary digits that correspond to a computer’ circuits.
To make the job slightly easier, some of them began using shorthand number systems to denote combinations of bits, a method akin to a stenographer’s using symbols to represent words when taking dictation. The first of these systems was Base eight, also known as octal. Just as there are only two digits, 0 and 1, in the binary system, there are eight in octal, the numerals 0 through to 7. Each of these octal numbers is used to represent one of eight possible combinations of three bits (000, 001, 010, 011, 100, 101, 110 and 111).
A more ambitious numbering system that followed is base 16, or Hexadecimal (hex, to us programmers), Gathered into groups of four. The 16 possible combinations of four bits wer …