In my opinion there are three kinds of programming language.

  • Toys: Languages that were designed by one person to scratch an itch or serve particular purpose, no more. Ruby was designed by Matz for programmer happiness. C was designed by Ritchie so he could port that Space Invaders OS to a different machine than the PDP/10.
  • Petrie Dishes: Usually designed in academia as a language to experiment with language design ideas. Haskell was designed to be the canonical lazy, pure functional language. Scala is an experiment in type systems.
  • Tools: Designed for serious business, dammit. These are meant to be used to build big important pieces of code. C++ evolved from C for better simulation implementations. Java was an easy to learn language for portable binaries.

Like biology and all other taxonomies, this is of course a flawed generalisation. It’s also incomplete. I know that Perl 5 is a toy, but what’s Perl 6 (apart from vapour)? Is it a tool? Or something else entirely?

Setting aside these issues, I have a personal statement. I want to learn and learn from Petrie Dishes; I want to use Toys for my day to day work and experimentation; I want to stay as far away from Tools as I can manage.