Richard Hamming: Chapter 3. Computer History - Iron
- Transfer
“The goal of this course is to prepare you for your technical future.”
Hi, Habr. Remember the awesome article “You and Your Work” (+219, 2265 bookmarked, 353k reads)? So Hamming (yes, yes, self-checking and self-correcting Hamming codes ) has a whole book written based on his lectures. Let’s translate it, because the man is talking business.
This book is not just about IT, it is a book about the thinking style of incredibly cool people. “This is not just a charge of positive thinking; it describes conditions that increase the chances of doing a great job. ”
We have already translated 15 (out of 30) chapters.
Thank you for the translation urticazokuthat responded to my call in the "previous chapter." Who wants to help with the translation - write in a personal email or e-mail [email protected] (By the way, we also launched the translation of another cool book - “The Dream Machine: The History of the Computer Revolution” ), and also translate Marvin Minsky.
Chapter 3. The history of computers - hardware
The history of computing may have begun with a primitive man using pebbles for addition. Marshak (Harvard) discovered that what was thought to be scratches on the bones of a caveman was in fact carefully drawn lines associated with the phases of the moon. The construction of Stonehenge on the Salisbury Plateau in England took place in three stages: 1900-1700, 1700-1500, and 1500-1400. BC, and was closely associated with astronomical observations, which indicates significant experience in astronomy. Work in archaeoastronomy showed that many primitive peoples had significant knowledge about astronomical events. Objects called observatories have been preserved in China, India, and Mexico, but we do not have a complete understanding of how they were used. On our western plains there are many traces of astronomical observatories of the Indians.
Xuan-pan (Chinese abacus) and abacus are instruments more closely related to computing; the advent of Arabic numerals from India meant a big step forward in the field of clean computing. The bureaucracy encountered great resistance to the adoption of Arabic numbers (not in their original Arabic form), even to the point of declaring them illegal, but over time (1400s) practical and economic advantages triumphed over the more awkward Roman (and earlier Greek) use of the letters of the alphabet as characters for numbers.

The next big step is the invention of the logarithm by Neper (1550-1617). A slide rule appeared, with slide scales where the addition of two logarithms means the multiplication of two numbers. This analog device, the slide rule, was the next significant step forward, but in the field of analog devices, not digital. I once used a very complex slide rule in the form of a cylinder 6-8 inches in diameter and 2 feet long with many scales on the inner and outer cylinders, equipped with a magnifying glass for reading divisions.
Rulers of the 30s and 40s were a standard engineer tool, usually worn in a leather case attached to a belt as a symbol of their group on campus. A standard 10-inch slide rule included a slide rule, a square, cubes, and trigonometric scale. They are no longer produced!
We continue the story about analog devices. The next important step was the emergence of a differential analyzer, which with mechanical integrators in analog form. The first successful models were made around the year 30 by Vannevar Bush of the Massachusetts Institute of Technology. RDA No. 2, still analog and mechanical, had many electronic connections. I used this for some time (1947-1948) to calculate the launch paths of a Nike guided missile in the early stages of design.

During World War II, electronic analog computers began to be used by the military. They used capacitors as integrators instead of wheels and balls (although they could only integrate with respect to time). This was a significant step forward, and I used this device in Bell's telephone laboratory for many years. It was constructed from parts of old M9 artillery fire control systems. We used parts of the M9 to build a second computer that could be used independently or together with the first to increase computing power.
Returning to digital computing, Napier also developed the Napier Sticks, which were most often ivory rods with numbers that made it easy to multiply; they are digital and should not be confused with an analog slide rule.

