Before brainfuck and Befunge, there was INTERCAL. Its revival in 1990 by ESR may mark the beginning of the esolang movement, but the language dates back to 1972, when it was created in a famous late-night session at Princeton by Don Woods and Jim Lyon. The original version INTERCAL (sometimes called INTERCAL 72) is a rich parody with a more chaotic sense of play than its later revivals. Its instructions are deliberately vague and embrace an almost-believable hacker jargon, collected in a straight-faced, well-organized manual. Don Woods not only co-created INTERCAL, but is also noted for Colossal Cave Adventure, and the original version of the Hacker Dictionary: three essential cultural objects of geek culture.

At the bottom of the interview are links to more Woods/INTERCAL resources.

» Part of INTERCAL's charm is its jargon and syntax. For instance, the renaming of punctuation like rabbit ears for " and embrace and bracelet for { and }. While INTERCAL lore puts its creation in a single evening, did it grow out of existing in-jokes with Jim Lyon or others? Where did the impulse to rename things come from, and what did it feel like to create a language with this new set of vocabulary? Do you ever find yourself using INTERCAL jargon?

In truth, it all began with the renamed punctuation. I no longer recall what specifically led the conversation down that path, but we were trying to come up with names that all sounded alike/alliterative, so that reading a line of code became a sort of tongue twister. I think the "sp" terms were first: spot, spark, splat (for period, apostrophe, and asterisk), and then we added other silliness such as the embrace/bracelet pair. At some point we decided there should be a programming language that used this character set; I don't know if we came up with angle / right angle (for less than / greater than) and worm (for hyphen) before or after deciding angleworm would be the assignment operator. And so it went until we had much (though hardly all) of both the character set and the language design.

And no, with the possible exception of splat, I have weaned myself off of most of it. As a programmer it's too important for me to recite punctuation using terms other people are likely to understand!

» It is a long time ago, but what do you remember of the evening you created INTERCAL? Have you had similar bursts of inspiration in other times during your career? Had you and Lyon collaborated since or kept in touch after Princeton?

It was late, we'd finished our freshmen year exams, and we were letting loose. I've had other bursts of inspiration, most notably while developing Colossal Cave Adventure (a topic well documented on its own), though I cannot pin down the details of most of them so precisely.

Jim and I communicate only rarely now, usually because of something specific, such as when Knuth wanted to know which of us to credit for INTERCAL's "select" operator. (We couldn't remember for sure.) I'm in more frequent contact with some of his brothers who also work in Silicon Valley.

» In the Princeton INTERCAL manual, you state that the language eschews all conventions of languages like ALGOL, SNOBOL, FOCAL, and AP/I. Do you remember discussing specific features of these languages (or others) to parody or critique?

Program flow (loops vs GOTO), data types, and the operators. I wish we'd found a way to avoid even having an assignment operator; I've since seen other "fully functional" languages that manage that trick.

» Do you have a favorite INTERCAL program?

Not really. Probably the one I cite the most is the "benchmark" of 30 seconds to perform a single 16-bit integer division.

» INTERCAL has been hugely influential to the esolang community. Generally considered the first of its kind, it pointed the way to programming language design as a creative endeavor that goes beyond practical concerns. What do you make of its place in this timeline? What do you make of the work that's come after it? Since you wrote it, the place of computer programming in the workplace, in our broader culture, has completely altered, becoming more and more corporate. In this context, does being able to experiment and parody computer programming take on more importance to you? Have you come to see your creation as something that is more valuable over time?

To be fair, I haven't put a lot of effort into esolangs since finishing the original INTERCAL compiler. I've read and commented on others' efforts to expand the language, but have not contributed to the C-INTERCAL effort, etc.

While you're probably right that some of the attraction of esolangs is artistic, applying our programming skills to create something with no practical value, I suspect part of their appeal is to the "hacker" aesthetic, which I define as a talent for solving problems using restricted tools. "These are the operations available to me; how do I use them to do this?"

» That makes a lot of sense to me, the hacker aesthetic in "solving problems using restricted tools," which describes most esolangs, code golf, etc. You've collaborated on three very important cultural works in this aesthetic: the Hacker's Dictionary, INTERCAL, and Colossal Cave Adventure, the latter two initiating new genres of work. Are there other aspects of the hacker mentality that connect these three for you?

Hm, there are probably other common threads that have led me to become interested in all three, but I'm not finding any I can articulate at the moment.

» One aspect that occurs to me is the role of collaboration -- and I'm curious if you have thoughts on why such collaborations on creative projects seem natural for programmers, perhaps more so than in other fields.

I think that's a stretch: collaboration is part of the attraction of lots of human activities. We're social creatures! I've participated in some myself, e.g. I was in a chorus in a Gilbert and Sullivan troupe in college, but I don't associate that with the Hacker aesthetic.

» ESR, in his interview, stated that you and Jim Lyon didn't seem particularly interested in the language's legacy (at least back in 1990). Is this accurate? As for the INTERCAL revival and continued interest in the language, what do you make of the community that's sprung up around it (alt.lang.intercal and various derivative languages) and the explosion of esolangs since then?

I haven't gone to read that interview (yet), but I agree with ESR. There's a limit to how many of my past endeavors I can continue to allocate time toward! But I'm always pleased when those endeavors inspire people to innovate further.

