X hits on this document

PDF document

1. INTRODUCTION - page 5 / 10





5 / 10

least well-known language construct to accomplish something

  • is that they explore the play in a language, the free space that

is available to programmers. If something can only be done one way, it cannot be obfuscated. The play in a programming language can also be used to make the program signify something else, besides being valid code that compiles or is interpreted to some running form.


Recent IOCCC programs include a racing game in the style of Pole Position, a CGI-enabled Web server, and a maze displayer with code in the shape of a maze. It is common for obfuscated programs to be of unusual visual appearance. The code may spell out the name of the program, or the name of the contest, in large letters, or be in the form of some other ASCII art picture. This is a type of double coding, or, more generally, multiple coding, which can also be seen in Perl poetry and in “bilingual”


The classic example of double coding in natural languages is the sentence “Jean put dire comment on tape,” which is grammatical English and grammatical French, although each word has a different meaning in each language. (In French, the sentence means "Jean [male name] is able to say how one types.") Harry Mathews contributed to further French/English double coding by assembling the Mathews Corpus, a list of words which exist in both languages but have different meanings. In programming, an important first step was the 1968 Algol by Noël Arnaud, a book of poems composed from keywords in the Algol programming language. However, these poems are not executable programs; they are English poems that were assembled from a very restricted vocabulary. [8]

A notable modern ancestor of Arnaud's Algol is Perl poetry, in which texts that can be read as poems are devised so as to also be valid Perl programs. As critics of code aesthetics have noted, even award-winning Perl poetry is often little more than an exercise of “porting” existing song lyrics into Perl, and the practice “does little to articulate the language of perl itself.” [2] While it is possible to obfuscate a program, in the sense of the IOCCC or the Obfuscated Perl Contest, by fashioning it in the form of an English poem, the goals of competitive obfuscators and Perl poets appear to be quite different. Although a Perl poem must be a valid program, what the program actually does is often an afterthought in Perl poetry. For instance, the winning program in the first Perl Poetry Contest does nothing. In contrast, a program’s function is essential to obfuscated









phenomenon to many new media scholars, there are reasons, quite apart from any possible distaste for poetry, that this practice seems less interesting to programmers. The interesting phenomenon of multiple coding can be found in obfuscated programs, too, while these programs also feature impressive, intricate workings that are essential to their aesthetics.

Some other and quite extreme examples of multiple coding are also seen in programs that are “bilinguial” or “multilingual” and are analogous to “Jean put dire comment on tape” — they are valid computer programs in more than one computer language. These can be achieved by the re-use of keywords and operators or by using comments in one program to include code in another language.


In the field of weird languages, also known as esoteric languages,2 the programmer moves up a level to exploit not just the play of a particular language, but the play that is possible in programming language design itself. Weird programming languages are not designed for any real-world application or normal educational use; rather, they are intended to test the boundaries of programming language design. A quality they share with obfuscated code is that they often ironically comment on features of existing, traditional languages.

There are literally dozens of weird languages, commenting on many different aspects of language design, programming history and programming culture. A representative selection is considered here, with an eye towards understanding what these languages have to tell us about programming aesthetics.

Languages are considered in terms of four dimensions of analysis: 1) parody, spoof, or explicit commentary on language features, 2) a tendency to reduce the number of operations and strive toward computational minimalism, 3) the use of structured play to explicitly encourage and support double- coding, and 4) the goal of creating a puzzle, and of making programming difficult. These dimensions are not mutually exclusive categories, nor are they meant to be exhaustive. Any one weird language may be interesting in several of these ways, though one particular dimension will often be of special interest.


INTERCAL is the canonical example of a language that parodies other programming languages. It is also the first weird language, and is highly respected in the weird language community. It was designed in 1972 at Princeton University by two students, Don Woods and James Lyon. (Later, while at Stanford, Woods was the co-author of the first interactive fiction, Adventure.) The explicit design goal of INTERCAL is

  • to have a compiler language which has nothing at all

in common with any other major language. By ‘major’ we meant anything with which the author’s were at all familiar, e.g., FORTRAN, BASIC, COBOL, ALGOL, SNOBOL, SPITBOL, FOCAL, SOLVE, TEACH, APL, LISP and PL/I.” [13] INTERCAL borrows only variables, arrays, text input/output, and assignment from other languages. All other statements, operators and expressions are unique (and uniquely weird). INTERCAL has no simple if construction for doing conditional branching, no loop constructions, and no basic math operators

  • not even addition. Effects such as these must be achieved


“Esoteric” is a more common term for these languages, but it is a term that could apply to programming languages overall (most people do not know how to program in any language) or to languages such as ML and Prolog, which are common in academia but infrequently used in industry. A better designation might be art languages. However, while such languages are undoubtedly a category of software art, developers of these languages do not use this term themselves, and it seems unfair to apply the term “art,” with all of its connotations, to their work. While people might consider all sorts of languages to be “weird,” that term’s sense better captures the intention behind these languages, and it is used at times by the language designers themselves.

Document info
Document views22
Page views22
Page last viewedThu Oct 27 09:13:22 UTC 2016