Don Woods: Geek of the Week

Comments 0

Share to social media

Don Woods along with Jim Lyon is one of the creators of INTERCAL, the Compiler Language With No Pronounceable Acronym. The language and its documentation was created in 1972 while the pair were students at Princeton University. It was meant to stand as a parody of that era’s languages and instruction manuals and surprised everyone, not least Woods himself, by becoming a huge hit.

…”the language provides a
place where people can
discuss oddball features
missing from other languages,
such as the ‘COME FROM’
statement.”

He has worked for the Stanford AI Lab (SAIL) and it was here that he found the Colossal Cave Adventure game on a SAIL computer in 1976. Originally authored by William Crowther, Woods added enhancements to the game and then distributed it on the internet where it gained a larger following than INTERCAL.

1084-smallDonWoods.jpg

Don also contributed to the Hacker’s Dictionary along with other luminaries including Guy Steele and Mark Crispin. Many years after the original book went out of print; Eric Raymond updated it and republished it as the New Hacker’s Dictionary.

Don is a highly skilled developer  who worked on the Xerox Star and Sun NeWS, and since then on a variety of applications such as ‘MS Live Meeting’ and Postini.  Don continues to work in the programming field in the Silicon Valley and is currently at Google where he was surprised to be remembered for his pioneering work with INTERCAL.

