It is help you become the best software developer you can be. I figured this may be useful to other folks as well and decided to share it in a blog post.

#1 – Read books

Smart people wrote many great books about every aspect of software development. Reading books is one of the best ways to learn new tricks. Books can give an encompassing view, which makes them a great way to learn if you want to go deep on a subject. They’re not great if you need to figure out what to learn at first. But once you know the direction go ahead and find books on the subject. These are some of my favourites:

#2 – Watch recorded conference talks

There’s an abundance of recorded conference talks on the internet. That means you can listen to what some of the smartest people in the field have to say about programming. For free. I suggest that you focus on the quality stuff first. For example has good videos. If you’re into Objective-C then Apple’s WWDC sessions are a great resource as well.

#3 – Get your code reviewed

Code reviews are a great way to learn and improve your skills. Ask whoever reviews your code to be thorough and detailed, even if it’s painful for you at first. Ask more than one person to review your code and be thankful for the feedback you receive.

If you don’t work with people that practice code reviews then contribute to open-source projects and get your code reviewed there. Review feedback often points out skills and techniques that you should learn. I find that it’s then most effective to read books on these subjects.

#4 – Keep a journal

It’s valuable to record the challenges you face and to write down the things you’ve learned when you overcame them. Therefore I keep two journals during my day to day work:

The first journal is a daily work log is a work log where I record what I’m working on during each hour of the day. I also use it to jot down the occasional observation or idea. I take these notes to compare what I wanted to do each day and what I actually worked on.

#5 – Read the source code of ‘gold standard’ projects

Pick an open-source project in an area that you like and read away. There are many fascinating projects out there and often reading their source code is as easy as browsing GitHub or Bitbucket.

I spent a lot of time reading the Quake source code back in the day and it has taught me much about architecture and pragmatism. Reading high-quality source code often inspires experiments or refactorings in your own code.

Some examples of interesting real-world projects with good code quality:

#6 – Listen to podcasts

It surprised me to find that there are so many quality podcasts on software development. This is a great and cheap way to learn new things and stay informed – even while you’re commuting or preparing dinner.

Two programming-related podcasts that I like are Debug and Software Engineering Radio.

#7 – Work on side projects

Side projects are fantastic to hone your skills and to explore problems that you don’t encounter at work. These projects don’t have to be large or complicated. Even a small side project can be fun.

Open-sourcing your side projects is optional, but it can be a great way to expand your portfolio. For example, I recently released a little photo sorting tool that I worked on for a few hours.

#8 – Immerse yourself

Choose some of the things listed here and do them together for a while to immerse yourself in a particular subject. For example, listen to a podcast on the way to work, ask your colleagues for advice and read a chapter of a book before you go to sleep.

For the sake of your friends and family – be careful and don’t overdo this. I usually get into an OCD mode like this when there’s a specific problem that I want to solve.

#9 – Read postmortems

There’s a large body of software project war stories on the internet and in books. Many of these stories are quite enlightening and they can teach you a lot about how to improve your own craftsmanship. Not to forget that they’re also entertaining reads.

#10 – Learn a new language

It sounds cliché but learning a new programming language is a great way to become a better programmer. Learn a language that follows a different paradigm than the ones you’re using most of the time already.

For example, if you’re programming in JavaScript or Python then learn Clojure or Haskell instead of Ruby. One-day conference workshops are great to get you started. Doing Koans is good for getting a quick feel for a new language too.

#11 – Start a ‘software craftsmanship guild’ at work

I like Spotify’s idea of having guilds in their development teams. A guild is a crossteam ‘community of interest’ that meets regularly for presentations and discussions.

For example, start a software craftsmanship guild at your company where engineers meet once a month to talk about cool new stuff and problems they encountered.

#12 – Find a (virtual) mentor

Learning from someone who is a more experienced programmer than you is great. You’ll pick up many things by osmosis from working together with smart people. Yet, it’s sometimes nice to have someone specific that you can ask for advice.

You don’t have to make the ‘mentoring relationship’ explicit, although most people will feel flattered if you ask them. A mentor can also be virtual. For example, they could be an author like Robert C. Martin that you like and read often; or a successful developer like Peter Norvig who’s career inspires you.