From Nepher’s wands, modern desktop calculators may have evolved. On December 20, 1623, Schickert wrote to Kepler that a fire in his laboratory had burned down the machine he was making for Kepler. An examination of his notes and sketches made it possible to establish that a machine would carry out four basic operations of arithmetic - if you were condescending to what multiplication and division are on such a machine. Pascal (1623 - 1662), who was born in the same year, is called the inventor of the desktop computer, but his computer could only add and subtract - only these operations were necessary for his father to calculate taxes. Leibniz also worked on computers, and added multiplication and division, but his machines were not reliable.
Babbage (1791-1871) is the next remarkable name in the digital field and is often considered the father of modern computing. Its first development is a difference engine based on the simple idea that a polynomial can be evaluated on sequential, uniformly distributed values using only a sequence of additions and subtractions, and since locally most functions can be represented by a suitable polynomial, this can be considered a “computer table "(Babbage insisted that printing be done by a machine so as to prevent any human error). The British government funded it, but the project was never completed. The Norwegians, father and son Schoitz assembled several working devices and Babbage congratulated them on the success. One device was sold to the New York Observatory,
As often happened in the field of computer technology, Babbage had not finished work with the difference engine before he conceived a much more powerful analytical engine, the design of which is close to von Neumann's. He was unable to get a working device; A group of scientists in England (1992) assembled the device according to his drawings and it worked successfully as intended.
The next major practical step was the Komptometer, which was just an adder, but thanks to repeated addition and shift, which is equivalent to multiplication, the device was very widely used for many, many years. After it came a sequence of more modern desktop calculators, Millionaire, then Marchant, Friden and Monroe. Power and control on them was carried out manually, but gradually part of the control was built in, mainly by mechanical levers. Since 1937, the devices have been gradually equipped with electric motors to perform the most complex calculations. Until 1944, at least one of them had a built-in operation to calculate the square root (nevertheless with complexly organized mechanical levers). Such manual machines were the basis for groups, managing them to provide computing power. For example, when I came to Bell's telephone laboratory in 1946, there were four such groups in the laboratory, usually six to ten girls in the group; a small group in the mathematics department, a large group in the network department, one in switching and one in quality control.
Calculations using punch cards appeared because one far-sighted person found that the Federal Census, which is required by law every 10 years, took so much time that the last census (1890) would not have been completed before the next one if they didn’t apply to machine methods. Hollerith took over the work and built the first punch cards, and with further successful censuses, he built more powerful machines to keep pace with both the increasing population and the increasing number of questions asked during the census. In 1928, IBM began using cards with rectangular holes, so electric brushes could easily detect the presence or absence of a hole on the card at that location. Powers, who left the census group, used punched cards with round holes,
Around 1935, IBM built a 601 mechanical rotary hammer, which multiplied, and could make two additions to the result at the same time. He became one of the main components of computer technology. 1,500 of them were leased, and they on average multiplied in 2 or 3 seconds. These devices, along with some special machines with triple product and division, were used in Los Alamos to calculate the designs of the first atomic bombs.
In the mechanical, I mean relay, area, George Stibitz built (1939) a computer that works with complex numbers and set it up in Dartmouth (1940), while the mainframe was in New York, that is, it was one of the first remote terminals, and since he usually had three input stations in different places in the laboratories, it was, if you will, a “shared computer."