RM:
Don, what was it that made you think of writing INTERCAL? Can you remember the moment that inspiration hit?
DW:
Not really, no. It was late at night and my co-designer Jim Lyon and I (and others) had just finished our last final exam of the term, and we were up late just talking. I’m pretty sure it started with the character set, of inventing new names for characters – initially limited to words starting with “sp”: spark, spot, spike, splat, etc – but I don’t recall what led us to extend those into an actual programming language.
RM:
Have you tried to write anything in INTERCAL that actually works? Has anyone else?
DW:
I recall someone once wrote a web site that played some game – maybe ‘bugs and loops’, maybe ‘mastermind’, I forget – using a back end implemented in INTERCAL. There are probably other examples but I don’t follow the community that closely.
RM:
INTERCAL attracts all sorts of adjectives such as: ‘simple, flowing, flexible’ and if the compiler encounters something it doesn’t understand it simply ignores it and carries on. Do you know of any other languages that could quite work this way?
DW:
Sort of. One that I recall was PL/C (http://en.wikipedia.org/wiki/PL/C), a particular compiler for the PL/1 language. As the Wikipedia page notes, the compiler ‘had the unusual capability of never failing to compile any program’. I heard one tale, perhaps apocryphal but I could believe it would work given a suitably crafted program, claiming someone had fed it a short program written in FORTRAN; including stuff like a simple DO-loop, and the compiler had “corrected” it into valid PL/1 that actually performed the intended computation. (It was a matter of some debate as to what this said about using the PL/C compiler to teach PL/1.)
RM:
Why did you choose to spoof FORTRAN and COBOL in particular?
DW:
We didn’t, even though Wikipedia seems to claim we did. We spoofed the languages of the time, or at least the ones we were familiar with. I’ve never actually learned COBOL myself, though I believe Jim Lyon knew the language. The manual even lists the languages we were comparing ourselves to. And then we spoofed the reference manuals of the time, especially IBM documentation, again since that’s what we were most familiar with. Admittedly, the language resembles FORTRAN more than it does, say, SNOBOL or APL, but then so do most computer languages.
RM:
How long did it take to develop INTERCAL? Did it take time to write the manual?
DW:
That depends on what you mean by ‘develop’. We designed the language without too much trouble. Writing the manual took a while, especially for things like the circuit diagrams we included as nonsensical illustrations. The compiler itself actually wasn’t too much trouble, given that we weren’t at all concerned with optimizing the performance of either the compiler or the compiled code. Our compiler converted the INTERCAL program to SNOBOL (actually SPITBOL, which is a compilable version of SNOBOL) and represented INTERCAL datatypes using character strings in which all the characters were ‘0’s and ‘1’s.
RM:
How do you feel given that the language was created in 1972, and variations of it are still being maintained? Do you feel like you have your own dedicated following of spoof programmers now?
DW:
I admit I’m surprised at its longevity. Some of the jokes in the original work feel rather dated at this point. It helps that the language provides a place where people can discuss oddball features missing from other languages, such as the ‘COME FROM’ statement and operators that work in base 3. And no, I don’t feel like a have a ‘following’, though every once in a while I do get caught off-guard by someone turning out to be an enthusiastic INTERCAL geek.

When I joined Google, someone apparently noticed my arrival and took the opportunity to propose adding a style guide for INTERCAL to go alongside Google’s guides for C++, Java and other languages. The proposal got shot down, but the proposed style guide is still available internally.

RM:
Have you been impressed by any other spoof programming languages?
DW:
I’ve looked at a few other such languages but never spent a lot of time on them. Frankly, the ones that impress me more are the non-spoof languages that have amazingly powerful features, usually within limited domains, such as APL’s multidimensional operations or SNOBOL’s pattern matching. I’d be curious to go back and look at SNOBOL again now that there are other languages with powerful regular-expression operators.

The closest I’ve come to being impressed by another ‘limited’ programming language was a hypothetical computer described to me long ago by a co-worker who was a part-time professor at Northeastern University. The computer’s memory was 65536 bits, individually addressable using 16-bit addresses. The computer had only one type of instruction; it consisted of 48 consecutive bits starting anywhere in memory. The instruction was interpreted as three 16-bit addresses, X Y Z, and the operation was ‘copy the bit from location X to location Y, then to execute the instruction starting at location Z’. The students were first tasked with constructing a conditional branch (if bit A is set go to B, else go to C). I think the next assignment was to build a 16-bit adder. Now that is minimalist!

RM:
Would you say INTERCAL is the ultimate language for hackers?
DW:
It is though I use ‘hacker’ in the older, non-criminal sense, meaning someone who enjoys figuring out how to accomplish something despite the limitations of the available tools. One of the definitions in The Hacker’s Dictionary is: One who builds furniture using an axe.’

Much of the fun of INTERCAL comes from figuring out how it can be used to do something that would be trivial in other languages. More fun is had by extending the language with weird new features and then figuring out what can be done by creative use of those features.

RM:
Are there particular skills that you feel made you a good hacker?
DW:
Yes, but that doesn’t mean I can describe them. Certainly a key attribute is taking pleasure in accomplishing unexpected results using limited tools.
RM:
Were there multiple design reviews at the beginning of INTERCAL throughout?
DW:
No. Unless you call it a design review when a bunch of giddy students are tossing ideas back and forth and saying things like, ‘Oh, let’s add a way to disable executing a statement!’
RM:
Do you think the language has contributed anything useful to computer development?
DW:
Does entertainment count? I suppose there are also second-order effects such as giving some people (including Lyon and myself) a chance to learn about compilers and the like. Perhaps more important, when you have to solve problems without using any of the usual tools, you can sometimes learn new things.

In 2003 I received a note from Don Knuth saying he had ‘just spent a week writing an INTERCAL program’ that he was posting to his ‘news’ web page, and while working on it he’d noticed that ‘the division routine of the standard INTERCAL library has a really cool hack that I hadn’t seen before’. He wanted to know if I could remember which of Lyon or myself had come up with it so he could give proper credit when he mentioned the trick in volume 4 of The Art of Computer Programming but I couldn’t recall.

RM:
What was it that made you move from programming to developing games?
DW:
I’ve always developed games for fun (and occasionally as a play-tester for someone who does it for a living). I’ve been programming computers since I was eleven. Some of the stuff I program has to do with games, but I’ve never done game-related programming for a living.

Adventure’s effects on productivity have become the stuff of legend; whole computer science departments allegedly shut down until their staff had managed to solve the game. Adventure has predecessors in the Institutional Computing Era, but would you call it the first true work of interactive fiction? I’m not sure I see the connection between interactive fiction and Institutional Computing or productivity effects, but anyway, no, clearly not. Published role-playing games such as early Dungeons & Dragons clearly predate Adventure, and indeed were part of Crowther’s inspiration for it. And there may well have been interactive storybooks before D&D, though I don’t happen to know either way. However, I do think Adventure was the first ‘computer-based’ work of interactive fiction.

RM:
Microsoft is famous for asking puzzle-type questions to its applicants. And you like puzzles, what do you think of that as a way of gauging someone’s potential?
DW:
It’s one way to do so. But not all people are good at puzzles, and even those who are better at different types of puzzles, or can fail to spot the ‘trick’ to solving a puzzle. Of course, for some jobs it makes sense to look for people with a knack for puzzle-solving.
RM:
How has your way of thinking about programming or the way you program change from those earliest days to now?
DW:
Given how much programming languages themselves have evolved in the 30+ years since then, there’s of course all sorts of changes in how I program and how I think about the task. What’s more telling is what ‘hasn’t’ changed: I still most often start by designing the data structures I’ll be using. Object-oriented programming often makes that easier than it used to be, by letting me decide what level is appropriate for thinking about accessing/changing the data.
RM:
Do you think programming languages have changed qualitively in the 40 or so years, is there in use today that is better than Smalltalk for example?
DW:
Yes, there’ve been many changes in 40 years. I’ve never used Smalltalk myself so I can’t compare it specifically. I know there are certain feature of older languages that I occasionally wish for, but the bigger difference is not so much the languages as the libraries – writing for a graphical UI or even a web UI often involves designing at a different level than a text UI.
RM:
What do you consider as one of your most important technical achievements?
DW:
That’s a tough one. Most of the work that I’m proud of as a technical accomplishment isn’t really stuff that could be considered “important”, ranging from major performance improvements in various products at various companies, to a player aid I wrote on the Magic Cap platform for the boardgame Titan, to my PhD thesis on drawing planar graphs. It seems the more important stuff, as in, stuff that seems to have a lasting legacy, wasn’t noteworthy for the technical challenge.

Load comments

About the author

Richard Morris

See Profile

Richard Morris is a journalist, author and public relations/public affairs consultant. He has written for a number of UK and US newspapers and magazines and has offered strategic advice to numerous tech companies including Digital Island, Sony and several ISPs. He now specialises in social enterprise and is, among other things, a member of the Big Issue Invest advisory board. Big Issue Invest is the leading provider to high-performing social enterprises & has a strong brand name based on its parent company The Big Issue, described by McKinsey & Co as the most well known and trusted social brand in the UK.

Richard Morris's contributions