Most programming languages and compilers are designed to be practical. Maybe reality falls short—perhaps performance is worse than it should be, syntax becomes confusing or esoteric, or compiler optimizations wind up breaking code, but they're designed to be useful.

INTERCAL attempts to turn every programming convention and assumption on its head, and in doing so, is a language that is every bit as impractical as it is interesting and hilarious.

What in the world is INTERCAL?

A programming language designed to be different

INTERCAL was designed at Princeton University by Don Woods and James M. Lyon in 1972. The name stands for "Compiler Language With No Pronounceable Acronym."

In most situations, the names of programming languages aren't all that revealing. C? That tells you nothing. Python? What do snakes have to do with anything? Fortran—which is a mashup of the words Formula and Translation—tells you a bit of what the programming language should be used for, but it tells you nothing about what programming with the language will actually be like.

However, INTERCAL standing for Compiler Language with No Pronounceable Acronym perfectly conveys exactly what you should expect out of the language both in terms of performance and programming experience.

What is programming in INTERCAL like?

INTERCAL's goal was to build a language that was completely different from the other languages of the era. In the 1970s, that meant deliberately eschewing the conventions that typify languages like FORTRAN (now Fortran), COBOL, and Basic.

In that, the creators were successful. Variables, which are essential in most programming languages, aren't named with reader-friendly words; instead, they're marked with punctuation and have a numerical name. So, rather than your first 16-bit variable being variable_1, it would be .1. Your second variable would be .2, and so on.

To make things even weirder, if you wanted to create a 32-bit variable, you'd use a full colon as the sigil rather than a period, or "spot," as they're called in INTERCAL. Why? Because obviously, if one spot is a 16-bit variable, then two spots ought to be a 32-bit variable, and what is a full colon if not two spots stacked atop each other?

If you want to assign a value to a variable, you use the

.1 <- #255

Of course, that actually makes sense when you think about it—the little arrow indicates that the value is going to the variable. However, it flies in the face of the intuition built up by other programming languages, which makes for a frustrating, funny, and interesting experience.

Simple variables aren't the only unusual convention. Arrays composed of 16-bit values are demarcated by a comma, while arrays with 32-bit values combine the two-spot symbol with the array symbol—a semicolon!

The rest of the language is just as weird

If you want to skip a line—like you do when you write debugging lines and comment it out—you use ABSTAIN instead. You can also use ABSTAIN to disable entire classes of functions.

When you want to turn them back on, you have to use REINSTATE.

In a 1990 version of the language, INTERCAL trades GOTO (which is considered poor form and archaic today) for COME FROM, which fills the same role as GOTO, but works in exactly the opposite way.

If you don't ask nicely, it won't compile

To top off all the other strange conventions, INTERCAL also enforces another unusual requirement: politeness. Every once in a while, you need to insert a please into your program.

If you don't, the compiler will throw an E079 "PROGRAMMER IS INSUFFICIENTLY POLITE" error.

To be safe, you might be tempted to always say please, but that doesn't work either. Just like with people, if you try too hard, the compiler will spot that you're being disingenuous and throw an E099 error—"PROGRAMMER IS OVERLY POLITE."

The compilers and manual are just as weird

Sometimes the compiler won't cooperate

PS4 compiler flags in NotebookLM showing how it works
Jorge Aguilar / How To Geek

INTERCAL's compiler is every bit as eccentric as the language. Sometimes it'll return a "Random Compiler Bug." Not because it actually found a bug or because of a problem with the compiler, but just because it decided randomly that it didn't like a part of your code.

If it actually can't parse a line, it doesn't throw an error like you'd expect, it just treats the entire line like a comment!

The percent sign—INTERCAL's "double-oh-seven" operator—gives any line a percentage chance of running at all.

And those aren't alone either. When you read the manual, you'll find a lot of things like that.

The manual mirrors the language

As you undoubtedly expect, the documentation for a language like INTERCAL is also unusual and amusing. The manual has a deadpan, tongue-in-cheek tone that can be detected in nearly every word.

When you finally reach the end, you won't find an appendix, you'll find a tonsil. Why? Because the developers wanted to highlight another commonly-removed organ instead.

Everyone should try INTERCAL

Sometimes the nonsense leads to interesting insights

A split terminal shows a Jsonnet template producing a Python file of constants on the left and the generated Python output on the right.

INTERCAL is an impossibly difficult language to write practical code in, and though I didn't try writing any benchmark-worthy code myself, apparently the performance is truly abysmal.

However, every programmer should still give it a try. In and of itself, it won't be useful for anything, but it is a fantastic way to lay bare all the basic assumptions and intuition you have built up around programming.

If you've ever been stuck on a particularly troublesome spot of code, especially if you're trying to do something novel, you've probably had a snap moment of insight where the solution suddenly occurs to you. In my own experience, such epiphanies are often slightly (or very) outside the conventional box.

INTERCAL is a great way to keep your brain limber, and remind yourself that just because something is done a certain way doesn't mean it must be done a certain way.

Though, as INTERCAL plainly establishes, there are often good reasons for some conventions.

ChatGPT logo on a transparent background
What's included?
Unlimited conversations, faster response speed, priority access, and more
Brand
ChatGPT

ChatGPT's AI-supported assistance gets even better with a paid subscription; it Plus tier offers enhanced features including unlimited conversations, faster response speed, priority access, and more.


One of the longest-lasting jokes in computer science

More than 50 years after it was invented, INTERCAL is still compiled, discussed, and delivering snarky error codes to unsuspecting students.

In many ways, it is the first of the esoteric languages—programming languages designed to be "weird." A thought-experiment-turned-bad programming language spawned an entire genre of languages and an enthusiast community to boot, and is a great illustration of why good design works.