REFLECTIONS ON EARLY COMPUTERS

Chapter 4

EARLY COMPUTER ISSUES AND PROBLEMS


1. Hardware Reliability

There was an old joke that went around the early computer rooms. You purchased your IBM computer, and they put it in boxes and sent it to you. When you opened the boxes, you found in one of the boxes, a carton of IBM support technicians. You had to set up your support staff before you setup the computer.

This was pretty close to the truth. The old vacuum tube computers had rather poor mean-time-to-failure characteristics. IBM had a set of specifications for the environment needed for their computers that included space, power supply, air conditioning, and the office space for the IBM support staff.

The early vacuum tube computers had tremendous air conditioning requirements. So companies met these requirements. In a few years, when everything changed to solid state components, the computer room, on very hot days, was the most comfortable place in the building. It was over air conditioned at a time when air conditioning in staff offices was not common place. I am sorry I did not keep a list of the excuses given to spend a hot summer afternoon in the computer room.

2. Computational Reliability

There was much early skepticism as to whether these new machines were giving correct answers. One of the first machines, the Univac, had two arithmetic units. Each computation was performed twice and compared at the end of the process. Errors would be flagged. The Univac had a different type of computational logic than the IBM machines. It used a device called a Mercury Delay Line. I do not know if this mechanization was more error prone than that of the IBM machines.

When the IBM 700 series computer came out it did not have the same type of computational checking as the Univac, and this must have disturbed the early programmers. During the time my company was making the transition from the IBM 650 to the IBM 704, I was studying manuals about the machine and looking at assembler language code written for the machine. Actually the code had been written for the older but similar IBM 701. What surprised me about this code was that everything was computed twice using two separately written code blocks. The software compared the results of the two computations. Were these programmers trying to emulate the Univac?

3. Reliability of Data

One problem that I encountered, as a 1956 summer hire during graduate school, was the alignment of the punches on the punched card. What I mean by alignment is whether a correct punch is properly positioned on the card, or it is off-centered. The large data collection organization with which I was associated was having problems with off-centered punches. My task was to examine the distribution of off-centered punches, how they effected the data processing, and whether or not being off-centered horizontally was correlated with being off-centered vertically.

I had never before known this to be a problem with IBM equipment, but this organization used the Univac and products made by other manufacturers. I presume that IBM was aware that this was a problem, since the gauge that was use to measure the alignment of the punches was made by IBM.

I do not know if I helped my employer that summer, but the derivation of my mathematical model became my master's thesis.

4. Programming Procedures

In the mid-to-late 1950's, software development was in as primitive a state as hardware development. In the years before computers, we had performed our calculations with armies of clerks on calculators. The tendency was to develop algorithms to minimize the number of keystrokes needed to perform the calculations by increasing the number of logical decisions the clerk needed to make. Now the computer comes along. The computer cranked in numbers with ease, but had difficulty making the logical decisions needed for the algorithms that were executed by the humans who operated the calculators.

A major problem with computers was the limited word length, often shorter than what was available on a calculator. The computing algorithms for the computer needed to make maximum use of the shorter word length, at the expense of more arithmetic operations.

This problem came to an early realization when we started to invert matrices. Much time was lost in "debugging" correct programs that were trying to invert poorly conditioned matrices. Often the problem was not in the program logic, but in the underflow conditions that we were experiencing in the computer calculations.

One of my first memos on computing concerned the fact that we were not really programming the computer. Our programs represented a simulation of a clerk performing the calculations on a calculator.

Some of this simulation still goes on today. For example, if you balance your checkbook with a spreadsheet, and you follow the procedures described on your bank statement, you are performing this task in a manner analogous with the clerk simulation I have described. The proper way for a computer to do this task is to keep two balance columns in your spreadsheet, one for checkbook balance and one for bank balance. An entry is always added to or subtracted from the checkbook balance column, but is added to or subtracted from the bank balance column only when the "cleared" indication is set. Such a spreadsheet is simple to develop and use, but try to follow this procedure with a calculator, a sheet of paper and one hundred or more items in your checkbook.

5. Purchasing Software and Computer Time

The concept of software was unknown to the general public in the 1950's. Can you imagine how difficult it was in the corporate environment to purchase software? How do you explain to a purchasing agent, who had never seen a computer, what is this thing you are trying to purchase? As the story goes, one purchasing agent, who did not believe the engineer when he told the purchasing agent that you could not hold or see software, went snooping around the computer room looking for software. Finally, he found a stack of punch cards. He grabbed them and went back to the engineer, produced the cards and proudly proclaimed that he had found software. The engineer looked at him as said, "No, the cards are not the software, the holes are the software."

That is supposedly a true story, but I cannot verify it. However, I can verify the following situation that happened to me.

