After the recent beating I gave Packt Publishing's “PHP Team Development” , I had a number of people ask what books I would recommend. To be honest, that's one of the easiest questions I've gotten in a while. And that's because when we put together Blue Parabola about a year ago, I had the chance to make this list exactly. There are about 5 books that I believe should be in nearly any software developer's library:
- First, there's The Pragmatic Programmer by Andy Hunt and Dave Thomas. If you are new to the field, don't have a mentor, or just don't have someone pushing you, this is a great book to start with. It will get you into the right mindset and teach you a number of core concepts that will apply to any developer anywhere. Matthew Turland touches on some of its topics here and here.
- Next, we have Joel On Software from Joel Spolsky. This one shares ideas on how to do things simply but effectively. If you're not familiar with the Joel Test, you should be. Regardless, this one is primarly a group of his blog posts, so if you can't get a hold of it, you can read it on his blog.
- Next, we have Code Complete, 2nd Ed by Steve McConnell. I consider this a primary manual for good software development. Steve covers a few dozens of key concepts – though few to any depth – that cover everything from requirements gathering and specification to good code organization principles to testing. Most advanced developers aren't going to draw great value from this one, but it fits nicesly with the Pragmatic Programmer.
- Next, there's Patterns of Enterprise Architecture by Martin Fowler. I tend to keep this one within arm's reach on my book shelf. It covers a number of common Design Patterns and shares examples of each. The example code is all Java, but the concepts are there and quite easy to follow. The most useful thing is where Fowler describes some places where these Patterns do and don't make sense.
- And finally, there's Refactoring (review here) by Martin Fowler. This one is unique in that each of the various refactorings begin with a piece of code and it walks you through step by step in how to make it better. While there are numerous helpful tools – I use NetBeans 6.8 M2 – that handle simple refactorings, you should explore this one to learn advanced concepts and tactics.
You'll notice there are no technology-specific books in that list. For a long time, I wasn't adding any because I worked in a variety of technologies. Once I focused on PHP, a few PHP-specific books made it into my list, but not many. So to add a second tier of “must have” books, I'd add these:
- First, we have Chris Shiflett's Essential PHP Security (review here). Despite being published in 2005, all of Chris's recommendations and fixes still apply. While recently teaching php|architect's Secure PHP class, I compared the class against this book and found that we cover 6 of his ~8-10 points. More importantly, if you follow the OWASP Top Ten, he covers 9 of those.
- Next, there's SQL in a Nutshell by Kevn Kline. I picked this one up years ago and it has been incredibly useful as I've worked on various databases. I continue to use it as I'm working on cross compatibility within web2project and our consulting endeavors.
- Next, on the non-development front, I'd add Fred Brooks' Mythical Man Month (review here). Have you ever heard that phrase “You can't make nine women make a baby in one month”, you're already familiar with Brooks' work. If you're moving into a team lead or *gasp* management position, you need to read this one. Even more importantly, you should try to get your current management to read it. Brooks shares a few decades of experiences in technology R&D and demonstrates that things haven't changed… in 40 years.
- And last but definitely not least, I have to include Karl Fogel's Producing Open Source Software. While Karl speaks specifically about his experiences in an Open Source environment – the Subversion development team, to be specific – the ideas are much more encompassing. If you are working on a team larger than one, you need to read this and understand the principles and goals.
What other books are out there? Which ones do you recommend? Which ones are recommended (or required) reading for your team?
Disclosure: Yes, many of the above links are Amazon affiliates… so? Further, to be clear, I own all of the books discussed above and purchased them myself. In fact, that's my bookshelf pictured above.