Stack OverflowWhat is your favorite esoteric programming language?
[+24] [40] Adam Bellaire
[2008-10-09 15:10:08]
[ programming-languages polls fun esoteric-languages ]

In the spirit of "fun polls"... What is your favorite esoteric programming language [1]?


See Also:

I thought it might be nice to summarize the responses, because although there are other lists (see comments below), it turns out that this list resulted in some (arguably) non-esoteric languages getting in. Also, to my knowledge none of the other lists is ranked based on votes, but these of course are. Note that only responses with at least 1 upvote are listed below.

Responses by Votes

I know you want this to be a poll question, but I found this list of esoteric programming stuff, for anyone interested: - Sergio Acosta
You should also note: - grieve
(2) There's a huge list of esoteric languages here: - Bruce Alderman
C++, definitely. I like it so much I even use it for serious work! - Eduardo León
(2) Please see the discussion at… for why the name of a particular programming language is being censored. - Bill the Lizard
Closing for reasons stated on meta,… and because Brain**** was edited yet again. Locking to prevent deletion. - Bill the Lizard
[+89] [2008-10-09 15:17:03] Robert S. [ACCEPTED]

Definitely LOLCODE [1]. It elegantly combines programming language design with one of the strangest memes [2] of this century.

Hello World example:


My favorite example from the Wikipedia article:

   UP VAR!!1

Here's some object-oriented code, sort of:

O HAI IM thing

I HAS A someThing ITZ LIEK A thing

LOLCODE is also implemented as a procedural language [3].


Does it have a compiler yet? - Paul Nathan
Yes. I believe you can even get LOLCODE.NET (which targets the .NET platform). - Thomas Owens
There's also a version in the DLR for testing purposes. - Robert S.
Also here is an example of turing completion of lolcode: - Ólafur Waage
(2) OMG! :-D I would love having my caps lock key on all day. :-D - J.J.
What's so esoteric about it? It's pretty mainstream. - Constantin
(3) Yeah Constantin, all those production apps written in LOLCODE... - Robert S.
(4) my company uses LOLCODE for interviews, since it's a language most candidates have no experience with (even if they know what it is, they've never used it) - rmeador
(9) Internet humor is so lame. LOLZ EPIC PHAIL XD - Firas Assaad
(1) Doesn't the new edition of Knuth's book on literate programming use lolcat? - Martin Beckett
@rmeador: I'd laugh myself silly during the interview. - Robert Harvey
[+45] [2008-10-09 15:37:03] rmeador

Brain* * [1]. It lives up to its name...


I never used it, and I hope I never have. One vote up. - gyrolf
People have even written games in it: - grieve
I bet no one really writes in it. I'd bet anything of significant size is essentially "compiled" (translated) via a script into BF. Why someone would bother to do this is beyond me, but I've done some seemingly pointless things in the hopes of learning some new programming ideas, so maybe that's it. - Beska
(3) Please see the discussion at… for why the name of a particular programming language is being censored. - Bill the Lizard
[+36] [2008-10-09 15:19:11] Adam Bellaire

After seeing it mentioned here, Piet [1], because of its startling appearance.

- "Hello, world!"


The image didn't really work, but up-vote anyway. - Andrei Krotkov
(5) Is it The Art of computer programming? ;-) - Zen
[+29] [2008-10-09 15:11:18] Jay

Definitely Whitespace [1] which I like because it's clever and seems like it almost has to be a hoax, but it's not. Code sample not really viable in this forum, I think ;)


(1) We had to do a Hello World program and a couple others small ones for this language in my programming languages class. It was definitely an eye opening experience. Would not want to use it for much more than Hello World though - jmein
[+27] [2008-10-09 15:50:46] Matt Cruikshank

The Shakespeare Programming Language [1], for sure.

You really HAVE TO look at the code examples. They're huge.


(1) That is pure evil... enjoyable though. - chills42
it's completely useless, but such nice source code :-D - fly.floh
[+26] [2008-10-09 15:17:28] jop

APL! look at all the special keys that you can use in your code:

alt text

