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.