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.
Quick thought, we can talk this out in person: I will bet you neither Andy Hunt nor PragDave follow their own advice. -Peter
You’re probably right. I wish I could have found the link to the blog post that talked about learning a language with a different paradigm (oo, functional, dynamic, etc), because I think that element really adds to the reasoning behind learning languages regularly. When you’re not only learning a new language but the how the language acts is decidedly different you’re learning more than just a language, you’re learning how to change how you think about problems.
Pingback: Weekly Link Post 165 « Rhonda Tipton's WebLog
Pingback: Weekly Link Post 165 « Rhonda Tipton's WebLog
Pingback: Weekly Link Post 165 « Rhonda Tipton's WebLog
Pingback: Weekly Link Post 165 « Rhonda Tipton's WebLog
The Pragmatic Programmer gives a actual accepted advice: apprentice a new accent every year. The capital acumen abaft this admonition is that if you apprentice a new language, you apprentice a new way to think.
toshiba direct coupon code
How would recommend that someone pretty new to programming go about learning a language in a year? Using a book(s), or trying to put together a project? I should mention that this would be a part-time, after-work effort.