APL is a mistake, carried through to perfection. It is the language of the future for the programming techniques of the past: it creates a new generation of coding bums.

--- Edsger Dijkstra, 1968

I don't think any other language can beat that.

(1) APL was awesome. I used to use it when I was an Actuary. Kinda hard to read though. - wcm
If Perl is the king of one-liners, then APL is the deity of one-liners. Definitely mind-bending and the definitive 'write-only' language. - Michael Easter
(5) I WANT A KEYOBARD LIKE THIS ! ... :) oh, actually ... I WANT AN ERGONOMIC KEYOBARD LIKE THIS ! - Ande Turner
(5) We used to pride ourselves on writing programs in 4 or 5 lines that would have taken several pages in another language. If you complained that it was hard to read then you were immediately ridiculed. Good times... - wcm
(1) Of course, that keyboard is a simplification. Composite symbols such as (rectangle) (backspace) (division) for matrix inversion/division, and so forth... - Brent.Longborough
There are a lot more special keys in APL than in that picture. - Christian Davén
@sudo bountiful: comes close :) - knittl
(4) Dijkstra was a miserable bugger wasn't he ? - Martin Beckett
Conway's Game of Life in 1 line of APL: - Dinah
I need to buy this keyboard. - Callum Rogers
[+26] [2008-10-09 15:22:52] David Arno

Ook! is the most esoteric programming language ever. Here is the classic hello world program written in Ook:

Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook.

See for a number of Ook! resources.

That's brilliant. :) - different
(3) Can't be a code monkey with Ook! though. - Paul Nathan
Very useful though. It produces completely pronounceable code! I can just read the source aloud to my friends, and I will seem incredibly funny. - fishlips
(8) great for librarians! - fortran
good reference fortran ;) - Gregoire
@Gregoire: I believe that was the point of the language to begin with. From the original page, "What do you expect for something usable by orang-utans?" - Dinah
(1) Ook's just brainfuck, don't forget. - Skilldrick
[+14] [2008-10-09 15:35:13] rmeador

Without a doubt, INTERCAL [1] is the best esoteric programming language. It even says it's the canonical example on the Wikipedia page!


[+14] [2009-10-02 19:03:17] Dinah
[+13] [2009-05-16 11:58:41] JC Denton

Befunge [1]

Befunge is a stack-based, reflective, esoteric programming language. It differs from conventional languages in that programs are arranged on a two-dimensional grid. "Arrow" instructions direct the control flow to the left, right, up or down, and loops are constructed by sending the control flow in a cycle.

The technique of using arrows to change control flow is demonstrated in the random number generator program below. Following the arrows around, the ? instructions send the instruction pointer in random cardinal directions until the pointer hits a digit, pushing it to the stack. Then the arrows navigate to the . to output the digit from the stack and return the pointer to the first directional randomiser. Note that there is no @ to terminate this program so it produces an endless stream of random numbers from 1 to 9.


vv  <      <
    ^  v<
    ^   ^
>  >?>  ?>5^
    v   v
    v  v<
 .  >  >   ^

I really like this one: programming thinking 2D is amazing! :-) - Zen
... and its n-dimensional variants. - Oak
[+13] [2008-10-09 15:28:43] Bill the Lizard

LabVIEW [1] because even the source code is graphical.

alt text


Nice! I was thinking of tossing that one in. - Avdi
labview is very popular with EE types I've noticed. - Paul Nathan
That's how I was introduced to it. It's even used in some EE college programs. - Bill the Lizard
LV's a great niche language for hardware access (I make a living at it). CS folks tend to have an allergy to LV, despite the fact that it has a peculiar resemblance to C. - Joe Zoller
(1) I mock it due to its bad taste to be not mergable. - Joshua
It doesn't really seem esoteric to me - looks like a completely normal series of gates to me. - Andrei Krotkov
(1) Labview, in a different form, is also used for programming the Lego Mindstorms NXT. - Joren
Keep in mind that that is massively concurrent. - Arafangion
@Joren It's called NXT-G. The GUI is based on Flash, IIRC, so the "IDE" is terribly slow and heavy. - muntoo
[+11] [2008-12-05 03:25:10] Norman Ramsey

