The Muse has spoken and compelled me to write down my history -- at least from the standpoint of computing. If you can tolerate the self-indulgence that this implies, I hope that you will find a tidbit or two to make the effort worth it.
It Begins
I can make an arguable case that my interest in computers stems from too much T.V. as a kid -- particularly such wholesome shows as Doctor Who, Fireball XL5, and Stingray. Whatever the cause, high-tech gizmos, particularly computers, have fascinated me for as long as I can remember.
In my first year at school, I can recall filling the inside covers of all of my notebooks with hand drawn pictures of spaceship control panels, and spending time pressing the buttons and pulling the levers instead of learning the subtleties of telling time or solving equations more complicated than 1+1+2=?. (That 2 would always throw me -- I was okay so long as we confined the discussion to 1s).
My computer reality stopped being virtual when I was around 12 or 13. My mother brought home this wonderful device called CARDIAC. This ingenious little package contained a book which described machine-language programming (1973-style). It also contained -- a computer! Granted, the computer was made of cardboard and relied on an external power and logic source (me). But it was a fully-fledged computer with something like 32 bytes of RAM, a CPU with a dozen or so op-codes, an accumulator, a program counter, input and output tapes, and other assorted goodies. I could write machine code programs and hand execute them. It even had an assembly language, but I had to hand-translate the assembly code into machine code. The manual had a program that played the game of NIM. NIM is played with a number of sticks with players taking turns picking up one, two, or three of the sticks. A player cannot pick up the same number of sticks as his opponent just did. The player who takes the last stick loses. I was amazed that one could write a program that did such a complicated thing as play this game. I was further amazed that CARDIAC could play a better game of NIM than I. Even though I understood all of the individual instructions of the program, I never quite made the mental leap to understand the whole.
Around the same time as CARDIAC, I began watching a weekly telecourse made by Boeing Corporation which taught the BASIC programming language. Now here was something I could sink my teeth into! Alas, CARDIAC did not have a BASIC interpreter and, even if it did, I would probably still be hand executing that first program to this day. My solution was simple: the local university and technical college both ran open houses twice a year. The computer science departments would allow mere mortals such as myself to not only approach but actually touch teletypes attached to mysterious, distant computers. And guess what: these computers spoke BASIC! My first BASIC program ever was almost certainly:
10 PRINT RND(),
20 GOTO 10
The whole concept of a computer-generated random number fascinated me. How could a computer compute a random number? Here was a concept that was well beyond anything I could grasp. Now I had a printout with a few hundred random numbers on it to help me contemplate this strange problem. (It didn't help.)
And so it became a regular ritual for me to go to these open houses and pester the poor attendants to let me have much more than my fair share of time at the teletype. One such attendant stood and fumed for over an hour while I printed out the entire listing for the 'empire' game that he was otherwise showing off to attendees. Another time, I went to a demonstration which had two teletypes connected to each other, rather than to a computer. I immediately set up camp on the one which was in a corner away from the main area. That whole afternoon, I simulated being the computer to many astonished visitors -- and to the great amusement of the attendant. This was a trick that I would play many times in the following years, especially to newbies at university. I actually had one fellow talking to his terminal and scouring the room looking for television cameras. It was actually more believable for him that he was talking to one of HAL's cousins than to the guy a couple of seats behind him. Call me cruel...
As my familiarity with BASIC grew, another development occurred which gave me access to computers which understood it. Companies started bringing a new class of computers to market -- personal computers. Furthermore, a shop opened here in Calgary that actually sold these things! A friend and I would hang out at this place, talking the proprietor out of lots of glossy brochures even though he knew there was no sale to be had. I would drool over the specifications of such powerhouses as Altairs, IMSAIs, and Polymorphics. All of these were upscale versions of my CARDIAC. They implied machine language programming, usually through a front panel. At the time, I thought this was cool. It is a good thing that I did not have enough money to find out if it was.
Eventually, I got a computer that actually ran on electricity. It was a TI-59 programmable calculator. This state of the art piece of equipment set me back my life savings up to that point -- around U$350. But it was a dream machine! It had something like 1000 memory locations which could be divided between program and data. And it could store programs that I had written on a small magnetic card!
An Account of my Own
My big break came when one of more assertive members of our high school nerd clique suggested that we approach a friendly teacher to see if he could swing some arrangement with the University of Calgary granting us computer access. Amazingly enough, he could. Before I knew it, I found myself going to the University every night after school to write FOCAL programs on a PDP-8 running the TSS-8 operating system. Now here was a truly awesome piece of equipment, with capabilities well beyond anything I had ever dreamed of. It even had a hard disk. Of course, there was not enough space on the hard disk to store our little programs. The scratch space on the disk was wiped clean every night so we had to be sure to write our programs onto paper tape before we went home. We envied the university students who were actually permitted to store their programs on magnetic tape.
FOCAL is a very simple language, similar in scope to BASIC. I recall that one of the features of FOCAL was that you could abbreviate all of the keywords to a single letter -- which we all did since we could neither type nor program well enough to worry about such issues as readability. I reproduced the random number program and quickly moved on to more sophisticated fare such as printing out prime numbers. The largest program that I wrote in FOCAL was a rip-off of the board game Stock Ticker. A few people that I knew became addicted to the game and spent far too much time hunched over a teletype playing it.
At this time my mother worked at the university and, as an employee, was entitled to an account on the university's CDC computer. I soon assumed ownership of that account. The CDC was impressive. I had seemingly endless permanent disk space. The CDC understood BASIC, my language of choice. There were a few high speed Decwriter terminals (300 baud). And the CDC ran my prime number program orders of magnitude faster than the PDP-8.
I spent a large fraction of my evenings through high school in the CDC terminal room. Most of that time was spent writing increasingly complex programs in BASIC. Most of those programs were games of one type or another. BASIC was beginning to frustrate me more and more. The CDC's dialect of BASIC was restricted to variable names consisting of a single letter optionally followed by an integer. As my programs grew in sophistication, this restriction became intolerable. Many other languages were available on the CDC, including PASCAL and FORTRAN. A friend of mine was a strong advocate of PASCAL, but I found the manual to be difficult reading -- especially all that talk of pointers. FORTRAN, on the other hand, seemed like 'BASIC done right'.
In BASIC I had been working on a two-dimensional variant of the classic lunar lander program. It was on this project that I found that I was quickly running out of meaningful variable names. But in FORTRAN, I could use names like FUEL, THRUST, ANGLE, XVELOC, and YVELOC. Furthermore, I could give names to my subroutines -- no more GOSUB 7000. And pass parameters to subroutines! And I did not need to give every line a number! FORTRAN was like a dream language. I could not imagine how any other could top it.
The lunar lander program, SHUTTLE, was the first computer game I wrote that I really liked. It enjoyed modest popularity among the CDC's users. Reportedly, 80-odd copies of it were found scattered across the computer's disks. Found by whom, you say? The University's computing administration took a dislike to games after a friend of mine ported one of the endless variants of 'Star Trek' to the CDC. Rumour has it that copies of 'Klingon', as he called it, filled an entire disk pack. At that time, a disk pack represented virtually limitless storage to most users. Rumour further has it that the administration wrote a program that deleted any file with the word 'Klingon' in it but the program was lost when run because it deleted itself!
By this time, our high school computer club was growing in size and was receiving more assistance from the University. Back on the TSS-8, one professor lectured us on voice synthesis. He had developed a text-to-speech facility and tried to explain the theory behind it. I am sure that most of what he said went over our heads, but we did pay close attention to the special syntax required to generate sounds. After all, who could resist the urge to have a computer say such profound statements as 'Live Long and Prosper' or 'I Grok Spock'?
Later, another professor introduced us to some other computer languages. We were able to play with some languages which broke the procedural mold of BASIC. One thing about BASIC that I liked that FORTRAN did not do well was string handling. But SNOBOL left BASIC completely in the dust. Not only did string variables in SNOBOL behave 'as God intended', but pattern matching was a primitive in the language. Unfortunately, the SNOBOL interpreter was quite slow and, in any event, the language was a little too radical for my procedural brain.
Another language we were introduced to was SIMULA. For me, learning SIMULA was when the lights came on about records (aka structures, user-defined data types, etc.) At first it was a bit of a stretch: "But why wouldn't you just use a set of parallel arrays?", said the BASIC programmer -- a question that I would not repeat five years and 100,000 lines of FORTRAN later. You can only call subroutines with 37 array arguments so many times! SIMULA also had that mysterious pointer type again. I almost understood it this time, but it seemed strange to use a linked list when a perfectly good (read, 'easy') array would do. When all you have is a hammer, every problem looks like a nail...
At the time, I thought I had a really good handle on the facilities of SIMULA. Little did I know, there was a whole world waiting under there that I didn't even dream of: object-oriented programming. Alas, that would have to wait a while (and for about 100,000 lines of FORTRAN).
My 'Klingon' friend also became enamoured with APL. He was a pure mathematician, and I think that the primitives of APL, not to mention the character set, matched the symbology that he saw when he closed his eyes. For my part, I thought it was cool to be able to write a program that nobody else would ever be able to read. But other than that, the language held little appeal for me.
There were soon other advances in my computing environment. Strange new paperless terminals began to appear in the terminal room. I had no concern for saving trees but the CRT terminals could display characters at 4800 baud. Suddenly, I felt a certain inadequacy in my typing speed. Before, I wasn't that much slower than a teletype. Okay, okay, I could not type at 11 characters per second, but those teletypes just seemed to be terribly slow. But the CRTs were blindingly fast. Now, my typing was a significant bottleneck in the programming process. I quickly added a typing class to my high school curriculum. If any class that I took in high school has paid huge dividends, that was it.
I might have thought that 4800 baud CRT terminals were the apex of technology, but the reality of computer-related change began to sink in rather rapidly. Soon, the University acquired 9600 baud terminals. The speed in itself was nice, but the truly remarkable capability was cursor-control. By sending some rather arcane strings to the terminal, you could put the cursor anywhere on the screen. Anywhere! The applications were endless, but I could only think of one: video games! In junior high school, I had read an article in Time magazine about a game called 'Life'. The article concentrated on how this rather silly program had captivated full-grown university students, but in a sidebar recounted the rules. I recall whipping out my chessboard and manually playing a few generations. But now, with cursor control, the computer could do it for me. In all, I spent far too much time programming variations on the Life theme, looking for ways to speed the computation and display of generations.
A Computer of my Own
When 1977 rolled around, I noticed that the computer store that I still hung out at from time to time began to get in a new class of personal computers. These machines were not programmed from front panels, but had keyboards, displays, tape drives, and even floppy-disk drives.
Uh-oh. Have you noticed how serious an effect surfing can have on people's attention spans? The muse is abandoning me...
Last updated 1998/12/01. To be continued...
Notes
- The Muse? Which Muse? The Muses were the nine daughters
of Zeus and Mnemosyne. They were originally the godesses of memory, but soon
acquired individual areas of responsibility:
- Calliope - epic or heroic poetry
- Clio - historical and heroic poetry
- Euterpe - music, joy, and pleasure
- Thalia - comedy and pastoral poetry
- Melpomene - tragedy
- Terpsichore - dancing and dramatic poetry
- Erato - lustful poetry
- Polyhymnia - singing and lyric poetry
- Urania - astrology
It is left as an exercise to the reader to identify the Muse doing the moving.