12 New Programming Languages in 12 Months

I've decided to set myself the challenge of learning a new programming language every month in 2010. That's 12 languages in total. With only a month on each new language I'm not going to be able to go into much depth, but I'm hoping to at least pick up some interesting techniques and new ways of thinking that I might be able to apply to my every day programming with my usual languages (which happen to be Java, Python, PHP and JavaScript). Who knows, I might even become a convert of one of these languages and wonder how I've been able to use anything else all these years! Here are the languages I'm hoping to tackle:


Clojure is a Lisp dialect for the JVM. I've done some reading on Clojure and had a play with the REPL, so this year I'm finally going to get round to writing some code with it. From what I've seen so far it looks quite powerful, and the integration with the Java libraries seems to work nicely.


Factor is a concatenative programming language, meaning it uses a stack instead of named variables to pass data around. Seems like a strange concept to me. This will definitely be an interesting one!


Google announed their Go language in late 2009, describing it as a cross between C++ and Python. It was co-created by by Ken Thompson, who also co-created Unix and worked on the C programming language.


Haskell is a purely functional strongly typed language. It also uses lazy evaluation. It's got a bit of a reputation for being difficult, but I'm hoping I'll at least be able to pick up some of the main concepts and put a few small programs together.


Erlang is a concurrent programming language designed for fault tolerant real time applications. I'm looking forward to learning how Erlang deals with concurrency.


I did some Scheme, a Lisp dialect, while at university. I haven't really touched it since though, so I'm planning to revisit it and maybe dig a little deeper. I'm thinking about trying The Little Schemer book, or perhaps the online fixnum days tutorial.


Previously called Fan, Fantom claims to be portable across the JVM, .NET CLR, and JavaScript in the browser! It's on object oriented language with C like syntax, so there shouldn't be a huge learning curve here. It seems to have some very interesting features though, so I'm looking forward to trying it out.


Another JVM language, Scala is a strongly typed language that "smoothly integrates features of object-oriented and functional languages".


Objective Caml is a statically typed, object-oriented and functional. I'm sure I'll pick up some new techniques and ideas from this language.


Ruby is a scripting language similar in many ways to Python. I've never looked at it in any detail before because I always thought it was too similar to Python. I'd like to learn it mainly to give the Rails web framework a try and to see how it compares to Django.


A small and portable scripting language, Lua is very popular in the game programming world where it is often used for the scripting of complex 3D engines.


I did a little bit of Prolog at University and I remember being blown away by it. It's a declarative logic programming language, often used in the field of AI.

It's going to be a tough challenge, learning 12 new languages in 12 months. But hopefully this time next year I'll have picked up some interesting techniques, and have a few extra tools in my programmer's toolbox. I'll be blogging about my progress throughout the year, posting my thoughts on these languages along with any code that I come up with. If you're interested in the updates then you can subscribe to get them automatically. If you've got any comments about any of the languages or about the challenge in general then I'd love to hear them!


It's been 12 months. See how I did.

Posted on 12 Jan 2010
If you enjoyed reading this post you might want to follow @coderholic on twitter or browse though the full blog archive.