Hands-down, my favorite esoteric language is the 2D language designed by the Cult of the Bound Variable for the 2006 ICFP programming contest.

Dear cult.cbv.discuss:

I'm pleased to announce a new programming language called 2D. This language frees the programmer from the shackles of linear programming by allowing programs to occupy two dimensions. However, unlike 3- and 4- dimensional languages like CUBOL and Hypercard, it does not distract the programmer's attention with needless dimensional abandon.

I first present an overview of the language and then delve into a more careful description of its syntax and semantics.

2D Overview

2D programs are built from boxes connected together by wires. A box takes the following form:


Wires can connect boxes:

*========*       *========*
*========*       *========*

Each box has two input interfaces: its North and West sides. It also has two output interfaces, its South and East sides. The following box sends the input that it receives on its North interface to its East interface:

!send [(N,E)]!----->

Wires carry values from one box to another. Each wire starts out with no value. When a value is sent along a wire, the wire keeps that same value forever. A box will only activate when all of its inputs (zero, one, or two) have values.

The values flowing along wires take on the following forms:

val ::= () | (val, val) | Inl val | Inr val

The () value is the single base value. Two values can be paired together. They can also be stamped with the disjoint constructors Inl and Inr. Commands manipulate the structure of values and the control flow of the program by selectively sending along their outputs. For example, the 'case' command distinguishes between values stamped with Inl and Inr:

 !case N of E,S!----

If this box is sent Inl () to its North interface, then () is sent along the wire connecting to the east interface. If it is sent Inr ((), ()) then ((), ()) is sent along the south interface instead.

2D programs can be organized into modules. A module encapsulates a collection of boxes and wires and gives them a name. The following module, called stamp, encapsulates the operation of applying the Inl and Inr constructors to the first and second components of a pair:

:stamp   |                                       :
:        v                                       :
:     *=======*                                  :
:     !split N!-----+                            :
:     *=======*     v                            :
:        |       *=========================*     :
:        +------>!send [((Inl W, Inr N),E)]!------
:                *=========================*     :
:                                                :

(The split command splits a pair, sending the first component south and the second component east.)

A module can be used as a box itself. The following circuit sends (Inl (), Inr Inl ()) along the wire to the east:

        !send [(((), Inl ()), E)]|---+
        *========================*   |
  !use stamp!-----------------------------------

Each time a "use" box is executed, a new copy of the referenced module is made (with wires carrying no values). Recursion is just a particular use of modules: modules may also "use" themselves. Mutual recursion between modules is also permitted.

A module is limited to at most one input along each of its north and west faces. It may have multiple outputs, all along its east face. When a module is executed, exactly one of its output wires must be sent a value; this is the value that the "use" box sends along its interface.

2D Syntax

Box syntax

A box's north and south edges are written with the = symbol. Its west and east edges, which must be exactly one character long, are written with the ! symbol. The box's corners are written *. No whitespace is allowed between the command and the box that surrounds it.

The concrete syntax for commands is as follows:

inface ::= N | W

outface ::= S | E

exp ::= () | (exp, exp) | Inl exp | Inr exp | inface

command ::= send []
          | send [(exp, outface)]
          | send [(exp, outface), (exp, outface)]
          | case exp of outface, outface
          | split exp
          | use "name"

Note that extra parentheses are neither required nor permitted. A space character may be omitted when the character to its left or to its right is one of ,()[] and two consecutive space characters are never allowed.

A name consists of one or more characters from the following set:


If a wire is connected to the north side of a box, the v character must be used as follows:


The wire can connect above any = character. If a wire is connected to the west side of a box, the > character must be used as follows:


At most one wire can be connected to each of a box's four faces.

Wire syntax

Wires are made from the following characters:


Every wire must use at least one of these characters. That is, > and v alone are not valid wires.

Each character is "open" on some of its sides. The | character is open on its north and south sides. The - character is open on its west and east sides. The + and # characters are both open on all four sides.

The = character on the south face of a box is open to its south, and the ! character on the east side of a box is open to its east. The v character is open to its north, and the > character is open to its west.