Konrad Zuse in Germany and Howard Aitken at Harvard, each of them, like Stibitz, released a series of relay computers of increased complexity. In Model 5, Stybits had two computers on the same machine, and it was possible to separate the task when necessary, as in a multiprocessor system. Of the three people, Zuse was probably the best, taking into account both the difficulties he had to face and his later contribution to the development of computer software.
It is said that the era of electronic computers began with ENIAC, built for the U.S. Army in 1946. It had about 18,000 vacuum tubes, was huge, and, as it was originally designed, it was connected in the same way as the IBM connection cards, but its connections to solve a specific problem occupied the entire machine room! As long as it was used, as originally supposed, to calculate ballistic trajectories, this defect was not serious. Ultimately, like the later IBM CPC, it was carefully redesigned by users to act as if it had been programmed from instructions (numbers on ballistic tables) and not from wiring connections.
Mauchly and Eckert, who built ENIAC, found that, like Babbage, before the completion of their first car, they already imagined a larger, already programmed EDVAC machine. Von Neumann, as a consultant to the project, wrote a report, and as a result, he is often credited with internal programming, although, as far as I know, he never argued or denied this. In the summer of 1946, Mauchly and Eckert opened for everyone a course on how to design and create electronic computers, and as a result, many of the participants went to build their own; Wilkes from Cambridge, England, was the first to benefit from this - EDSAC.
At first, each machine was one of a kind, although many of them were copied (but often completed earlier) from the Institute of Advanced Studies under the direction of von Neumann, because the assembly of this machine was apparently suspended. As a result, many of the so-called copies, such as Maniac-I (1952) (which was named so as to get rid of the idiotic name of machines), assembled under the direction of NC Metropolis, were completed before the Institute of Advanced Research machines. Maniac-I and Maniac-II (1955) were made at Los Alamos, and Maniac-III (1959) was assembled at the University of Chicago. The federal government, especially the military, supported the development of most of the early machines, and helped a lot at the start of the computer revolution.
The first commercial production of electronic computers was again led by Mauchly and Eckert, and since the company they created was merged with another, their machines were called UNIVACS. Especially note one for the Census Bureau. IBM was a little late with 18 (20 if you consider secret cryptographic users) IBM 701. I remember well our group, after a session on IBM 701 at a meeting where they talked about the proposed 18 machines, everyone thought that this would saturate the market for years to come ! Our mistake was simply that we only thought about the things that we did then, and did not think about the directions of a completely new use of machines. The best experts of that time were absolutely wrong! And a lot! And not the last time!
Let's compare:

The changes in speed and the corresponding amount of memory that I have been dealing with should give you an idea of what you will have to endure in your career. Even for machines such as von Neumann, it is likely that the speed can increase 100 times to reach maximum.
Since such numbers actually exceed most human dimensions, I need to introduce a human dimension of the described speeds. First entry (parentheses contain a standard character)

Now to the human dimensions. In one day, 60 × 60 × 24 = 86400 seconds. In one year - about 3.15 × 10 ^ 7 seconds, and in 100 years, probably more than the life expectancy - about 3.15 × 10 ^ 9 seconds. Thus, in 3 seconds, a machine performing 10 ^ 9 floating point operations per second (flops) will do more operations than there are seconds in your whole life, and almost certainly without errors!
Another example of human dimensions is the speed of light in a vacuum - 3x10 ^ 10 cm / sec. (on the wire it is about 7/10 of this value). Thus, in nanoseconds, light travels 30 cm, about one foot. At a picosecond, the distance, of course, is about 1/100 of an inch. These are the distances over which the signal can propagate (at best) in the circuit. Thus, at some frequencies that we now use, the parts must be very close to each other - close in human size, otherwise most of the potential speed will be lost during the transition between the parts. Also, we can no longer use mixed circuit analysis.
What about natural lengths instead of human ones? Atoms are of different sizes, usually from 1 to 3 angstroms (an angstrom is 10 ^ -8 cm), and in a crystal they are located at a distance of about 10 angstroms, as a rule, although there are exceptions. For 1 femtosecond light passes about 300 atoms. Therefore, the details on a very fast computer should be small and be close to each other!
If you think of a transistor with impurities, and impurities work for about 1 million, then you probably cannot imagine a transistor with 1 atom of impurities, but if you lower the temperature to reduce background noise, imagine 1000 impurities, which makes a solid-state device at least about 1000 atoms in size. With interconnects that work at least ten times the distance relative to the size of the device, you realize that the distance less than 100,000 atoms between some interconnected devices is actually large (3 picoseconds).
Heat dissipation also occurs. While we were talking about thermodynamically reversible computers, so far it has only been talk and published articles, and heat still matters. The more devices per unit area and the more often their condition changes, the more heat is released in a small area, which must be disposed of before everything melts. To compensate, we lower the voltage, reaching 2 or 3 volts. The possibility of creating the basis of diamond microcircuits is currently being considered, since diamond is a very good heat conductor, much better than copper. There is a reasonable possibility for a similar, possibly less expensive, than diamond diamond crystalline structure with very good thermal conductivity properties.
To speed up the work of computers, we switched to 2, 4 and even more arithmetic units - on the same computer, and also developed pipelines and cache memory. All these are small steps to highly parallel computers.
Thus, you see the diagram on the board for a single-processor machine - we are approaching saturation. Hence the fascination with high-parallel machines. Unfortunately, for them there is not yet a single common structure, but quite a lot of competing designs that usually require different strategies to use their potential speeds and have different advantages and disadvantages. It is likely that there will be no single design for standard parallel computer architecture, so there will be problems and the dispersion of efforts to implement various promising areas.
From the diagram compiled long ago in Los Alamos (LANL) using the data of the fastest computer at that time on the market, we found the equation for the number of operations per second:

