What Is An Esoteric Programming Language?
Perhaps you don't ask yourself such questions, but I find myself pondering the nature of esoteric programming languages. I wonder what makes a programming language esoteric. I wonder whether there is a benchmark by which we can know such a thing. Does a mention on Lambda-The-Ultimate secure the status of esoteric? How many users can an esoteric programming language have before it is no longer esoteric? How many books can be written about it before it takes on the veneer of being mainstream? I don't think anyone knows. I certainly don't know. I need to arrive at a definition of esoteric programming languages.
How does one begin deriving a definition for such things? Perhaps I could start by saying that esoteric programming languages are those which are not mainstream? That sounds nice, but then, at the top end, how do I define mainstream and at the bottom end, how do I differentiate between experimental programming languages and esoteric programming languages? A tricky conundrum.
At the bottom end of the scale, how many users does an experimental programming language need to graduate to esoteric? On the other hand, does it get any more esoteric than a programming language with exactly one user and that being the language designer and implementor? I suspect not.
For mainstream languages, how do we determine the transition point? When does an esoteric programming language become mainstream? Does the number of users or downloads count? Does making it onto the TIOBE top twenty most popular languages list prompt the change? Is it all a huge conspiracy by the few remaining print publications of what used to be known as the computer press? These questions are hard to answer.
Yet, still I feel that I need a definition of an esoteric programming language. Not that anyone else will use it, but I need one that satisfies my view on these things. I suppose that a definition just for me is allowed to be qualitative rather than quantitative. It's my definition and I'm going to live with it, so it would be helpful if I liked it. As I do not know exactly what one is, although I know one when I see it, I must be imprecise and apply a number of vague criteria. To that end, here are my criteria:
It must be hard to get a business programming position for the language in the mid-west of the United States. We are very conservative here in the mid-west, so if anywhere would let you write code in it, it must be mainstream. (The universities are more adventurous, hence the distinction of business programming.)
It must be Turing complete. SQL need not apply.
It must be 100% FOSS (Free or Open Source Software). If a company owns it, then after deciding to allow you to use it, they would be under no obligation to continue to allow you to use it. The new Swift language from Apple is an example of a language that fails this criteria. Java also fails here because while the JVM is open-sourced, the Test Kit is not and Oracle (the new owners) have been quite robust in asserting that they still own the copyright on the Java library API.
It must be available for more than one operating system. If I write a program in your language, I want to take it with me if I change platform. F# from Microsoft fails this criteria because while I am assured that it has a number of fine qualities, it only runs on Microsoft Windows.
It must have a decent library. If anything separates the experimental programming languages from the esoteric ones, then this may well be it. Java, when first introduced, set the bar for minimum library quality. Few languages these days come close to that level of initial standard library, but there must be enough available for me to write non-trivial programs that get basic tasks done.
It must have some documentation, an official tutorial and an official web site. Your documentation doesn't have to be written and typeset by Donald E. Knuth himself, but it should be understandable enough that I can try using it to write a program or two.
It should be fun to work in. This is obviously the most subjective criteria, but if I'm not being paid to program in your language, you at least owe me an effort to make it enjoyable.
And it would be really helpful if it could handle Unicode. In the core language would be best, but through a library would be acceptable.