» Let's talk about PLEASE, one of INTERCAL's best-known qualifiers. It brilliantly personifies the executor, as a person or god judging our code and allowing it to proceed or fail. How did you come up with PLEASE? Why, in the original manual, is PLEASE not explained? Lev Bratishenko, in a piece in the magazine CABINET, painted the executor as the programmer's dominatrix: "If PLEASE was not encountered often enough, the program would be rejected; that is, ignored without explanation by the compiler. Too often and it would still be rejected, this time for sniveling." Yet in more recent versions of INTERCAL (C-INTERCAL, CLC-INTERCAL, etc), the actual number of PLEASEs is indicated at one fifth, to avoid a PROGRAMMER IS INSUFFICIENTLY POLITE or OVERLY POLITE error -- meaning that current-day INTERCAL programmers can plan their PLEASEs, avoiding a try/fail approach. What are your thoughts on the various interpretations of the PLEASE qualifier? Do they reflect how programming, in general, has changed since the 70s?

I noticed that item in Bratishenko's piece, and it's not fully correct. The manual indeed did not explain that there were restrictions on the use of PLEASE. I think we were considering whether every statement should start with DO (there may have been some language with such a syntax) and had the idea of the optional qualifier, allowing statements to start with DO, PLEASE DO, or just PLEASE. It probably wasn't until we were actually building the compiler that we thought of having it complain about having too many or too few. But the compiler did issue an error message (the PROGRAMMER IS INSUFFICIENTLY POLITE or OVERLY POLITE messages you mentioned), and the associated error codes were even documented in the manual as inappropriate use of statement modifiers, or some such phrasing.

I remember a classmate -- one of the few brave souls who tried out INTERCAL in its early days -- saying he thought he'd gotten every possible error message out of a computer, until he was told PROGRAMMER IS OVERLY POLITE.

» What are your favorite programming languages, the ones that are a joy to write in?

I enjoyed APL a bunch but haven't used it since my undergraduate days. It has a lot of esolang properties. I remember hearing someone had managed to program Conway's cellular automata game of Life in a single line of APL. (It computed and printed the next generation, then looped back to the same line.) It did have the problem that finding ways to do stuff in a single line often led to very slow code as it generated multidimensional structures and sliced them in various ways.

For quick hacks these days I tend to use Perl. I might have ended up with Python instead but ran into Perl first and haven't needed to use Python for work, so never really learned it. Perl is fast to write stuff in and can easily handle math, strings, and structures, but I sometimes have to recode things for performance, in which case I usually fall back to C, possibly C++.

I also code a lot in PostScript. I used to work in that language, on the NeWS window system from Sun Microsystems, but now I mostly use it for tracking the current state while solving graphical logic puzzles.

» Part of the appeal of PLEASE is the sense of ambiguity in a place where we don't expect it -- after all, programming languages usually strive for precision. Also, the manual, which insists on its clarity while not being very clear at all. Did this come from your experience in working with languages of the time?

Very likely; certainly the manual was striving to poke fun at the IBM manuals I was using.

» Is there any type of algorithm INTERCAL is actually efficient at executing? Or is slowness the price of using the language?

There may be some algorithms that can make use of INTERCAL's unusual operators. That's probably why Knuth was interested in the "select" operator. But of course the implementation was not coded with efficiency in mind.

» What are you doing now professionally?

I'm at Okta, a "cloud identity" company. I work on the underlying directory structure, trying to keep things performant as our customer size scales up.

» In 2019, is a hacker still "one who builds furniture using an axe?"

Well, not literally, of course, though I suppose if someone does that I think the label would apply! Like I said, a hacker solves problems using the tools at hand. The result often isn't pretty and has a lot of rough edges, but it does the job and is faster than doing it the "accepted" way (if such a way even exists).

Again, that's why I think that's at least part of why programmers with a hacker mindset are attracted to esolangs: their unusual or limited features offer new challenges. Back in the 70s I heard about a course at Northeastern that required students to program a hypothetical computer that had only one instruction -- three consecutive fields x/y/z, interpreted as "overwrite the bit at location x with a copy of the bit at y, and start the next instruction at z" -- and I found (and still find) the concept delightful. I hope the students in that class had a hacker mindset, though! (The first assignment was to design an if/else; the next was to write an adder.)

» Why PostScript? Is it for the challenge of using it as a Turing Complete language, or is it something that you are just used to, or is there something about the aesthetic of the language that appeals to you?

It's not really a challenge, actually; it's quite complete, and if I'm trying to generate content on a page or screen it's got a great set of tools for anything of the complexity I tend to do. I don't use images a lot, but the stuff I write (again, most recently, tracking progress on puzzles) may involve lines and shapes as well as text, and it's perfect for that. While working on NeWS I built up a personal utility library for formatting text with various other effects, and for many things I find it a suitable toolset than the modern document apps.

» Any advice for people starting new geeky projects? Any recent projects that stand out to you?

Get feedback early. You probably have geeky friends who would be excited to fiddle with early prototypes; watching them can give you inspirations for things to add or improve. This is true even if your core project is already a group of friends: seeing different people use your stuff will often reveal opportunities you hadn't considered, and the earlier that happens the better.

» Any final thoughts on INTERCAL?

As with the other two works you mentioned, the Hacker's Dictionary and Colossal Cave Adventure, I was surprised by how popular it became. INTERCAL's longevity surprises me the most, as of the three it seems to require the most effort for the least reward. Still, for INTERCAL, massive effort for small results has always been part of the fun. I'm glad people are still having fun with it!



INTERCAL and its variants on the Esolangs wiki

  • C-INTERCAL (the 1990 revival)
  • CLC-INTERCAL (which includes "Quantum INTERCAL")
  • TriINTERCAL Ternary and uses the "logical but" operation

  • Additionally, there are variations which do away with PLEASE entirely (it was in decline starting with C-INTERCAL) like POGA-INTERCAL. There's Threaded INTERCAL to have several poorly-performing threads instead of just one, and a host of other entries.