In 1960 and 1961, I was working with a government agency in the south-eastern part of Virginia, when I needed a computer that was bigger than the Royal-McBee available on site. So I had one of the purchasing agents contract, for computer time, with a different government agency in Washington, that had an IBM 704. The negotiations went well. All arrangements were made, and I planned to spend several weeks in Washington. When I got to Washington, I was told by head of the computer center, that after the arrangements had been made, the purchasing agent called the computer center to find out when they were going to ship the computer to Virginia.

6. Early Changes in Conventions

It is often said that it would be nice if everybody drove on the right hand side of the road. Fewer different car parts would be necessary, and any car model would be available for any country. Sweden, in 1969, was the last major country to make the change from left side driving to right side driving. The United Kingdom, Australia, New Zealand, Japan, and even the American Virgin Islands are all out of step with the rest of the world. Possibly, in the 1950's, with fewer cars on the road, all these countries could have changed their driving algorithms. But now is too late. Fortunately, the computer industry saw some early problems with some of the conventions that had been adopted and changed them before it was too late.

Originally, on spools of magnetic tape, file-protection-rings in tapes were file protection rings. If you put one on the tape it was protected, if you took it off it was not protected. Fortunately, this convention was reversed in the late 1950's or early 1960's. The file protection ring became a write enable ring.

In the days when programmers wrote their programs on coding forms and gave them to key punch operators to produce cards, it was extremely important to distinguish between the number 0, and the letter O; and the number 1 and the letter I. The original conventions were the following:

Put a slash through the Letter O

Put no slash through the Number 0.

Write the Letter I with short horizontal lines at the top and bottom

Write the Number 1 as a single vertical line.

With the early involvement of the military, it was evident the convention for O and 0 was bad since it was reversed from what had existed for many years in the military environment. Fortunately, this was reversed. However, it took time for some of the early programmers to break the habit of slashing the Letter O.

It is also fortunate that during this time period we only used upper case letters. However, if we had used both upper and lower case in the 1950's and 1960's we might not have the case-sensitivity problems we have today. Who has not ever been denied access to a computer because the "Caps Lock" was in the "on" position when the password was entered?

Early FORTRAN had some unusual function naming conventions. All functions ended with an "F". All integer functions started with an "X". The Sine function of "X" was written as SINF(X), the integer function of "X" was written as XINTF(X).

These conventions proved cumbersome but were part of both FORTRAN I and FORTRAN II. For years after this restriction was dropped, FORTRAN and other languages defined SIN( ) and SINF( ) as aliases. The restriction on integer functions beginning with "X" was confusing, since all integer variables in FORTRAN began with the letters I through N.

In FORTRAN II these conventions held only for Arithmetic Statement Functions (ASF), and not functions defined with a FUNCTION statement. Note that, in FORTRAN II, if you named a function MYFUN(X), it would return a floating point result if it was written as an ASF, but an integer result if it was written as a subprogram with a FUNCTION statement. This was because functions defined with FUNCTION statements followed the same naming rules as variables.

7. Character Sets

When input for computers was from cards, all character input to the computer came from the 48 valid combination of punches (including a null) in a card column. The first binary machines had 36 bit words that held six six-bit characters. The code was called BCD for Binary Coded Decimal. Hexadecimal arithmetic was unknown, and programmers who worked in binary-based arithmetic used octal instead of hexadecimal arithmetic. The only valid characters that could be represented in the IBM 704 was the 26 letters, 10 digits, a blank, and the 10 special characters that are in the string that I enclose in Quotes, below:

"+ - * / , . $ ( ) = "

This adds up to 47 characters. The minus sign had two representations to make up the 48 characters.

To complicate things, the BCD codes in the computer were not the same as the codes that were used on the spools of BCD magnetic tapes. Additionally, neither the tape codes nor the computer codes had a natural collating sequence. With the codes used in computer memory, the alphabetic and numeric card codes formed a natural collating sequence, except a blank collated between "R" and "S". With the codes used on magnetic tapes, the alphabet collated as if "S" were the first letter of the alphabet. These machines were not designed to simplify the task of sorting.

8. Epilog

We should feel lucky that the computer industry initially used 6-bit characters rather than the eventual standard of 8-bits. At least, when it became evident that we needed more than six bits per character, we were able to start over with a new character set and eliminate the mistakes made earlier. In defense of the early machines it should be noted that these machines were primarily manufactured to grind out mathematical computations. Working with alphabetic data was an afterthought. Working with graphics was non-existent.

Old habits don't die easily. New conventions required some alterations in mind patterning. At times it required some thought to remember whether to cross the "0" or the "O". It also took a while to get out of the habit of appending an "F" to the end of each function. However, we survived to the next generation of computers.


© 1998 Paul M. Cohen. All rights reserved.
Permission is granted to print one complete copy for personal use. Such copy must contain this notice, but need not contain either the colored background or the simulated tractor holes. Permission must be obtained from the author for any distribution of this material by a means other than HTML link.


Click to contact the author

Return to the Table of Contents