Which programming language should I learn in 2015?
Well, we are now living in that future. Nearly two years later what has changed?
We can start with a look at the Tiobe index for March 2015.
The top of the chart is still dominated Java and C - although their positions are reversed (C is now number 1), and both have declined slightly relative to the rest of the chart. C-family languages, therefore, still hold over 50% of the share, though all of the top 5 have had their share eroded since 2013. In fact, one of the stories of 2014 is the dramatic decline in the use of Objective-C as developers have looked for cross-platform alternatives when building mobile apps.
The most surprising entrant for me, though, is ABAP - SAPs COBOL-family 4GL. COBOL. That's a thing I didn't expect to be writing in 2015. COBOL. Let's take a moment to think about all those SAP developers who are using COBOL.
Now - back to the highly contentious question of what programming language a beginner should learn.
Let's remind myself of the criteria I set (which were not disputed in the commentary last time out - I'd be interested to hear if you think there are other criteria we should apply)
1. A REPL environment
I think this is an absolute prerequisite. I want to be able to type something on the screen, and see the result. Immediately. No messing about with compiling and linking and nonsense.
2. Good library support for popular data structures & algorithms
There should be good implementations of most popular data structures and algorithms. And I should be able to read and understand the source for them.
3. A clean, cruft-free syntax
Ideally, we remove as many of the language warts as possible (like the unnecessary braces of the C-family). The language should be simple, and expressive.
It should be easy to go from something like
let answer = 1 + 1
let add x y = x + y
And see self-similarity as we build up the constructs we are using.
4. A good balance of support for OO representations and functional techniques
This is the key challenge for a modern learning language. In my view, it is likely to be a primarily functional language with classes, rather than the other way around.
5. At least one free (as in beer) implementation
Pity the poor student. There shouldn't be a financial penalty for learning a language. I don't care whether it is free as in OSS/GPL/MIT free, or free as in "a zero-cost license in perpetuity". Your politics may vary.
6. A vibrant enthusiast community
There has to be an enthusiastic community around it. In part, this means it has to have some heritage, and a sense of future. People actively working on it in the academic sphere would be a good idea, too. And, ideally, some mainstream commercial use to avoid the accusation that it is just a toy language you are learning.
In 2015, I would add an additional criterion
7. Must be able to run on a Raspberry Pi
It is critical that we democratise our technology, and give the maximum number of people the opportunity to learn to program at a minimum cost. Raspberry Pi does exactly that. For the price of a family visit to the movies, you can have a programmable computer, and you can still buy drinks and snacks to get you through your all-day coding session.
And the winner is...
I think the case for learning F# is even more compelling than it was in 2013. You can use it to learn both functional and object oriented techniques, it has even broader industry support (that number 11 position on the TIOBE index is quite a powerful drive for adoption), and you can run it quite happily on Raspberry Pi.
Average salaries for developers, March 2015, in GBP
If you want to learn more about F#, then take a look at F#.org
I've written this post as a part of the UK's National Apprenticeship Week - to try to encourage people to get started with technical (especially software-based) apprenticeships. See #naw2015 on Twitter for more apprenticeship opportunities.