Kenneth Lane Thompson

· rtnF


Ken Thompson is the original Unix hacker. He has spent a career working on whatever he finds interesting, which has included analog computing, systems programming, regular expressions and computer chess. Hired as a researcher at Bell Labs to work on the MULTICS project, Thompson went on, with Dennis Ritchie, to invent UNIX. He also invented the B programming language, the precursor to Dennis Ritchie's C. Later he got interested in computer chess, building Belle, the first special -purpose chess computer and the strongest computerized chess player of its time. When working on Bell Lab's Plan 9 operating system, he devised the now ubiquitous UTF-8 Unicode encoding.

Early Life #

I was always fascinated with logic. Even in seventh grade grade school I'd work on arithmetic problems in binary, just because I was fascinated. Then around senior year in high school, I was into electronics a lot, building radios and amplifiers and oscillators and theremins. And I got hooked on analog computing. Electronics was my passion during all that time.

Berkeley #

I went into double E (electrical engineering) at Berkeley, and there I saw real digital computers for the first time in my junior year. They had a G15, a drum computer. They had one lab class on it then it was open. Anybody could play with it, but no one did, so it was free. And I used it essentially exclusively. I wrote programs on it, on my own, to scale an analog computer, since analog computing is almost all scaling. Scaling in the sense of time scaling and amplitude scaling. Basically what you do is you build it to do a function. You put some input in and then you get a function of that input out, and you concatenate these things with feedback. And at every point in this process you can't go too high or you'll clip.

The programs on the digital computers were written in assembly mostly. There was an interpreted language that turned out to be too slow. That's why I was forced to go to assembly and actually learn what the computer was. I'm not using punch cards. It was a Flexowriter, which is like a Teletype and paper tape. And you'd store it on paper tape and talk to it on the Flexowriter.

The G15 had an interpreter called Intercom 501. There was a graduate student that I was friends with that wrote an interpreter for Intercom on the big IBM machine, the big campuswide computing facility. I got a listing of that, I read it and just dissected it. It was written in NELIAC. It was just a marvelously written program. And I learned programming, NELIAC, Intercom, and how to interpret something, everything, from that. I just sat and I read it for probably the entire vacation. Then I asked him questions about it. After that, I knew how to program, then I got jobs programming. I was a research assistant, a grunt for a graduate student to get programming done for his thesis.

Graduate School #

Back then, there was no computer science degree. All over the US at the time, computer science was trying to come out. It was coming out in two ways. It was coming out theoretically through math, or practically through double E. I spent one year in graduate school there (Berkeley) not because I had any ambitions for anything. I just because I had nothing else to do and I was having a good time. I didn't even apply for graduate school. One of the professors essentially applied to me and told me I was in graduate school.

My graduate year were just immense fun. I didn't do anything that I didn't want to do. There were no requirements. To graduate I took a summer course in American history or something, some requirement to get a degree.

The basic theory of computing was just coming out then. Shell sort came out and no one could figure out why it was faster than n-squred sort. It's pretty easy to see it sorts, but nobody knows why it's fast. The first long computational program I wrote was solving the pentaminos problem. It's a tile game. I ran it on an IBM 1620 that was in the physics department. It was basically brute-force search.

Bell Labs #

One of my professors, who is actually a very good friend, sicced the Bell Labs recruiter on me. But I wasn't looking for a job. In fact, I had absolutely no ambitions, nothing. He made me appointments to see him in his little recruiting booth. I either slept through them or told him I wasn't interested, but he kept after me. At some point, he called me and said that he wanted to come over and see me. So he came over to my apartment. He said that he wanted me to come out and interview at Bell Labs. I told him no.

"It's a free trip. You can do what you want to out there."
"Well, up front I'll just tell you that I'm not interested in a job. I'll be glad to go for a free trip 'cause I have friends on the East Coast. I'll go visit them."
"Fine."

So that was the interview that I got into. I spent my two days at Bell Labs and then rented a car and went up and down the East Coast visiting my high-school friends that were spread out all over everywhere.

MULTICS #

Bell Labs was in the MULTICS project and I was hired in to work on MULTICS. And I did. I played with the machines, booted up MULTICS and did my little piece of it. At some point, Bell Labs decided that MULTICS wasn't for them and they backed out of the project.

UNIX #

But they had these MULTICS machines which were special-purpose machines that were just sitting around idle until someone could cart them away. So for approximately a year, I had this machine. So I started doing operating-system stuff, trying to get a little OS up and running. It was insanely hard because it was a real complex computer. But I got it up where it would sit there and say hello on 50 Teletypes around the building. And then, it went out the door. So I shopped around then and found some other unused machine and built Unix on these very, very small PDP machines.

That was a risky venture. I suspected that I would eventually get fired, but it didn't bother me. We were supposed to be doing some basic research, but there was some basic research we should be doing and some basic research we shouldn't be doing. And building OS from the ashes of MULTICS was one of theose basic research things we shouldn't be doing. So I kind of expected that for what I was doing I was going to eventually get fired. But, i didn't.


References #

  1. Peter Seibel (2009) "Codes at Work : Reflections on the Craft of Programming" New York : Apress