It’s that time of year again, when many of us are making New Year’s resolutions to lose weight, quit smoking, get out of debt, or make any number of other changes. Instead of setting resolutions to keep, I prefer to set goals to accomplish. Goals are usually more specific, more clear how to work towards them, and easier to track progress and completion.
Is one of your goals for this upcoming year to learn a new programming language? If you are (or aspire to be) a programmer, then it should be. In their book The Pragmatic Programmer, David Thomas and Andrew Hunt make the following recommendation:
Learn at least one new language every year.
You can find this recommendation in the section “Invest In Your Knowledge Portfolio” section of the book. If you are programmer, it is essential that keep learning new programming languages for a few reasons:
Broader / Deeper Understanding: When you learning multiple programming languages, you can’t help but compare them: you notice similarities and differences between them. This opens your mind to thinking about programming languages in theory. You start to appreciate the design decisions that the people who develop the programming languages have to make. This gives you a deeper grasp on programming in general, as well as the one programming language you already know. (The same thing happened when I studied Latin at university. I started thinking about languages in general, and I learned more about my own native language [English].)
Opportunities / Marketability: Clients and employers are often looking for people who can work on a project or in a position using a particular language. The more languages you know, the more likely it is that you can bid on that project or apply for that job. If you want to get a job as a developer at a particular company, I’d recommend discovering what what programming language they use and learning that language. (We use Ruby on Rails for our website here at Treehouse.)
Better Technology Choices: Programming languages all have their strengths and their weaknesses, and they each have situations where it is the best solution. When you know a variety of programming languages, you can choose the right for the job — instead of just using the only one you know. Have you heard this popular saying? “When you only have a hammer, everything looks like a nail.” Routinely learning new programming languages will give you more tools that you can use when you need them.
Confidence: Learning multiple languages gives you confidence when you need to encounter another new language. Let’s say a client wants to hire you to build something on an unfamiliar platform, or your boss asks you to troubleshoot a support issue on code written in a language you’ve never seen. I’ve seen two types of responses to situations like this. Some programmers embrace the challenge, start digging in, and figure it out. Others say that they just can’t do it — or they panic and pass out from fear and anxiety. Routinely learning new programming languages can keep you from the second response.
Setting a goal to learn a new programming language this year is great, but even that goal might still be too vague. Once you decide which language you would like to learn, I would recommend setting a more concrete goal like this one:
Concrete Goal: Learn a new programming language and use it to build such-and-such this year.
At the end of the year, you can ask yourself: Did I finish building such-and-such with that new programming language? It’s easy to tell if you have completed a goal like that or not.
Have you made such a goal yet? If not, it’s not too late to do so. (Even if you are reading this in July, go ahead and set a goal that you want to finish by next June.) Here’s my goal for 2013:
My Goal: Learn Node.js and use it to build a game server for a multiplayer, browser-based game in 2013.
What are your programming goals for 2013? Please share them in comments: I’d love to hear them!
[If you are not familiar with The Pragmatic Programmer, I highly recommend it. It doesn’t teach specific technological skills: instead, it teaches an overall approach to programming and solid principles that transcend any particular technology. I will be re-reading it 2013, and I expect that I will be writing a few blog posts that (like this one) are inspired by it.]