I'm sure most software developers working today would agree that the range of technologies and programming languages available is truly vast, and ever-growing. All too often though, there is a tendency to stick to the same few languages, and ignore the huge number of possible alternative technologies, some of which might just provide a more elegant solution for the project being worked on.
It is for this reason that one of the talks at the recent Bristol IT MegaMeet focused on some of the more unusual and obscure programming languages out there, in an effort to encourage their use where they would provide a better solution than the more common languages.
First though, we need to go right back to the start. Long before the World Wide Web, before the appearance of the first UNIX systems, even before the first electronic computers.
In 1937, the mathematician Alan Turing published a paper titled “On Computable Numbers, With An Application to the Entscheidungsproblem.” In this paper, Turing introduced the concept of a universal computing machine (now often referred to as a Universal Turing Machine, or UTM), a theoretical device which has been mathematically proven to be capable of performing exactly the same calculations, no more and no less, than any real computer that has ever been built, or that ever could be built. The paper is recommended reading for anyone with an interest in computer science theory, and also led to an interesting development in practice. A UTM is ultimately a very simple device, and in order to simulate one in software, all that is needed is the ability to distinguish between one of two possible values.
This very simple requirement has enabled the development of some very unusual programming languages, which while bearing very little resemblance to the more "conventional" languages, are nevertheless able to perform the same calculations. By going right back to this most basic concept, though, these languages are able to take very different approaches, and a programming construct that might be immensely complicated in one language can be rendered simple in another.
While some of the alternative languages are deliberately designed to take the most minimal approach possible, and thus are only really of interest in a theoretical context, others very definitely have practical, real world applications. Scheme and Lisp can often provide elegant solutions to problems, and anyone interested in these languages is encouraged to read "Structure and Interpretation of Computer Programs", which has been made freely available online by the publisher (MIT) at http://mitpress.mit.edu/sicp, with accompanying course notes available at http://xrl.us/bikehv
While Perl is in many ways a more conventional language, the Devel::Declare module can be used to dynamically extend the syntax of the language, allowing for all kinds of advanced techniques. The Moose module can also be helpful in assisting with refactoring the code. Further information on this, and other advanced Perl techniques, can be found in "Higher Order Perl", which is available free of charge at http://hop.perl.plover.com/
While I'm sure no-one would recommend dropping all of the languages you’re familiar with and starting your next big project in something you’ve never even heard of before, it’s very definitely worth experimenting with some of the other languages that are out there. Even if you don’t have a use for them right now, you’ll probably become aware of something that will save a huge amount of development time in the future, and that time saved will ultimately translate into lower development costs.