Today I want to talk about another vintage book — this one from 1985, eleven years after Kernighan and Pike’s Elements of Programing Style came out. While EoPS is largely timeless, this one has aged dramatically; but it was so important to me twenty-something years ago, and embodies an era that I remember with such fondness, that couldn’t resist writing about it.
R. C. West was a bit of a legend in the Commodore community of way-back-when, along with Jim Butterfield and others whose names I no longer recall. Their work would appear in magazines and newsletters, often in the form of programs that you would type in — not games or business applications, but utilities like faster tape drivers, routines to renumber your BASIC programs or disassemblers for machine code.
When Programming the Commodore 64 came out, there was no question of not buying it. It was a non-negotiable necessity, because the subtitle — The Definitive Guide — was spot on. “Definitive” was the word. It’s hard to believe these days, but in 611 pages, West wrote down everything there was to know about the C64, from hardware and firmware, via the BASIC dialect, through machine-code programming, graphics, sound, the layout of the ROMs, programming the disk drive, and much, much more. If you don’t believe all that could fit in a single book, and that only two-thirds the size of a modern XSLT tome, check out this scan of part of the contents listing:
(You’ll probably need to click through to make out the gritty details.)
Now I know that there is already plenty of old-fart nostalgia on this blog — a lot of people have interpreted Whatever happened to programming? as a yearning for the days when you had to do everything from first principles, which wasn’t really what I meant. But I do, I really do, miss the days when it was possible to understand the whole computer.
I’m not claiming that I ever had the level of mastery that people like West and Butterfield had. I was never really a big machine-code programmer, for one thing — I wrote routines to be called from BASIC, but no complete programs in 6502/6510. And I’ve never been a hardware hacker at more than the most trivial swap-the-video-cards level. But I did have a huge amount of Commodore 64 lore internalised. I knew which memory location always held the scan-code of the key that was pressed at that time; and where the screen memory-map began; and which locations to POKE to play different pitches on the various channels of sound, or to change the screen or border colours. I knew hundreds or thousands of those little bits of information, as well as being completely familiar with the horrible BASIC dialect that was in one of the ROMs. In short, I knew the machine in a way that I don’t even begin to hope to know any of my computers today; in a way that, I am guessing, no-one anywhere in the world knows their machines.
I miss that.
And thanks to R. C. West, if I found I needed to know something that I hadn’t already internalised — say, the locations of the BASIC warm start vector and the tape interrupt vector — I knew where I could look them up:
So I think this is part of what I was bemoaning in Whatever happened …: the loss of the total control that we had over our computers back when they were small enough that everything you needed to know would fit inside your head. It’s left me with a taste for grokking systems deeply and intimately, and that tendency is probably not a good fit for most modern programming, where you really don’t have time to go in and learn, say, Hibernate or Rails in detail: you just have to have the knack of skimming through a tutorial or two and picking up enough to get the current job done, more or less. I don’t mean to denigrate that: it’s an important and valuable skill. But it’s not one that moves my soul as Deep Knowing does.
I’m not sure how I feel about that. One of the reasons I recently learned Ruby is that there’s a web-site I want to build, I’m sick of hacking Perl’s HTML::Mason templates and repeatedly re-implementing half of an ORM, and Rails seems like a very well regarded technology for that kind of thing. It seems that most people who want to learn Rails plough in with one of the tutorial videos and start hacking, but that doesn’t satisfy me: deep in my soul, I need to know Rails before I’ll be happy building things with it. And I truly don’t know whether that means it will take me a longer or a shorter time to get the site running to my satisfaction.
(Happily, it’s my birthday today — I’m 42! — and my wife gave me Agile Web Development with Rails. So hopefully it will all start to sink in soon and I’ll be ready to start Doing Stuff in a month or so. I’ll let you know how it goes.)
Even so, something has been lost when my Deep Knowing aspirations have been reduced to learning a mere web-app framework rather than, as in the 80s, learning a whole computer.
On the other hand, I do not miss typing in machine-code programs by hand from long listings in books. Whenever I get too misty-eyed for the old days, I remind myself about this kind of thing:
So maybe what we’ve lost on the swings, we’ve gained on the roundabouts.
Still, it was great that, for a decade or so, it was possible for an ordinary layman such as myself to buy, read and learn books that would make you the absolute master of your computer. In that respect, at least, it truly was a golden era. So, R. C. West, we salute you!
Update (14 March 2010)
Coverage of this article elsewhere on the net: