The summer of 1965, I was doing graduate work at MIT (the Massachusetts Institute of Technology), in Cambridge, Massachusetts ("MA"). I was contacted by the director of Camp Robinson Crusoe, Bob Hill, who suggested that I teach a course at the camp, "Whatever you want", and he'd pay me for it. I had previously attended the camp for many summers.
I tried to think of something I could do in the short space of eight weeks, and I decided that I could teach a computer programming course, if anyone was interested among the campers of the camp's "Primitive" units (around 14 to 15 years old). Some of them were.
You can't learn to program a computer without programming a computer, and for that, you need a computer. As the famous science-fiction writer Arthur C. Clarke put it, "Reading computer manuals without the hardware is as frustrating as reading sex manuals without the software."
DEC had the forsight to donate one of the early machines to MIT, with the proviso that it be made available to students, undergraduate as well as graduate. I think they reasoned, correctly as it turned out, that the students would produce all sorts of interesting programs for the machine. In any event, that was the computer I could use to run the campers' programs. All I needed to do was to sign up for time.
The PDP-1 was programmed in what is called "assembly language", in which the programmer must specify, in a symbolic form, the actual instructions fed to the machine to cause it to carry out the desired operation. These days, most programming is instead done in a so-called "high-level language," in which it's easier to program. The high-level language is translated into the actual "machine language" by a program called a "compiler."
The input of programs and data to the PDP-1 was via fan-folded punched paper tape, seen below:
The tape was pulled through a high-speed photoelectric reader on the front of the machine, for some reason from right to left. It neatly fan-folded itself on the left side of the reader. Thus after reading, no rewinding was required. I've used a close-up of a piece of this punched paper tape as a background for the red text at the top of this page.
Programming in assembly language involves having a complete understanding of the computer's native instruction set, which in turn requires a full understanding of the binary (base 2) number system used internally by computers. Since the camp, in Sturbridge, was about an hour's drive from Cambridge, I planned a course that I could teach in about seven weekly lessons, which was clearly not enough for a conventional course. Assembly language courses taught to college students at MIT typically took a full semester, and I would be teaching fifteen-year-olds. I thus needed to simplify the material in some way, while still getting across the basic concepts.
The first thing I needed to ditch was binary arithmetic. I figured I didn't have time to teach it, and instead I needed to work with ordinary decimal (base 10) numbers. I also needed to enormously simplify the computer. I thus designed an extremely simple decimal computer, with a memory containing 1,000 four-digit decimal (i.e. ordinary) numbers. The computer had a simple set of only nine instructions for operating on these numbers, plus an input-output instruction group. I figured I could teach the students to write very simple programs for this extremely simple machine. While the programs wouldn't do anything earth shattering, they would get across the idea of what is involved in computer programming.
Of course, my simple computer had one small drawback: it didn't exist.
That was not a problem for a computer engineer like me. I just built one, or, more accurately, I simulated one. That is, I wrote a program for a real computer, the PDP-1, that pretended to be the fake (decimal) computer. Actually, in standard Computer Science terminology, this process is usually called emulation, rather than simulation. Once I had written my emulator, I could then have my students write programs for the fake computer. I brought these programs back to MIT, and ran them on the emulator. The results of the runs were then brought back to camp a week later for the next course session.
To give a bit more detail: The campers' programs were assembled for the emulated computer, and put into the emulated computer's (emulated) memory (all computers hold both their programs and the data that the programs operate on in the same Random-Access Memory). The emulator printed out the contents of the memory first, and then emulated the excution of the program. Finally, it again printed out the contents of the memory, so the students could see the results produced by their program (and debug it, if it had not done the right thing). These printed "core dumps" were brought back to the students, and discussed in the class. The students were not told that the computer they were writing programs for did not actually exist as a hardware computer, but was merely an emulation.
The final class of the course took place not in Sturbridge, but in Cambridge - the students were bused in for a field trip. In a classroom at MIT, I explained how I had emulated the "computer" they had been programming, although I think, in retrospect, that the emulation concept was so convoluted that I'm not sure everyone understood what I was saying. We then went in to the computer room, where I ran their final programs on the PDP-1, with them watching.
I think they were impressed that their programs, which executed hundreds of instructions, ran from start to finish in a fraction of a second, despite being slowed down drastically by the emulation process. The irony today is that the PDP-1, by modern standards, would be considered incredibly slow. Modern computers can be clocked at speeds approaching 2 GigaHertz (2,000,000,000 cycles per second). The PDP-1 was 10,000 times slower, with a basic clock cycle of 0.0002 GigaHertz (200,000 cycles per second, or 200 KiloHertz). But we thought it was pretty fast at the time.
At the 1999 camp reunion at Camp Taconic, I met the former camper who had been far and away the best student in the class, Kathy Taylor. I was delighted to find that she thought my course had influenced her, and affected her career in a positive way. I contacted her again via e-mail after I first posted this page. She wrote:
At various times in its history, Camp Robinson Crusoe emphasized tennis (hiring U.S. tennis champion Darlene Hard to run their tennis program) and later, horse-back riding. But was it the world's first "Computer Camp"?
Strictly speaking, no. That term would have to apply to a camp whose major focus is computing, and that was never the case at Robinson Crusoe. In fact, National Computer Camps claims to have pioneered that category, and to have coined the term "Computer Camp".
But it's very likely that I was indeed the very first person to ever teach a course in computer programming at a summer camp. This was in 1965, a full 12 years before the founding of National Computer Camps, and well before the days of the personal computer. The National Computer Camps history page shows students at work on a 32K Radio Shack TRS-80 computer, which was introduced in August, 1977, but the IBM PC did not appear until 1981.
After getting my doctorate at MIT in 1970, with a thesis for Professor Marvin Minsky in the field of Artificial Intelligence, I worked briefly on helping to implement the Logo programming language on a PDP-10 computer. This project was under the direction of one of the inventors of Logo, Professor Seymour Papert. Logo is primarily used to teach the concepts of Computer Science, often in an elementary school setting, so in a sense I was continuing my early work in Computer Science education.
This page was first posted August 2, 2007.
It was last updated April 16, 2009