I recently came across a Nov. 25/09 post on Davy Brion’s blog, The Inquisitive Coder, that enumerates his recommended reading list for software developers who are wanting to step up their game. This is a common theme on coding blogs, and there have been literally a galaxy of postings with some great and not so great recommendations guaranteed to perplex and flummox the average coder.
The implied line with all of these articles is that you ignore these tomes at your peril – you just won’t get to the “A” levels without them.
I like how Brion has broken his recommendations into three strata according to developer experience: newbie, sophomore and grizzled veteran. Well, sort of. I mean, learning agile/iterative/lean software development really should occur at the start of your career as you’re going to have to unlearn the BDUF/waterfall crap that was loaded into your head by your CS/SoftEng profs who last “delivered” software (if at all) when 8–bit CPUs were da bomb.
What I don’t like is the complexity of some of the volumes that Brion shows – some of them are just so dense as to be inaccessible and not immediately applicable, eg. Eric Evans’ Domain-Driven Design.
Read/Master These Books First
If you want to get immediate benefits, try this shorter reading list:
- The Pragmatic Programmer: From Journeyman to Master (Hunt & Thomas)
- Pragmatic Unit Testing in Java/C# (Hunt & Thomas)
- Refactoring: Improving the Design of Existing Code (Fowler)
- Practices of an Agile Developer (Subramaniam & Hunt)
- Agile Software Development with Scrum (Schwaber & Beedle)
These books will help you begin to develop good habits – and in some places, possibly fired for wanting to implement. That’s ok, because you don’t want to waste your life there, anyway.
It should take you 6–12 months to get through these and really internalize the practices and make them second nature. I’ve recommended #5 because, as I mention above, you should get exposure to agile practices like Scrum sooner rather than later.
Read/Master These Books Next
You’ve got a couple of years under your belt and have seen the good, the bad and the ugly in the industry. You’ve likely been on some bad projects and you’re beginning to question the wisdom of your chosen career path. Take solace in these books to notch your game up further:
- Design Patterns (Gang of Four – Gamma, Helm, Johnson, Vlissides) – Alternatively, any book that explains patterns in your language of choice will help you “grok” them.
- Clean Code: A Handbook of Agile Software Craftsmanship (Robert “Uncle Bob” C. Martin)
- Agile Estimating and Planning (Cohn)
By the time you get through these (another 6–12 months) you will be truly cynical about the state of the industry, as well you should. But you’re not wanting to be a “mort” or a “501” kinda coder – you’re wanting more. So, you should supplement the above list with these titles:
- Death March 2nd Edition (Yourdon)
- The Mythical Man-Month (Brooks Jr.)
- Agile Project Management with Scrum (Schwaber)
These titles will give you the intellectual “legs” to position your strategies and arguments (yes, arguments) for implementing best practices with peers and managers.
Ongoing Professional Development
After you’ve reached your fifth or sixth year in the industry, you should have a pretty good idea about who you are professionally and where you think you’re headed: Leadership, Consulting, Management. Depending on your path, different books will influence your thinking. You will likely be wanting to show what you’re capable of – perhaps in a new role or firm. Some of these titles will help:
- Fearless Change: Patterns for Introducing New Ideas (Manns & Rising)
- Agile & Iterative Development: A Manager’s Guide (Larman)
- Implementing Lean Software Development: From Concept to Cash (Poppendieck)
Conclusion: Just Do It
In my experience, not very many folks who have a lot of “paper” experience have actually ready many of these books. They’ve heard of them, but never read them or applied their lessons. I’ve come across consultants who are really smart and with scads of experience who have yet to write a single unit test – or worse, think that a tool can do it all for them. Common sense ain’t so common.
If you master 60% of the above list, you will be a better coder and professional than 3/4 of the people you’ll come across over your career. It will take time, some personal commitment and in some cases risk – but it will be immediately worth it. Follow the advice of Ken Schwaber (co-creator of Scrum) who urged attendees at a conference to actively begin improving their software delivery experience by implementing agile techniques by getting out there and doing it: “Don’t procrastinate; do something – no matter how small.”