and it describes the data quite well. Here time begins in 1943. In 1987, the extrapolated value predicted (in about 20 years!) Was about 3 \ times10 ^ 8 and was the goal. The limiting asymptote is 3.576 \ times10 ^ 9 for a von Neumann-type computer with one processor.
Here, in the history of computer growth, you see the implementation of a growth curve of type “S”; very slow start, fast rise, a long stretch of almost linear increase in speed, and then a collision with inevitable saturation.
So back to human size. When the first digital computers appeared in Bell's Lab, I started by renting them for many hours so often that the head of the department of mathematics decided that it would be cheaper to hire me as an employee - I tried not to argue with him, because I considered the arguments useless and only creating more resistance on his part to digital computers. As soon as the boss says “No!”, It is very difficult for him to make another decision, so do not let him say “No!” To your proposal. I found that in my early years I doubled the number of calculations per year every 15 months. A few years later I reduced the doubling time of the calculations to about 18 months. The department head continued to repeat that I could not continue this forever, and my polite answer was usually: “You are right, of course, but you just observe, how I double the number of calculations every 18-20 months! ” The machines allowed me and my successors to double the number of calculations performed over the years. All these years, we have lived on the almost rectilinear part of the “S” curve.
Nevertheless, let me honestly treat the head of the Department, it was his comments that made me realize that it was not the number of operations that mattered, but the number of micro-Nobel prizes that I calculated. So the motto of the book I published in 1961 is:
The purpose of computing is understanding, not numbers.
My good friend reviewed it:
The purpose of the calculations is not yet clear.

