If you’re ever had the privilege of reading “The Pragmatic Programmer” then you know that they recommend that programmers learn at least one new language a year. Around this time last year, I made the decision to begin following that practice and chose Ruby/Ruby on Rails as my programming language for 2010. While not directly related to my day job, I wanted to build something in the language. With the help of my friend we were able to build our first Just for Bands web application in Ruby on Rails (LiveShow), both learning the language as we went along. While I’m still by no means a Ruby/Rails expert, I do feel some what comfortable enough with the framework. I still have to look up how to do things in Ruby, but this is just the side effect of learning a language. You’ll almost never know everything about a language.
Observation
I believe that part of the problem is that I’m not surrounded by other Ruby/Rails programmers and doing that kind of work on day to day basis. I spent 5 years in a C# office and thus was able to learn C# pretty well, and when I left that shop to better pursue programming, I was surround by “better” C# programmers that taught me even more. I believe that I would be better at Ruby today (not having to look as many things up) if I was in an environment that was utilizing the language (and/or Rails framework) on a daily basis.
The Plan
I plan to continue in my attempt to learn a new language every year. Upon further reading of several blog posts, I came across one that suggested that not only learning a new language but to also rotate the paradigms behind the language you learn (object oriented, dynamic, functional, etc). This not only allows you to learn a new language but also new concepts and new ways of thinking about problems because a functional language requires a very different thought process than dynamic one.
So with that in mind, here’s what my language plan looks like over the next few years:
- Oct – Dec 2010: Ruby
- 2011: Clojure
- 2012: C
I went with Clojure for a couple of reasons. The first being that it’s a functional language. Secondly, it’s not tied to the Microsoft .NET platform (like F#). While I’ve heard and seen good things about F#, I wanted to keep the Microsoft stack strictly a day-job thing. Plus Clojure runs on the Java Virtual Machine, so it can really run on any machine that runs Java. Finally, going with Clojure will bring some experience with Lisp, since Clojure is very Lisp like. This will bring me at least a smidging of experience with using Lisp, without actually having to learn Lisp.
As for C, some would argue that the C programming language is a “functional” language. And while there is truth in that point of view, I personally view C as “systems language” (something used to write drivers, operating systems, etc). Learning C is also a personal mission of mine, and one that I’ve had since was 15 and never just banged it out. Something else always came up.