Esoteric Program Forms The Null Program If a program is a series of instructions, then the null program is a series of zero instructions. The null program has some interesting properties, not the least of which being that it's simultaneously written in many languages and many paradigms... Quines A quine is a program which produces a listing of itself as it's output when run. Gary Thompson has a comprehensive quine page. David Madore has a page on quines which describes the underlying principles and explains how to write them. Ben Olmstead also has a quines list. The null program can be considered a quine in many languages, since it consists of nothing and represents a program which produces no output! Polyglots A polyglot is a source code file for a computer program written in multiple computer programming languages simultaneously. Gary Thompson has a polyglot page. (Some of the polyglots he lists are also full-fledged quines!) The null program is a polyglot in many languages, though not a particularly interesting one. Palindrome Programs Palindrome programs are exactly the same idea as palindrome sentences: they read the same forwards as backwards (disregarding whitespace and punctuation.) Bojan Nemec has donated a palindrome quine in Befunge which is a start. I'd like to see one where the entire code is executed, or one done in Brainf*ck, as well. Esoteric Programming Practices Self-Modification A self-modifying program is a series of instructions which contains one or more instructions to change, at some point during the execution of the program, one or more of the instructions in the series. There are few if any general rules that apply when code modifies itself. A particularly difficult situation arises when one goes to compile self-modifying code, that is, translate it into another language with a different or non-existent notion of self-modification; the compiler must either produce programs which include a copy of the compiler itself, or the compiler must use sophisticated self-modifying code-and-data flow analysis techniques to try to determine the actual range of semantics of the given program, with self-modifications. Either way, interpreting self-modifying code is generally simpler. But the bottom line about self-modification is that it's just plain weird. Once you let a program reason about and alter it's own instructions, you've crossed a line where the further execution of the program becomes extremely difficult to predict. Malbolge requires use of self-modification to achieve Turing-Completeness. SMITH has an instruction pointer which cannot do anything except advance (no jumps!) and thus also relies on self-modification to simulate a loop. At the extreme, all SMETANA can do is modify itself, and is probably not Turing-Complete. Polycoding Polycoding is the act of non-trivially compiling or executing a single instance of code in multiple contexts. Generally this is accomplished by programming in multiple dimensions and/or directions and/or topologies or using creative GOTOs, such as with a line number variable (a computed jump) like some BASICs allow. Optimized tail recursion is an example of a simple polycoding technique; instead of using a subroutine call as the last instruction in a subroutine, use a plain jump to the desired subroutine instead. As with most polycoding techniques, it saves a tiny bit of space and/or time at the cost of making the program harder to maintain. Befunge-93 (and to a lesser extent, Wierd) programmers trying to squeeze programs into small spaces, in the quests for such things as the smallest random number generators, bred the development of polycoding idioms in that language, just to get a bit more mileage out of fewer instructions. The Boo-yah language (an implementation for which is in the works) forces the programmer to write polycode. Bullfrog has no conditionals whatsoever; all control flow must be done with computed jumps. Masochistic Programming It would seem some programmers are simply masochists. Brainf*ck is a good introductory language for those looking to get into the world of cruel and unusual programming. Trying to write a program with a nested loop and subroutines in SMITH ought to keep your mind occupied for a while. The programming language Malbolge was named after a level of Dante's Inferno; that should give you a clue as to how easy it is to program. reMorse should be mentioned here as well; the author repeatedly forewarns that he is not responsible for any loss of sanity caused by reMorse, and for good reason. If you like relying on references to yourself, you'll enjoy BAK. And who can ignore INTERCAL, which was created in 1972 for the purpose of being as unlike any other language as possible; it's name is an acronym for "Compiler Language With No Pronounceable Acronym." Size Matters, and Less is More Brainf*ck was designed to be a language for which an ultra-tiny compiler could be written. So was False, which has nice quasi-functional touches - lambda abstraction and a stack. (False is just one of Wouter van Oortmerssen's many languages, and is named after his favourite Boolean value.) Shelta is in many ways a minimal version of FALSE. One implementation of Shelta is written in assembly; another is written in Shelta! Shelta is one of the smallest languages to ever be bootstrapped. Just Plain Weird Fed up with stacks, the Q-BAL language (an implementation for which is coming soon) uses queues for everything. Oroogu is a descendant of Q-BAL. Unlambda demonstrates that the lambda calculus can be a dangerous tool in the wrong hands. Java2K seems to be the product of an extremely disturbed mind - don't show this one to psychiatrists. And why stop with Earthly languages? var'aq gives Klingons far and wide the opportunity to do applications programming in their native tongue. Finally, ILLGOL is pure joke, sort of a parody of commercial, proprietary development languages. It has no specification, but fairly interesting release notes; the compiler is only available for DOS platforms and is most definitely not open-source. Esoteric Brain Banks Where the academics fear to tread, business - to fulfill the demands of the hobbyists - takes up the slack. A lowly sole proprietorship in Canada, Cat's Eye Technologies, hosts this page. Assurdo Technologies provides some incredibly (and happily) sick products to the world including dd/sh and an INTERCAL compiler for quantum computers. Purists.org supports the Oroogu language.