keepcalculator

06 Numbers and Powers

Weird Programming Languages That Are Secretly Brilliant

Card No. 06·55376 · Updated · Standard formula, shown below

Average pace 5.00 min/km
Average speed
12.00 km/h
Result
Finish time
50 min
You entered
Distance
10 km
You entered
You enter
Finish time, Distance
You get
Average pace, Average speed
Rounding
2 dp

This article answers the question: which weird programming languages are secretly brilliant? The short answer is that languages like Brainfuck, INTERCAL, Whitespace, and others that seem absurd on the surface often teach deep concepts about computation, push the boundaries of what code can be, and even find practical niches that conventional languages fill poorly. Below is a detailed look at why these oddities deserve respect, how they work, and what you can learn from them.

Formula

The calculator above works out your average pace and speed for a run, walk, or ride. You enter the total time (in minutes) and the distance (in kilometers). The first output, average pace, is simply the time divided by the distance:

pace (min/km) = total time (min) / distance (km)

The second output, average speed, is the distance divided by the time in hours:

speed (km/h) = distance (km) / (total time (min) / 60)

For example, if you finish a 10 km run in 50 minutes, your pace is 50 / 10 = 5.00 min/km, and your speed is 10 / (50/60) = 12.00 km/h.

Worked Example

Using the default values from the calculator above:

  • Total time: 50 minutes
  • Distance: 10 km

First, calculate the pace:

50 min / 10 km = 5.00 min/km

Next, convert the time to hours:

50 min / 60 = 0.8333 hours

Then calculate the speed:

10 km / 0.8333 h = 12.00 km/h

The calculator returns 5.00 min/km and 12.00 km/h, matching these steps.

What Makes a Language “Weird”?

A language is usually called weird when it breaks the conventions of mainstream programming. That could mean using only whitespace for code, having commands that are deliberately obfuscated, or forcing you to think in terms of a single stack or a single cell of memory. The weirdness is often a feature, not a bug: it forces you to strip away assumptions about what programming should look like and focus on the bare mechanics of computation.

Many of these languages were created as jokes, art projects, or academic exercises. Yet they have survived for decades because they reveal something true about how computers work and how humans think. The best of them are not just novelties—they are teaching tools, brain teasers, and occasionally even useful utilities.

Brainfuck: Minimalism to the Extreme

Brainfuck, created by Urban Müller in 1993, is perhaps the most famous esoteric language. It has only eight commands: >, <, +, -, ., ,, [, and ]. The language operates on an array of memory cells, each initially set to zero. You move a pointer, increment or decrement the current cell, input or output a byte, and loop while the current cell is nonzero.

Despite its absurd simplicity, Brainfuck is Turing-complete, meaning it can compute anything that any other computer can, given enough time and memory. That is a profound fact: you do not need a rich syntax or a large standard library to perform any computation. Writing a program in Brainfuck is like assembling a machine from raw gears, and it gives you a visceral appreciation for what compilers and interpreters do.

INTERCAL: The Language That Punishes You

INTERCAL (Compiler Language With No Pronounceable Acronym) was created in 1972 by Don Woods and James Lyon as a parody of programming languages. It includes commands like PLEASE, which the compiler requires you to use with a certain frequency—too few and it complains you are not polite enough; too many and it accuses you of groveling. It also has a random number generator that is not random, and a statement that does nothing but is syntactically required.

INTERCAL is brilliant because it makes you question what a language is for. It is not designed to be efficient or readable; it is designed to be difficult. Yet in that difficulty, you learn about compiler design, parsing, and the arbitrary rules that all languages impose. It also has a dedicated following that has written real programs in it, proving that almost any language can be used if you are stubborn enough.

Whitespace: Code You Cannot See

Whitespace, created by Edwin Brady and Chris Morris in 2003, uses only spaces, tabs, and linefeeds as its syntax. All other characters are ignored as comments. This means you can write a program that looks like a blank file, or you can hide it inside a comment in another language. The language has a stack and a heap, and it supports arithmetic, control flow, and subroutines.

Whitespace is secretly brilliant because it challenges the idea that code must be visually readable. It forces you to think about the actual sequence of instructions rather than the symbols on the screen. It also has a practical use in steganography: you can embed a Whitespace program inside a normal-looking source file, and no one will notice unless they look at the raw bytes.

Befunge: A 2D Grid of Commands

Befunge, created by Chris Pressey in 1993, is a two-dimensional language. The program is a grid of characters, and the instruction pointer moves in any of the four cardinal directions. Commands can change the direction, push and pop values on a stack, perform arithmetic, and even modify the grid itself. The original Befunge-93 has a playfield of 80×25 cells, and the pointer wraps around the edges.

