C O M P U T E R S
Computing: A Personal Reminiscence
The first programmable device I ever used was actually a calculator--namely, the Texas Instruments TI-58C. It was a gift to me in 1980 on going to college to become a chemical engineer. It couldn't hold many instructions, and (no surprise) was geared more toward math than logic. Still, it was possible to write simple games on it. (It was about this time that my Chem E grades began to slip.)
Then one night some friends sat me down in front of something that looked like an evil cross between a typewriter and a TV picture tube. They slapped at a bunch of switches, and after some loud beeps followed by a high-pitched tone and an unearthly screeching, brightly glowing words appeared on the TV monitor:
ENTER ID: ZWILMIK
ENTER PASSWORD: ******
WELCOME TO THE TECH COMPUTING CENTER
I was logged into the campus mainframe, using an acoustic modem at the bit-blistering speed of 300 baud. Then they fired up a simple game called "King." The computer would tell you, "You have 2200 steres of grain and 110 laborers. How many acres of grain will you plant this year?" I played and lost. Then I played and won. Then I played and won again. Then I played and won again.
At this point, I turned to my friends with what must have been the look of the recently-converted religious zealot. They were all grinning like fiends as I demanded access to the computer program which formed the game.
After a bit of instruction ("The PRINT command displays text and the contents of variables; the IF command tests a variable and transfers control to a different part of the program if the test proves true...."), I was tinkering away madly. It wasn't long before I had added to the original program various new features, such as random events like rats that ate one's grain and weather effects on grain yield.
It seemed I had an aptitude for this sort of thing. Within a year I got kicked out of college because my Chemical Engineering grades were so low.
(After a bit of groveling I was allowed back in.)
This was a great time for me. On the one hand, I was soon teaching myself IBM 360 mainframe assembly language running under MVS with TSO. (Did you know you could write TSO commands that run as a batch job from a punched card deck? Do you have any idea what a "punched card deck" is?) While most people using the campus mainframe had to compete with smelly herds of other students for time with the keypunch machines and the card reader, I lived like a king. I even stumbled on a DEC version of the early computer game Zork that contained within one game parts from all three of the games later released separately for the PC.
It was a remarkable life. I might have been one of the characters from Joseph Weizenbaum's Computer Power and Human Reason:
. . . bright young men of disheveled appearance, often with sunken glowing eyes, can be seen sitting at computer consoles, their arms tensed and waiting to fire their fingers, already poised to strike, at the buttons and keys on which their attention seems to be riveted as a gambler's on the rolling dice. When not so transfixed, they often sit at tables strewn with computer printouts over which they pore like possessed students of a cabbalistic text. They work until they nearly drop, twenty, thirty hours at a time. Their food, if they arrange it, is brought to them: coffee, Cokes, sandwiches. If possible, they sleep on cots near the printouts. Their rumpled clothes, their unwashed and unshaven faces, and their uncombed hair testify that they are oblivious to their bodies and to the world in which they move. These are computer bums, compulsive programmers . . .
That description strikes home. Often I slept all day and programmed all night. I even learned to schedule my classes for the early morning, so that I could get to sleep around one in the afternoon and wake at nine in the evening. And even then I kept the computer running all the time, programmed to wake me if someone tried to send me an electronic message over the campus network.
There were several advantages to this reversed lifestyle. As I lived in the South and was (like many students) not wealthy enough to afford air conditioning, it was considerably more comfortable to be up and about at night. Even more importantly to me, the night was quiet. Concentration is vitally important to most programmers, and I was no exception. Working at might meant fewer cars rattling past my windows and fewer interruptions (even from friends).
But there were a number of prices to pay for my elevation of programming to a strenuous form of worship. Luckily my friends were tolerant of my fascination for programming; they often refused to take "no" for an answer when it was party time. (Well, this was college, after all!) I did manage to have some social life, but there's no question that it was curtailed by the intensity with which I embraced a life dominated by software design and development.
I finally realized how serious matters had become when I lost a week of my life. With multiple projects going--in addition to trying to pass enough classes to earn a degree--I had taken to staying up for three days at a time and then collapsing to sleep for two days. One afternoon following several weeks of this exhausting life, I walked into my Operating Systems class, ready to take the exam that was scheduled. As I sat down, the professor handed everyone a paper... except for me. I looked around. All their papers were graded.
I looked up at the professor and asked, "Um... did I miss something?"
"Yes," he said. "We had a test last week. Where were you?"
I didn't remember.
That was the moment I switched to working days and sleeping nights. I'm still a "night person," but I've never gone back to the "awake for three/asleep for two" pattern. If programming is an "addiction" like alcoholism, that was my warning.
I heeded it.
Until then, however, I was happily building my own worlds where those perplexing human relationship things simply weren't a factor. Every night (until I got my own computer) I would go into a campus office, dial into the mainframe with a noisy 300-baud acoustic modem, and spend the whole night either programming or scouring the mainframe for interesting files.
One night, while sifting through some public files in the Chemical Engineering directory, I discovered an innocuous-looking file entitled "WHITEHSE." I opened it up with my line editor ("What's a line editor?"... oh, never mind) and read:
PUT LIST ('KLINGON HITS ',SHIP_NAME,' FOR ',DAMAGE,' UNITS OF DAMAGE!');
I'd stumbled upon a version of the classic mainframe game STARTRK that someone had tried to hide. I quickly stored a copy in one of my own working areas, then spent the rest of the night reading the code and laughing. The next day, I got a friend to tell me that the language used was called PL/I. After figuring out how to compile and link the source code to make an executable program, I borrowed a PL/I book and taught myself that language, too. Pretty soon I was adding all kinds of spiffy new features to STARTRK.
Around this time I first gained access to a personal computer: a Radio Shack Color Computer. Unlike its older siblings, the TRS-80 Models I, II, and III (only the Model II of which deserved the epithet "Trash-80"), the CoCo was capable of truly interesting graphical modes... and in color, no less!
The first CoCos were not what you would call "power" machines by today's standards. They had 4K (that's 4096 bytes, folks) of RAM, of which 512 bytes were used by the operating system. And the processor under normal conditions ran at a heart-pounding 0.89 megahertz. (Compare that to Intel-based PCs of mid-1998 featuring clock speeds of 400 megahertz.)
Ah, but what the CoCo lacked in brute power it made up for in capability. Not only could you put thousands of colored pixels on the screen fairly quickly, but--with an assembler--the Motorola MC6809E microprocessor inside could be made to do things the machine's designers never dreamed possible. One enterprising husband-and-wife team even wrote a version of the "William Tell Overture" in three-part (or was it four-part?) harmony!
After mastering the subtle art of code miniaturization (you learn to be creative with only 3.5K of RAM to work with), I got a CoCo of my very own. It had a whopping 16K. Later I upgraded for $50 to a staggering 64K and thought I was in heaven. With a 300 baud modem borrowed from a friend, I used to dial into the mainframe to do my Computer Science projects. (I'd changed my major by this time. My grades showed a remarkable improvement.) It always struck me as a hoot to download programs from this massive, powerful mainframe computer... into my little home computer, saving them on the cassette recorder the CoCo used for data storage.
I still have my CoCo. I expect it still works.
Also around this time I was using CP/M and learning WordStar, both of which struck me as interesting but not exciting. (Though trying to keep an 8-inch floppy from folding in half could be an alarming experience.) One friend decided to build an S-100 CP/M system; he sank cash into it, but--as far as I know--never managed to turn it into a fully functional system.
Soon the university changed over from the MVS mainframe operating system to IBM's VM. I resisted briefly, but soon found myself having a blast. VM was a lot easier to work with than MVS; it had all kinds of wonderful goodies for low-level systems programmer wannabes like me. The only downside, it seemed to me, was that now everyone was using terminals instead of punched cards. My uniqueness was fading. But on the plus side, Hayes had come out with modems faster than 300 baud. One guy I knew had a modem capable of 1200 baud, and another was one of the first to own a blazingly fast 2400 bits-per-second modem. (It was around this time that we learned not to use the word "baud" to describe modem speed any longer, since that measure no longer accurately described the data being transferred. We still used to read Byte magazine back then... and not just for Jerry Pournelle's column, either!)
I knew I'd arrived as a programmer when I discovered that the university system programmers were playing a real-time multiplayer space war game I'd written.
During this same period, my friends and I were also building robots. Not finding what we really wanted in a commercial product, we decided to build and program our own motor controller cards, which would tell the robot's wheels how to turn. Our hardware guys designed and built cards based on our old friend, the CoCo's MC6809 processor. And the software geeks--after some heated design arguments--developed a tiny but truly preemptive multi-tasking operating system. It all worked.
So during the day, I'd program a giant mainframe computer with "virtually" limitless capabilities, then at night I'd listen to arguments about how to create a custom-built microcomputer system with the most rudimentary capabilities and no "user interface" as such at all.
It was very instructive.
After college, I was the "do-it-all" guy on an HP 3000 system for Procter and Gamble, when minicomputers were still looking like replacements for mainframes. I hauled terminals to offices, ran cables to them, helped the HP "see" them, updated the system documentation, installed software, fixed "broken" printers, and developed system-monitoring software. I learned a lot--mostly that I was more interested in designing and developing software than in baby-sitting it.
So I moved to northern Virginia (which I discovered is pretty much part of the big Northeastern megalopolis these days and not part of the South any more). Here I got to work with IBM PCs and NetWare LANs and packet-switching X.25 Unix boxes and modems and muxes and PADs (oh, my!). And every year, the PCs got just a little bit faster. One year they were basic PC/AT-class 4.77 MHz 80286s. Then they were 8 MHz 286s. Then they went to 12 MHz. Then 16 MHz. Then we got shiny new 25 MHz 80386 machines. Then came 33 MHz 386s. Then another revolution: the 50 MHz 80486. Then 66 MHz 486s. Then the astonishing 100 MHz 486. And then came the Pentium, which begat the Pentium Pro and the MMX Pentium, which begat the Pentium ][....
And so to today. Here I am, with the 200 MHz, 32-bit Pentium Pro I bought in May of 1997, driving 64 megabytes of RAM attached to 4 gigabytes of Ultra-Wide SCSI hard disk storage with a multi-voice sound card controling my synthesizer, and a 33.6 kbps modem reading messages from my friends on CompuServe, and a 19-inch monitor driven by a 2-D graphics accelerator with 8 MB of RAM for browsing some truly ugly Web sites...
And not only has my PC turned out to be an evolutionary dead end, it's already laughably underpowered.
Sad, isn't it?