All wire characters within a module must obey the following rules of connectedness:

  • For each - character, its west and east neighbors must both be open on their east and west sides, respectively.

  • For each | character, its north and south neighbors must both be open on their south and north sides, respectively.

  • For each # character, its north, south, west, and east neighbors must each be open on their south, north, east, and west sides, respectively.

  • For each + character, exactly two of the following conditions must be met: a. its north neighbor is open on its south side b. its south neighbor is open on its north side c. its west neighbor is open on its east side d. its east neighbor is open on its west side

Only the | and - wire characters are allowed along module boundaries, and they only require a single open neighbor on the inside of the module. (They do not syntactically connect to anything on the outside.)

Module syntax

The input consists of an arrangement of non-overlapping modules. Each module is bordered by the . character on its north and south face, the : character on its west and east face, and the , character in each corner. Additionally, the north face may optionally have one occurrence of the | character; this is the north input to the module. Similarly, the west input (if any) is represented by a - character. The east side of the module may have any number of occurrences of the - character; these are its outputs. A module's name must appear in the upper left corner of the module and be followed by a space.

2D Semantics

Evaluation of 2D programs revolves around a function for computing the value of a module instance. A module instance is a collection of wires, some of which have values, and the boxes that these wires connect.

A module instance evaluates in a series of evaluation steps. In each step, the "ready" boxes are identified as those boxes for which all of their inputs wires have values, and which have not yet executed in this instance. All ready boxes are evaluated (see below) in an arbitrary order. If no boxes are ready, then the module instance is finished. Its output is the value of the single output wire that has a value. If more than one wire has a value, or if no wire has a value, then evaluation fails.

Box evaluation

Boxes only execute when all of their input wires have values. This is true even if the command does not reference all of the wires.

Commands are executed as follows. First, all expressions in the command are evaluated. The expressions N and W are replaced with the values on the North and West wires, respectively. If a value is needed but no wire is connected, then evaluation fails. Then, commands are executed as follows:

send []

nothing happens.

send [(val, outface)]

val is sent along the specified outface.

send [(val1, outface1), (val2, outface2)]

val1 is sent to outface1, and val2 is sent to outface2. The two outfaces may not be equal.

split (val1, val2)

val1 is sent south, and val2 is sent east.

case Inl val of outface1, outface2

val is sent to outface1.

case Inr val of outface1, outface2

val is sent to outface2.

use mod

a new instance of the module mod is evaluated. The inputs to he module must match the inputs to this box, and are instantiated with the values along those wires. The output along the east face is the output of the module instance.

In any other situation (for example, split ()), the machine fails. If a value is sent along an outface, then there must be a wire connected, or the machine fails.

I loved 2D! I think some people would appreciate a spoiler warning, though, thinking of that ICFP contest as an unusual work of IF. (Incidentally my team was kind of proud that the five of us together scored a little better than Norman Ramsey -- we joked about it at the time.) - Darius Bacon
(1) Reminds me - Liran Orevi
[+11] [2008-10-10 21:03:54] Constantin

K Language [1], a wild APL/Scheme crossbreed.

Hello world:

"Hello world"

Compute maximum running sum inside a list of numbers:


Sudoku solver:


N-queen [2] solver:

