Programming language selection

Over the last ten years I have learnt many programming languages and technologies. Here are my heuristics for selecting programming languages.

We are the masters

From Yukihiro Matsumoto. Does the tool prioritise my (programmer) time or machine time. Aside from areas where getting the absolute best performance is critical, the former is more important. In many cases focusing on the former gives means an in-practice improvement on the later.

Documentation

Is there a substantial, high quality documentation? If not it (probably) isn't worth considering. You will probably regret it.

The O'Reilly Book

Is there an O'Reilly book? If so then the language is probably mature enough to consider as O'Reilly are moderately conservative about what to publish. (The O'Reilly book is often, but not always, good: check reviews.)

Tools

Are there good tools. Scala is basically superior in every way to Java (even if you just use Scala like Coffeescript i.e. for the improved syntax), but I use Java a lot more. This is in large part because the tools are a lot more mature (obviously things like Android and my job also push me towards Java). Things like a REPL are good, but I really value high quality IDE support (perhaps even going so far as to avoid anything Jetbrains don't have an IDE for) and easy to use extra libraries.

Cross Platform

I find something deeply unsatisfying about single platform solutions. Objective-C and the associated libraries for iOS are a wonderful blend of dynamic, yet low level, functionality with a great IDE (XCode); but they are, in practice, only for iOS/Mac OSX, which makes me reluctant to use them much.

Beautiful, concise code

Ruby. Coffeescript. Python. These all offer beautiful, easy to read code. Which makes it a lot easier to maintain (there is little benefit, assuming code completion, on the first implementation). There are also libraries, such as Android Annotations, which can dramatically improve the beauty and concision of even Java code.

Commercial backing or sustainability.

Open source projects are awesome, but without some kind of commercial backing it may not be sustainable. This is particularly helpful for documentation and distribution (e.g. Anaconda Python distribution.

Testing

How easy is it to test code?

Multipurpose

One of the things I like most about Python is how it can do both scientific programming and web development so well. There are obvious efficiency gains.

Community for your target area

For example Python is great for science because of the large community in this area. Julia looks interesting but it seems unlikely to be able to catch up.

Cleverness

Python is teaching me to value explicit, clear code. Though I do occasionally miss just how flexible and magical Ruby can be.

Related Articles

Android 4.0+ and iOS 7+ Only

Why I don't think it is worth supporting Android < 4.0 or iOS < 7 on new Apps.