Sometimes the confluence of several events, no one of which is significant, can lead to profound consequences. This happened to me in college and graduate school, where the combination of seven events led to my role in co-inventing UNIX.
As I mentioned in my previous post, How Good Luck Led to My Software Career, I entered Harvard from eleventh grade. Despite this unusual start, my years at Harvard were not particularly noteworthy, except for two events that helped shape my career.
At Harvard there were no computer related courses open to undergraduates, and there were no courses on writing software. Fortunately, in my Junior year one of the professors decided to offer a noncredit course in programming. We programmed punched card accounting machines, then a very strange desk-shaped computer that was programmed by putting metal pins into holes on the desktop, and, finally, Harvard’s only modern machine, their Univac I computer.
Each student wrote a simple program for the Univac. Our class was allotted a half hour on the machine, but it was down during our half hour, and was so tightly scheduled that we never got to run our programs. Fortunately, the professor hand-simulated our submissions. My program had a bug. My first computer program, and my first bug. I was hooked. From then on my professional focus was on software.
The closest Harvard had to a computer science course was a two-term graduate-level course in switching circuit theory, which is the theory behind the design of computer logic. I audited the first term and convinced the professor (with some difficulty) to let me enroll for credit in the second term. The course was easy for me since I had already been doing logic design for several years. This grounding in the theory of switching systems led to my choice of Ph.D thesis several years later.
Nothing else of note for my career happened until graduate school. At M.I.T. I discovered the Artificial Intelligence group, led by the legendary Marvin Minsky. He agreed to supervise my Master’s thesis, The Description of Overlapping Figures. My thesis software was written (in a language called LISP) on punched cards which I submitted to the IBM mainframe. Twenty-four to 48 hours later I would get the results, which often were a failed run because of a simple error. This process was very frustrating.
CTSS, the Compatible Time Sharing System invented at M.I.T., allowed users to interact directly with the computer using a keyboard (as is commonplace today) instead of submitting batch jobs on punched cards. CTSS was available while I was writing my thesis, but LISP was not on it, so I could not use it. I realized that had I been able to use CTSS much of my frustration in writing my thesis would have been alleviated.
The summer after writing my M.S. thesis I got a job writing software for Lincoln Labs’ TX-2 computer, a fascinating machine which I will describe in a later post. The TX-2 was very modern in one way: to use it you sat at a keyboard and CRT display and interacted directly with the computer. This was worlds away from the punched cards of my M.S. thesis. The following summer I got a job at Honeywell where I was back in the world of submitting jobs to the computer on punched cards.
Prof. Minsky wanted me to continue my work in artificial intelligence, but because of my painful experience writing software on punched cards, I decided that my Ph.D. thesis would not involve a computer at all, just me and a typewriter. Using my background in logic design (see my post How good luck led to my software career) and in switching circuit theory (the Harvard course), my Ph.D. thesis was in the area of computer logic design (Two-dimensional Iterative Logic).
My choice of thesis topic had an unexpected and fortuitous consequence. When I applied for a job at Bell Labs, they wanted me to work in switching theory (my thesis subject), but I insisted I wanted a job in software. As a result I ended up in a very boring job. The way I coped with this shaped my career and led to my long involvement with UNIX. I will talk about this in my next blog post.
By itself no one of the seven experiences I describe in this post was particularly significant. Taken together, though, I feel sure that they led directly to my lifelong interest in systems such as UNIX that allow programs to be written interactively with the computer. Four out of six of my first accomplishments at Bell Labs were about this: making it possible to write software directly on the computer (i.e. avoid punched cards).
– Rudd Canaday (ruddcanaday.com)