qn:{[n],/{:[n=#*x;,*x;,/_f'f x,\:/:(!n)_dvl,/x]}’(f:0 -1 1+/:)@!n}

You still think Perl is terse?


p,:3/:_(p:9\:!81)%3 s:{*(,x)(,/{@[x;y;:;]‘&21=x[&|/p[;y]=p]?!10}’)/&~x} Just looking at this makes me want to hurt someone. - DoR
[+10] [2008-10-09 15:11:14] Lance Roberts


You can write the most efficient (not necessarily readable) expressions.

No down vote, but curious if you think Perl is really esoteric. - wcm
(3) Perl is incredibly esoteric. It is the only truly "write only" language out there. - David Arno
It's esoteric for me for two reasons: 1) I only get to use it a little, so I get to relearn it every time I need it, 2) It seems to be the only language I've really found that was built for minimalist programmers. - Lance Roberts
(8) To someone who doesn't know the language, ANY programming language can appear unreadable. That's not what esoteric means, though. - Bruce Alderman
And there's also Perl's read-only complement: PHP. With function names like "htmlspecialchars_decode", you can probably guess why it's impossible to write without heading to the function reference every 15 seconds. - flussence
(1) @aardvark any language but Python! xD - fortran
[+9] [2008-10-09 15:17:20] VonC

Scratch [1], to go back to basics ;)

More at Scratch web site [2].

That way, I can show my nephew of 5 years old about my job ;)
And he is already explaining to me about recursion !?? (because "it makes nice drawing in scratch [3]"...) What can I say ? He's got the latest PC, I had a ZX81... and not before 11 years old.


Reminds me a bit of ladder. - voyager
(2) What can I say ? He's got the latest PC, I had a ZX81... You can say that hw isn't what it used to be. ;) - just somebody
[+8] [2008-12-04 12:08:44] namin

