My essential bookshelf

Regarding programming and software engineering, I was recently thinking about the following topic: If I had to choose the books that have influenced me at most, which ones would I choose?

I found the topic interesting in itself, so I changed the question for this one: If I had to give some bibliography to a newbie [developer], which books would I recommend?

So, this is my list. I’m really proud of it. It has nothing special, you can find some similarities here, indeed. By the way, “Coding Horror” is one of my favourite blogs and I’m a fan of Jeff Atwood. Maybe some day I’ll talk about my favourite blogs… So, going back to the meat, er… the list!

  • Peopleware, Timothy Lister & Tom DeMarco
  • The Pragmatic Programmer, Andy Hunt
  • Code Complete 2, Steve McConnell
  • The Clean Coder, Robert C. Martin
  • Clean Code, Robert C. Martin
  • Agile Principles and Patterns, Robert C. Martin
  • Software Estimation: demystifying the black art, Steve McConnell
  • Refactoring: Improving the Design of existing code, Martin Fowler
  • Implementation Patterns, Kent Beck
  • Test-Driven Development by example, Kent Beck
  • Design Patterns, Erich Gamma, et al.
  • Rapid Development: Taming Wild Schedules, Steve McConnell
  • The Mythical Man-Month, Frederick Brooks
  • Software Configuration Management Patterns, Steve Berczuk
  • C# in depth, Jon Skeet

Well, the last one is only recommended if you are a C# programmer with a little bit of experience, and the the Berczuk’s is a good book as long as you’re interested in Software Configuration Management by itself (and not just as a tool). Since all of us work with a software version control system… I think it’s a good idea to know a little bit further of that topic.

You’ll realize that the list is not provided in a specific order. That’s on purpose. I think these ones are good damn books, no matter the order, no matter which one. If I were you, I would read’em all; I’d just pick one and start reading.

They have influenced me so deep and taught me so much that I try to apply what they say every single day at work. Like Robert C. Martin says in “The Clean Coder”, programming at work is like a violinist playing: a musician trains at home and does his best at a concert. I try to do that, practicing at home and doing my best at work, so when I find some problem or some particular situation I think about Robert Martin, or Kent Beck or Martin Fowler the same way as a violinist thinks about Vivaldi or Mozart or Bach, I suppose.

I’m really proud of these craftsmen. They all have made me love the craftsmanship of software development.