RSS Feed
Download our iPhone app
Browse DevX
Sign up for e-mail newsletters from DevX


Adjust or Go Extinct: 50 Years of Conventional Wisdom and Eye-raising Anecdotes from Programming Veterans

Today programming is such a vital and entrenched field that it's hard to imagine a time when companies like IBM sent its programmers packing, but it happened—and plenty more stories like it. A programming veteran takes a walk down memory lane, and DevX authors share their veteran-era anecdotes as well in this special report.

hen Gerald Weinberg began working in the information technology industry, he wasn't hired as a software developer or a programmer—not because he wasn't qualified for these positions, but because they didn't exist yet. His first job title was "Computer" in the physics department of his college 50 years ago, an age when Weinberg explained, "the title software developer did not exist; the word software did not exist."

When he entered the workforce in 1956, IBM bestowed its new employee the more formal-sounding title of applied science representative. In the decade to follow, Weinberg witnessed the creations of the disk drive, the operating system, and the profession that today is known as programmer. During his keynote address titled Fifty Years of Software Development—Lessons from the Ancients at the SD West 2005 conference last week in Santa Clara, Calif., he recounted all the technology transitions he endured in those years. The experience taught him a valuable lesson that he stressed to the packed auditorium: "If you don't keep up, you're gone."

When Hardware and Software Weren't Separate
Soon after starting with IBM in San Francisco, Weinberg began work on IBM's secret project: a machine called RAMAC, the first disk drive in existence. A closet-sized contraption that "was about as tall as a person," RAMAC used a stack of 50 disks, each 24 inches wide and coated on both sides. An automated arm retrieved the requested disk. "When it moved," Weinberg recalled, "the whole drive would shake."

Gerald Weinberg
The storage capacity of all this hardware? A whole 4.4MB. The cost? Only $35,000—per year. IBM didn't sell the RAMAC, Weinberg explained, they only rented them. The business machines IBM sold then were the likes of time clocks and butcher scales. "You had to be very specially privileged to even get near a computer."

The few companies that purchased computers in those days had their machines built by hand in IBM factories. The larger machines took months to complete as workers installed all the vacuum tubes and relays, and IBM offered executives from the purchasing companies tours of the facilities, where they could see their computers being assembled.

Because half the computer errors that occurred then were a result of faulty hardware, Weinberg had to work very closely with the hardware engineers during production to isolate the errors. "If you were a programmer, you had to know how to read the machine diagrams," he said.

There were times when "you'd run a program and, after a couple of days of debugging, you'd find out someone borrowed the tube," he recalled. "That was a very common thing."

Weinberg learned a lasting principle from those experiences: be sure that you never have more than one bug at a time. When a program has more than one, it starts getting interactions. "That's one of the general principles in computing and testing that hasn't changed in 50 years," he said, before griping, "People don't seem to know that. They seem to think 'we'll throw a lot of crap in there and debug it.'"

Reading from the original product description, Weinberg cited IBM's boast that the 607 was "capable of processing 14,000 computing operations per minute."
Programming: The Early Years
The first machine Weinberg programmed on was the IBM 607, which was called the electronic calculating punch. It read data from a card and punched results in subsequent cards according to the programmer's instructions at a rate of 100 cards a minute. It weighed just over two tons and gave off 26,000 BTUs. But it had memory—a significant evolutionary step for IBM computers. The first basic memory size was 14 decimal digits. Reading from the original product description, Weinberg cited IBM's boast that the 607 was "capable of processing 14,000 computing operations per minute."

Programs were stored in file cabinets as bound punch cards that were color-coded and labeled with markers. Weinberg joked that you could tell the real professional programmer's card decks because they were wrapped with two rubber bands. "Card decks were our configuration management system."

"We had networks in those days," declared Weinberg, as he revealed a slide of a 50s-era airplane. The IBM system of program processing was to fly programs—big boxes of card desks—to New York (from Los Angeles, where he was then based), where they would be processed on the high-end IBM 704 and flown back. IBM had no 704s on the West coast at that time.

A San Francisco oil company, which couldn't accept the coast-to-coast turnaround time, requested an IBM machine of its own (at a cost of roughly $20 million) to run an application that blended oil from its distillation towers everyday. According to Weinberg, performing the blending optimally based on that day's oil prices was worth about $1 million a day to the company. Weinberg wrote the program for them, because—like nearly all large companies at that time—it didn't have a programming staff. "When you bought a machine from IBM," he explained, "you got me with it—free."

Buying a machine wasn't a simple proposition, however. "You had to justify to IBM that you were a worthy user," said Weinberg. "Sure enough, they turned down this order because the [blending] calculation only took less than an hour a day. I found a problem with the program, and by the time I fixed it, it was taking eight hours a day."

Author's Note: For more anecdotes from programming veterans about the early days of development, see our sidebar, "Looking Back on 'Old School' Programming."

Close Icon
Thanks for your registration, follow us on our social networks to keep up-to-date