My Book Recommendations
Tags: 
Date: 30 November, 2009 - 04:20

My Professional BookshelfAfter 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.


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Good Choices

(of course, all comments are going to be "and I would probably add ______"...)

The books that I "started" with, as in I'd been programming for a few years and reached a point where I thought "how can I improve", were the ones that really turned my mind around in its view of programming and many aspects of it.

1) "The Art of UNIX Programming" by Eric Raymond - From this book, I learned more about mindset and taking a "meta-look" at how I'd approach coding tasks. This also showed me that I was ready to *learn* more about The Process rather than just learning techniques.

2) "The Mythical Man-Month" by Fred Brooks - I almost didn't buy this when I saw how old it was. Once I started reading it, however, I devoured it in barely two days. I saw SO many parallels between what he highlights as "bad" and what I saw every single day in my job.

I added many Pragmatic books after those, several Spolsky books, and Fogel's "Open Source Development with CVS". But AoUP and MMM were the game changers for me... they were the right books at the right time, given where I was in my programming maturity.

Domain-Driven Design

Great list! A book that I've read recently that I *highly* recommend is Eric Evans' Domain-Driven Design. The book takes the premise that with most software projects the complexity is not in the technology but rather in the domain. If you're short on time, you can check out the author's Putting the Model to Work and Strategic Design presentations to get an idea of what domain-driven design is all about.

Good Model Design

Good model design is something that really clicked for me in the last year or so.  The idea of "fat model, skinny controller" makes so much sense... throw in Matthew Weier O'Phinney's "Play-Doh: Modeling your Objects" and you can do some amazing stuff.

Brent Welch: practical

Brent Welch: practical Programming in TCL and TK. Just superb!

Awesome list, definitely

Awesome list, definitely helped build my amazon wishlist up a little. I'm also amazed at how many books you have on your book shelf that are sitting here on mine.

Amazon Wishlists

Good call.  That's what I did a few years back.  I used to get all my stuff through BookPool, I was sorry to see them go.

Wishlists

Yes, added a couple I don't have to my own wishlist on amazon.

Keith: Have you read The Art of Community by Jono Bacon? I've just finished my copy and it was as helpful as the titles you listed above (review coming on my blog ... as soon as I have some time!)

Good List

I am alredy readed all this book.
But, instead of MySQL in Nutshell i recomended MySQL Cookbook.

Pragmatic Programmer

I've read the pragmatic programmer and found it to be a useful, informative read. You DO need to be pragmatic as a programmer - fit for purpose is my mantra..

Your recommended books are

Your recommended books are very good one & helpful too,it can be bought for reference.Thanks.

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <br> <img> <p> <blockquote> <strike>
  • Lines and paragraphs break automatically.

More information about formatting options