Iota [1]: an unambiguous Turing-complete language with just two symbols. Iota exploits the amazing fact that any combinator (i.e. lambda-definable term) can be written using only the two combinators S (lambda (x) (lambda (y) (lambda (z) ((x z) (y z))) and K (lambda (x) (lambda (y) x).

This fact is closely tied to the Curry-Howard isomorphism: the types of combinators correspond to tautologies of propositional logic. For example, the type of K is A -> B -> (B -> A). Read A, B, C as variables and -> as implication. Try S: A -> B -> C -> ((A -> C) -> (B -> C). Even more, any tautology can be derived from S and K using modus ponens. Why? The rules (for abstraction and application) in typed lambda-calculus correspond to the rules (for introduction and elimination of implication) in a natural deduction system.


You'll really enjoy Unlambda: and for the second part of your answer: you'll really enjoy Agda: - efficientjelly
[+7] [2008-12-23 19:13:45] dalle

F*ckF*ck [1].

From the original specification [2]:


For those of you who blush when reading the original syntax, wish to have your grandma proof read your code or simply don't quite wish to get fired yet. The mnemonics can be censored with asterisks or with any letter of the alphabet replacing the second and/or third characters. Censored language can be interspersed with the original more full blooded form. Some f*ckf*ck programmers choose to use the censored code for the majority of their coding so as not to distract from the value and expression of the original syntax which they save for moments of extreme aggression/inspiration.

HelloWorld in F*ckF*ck, censored accordingly:

f**k b**b!!!!!!!! a**e s**g b**b!!!!!!! f**k t**s b**t s**g c**k f**k b**b!!!!!! a**e s**g b**b!!! f**k t**s b**t s**g b**b c**k b**b!!!!!! c**k! b**b!! c**k a**e t**s b**t f**k b**b!!!!!!! a**e s**g b**b!!! f**k t**s b**t s**g c**k f**k b**b!!!!!!!!!! a**e s**g b**b!!!!!!! f**k t**s b**t s**g t**s c**k t**s!!!!!!! c**k b**b!! c**k t**s!!!!! c**k t**s!!!!!!! c**k a**e t**s b**t f**k b**b!!!!!!! a**e s**g b**b!!! f**k t**s b**t s**g b**b c**k a**e t**s b**t b**b!!!!!!!!! c**k


(4) I wonder where this comes in Maslow's Hierarchy of Needs? - Brent.Longborough
(4) Loling right now. I don't believe code has ever made me lol before. - jjnguy
(3) This one should be renamed, "Tourette's." - Dinah
(3) Censorship sucks. Bringing back the original. - dalle
This is garbage... - Miyagi Coder
@dalle This is all we got. - muntoo
[+7] [2008-10-09 15:37:07] community_owned

Prolog has always been a favorite of mine. The whole idea behind an executable problem specification and the simplicity of how it works behind the scenes astounds me.

Oh, come on! You didn't even mention that, for any given Prolog program, the most likely response you're going to see is "no." ;-) - Bob Cross
[+6] [2008-10-09 15:17:44] Zarkonnen

HOtMEfSPRIbNG [1], full stop. Programming as seen through the lens of salmon moving through a system of rivers. Sample code:

Universe of bear hatchery says Hello. World!.
 It   powers     the marshy things;
the power of the snowmelt overrides.

(2) oh, how poetic! i knew it all along ... programming is poetry! - steffenj
[+6] [2008-10-09 15:46:16] idean

Forth [1]

I wrote a few short programs in this many, many years ago. I really liked the whole Stack-oriented nature of it. Of course, it helped that my calculator of choice at the time was an HP-11C [2].


(1) Honestly, man, put some code in there! Do some : 0 1 ; funky stuff! Show CREATE ... DOES>! Take over the interpreter for an encore! People just don't understand how incredibly cool Forth really is... - Daniel C. Sobral
[+6] [2009-09-30 23:13:53] tster

My favorite is ZOMBIE [1].

ZOMBIE is a programming language designed for Necromancers, particularly evil ones. (Actually, what other sorts are there?) ZOMBIE is an acronym, and stands for Zombie-Oriented Machine-Being Interface Engine.

Sample Programs

Hello World

HelloWorld is a zombie
    task SayHello
    	say "Hello World!"

Fibonacci Numbers

Zombie1 is a zombie
    remember 1

Zombie2 is a zombie
    remember 1

FibonacciZombie is a zombie
    remember 0
    task SayFibonaccis
    		say moan Zombie1
    		say moan Zombie2
    		remember Zombie1 moan Zombie1 moan Zombie2
    		remember Zombie2 moan Zombie1 moan Zombie2
    		remember moan 2
    	until remembering 100

[+3] [2008-10-10 20:28:33] Markus Lux

Java2k [1] could be fun :)

Java2K is not a deterministic programming language, but a probabilistic one. Even for built-in functions, there is only a certain probability the function will do whatever you intend it to do. All Functions have two different implementations. At runtime, based on a pseudo-RNG, the actual implementation is choosen. This is in line with common physicalist assumptions about the nature of the universe - there is never absolute security, there is always only probability.

More funny features can be found here [2].


[+3] [2009-09-30 00:22:35] Dinah


It's identical to C except you use closing braces to open, opening braces to close, swap the meanings of + and -, * and /, ; and :, > and <, etc. Example:

int foo)int i, char c( }
    int six = 2 / 3:
    int two = six + 4:
    if )i > 0( }
        printf)"i is negative"(:

(3) Poof Oh crap, my head just exploded. I could handle Brainfuck, whitespace, even Lisp, but this is just too much for me. - Josh
Haha @ "even Lisp". +1 - Eduardo León
[+3] [2008-10-09 15:12:40] Paul Nathan

Lisp. It's not esoteric really, but it does bend my mind when I use it, and it's functional enough as a language that I don't feel that I'm playing with a pointless toy.

(3) Lisp is purity and beauty. Compared to Lisp all other languages are esoteric. - Tirpen
[+2] [2008-10-09 15:28:51] Steve Baker

Bash -- Yes, the Bourne-Again Shell, you can almost write real programs with it! Go on, try to write a web browser in bash, you can almost actually do it, and it's fun! What's more, you can use it for actually useful things, which you by and large can't in other esoteric languages. I will admit that Perl might be even more esoteric, but I love bash more.

I have somewhere deep in my archives a web server in nc + POSIX shell + a few standard POSIX utilities. - Joshua
[+2] [2008-10-09 17:26:28] John Nilsson

Subtext. A language with a visual representation of control flow.

Look at the presentation video here:

[+2] [2008-12-04 11:45:08] Cameron MacFarland

My favourite is Chef [1] but I'm also a fan of Brain**** [2] and Whitespace [3].


See for why we munge obscenites on StackOverflow. Also see Bill the Lizards comment on earlier answers. - Lance Roberts
[+2] [2009-09-13 23:08:20] Pascal Thivent

Logo [1] and its famous Turtle [2] with a pen attached to its tail :)

The following code draws a square:

FORWARD 100 ; draws a square with sides 100 units long

or with a loop:

REPEAT 4 [FD 100 LEFT 90]

