The Education of a Hacker

I am a computer hacker.

For some people, computers are their job, from 9 AM to 5 PM each weekday, and after they get home, they do something else to forget about work. These people, however satisfied with their work, however deep their technical knowledge or broad their experience, are not computer hackers.

Some people use computers extensively in their work or personal life. To the vast majority of these people, the computer is a tool. A marvelous tool, to be sure, but a tool. These people are not computer hackers.

A computer hacker (in the sense of the term used before it was hijacked by the popular media to mean, "someone who maliciously breaks into computer systems.") is someone who eats, sleeps, and breathes computers. Someone who is fascinated by the mallebility of what Alan Turing called "the universal machine." Necessarily, a computer hacker is a computer programmer (but not the converse).

Computers I Have Known

My own history with computers is the history of mini-computers (the market that IBM and the B.U.N.C.H. missed), and micro-computers (a whole computer CPU on a single chip?! Wow!). Never played with an IBM (or compatible) mainframe; never subjected to their reputedly awful software.

For another perspective on the history of computing, visit The Computer Museum the next time you're in Boston. Also, on the net is The Museum of HP Calculators - my father has one of the original HP-35's, and my first calculator was an HP-25. For calculator interaction, there's nothing like RPN over infix.

Grammar School

I discovered computers while I was in the 7th grade. To satisfy my own curiosity, I took an "after-school" course at the local high school to learn computer programming in BASIC. We did the programming on mark-sense cards (not even punch cards; #2 pencil and all) on a Data General NOVA minicomputer that Redwood High School had, BATCH style (card reader input, line printer output, one job at a time). The NOVA was a 16 bit minicomputer competitive with the DEC PDP-11, and designed by a DEC Engineer (Edson deCastro) who, when Ken Olson refused to produce his design, left and founded DG. In some ways, this machine is a precursor to modern RISCs.

I had fun with the course, and wanted to keep on learning more, but there was no "advanced" version of the course. The solution to this problem came from my Dad at Christmas: he gave me my very first 2 megabyte, 14-inch hard disk cartridge, with an OS and a BASIC interpreter on it. His business had the same kind of DG NOVA minis at his office, and the arrangement was that I could use them on the weekends, so long as no one else needed them.

After I got tired writing programs in BASIC, I wanted to extend the capabilities of the interpreter, so I hit the books and learned NOVA Assembler. While it was tedious (the advantage of assembly is that you have complete control of the whole machine - the disadvantage is that you must exercise all that control, all the time), it was also fun.

The best part about hacking on the BASIC interpreter (which doubled as the OS) was discovering things like "re-entrancy" the hard way: if code is supposed to be re-entrant, and you don't make it that way, boom! It's a lesson long remembered.

High School

Each of the high schools I attended in Marin had an ASR-33 TTY with a 110 baud leased line to the Lawrence Hall of Science (LHS) in the hills above U.C. Berkeley. They had a DG NOVA (and later an Eclipse) running a later version of the same timeshared BASIC interpreter that I was using and hacking on at Dad's office. That meant lots of fun since I knew exactly what was going on inside the machine.

I spent part of the summer of 1978 at Stanford University studying English and Math, but I also had access to a DECsystem-20/60 running TOPS-20 at the Low Overhead Timesharing Service (LOTS) - all registered students could get time on the machine. I learned EMACS (and a little TECO), hacked BASIC using the BASIC interpreter on that machine, took a peek at FORTRAN and the Stanford AI Languange (SAIL), and had my first look at the ARPANET (that was a mind-blower - big computers all over the country, linked up for common use? Wow!). I had a blast.

Then, I spent a year at a boarding school with nothing but a DEC PDP-11/45 running RSTS/E and DEC BASIC. It was boring. If they'd only trusted us with the assembler...


U.C. Berkeley was something of a disappointment to begin with in the fall of 1980. The computer center wanted to charge everyone insane rates for computer time on the PDP-11/70's they had, and the TOPS-20 system (which, given my experience at Stanford, I had wanted to use). I had assumed that just about any student, faculty or staff member who wanted computer time could get it for asking. For students, you had to be in a Computer Science class, or a privileged member of the Berkeley Computer Club.

I started by taking CS1, and the CDC 6400 was the machine I learned FORTRAN IV (1966) on, just a few years before they finally decomissioned it. We used real punch cards, composed at IBM 026 keypunch machines - quite an experience in historical computing techniques. I had just read Edward Yourdon's book "Structured Programming" and it was fun to apply those techniques to the FORTRAN programs we wrote for class; BASIC was so unsuited to the techniques that Yourdon wrote about that I thought he was nuts, until I saw a language that could actually apply them (albeit primitively).

Finally, in Feb 1981, I got an account from the Berkeley Computer Club (which had just become the Computer Science Undergraduate Association (CSUA)) on the EECS DEC PDP-11/70 running 2.8 BSD UNIX. It was on the Campus "BerkNet" (a serial-line based batch network of sorts, but there was an ARPANET gateway for E-mail), and I had a whole 100K of disk space quota to play with!

I learned "csh" scripting, and then started writing small C programs (mostly stdio filters for some other stuff I was doing, hooked together with the csh scripts). E-mail was a new thing to me, and I subscribed to a number of mailing lists on the ARPANET (once I figured the hack on how to use it), including SF-Lovers, and HUMAN-NETS.

I was also playing a little bit with my dorm roommate's Apple IIe+, again mostly in BASIC, but I read the 6502 processor manual. What a toy! I'd been playing with 16 bit computers (with a brief interlude in 36 bits) for years, and this machine was only 8 bit! (of course, I ended up working for Apple for 8.5 years...).

Along the way, I became an officer of the CSUA (treasurer, and then vice president of internal affairs), made friends with some important faculty members, and got access to some of the 32-bit DEC VAXes running 4.1 BSD UNIX, with real ARPANET access no less (IMP #78).

This was also the early days of UNIX on microcomputers - Onyx donated one of their z8002-based UNIX systems running a Version 7 UNIX derivative; their hope was that Berkeley would "port" the various utilities and other software developed by the Computer Systems Research Group (CSRG) that were part of 4.1 BSD UNIX to the Onyx. The graduate students quickly got bored of the machine (it wasn't anywhere near as powerful as the VAXen), so Professor Fabry gave the machine to me and two of my friends. We set up (with his help) a small undergraduate computing facility in the basement of Evans Hall - any currently registered undergrad could have an account. We hooked it up to the BerkNet, and tried to encourage more people to come and learn about UNIX and computing.

We were quite successful: only six Heathkit h19 terminals, but they were almost constantly in use, and we ended up training an entire cadre of system administrators who (when the influx of machines to the UCB CS and EECS departments began in earnest) ended up being the system administrators and systems programmers for those new machines. The Onyx was also the host where "B" version of NetNews was developed - a seminal piece of software in the history of USENET.

Alas, all of this activity had its price: UCB gave me the boot in January 1983 for violating academic probation (GPA too low, too long).

The "Real" World

Fortunately for me, the best part of the discovery of computers is that there are many companies that will actually pay me to have this kind of fun, full time.

I worked at Dual Systems from March 1983 to June 1985 as a software engineer - writing device drivers, fixing AT&T USG's awful kernel & user program bugs, and answering questions both simple and complex from Dual's customers. I learned a lot there, but they failed to compete in the market, and I got laid off. Still, it was fun while it lasted.

The Celerity and the Elxsi I got acquainted with at the Lawrence Livermore National Laboratories (LLNL) when I worked there in 1986. Interesting machines.

I bought the GRiDs used for portable terminals (no batteries in those beasts; they sucked down wall power like it was going out of style and got so hot that their magnesium cases were all heat-sink), and for that they worked OK, but the built-in modem was only 1200 baud! I've still got them somewhere...

After a vacation of sorts, I landed a job (actually got chased) at Apple Computer, as "postmaster." That evolved into running all the Internet connectivity for the company, plus E-mail, NetNews, network security, any bizarre network design required for the Engineering Network. It was all fun until the MIS weenies took over...

Of course, my career hasn't all been UNIX; I've seen a few other operating systems along the way.

Erik E. Fair <>
February 20, 1998

[Apple] [Cray] [DEC] [Sun] [SGI]