If I was going to offer one piece of advice to anyone aspiring to be a top class software developer* (apart from writing lots of code) it would be to read books. Not just any books though, books written by masters.
Experience often counts for little in software development. If you’ve spent your whole career in the same shop with little exposure to other languages or people outside your organisation it’s quite possible that some 21 year old upstart with a copy of Clean Code under his or her arm will wipe the floor with you when it comes to effectively writing and maintaining software.
Granted, working with good or even great developers will mean a lot will rub off on you. I’ve learnt countless lessons from the people I’ve worked with, but if I look around me people are no older than 30 at most with an average of around 5 years developing software in probably no more than 3 different organisations.
People like Martin Fowler, Eric Gamma, Kent Beck, Robert C Martin, Craig Larman and Michael Feathers have been at it for 25 years or more and in that time have slowly built up the kind of reputation you only get from regularly being right.
Also granted, blogs are are an invaluable resource, but are rarely little more then a meme in someone’s head and give you nothing like the deep contextual insight you can get from a well written book. There is also little to assure you that the author is anymore likely to have a better idea than yourself. Believe me when I say there are many people blogging who rarely live up to the practices they preach and are no more or less likely than you to know the right or wrong way of doing something.
I have learnt a lot from both colleagues and blogs, but both pale to what I’ve learnt from the books I’ve read. I can comfortably say there is no way I would be where I am today without them and I strongly believe it will earn you more money. When you think of all the things you could do to try and put more folding stuff in you’re back pocket it’s a relatively simple win!
I’ve been inspired to write this after reading Eric Evans Domain Driven Design which has gone right into my top 5 books of all time. Why is it so good? It’s not because Eric has necessarily been born with some supernatural instinct for writing great software or that Domain Driven Design is going to save the planet. It’s because it’s full of the lessons that Eric has learnt in his long and illustrious career, carefully woven into a highly readable narrative. There’s nothing particularly new here. Like all the great books I’ve read it is no more than a distillation of the practices in the industry which through time have proven to be the most effective. I remember Martin Fowler once saying that people often asked him what would be the future of software development. His answer was that to see the future you only have to look to the past.
Below is a list of the books which significantly changed the way I think and work more than any other’s I’ve read. No doubt you’ve heard of them all already and are on a list of books to read in the back of your mind somewhere and I’m sure there are plenty of others that had as significant an impact on people as these have on me. However I think few will argue that any of these books do not deserve their place on this list. All I can say is get on and read them if you haven’t already.
Refactoring: Improving the Design of Existing Code by Martin Fowler
Domain Driven Design: Tackling Conplexity in the Heart of Software by Eric Evans
Working Effectively with Legacy Code by Micheal Feathers
Agile Software Development: Principles, Patterns and Practices by Robert C Martin
Clean Code: A Handbook of Agile Software Crafstmanship by Robert C Martin
xUnit Test Patterns: Refactoring Test Code by Gerard Meszaros
Lean Software Development by Mary and Tom Poppendieck
The Toyota Way: 14 Management Principles from the World’s Greatest Manufacturer by Jeffry LIker
*I am in no way professing to be a top class developer 🙂
All of those books are brilliant.
Agile Software Development: PPP is the book that got me into XP, and led directly to where I am now (thanks Uncle Bob 🙂 )
I would strongly recommend that you get Perl Medic
Yes, it’s about Perl. And it also contains one of the best case studies of taking a reasonably complex legacy code base through getting under test and refactoring through to functional, maintainable code.
Reading books and going to software talks / conferences are a great way of developing a broader view on what’s going on in the wider industry. When interviewing I always ask about how people keep up to date with new developments and these are two good ways of showing that you care about doing a good job.
I’d think about adding IEEE Software to your reading list. It has some useful stuff now and again.
Can I suggest two other books:
Applying Domain-Driven Design and Patterns by Jimmy Nilsson.
The Art of Unit Testing by Roy Osherove.
You are fortunate that you live in an area where companies are willing to implement agile practices. I tried a dojo where I took the team through the refactoring towards SRP sample by Gabriel Schenker [Pablos Solid ebook] and they saw nothing wrong with the original code! They thought that having so many classes would make debugging more difficult! I tried to explain that by implementing unit testing during the process, they should never have to debug as the tests should cover all of the potential edge cases.
I did a presentation to a user group on Monday about Fluent Validation and stressed the built-in test helper methods. During the main session, by Seb Lambla, the group of forty were asked who was doing unit testing and five of us put up our hands; I have to say that I was quite shocked at how low that was.
Thanks for the nice list of software books. Most of these would be on my own list.
One book not listed that is near the top of my personal list is “The Pragmatic Programmer: From Journeyman to Master.”
I’ve hired, led, and mentored many developers of varying levels of experience, The Pragmatic Programmer contains so many tips, guidelines, and words of wisdom on how to be an effective professional or craftsman in our field.