Following the advice of The Pragmatic Programmer, I try and learn a new programming language each year.
- In 2007 it was C# which was easy as I did play around with it a few years earlier, and were using it at work.
- In 2008 it was Python. I concentrated on book learning in the first half of the year, and were lucky enough to be able to start a Python (on Pylons) project in the second half of the year, which is where it really started to sink in.
- In 2009 it has been Haskell. This hasn’t gone as well, I feel like I have only just scratched the surface and I still don’t feel “fluent”, but I have grown an appreciation of it.
So I am formulating a shortlist for my language of 2010.
- Erlang. This deserves a place on the list because I enjoy the functional languages, and heard that Erlang developers get paid the most.
- F#. The .NET ecosystem is pretty large, I already know the .NET libraries and the .NET community so it is a good choice to combine that with my interest in functional programming. I could even see myself using it in the workplace.
- Scala. I haven’t had much to do with the Java world since I was tutoring beginner’s Java at uni. I have heard good things about Scala and it could help bring me up to date with what is happening in the Java community.
- Factor. This is interesting because it is a completely different paradigm to anything else I have worked with in the past. It is a concatenative, stack based language. I remember when I got my HP48 I had ideas about combining the power of the stack in a high level, even object oriented, programming language. I think the paradigm would suit my thinking style well.
- Objective C. I have actually played with Objective C a very long time ago. During a high school science summer camp we developed a simple application on the NeXTSTEP operating system. It is big in the Apple world. Practically a standard for Mac OS X and the iPhone. I feel it is one of those things I should just know.
- Ruby. I did some quick Ruby tutorials a while ago, before deciding to look into Python a bit more. Since then the Ruby on Rails hype has put me off a bit, but a lot of developers that I respect and listen to work mostly with Ruby and consider it a favorite language. It seems to support a culture that overlaps considerably with the clean code / agile / software craftsmanship communities. If I choose Ruby, I would probably get over my prejudice against the hype and and start straight on Ruby on Rails.
- Groovy. For much the same reasons as Scala above. I actually have a book already, that I scored for free from an open space, called Groovy für Java-Entwickler. I feel that I might enjoy Scala a bit more though.
- D. My main language at work at the moment is C++. I have mixed feelings about C++. One one hand it is a pain to have to deal with for most standard desktop applications, compared to something more modern, yet it is somehow more macho than C# or Java, and brings me more cred. Ok so that latter point is bogus. Maybe my feelings are not mixed at all. Maybe I am starting to dislike C++. Apparently D addresses C++’s weak points, and retains its good points, whatever they may be.
- Smalltalk. This language seems to have played a major part in the direction that modern languages have gone. The tools and methods that the smalltalk community enjoyed years ago are only recently coming to more mainstream languages. A lot of the major software development authors, at least in the OO community, seem to come from a smalltalk heritage. By learning it I might be able to get a feel for where things have come from, and where they may go in the future.
What have I missed? Is anything out of place there? Anything glaringly missing?
I will probably make a decision before the new year. The plan will be to book-learn it in the first half of the year, and try and dive into a “real world” project in the second half.