Befunge is brilliant because it makes control flow spatial rather than linear. You can write loops that go in circles, and you can even create self-modifying code that changes the program while it runs. It is a great way to learn about stacks, pointers, and the concept of a program counter. It also produces beautifully strange source code that looks like ASCII art.

Why Bother Learning Them?

The most common question is: why would anyone spend time on these languages when there are real jobs to do? The answer is that they teach transferable skills. Brainfuck teaches you about memory management and loops. INTERCAL teaches you about parsing and syntax rules. Whitespace teaches you about the difference between text and meaning. Befunge teaches you about control flow and self-modification.

They also make you a better debugger. When your only tools are eight commands, you learn to trace through every step mentally. That skill carries directly to debugging complex code in Python or C++. Furthermore, these languages are fun. They turn programming into a puzzle, and many programmers find that solving those puzzles rekindles their curiosity and creativity.

Common Misconceptions

One misconception is that esoteric languages are useless. While they are not suited for production software, they have real applications in education, art, and security. For example, Whitespace is used to hide messages in plain sight, and Brainfuck interpreters are a common exercise in compiler courses. Another misconception is that they are all the same. In reality, each one has a distinct model of computation, from the tape of Brainfuck to the grid of Befunge to the stack of Forth-like languages.

People also assume that these languages are impossible to read. That is true for the source code, but the point is not readability—it is the intellectual challenge. Finally, some think that you need to be a genius to use them. In fact, they are often easier to learn than mainstream languages because they have so few rules. The difficulty lies not in the syntax but in the thinking required.

How to Choose One to Try

If you want to explore, start with Brainfuck because it is the simplest. Write a program that prints “Hello, World!” and you will immediately understand the appeal. Then try Befunge to see how spatial layout changes your thinking. If you want a laugh, read the INTERCAL manual—it is genuinely funny. If you want to impress friends, hide a Whitespace program in a comment.

There are also more recent esoteric languages worth knowing: Chef, where programs are recipes; Ook!, which is Brainfuck with orangutan sounds; and Malbolge, which is designed to be nearly impossible to program in. Each pushes a different boundary. The best way to learn is to pick one, read its specification, and write a small program. You will likely fail at first, but the failure is part of the lesson.

Frequently Asked Questions

Are these languages actually Turing-complete?

Yes, most of them are. Brainfuck, Whitespace, and Befunge are all Turing-complete, meaning they can simulate any Turing machine. INTERCAL is also Turing-complete, though it is more awkward. Malbolge is Turing-complete as well, but it is so difficult that only a few programs have ever been written in it. This means that, in theory, they can compute anything a conventional language can.

Can I get a job using esoteric languages?

Almost certainly not. No company is hiring Brainfuck developers. However, knowing them can be a talking point in interviews and can demonstrate that you understand fundamentals. It also shows that you are curious and willing to learn. But for a job, you should stick to mainstream languages like Python, Java, or JavaScript.

What is the hardest esoteric language to learn?

Malbolge is widely considered the hardest because it is designed to be impossible. The instructions are encoded in a self-modifying way, and the program counter moves in a non-linear pattern. Only a handful of Malbolge programs have been written, and the first one took months to create. INTERCAL is also difficult, but at least it is readable as a joke. Brainfuck is hard to write but easy to learn.

Are there any practical uses for these languages?

Yes, a few. Whitespace is used for steganography because it can hide code in plain text. Brainfuck is sometimes used as a benchmark for interpreters and compilers. Befunge has been used in code golf competitions. And all of them are used in education to teach concepts like Turing completeness and parsing. They are not practical for production, but they have niche uses.

How long does it take to write a simple program in Brainfuck?

For a simple program like “Hello, World!”, it might take a beginner a few hours. The challenge is that you have to manually manage memory cells and loops. There are tools and interpreters that help, but writing it by hand is a good exercise. Once you get the hang of it, you can write small programs in minutes, but anything complex becomes tedious.

Do these languages have compilers or interpreters?

Yes, there are interpreters and compilers for all of them, most of them free and open source. You can find them on GitHub or in package managers. Some even have online interpreters where you can run code in your browser. The implementations are often small and simple, which makes them great for studying how interpreters work.

Related

Formula used
in t | Finish time | min | 50 | 0
in d | Distance | km | 10 | 0 | 100000
out pace | Average pace | min/km | t / d | 2
out speed | Average speed | km/h | d / (t / 60) | 2

Each line is one input (in, sel, list) or one result (out: label, unit, formula, decimals). How the calculators work

Method: the standard formula for this calculation, rounded as each result states. See how the calculators work or report an error.

More cards in this drawer

The whole Numbers and Powers drawer →