Esoteric programming language

An esoteric programming language (/ˌɛs.oʊˈtɛɹ.ɪk/ ess-oh-TERR-ick), or esolang (/ˈiːsəʊlæŋ/ in British English and /ˈɛsəlæŋ/ or /ˈɛsoʊlæŋ/ in American English), is a computer programming language designed to experiment with weird ideas, to be hard to program in, or as a joke, rather than for practical use.
There is a small but active Internet community of people creating esoteric programming languages and writing programs in them, as well as debating their computational properties (e.g. if said languages are Turing-complete). Apart from this website there are a couple of other forums where such people meet. See the Community portal for details.
==History==
The earliest known deliberately esoteric language is INTERCAL, designed in 1972 by Donald R. Woods and James M. Lyon. Some earlier programming languages were (intentionally or not) esoteric. Now, however, the most popular esoteric languages are probably Brainfuck and Befunge, both from 1993. A large number of the newer esoteric languages are heavily influenced by these two.
The term esoteric was most likely first used in programming context to refer to what is now called esoteric programming languages on Chris Pressey's web site Esoteric Topics in Computer Programming. Later the Befunge Mailing List evolved into the Esoteric Topics Mailing List, and the word entered common use.
See the Timeline of esoteric programming languages for a chronological listing of esoteric programming languages.
==Purpose==
There are many different reasons for creating an esoteric programming language. Possibly most indicative of an esolang is that the language is not designed for serious functionality or use, unlike many mainstream programming languages. Beyond that, a few broad categories can be recognized:
===Minimalism===
A common design goal for esoteric programming languages is to have as few instructions as possible. Brainfuck, OISC, and Lazy K are examples of such languages. These kinds of languages, when they are Turing-complete, are often referred to as Turing tarpits.
===New concepts===
The exploration of alternative ways to design programming languages is quite popular among esoteric programmers. Good examples include Befunge, Thue and Unlambda.
===Weirdness===
Some languages are created mainly for the purpose of being weird and difficult to program in. INTERCAL's main purpose was to be as different as possible compared to normal languages (although there are still many similarities with conventional programming languages), and Malbolge was designed with the goal of being next to impossible to use.
===Themed===
Some languages are based on a theme that is not computer related. For instance, var'aq is based on the fictional Klingon language. Shakespeare programs are modeled like Shakespearean plays, while Chef programs appear to be cooking recipes.
===Brevity===
Many esoteric languages are designed to be as short as possible. These languages are known as "Golfing languages", and frequently used for "code golf", a competition to solve programming tasks in as few characters or bytes as possible. Examples include CJam, Pyth, and GolfScript, as well as many others.
===Jokes===
Many esoteric languages are created purely as a joke. Some of them are nevertheless usable for programming, like l33t and Ook!, while others, like HQ9+ and Bitxtreme, are not.
===Obfuscation===
Some esoteric languages are intentionally designed to be hard to read (as opposed to being hard to write or to understand). Unreadable is a good example here.
==See also==
*Language list
*Joke language list
*Semi-serious language list
*Community portal
*The Esoteric File Archive
==External resources==
* 
* 
* Wikipedia article on Esoteric programming languages
* Esoteric programming languages on the C2 Wiki
* Obfuscated programming languages on the open directory project
Category:Concepts