Figure 3.1
Now we need to look at some details about how computers were designed over the years. The smallest parts that we will look at are two state devices for storing bits of information and for a transistor gate that pass or block a signal. Both are binary devices, and in the current state of knowledge, they provide the simplest and fastest calculation methods that we know.
From such parts we build combinations that allow you to store large arrays of bits; these arrays are often called numerical registers. A logic gate is just a combination of storage units, including transistor gates. We build an adder from such devices, as well as every large unit of a computer.
Moving to even larger units, we have a machine consisting of: (1) a storage device, (2) a control device, (3) an arithmetic logic device. There is one register in the control device, which we will call the Current Address Register (CAR). It stores the address at which the following instruction can be found, Figure 3.1.
Computer Cycle:
1. Obtain the following instruction address from CAR.
2. Go to this address in the repository and get this instruction.
3. Decode and follow these instructions.
4. Add 1 to the CAR address and start again.
We see that the car does not know where it was and where it will be; at best, she only has a myopic view of the mere repetition of the same cycle endlessly. Below this level, the transistor gate and double-sided storage devices do not know any values - they simply react to what they should do. They also do not have global knowledge about what is happening, nor does it make any sense to add any bit, whether it is storage or operation of a transistor.
There are instructions that, depending on some state of the machine, put the address of the instruction in CAR (and 1 is not added in such cases), and then the machine, starting its cycle, simply finds an address that is not the address following the address of the previous instruction , but finds the place stored in CAR.
I want you to understand: the machine processes the bits of information in accordance with the other bits, and as far as the machine is concerned, there is no sense what is happening - it is we who attach importance to the bits. A machine is a "machine" in the classical sense; she does what she does, and nothing else (until she makes a mistake). There are, of course, real-time interrupts and other ways in which new bits get into the machine, but for the machine they are just bits.
But before we leave this topic, remember the words of Democritus (460-336?): "Everything is atoms and emptiness." Thus, he expressed a modern view of the world of many physicists that everything, including you and me, consists of molecules, and we exist in the energy field (?). Nothing more! Are we cars? Many do not want to agree with this, but feel that they are something more than just a multitude of molecules that senselessly collide with each other - as we imagine a computer. We will cover this topic in chapters 6-8, called Artificial Intelligence (AI).
There are certain benefits to representing a computer as a machine, a set of storage devices, and bit processing units. For example, when debugging a program (searching for errors). What you need to consider when debugging is that the machine obeys instructions - and nothing more, no "free will" or self-awareness like people have.
How are we really different from cars? We all would like to think we're different, but really? This is a sensitive topic for people, and emotions and religious beliefs prevail as arguments. We will return to this issue in parts 6-8 about AI, when we will have more knowledge to discuss this topic.
To be continued ...
Who wants to help with the translation - write in a personal email or e-mail [email protected]
By the way, we also launched the translation of another cool book - “The Dream Machine: The History of the Computer Revolution” )
- Intro to The Art of Doing Science and Engineering: Learning to Learn (March 28, 1995) (in work) Translation: Chapter 1
- “Foundations of the Digital (Discrete) Revolution” (March 30, 1995) Chapter 2. Fundamentals of the Digital (Discrete) Revolution
- History of Computers - Hardware (March 31, 1995) (in work)
- “History of Computers - Software” (April 4, 1995) Chapter 4. History of Computers - Software
- History of Computers - Applications (April 6, 1995) (in work)
- "Artificial Intelligence - Part I" (April 7, 1995) (in work)
- "Artificial Intelligence - Part II" (April 11, 1995) (in work)
- “Artificial Intelligence III” (April 13, 1995) Chapter 8. Artificial Intelligence-III
- “N-Dimensional Space” (April 14, 1995) Chapter 9. N-Dimensional Space
- “Coding Theory - The Representation of Information, Part I” (April 18, 1995) (in work)
- "Coding Theory - The Representation of Information, Part II" (April 20, 1995)
- “Error-Correcting Codes” (April 21, 1995) (in)
- Information Theory (April 25, 1995) (in work, Alexey Gorgurov)
- Digital Filters, Part I (April 27, 1995) is done
- Digital Filters, Part II (April 28, 1995) in work
- Digital Filters, Part III (May 2, 1995)
- Digital Filters, Part IV (May 4, 1995)
- “Simulation, Part I” (May 5, 1995) (in work)
- "Simulation, Part II" (May 9, 1995) is ready
- "Simulation, Part III" (May 11, 1995)
- Fiber Optics (May 12, 1995) at work
- Computer Aided Instruction (May 16, 1995) (in work)
- Mathematics (May 18, 1995) Chapter 23. Mathematics
- Quantum Mechanics (May 19, 1995) Chapter 24. Quantum Mechanics
- Creativity (May 23, 1995). Translation: Chapter 25. Creativity
- “Experts” (May 25, 1995) Chapter 26. Experts
- “Unreliable Data” (May 26, 1995) (in work)
- Systems Engineering (May 30, 1995) Chapter 28. Systems Engineering
- “You Get What You Measure” (June 1, 1995) Chapter 29. You Get What You Measure
- “How Do We Know What We Know” (June 2, 1995) in work
- Hamming, “You and Your Research” (June 6, 1995). Translation: You and Your Work
Who wants to help with the translation - write in a personal email or mail [email protected]