12 New Programming Languages in 12 Months

January 12, 2010

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

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

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!

Go

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

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

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

Scheme

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.

Fantom

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.

Scala

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

OCaml

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

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.

Lua

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.

Prolog

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!

27 Comments »

  1. What? No Ruby? You HAVE to try Ruby. Watch out, you may not comeback (to other script languages).

    Comment by JL — January 13, 2010 @ 12:06 am

  2. I’m planning on doing the exact same thing! Starting this month with Scheme (there’s a good crunchcourse that started this week covering MIT’s famous SICP course, taught in scheme). Then python next month. Might spend 2 months on some of them due to time constraints, but I think this is a great idea! Definitely subscribing to your RSS, so please post updates — it’ll help us both.

    Comment by Travis L — January 13, 2010 @ 12:08 am

  3. @JL: I’m definitely going to try Ruby (and Rails). I’m a big fan of Python though, so it’s going to have be pretty special to beat that! :)

    @TravisL: Best of luck! I saw the CrunchCourse, I might join. SICP has been on my todo list for several years. Not sure I’ll have time for the whole book and 11 other languages though. I’ll try and post updates about the challenge fairly regularly – we’ll need all the help we can get :)

    Comment by Ben — January 13, 2010 @ 12:24 am

  4. Out of the list (since I already know Ruby, conceptually) I would only “dive into Erlang” as I believe (or at least its concept) will revolutionize the way we do concurrent programming in the near future.

    Comment by junior programmer — January 13, 2010 @ 12:36 am

  5. @junior programmer: I think you might be right about Erlang revolutionizing the way we do concurrent programming. I sure there is still lots to be learned from the other languages, even if it’s to a lesser extent. It’ll be interesting either way.

    Comment by Ben — January 13, 2010 @ 12:41 am

  6. And I don’t believe knowing things conceptually. I only believe practical knowledge and that’s part of the reason that I said I would only learn Erlang. I would learn it to the extent that I can use it to create things comfortably and efficiently.

    Comment by junior programmer — January 13, 2010 @ 12:43 am

  7. @junior: I think conceptual knowledge can definitely be of practical use.

    With the limited time it’s unlikely I’ll be able to go much further than scratch the surface of most of these languages. Those that I find interesting or useful I’m sure I’ll make more use of though. Comfortable and efficient might have to wait until 2011 though :)

    Comment by Ben — January 13, 2010 @ 12:53 am

  8. But I have to say you have a good list of choices. But I will still stick to my choice: 1. only learn if you need to/want to and or 2. if you do learn make sure it’s practical enough. ^_^

    Comment by junior programmer — January 13, 2010 @ 12:55 am

  9. you might consider a refinement. pick 6 languages from the above that will stretch your mind in very different directions, and spend 2 months with each. or 4 for 3 months. build something substantial in each. you’ll get more out of it than just surface skimming. for instance, learning erlang as a language is great. but unless you work through mnesia, OTP behaviors, applications, distribution, etc, you’ll largely miss the point.

    just a thought.

    Comment by garry — January 13, 2010 @ 2:10 am

  10. WTF, no Smalltalk? You should squeeze it in there somehow.

    Comment by Anklesauce — January 13, 2010 @ 3:14 am

  11. @garry: I did consider this, but I think I’m going to stick with 12 and then go into more detail with the most interesting ones later. That’s the plan anyway. We’ll see how it turns out!

    @Anklesauce: Smalltalk would be interesting. Which one would it replace though?

    Comment by Ben — January 13, 2010 @ 8:07 am

  12. Smalltalk could replace Fantom, Go or Lua, or even Ruby since they are so similar.

    Comment by Anklesauce — January 13, 2010 @ 3:31 pm

  13. After I read this post, I started looking into Fantom. Seems really cool!

    Comment by Geo — January 14, 2010 @ 7:07 am

  14. fantastic idea! i might try a variation of this – 2 languages in 2 months maybe. I think 12 is too much for me.

    Comment by Jeff — January 14, 2010 @ 8:32 pm

  15. i think that you should have to learn any specific language properly instead of just go through from the 12 languages in 12months.but any way you have nice motivation.

    Comment by Template Design — January 15, 2010 @ 10:52 am

  16. Intresting article. Thanks!

    Comment by SMiGL — January 15, 2010 @ 3:45 pm

  17. I was wondering how are you going to accomplish this?? Sounds interesting and I’d like to give it a try with about 4 (so 3 months per language), can’t decide how to get around to do it though.

    Comment by Luis Armando — January 15, 2010 @ 9:53 pm

  18. Hey I disagree ! I have seen a lot of posts like this and I think the real deal in learn more than one language is to make better programs. Is not about how many but quality. Now there is some kind of myth. You should do what you want of course but I have a different point of view.

    Comment by antonio — January 18, 2010 @ 5:12 am

  19. I’ve always been thinking of learning some new programming languages but didn’t know on which ones to start considering it takes some time to master one.

    Would like to start though. So my list for 2010 would be Python, PHP, Java.

    Comment by Kevin — January 24, 2010 @ 4:02 am

  20. What about C++? You should definitely put that on your list! :)

    Comment by Leif Eric — January 24, 2010 @ 5:07 pm

  21. First of all that a lots of languages on the list to grasp. Once you work on Java, working on other languages esp. when they are not mature seems difficult. What you take on this?

    Comment by Java4Learners — February 1, 2010 @ 6:51 pm

  22. @Leif – I’ve done a bit of C++ before (mostly with OpenGL). This list is just for new languages I want to learn.

    @Java4Learners – It certainly is a lot of languges, and it’s going to be a challenge. I can’t say I’ve found it more difficult to learn “less mature” languages after working with Java in the past. I’ll keep you updated on how I find things with this challenge though!

    Comment by Ben — February 2, 2010 @ 4:33 pm

  23. Just to disagree with the people disagreeing with you, I think it is a great idea.

    The problem with trying to learn any new language properly is that you need to find a problem that is made easier/tastier/more elegant in that language. So, I think there is real merit to having a passing knowledge of a few languages, so that, when you do have an exciting new idea you want to implement, you can think “that would be really easy/tasty/elegant in Language X” and then you actually get to try out a language in anger.

    The only issue I can see with the languages you have chosen, is that there is a danger you will end up feeling like you are repeating yourself. I generally do my programming in haskell, and the times I have tried to learn erlang and ocaml, I have always found myself thinking about how much easier it would be if I were using haskell. Which is not to suggest the haskell is somehow easier or better, rather it is a language I am better at.

    Anyhoo, good luck!

    Comment by Andrew — March 15, 2010 @ 9:13 am

  24. Hi Andrew,

    Thanks for the comment. That’s exactly what I’m going for – a basic understanding of the languages so that when a problem presents itself in the future I can say “oh I know a what language might be good here!”, or even “I learnt a great technique from that I could apply here”.

    It certainly is going to be tricky – I’ve been finding it hard to force myself to use a new language when I know I could solve the problem much more quickly using one I already know. I’m falling behind a bit, but I do hope to catch up! I’ll be posting a progress update soon.

    Thanks, Ben

    Comment by Ben — March 16, 2010 @ 12:54 pm

  25. I only started learning Python after years of working with Java. It feels much better working with it than I initially thought. But going for 12 languages in a year is not a small undertaking and I wish you the very best :)

    Comment by Helen Neely — May 27, 2010 @ 10:01 am

  26. How about some feedback as to where you are on your 1 language per month? Sounds great, but as a full time programmer, I couldn’t imagine such a feat.

    Comment by Scott — July 23, 2010 @ 8:43 pm

  27. Hi Scott,

    There’s an update coming soon. Stay tuned!

    Ben

    Comment by Ben — July 27, 2010 @ 9:25 am

RSS feed for comments on this post.

Leave a comment