Just for the record, the Hello World program in Logo looks like this:

print [Hello World]

[+1] [2008-10-09 15:34:22] Avdi

REXX. Common on IBM operating systems and almost completely unheard-of anywhere else. I can't remember a single thing about it now, but it's the language I first taught myself to code in, so it gets my vote.

I've heard about it before...someone was touting it as a great scripting language. - Paul Nathan
(1) It was also the successor of AmigaBASIC as the standard system scripting language on the AmigaOS. This incarnation was called ARexx. - Jörg W Mittag
(1) Rexx was in no way esoteric. It was an excellent embedded scripting language long before Tcl. All praise Mike Cowlishaw! - Norman Ramsey
I always thought of Rexx as the firsy PL I encountered that was "user-friendly". In other words, whatever I wrote with it just didn't have bugs, and this was due to the language, not me. - Brent.Longborough
I used to use it to glue together a process that was a mix of SAS, OS/2 batch, MS-DOS batch, Access and FoxPro crap. Really quite powerful & expressive for the day. Modern scripting languages beat (the versions I used) handily. - DaveE
[+1] [2008-10-09 15:14:13] Sam

Haskell. I just like it for no good reason :)

(2) While I love Haskell, I don't think that all functional programming languages are necessarily esoteric. - Mike Miller
Mike, "esoteric" means something like "known by only a few", which I think fits functional languages very well. - Sam
(1) Actually Monads ARE esoteric, or not? :-) - Zen
[+1] [2009-09-30 21:17:36] Anax

Taxi [1]. Example code (hello world) bellow:

"Hello, World!" is waiting at the Writer's Depot. 
Go to Writer's Depot: west 1st left, 2nd right, 1st left, 2nd left. 
Pickup a passenger going to the Post Office. 
Go to the Post Office: north 1st right, 2nd right, 1st left. 
Go to the Taxi Garage: north 1st right, 1st left, 1st right.

[0] [2008-10-09 15:38:55] James Curran

The most exotic language the I actually wrote usable code in is the scripting language for the BRIEF text editor (Brief was, back in it's day, by far the best MSDOS-based text editor for programmers).

The language itself was a lot like lisp.

[0] [2009-09-30 14:04:34] scope_creep

I really nice deep esoteric language is SNOBOL, which I tried to learn while at Uni. I was one of the standard pre-compiler available on DEC Alpha 4100. Everbody was busy learning C/C++ as part of the standard curriculum, and I thought, lets learns SNOBOL, get it under the belt before I leave. Man, that was a mistake. Its a pattern orientated very highly abstracted language.




What SNOBOL does well, it does very well. Pity about the control structures, though. - David Thornley
[0] [2009-09-30 00:05:22] Daniel

MOO! [1]


[0] [2009-10-02 20:05:28] outis

Sartre [1], for the tragic beauty of its programs. What other languages not only acknowledge the absurd purposelessness of cubicle life but actually require it? In what other languages is functionality subservient to the desires of the programmer to express herself? Truly, Sartre is a language for programmers, not programs. No other language is as deeply expressive as Sartre. The most basic feature of programming, conditions, is also the most basic feature of existentialism. From the spec:

[...] one may keep creating programs, one after another, like soldiers marching into the sea, but each one may seem empty, hollow, like stone. One may want to create a program that expresses the meaninglessness of existence, and instead they average two numbers.


[0] [2009-10-02 20:06:33] outis

Turkey Bomb [1], the only language that can cause alcohol poisoning.


[-1] [2009-11-11 04:52:05] David

I'm still enjoying LOLCODE.

It is rather entertaining to write a program in the manner that you do with LOLCODE.

Other than that I would say my second pick goes to Taxi.

Taxi is rather confusing to have to remember everything, but at least it makes for good reading. You might be able to get a job writing Soaps through it, who knows :P

[-1] [2009-09-29 23:55:25] Todd

Karel the robot [1]


[-1] [2009-09-30 21:36:36] pageman

What about Processing [1]?


[-3] [2009-05-08 05:27:51] Cuga


It's the favorite of none other than Satan himself. [1]