My Current Bookshelf
People always ask me what I'm reading, so I figured I'd post a photo of the books that are currently on or above my desk. Some of these are older, but many of them are books I've either recently read or are currently referring to. This is a small subset of my book library. It would take more than a few blog postings to cover everything on my shelves. So, we'll start with this:
The books above the shelf are interesting, but let's focus on the titles down below...they're the ones I reach for most often. Here are my quick impressions:
The Pragmatic Programmer: An excellent book that discusses many core development practices including prototypes, domain languages, source control, debugging, exceptions, refactoring, requirements and specifications, testing, etc. Very easy to read, and one of my personal top 10.
Professional Software Development: From a favorite author, Steve McConnell, a book about professionalizing software development. I originally thought this would be a book of practices, but it is more a discussion about the need for the software industry to mature and evolve to become a more rigorous profession (similar to doctors, engineers, lawyers, etc.). I like Steve's ideas, and I think the industry will eventually need to mature along these lines, but it wasn't what I expected...my own fault.
Code Complete: Second Edition: Another McConell title that is a follow-up to his classic original. This book just showed up at my doorstep, and if it's anywhere near as good as the first edition, this will remain near the top of my must-read list for any developer. Code Complete is an excellent and detailed look at practical software construction. It even has its own site.
Extreme Programming Pocket Guide: A short, sweet, and consice guide to the core tenets of Extreme Programming. It's not detailed enough if you're new to Agile techniques, but it's a very handy reference if you are. It's by O'Reilly, so we expect nothing but the best.
Agile Software Development: Principles, Patterns, and Practices: I'm about half-way through this book, and I would highly recommend it to anyone who wants a very good introduction to Agile development practices. Robert Martin (of Object Mentor, Inc.) is an excellent writer, and the text is a very easy read. He fills the book with a number of informative, real-world scenarios and lots of code for illustration. He also covers design patterns.
Refactoring: Improving the Design of Existing Code: This classic book by Martin Fowler is the best introduction to the concept of refactoring. After the introduction, the book becomes a very useful reference that helps guide the reader through many, many useful refactorings. Definitely one to have on your own shelf.
Design Patterns: Another classic book that should be on every developer's bookshelf. Written by the “Gang of Four,” this book introduced the concept of a design pattern and contains 23 real-world, common patterns that any developer at any level can benefit from. You'll probably recognize many of them, but you'll also appreciate the thought they've been given and reach for it as a reference as you're architecting your software. Not to be confused with Dating Design Patterns.
Pattern-Oriented Software Architecture, Volume 1: A System of Patterns: Commonly referred to as POSA, this is another book of design patterns. The patterns aren't as common as those found in the Gang of Four book, but it is a great addition and handy to have on your shelf. Model-View-Controller and Blackboard are only two of the patterns that might be used more frequently.
Patterns of Enterprise Application Architecture: Another Fowler book, this is a comprehensive look at design patterns that are useful for enterprise development. If you're working in an organization that deals with specialized applications, transactions, databases, etc., and you're interested in things like queries or object-relational mapping, this book is for you. If you write shrink-wrapped commercial software, many of the concepts will still apply, but that is not the book's primary focus.
Design Patterns in C#: A recent purchase that I've only started to read. From a quick scan, it looks like a good C# version of the 23 patterns presented in the original Design Patterns by the Gang of Four. The jury is still out, but it looks promising.
.NET Framework Standard Library, Annotated Reference: Volume 1: Brad Abrams blog is a favorite of mine, and I'm always learning something new. He's mentioned this book a number of times, so I finally picked it up. I've only scanned it, but I really like the annotations that describe thoughts, facts, insight, and tips about the classes in the standard library. Not for the casual 9-to-5 developer, in my opinion.
Domain-Driven Design: Tackling Complexity in the Heart of Software: This book rocks. It jumped immediately to my top 10 list, and I expect it to remain there for awhile. Eric Evans is eminently readable and extremely practical. It is obvious that he has had many years of real, large-project experience, and the book does an excellent job describing how to design an object-oriented system by leveraging and successfully interacting with domain experts. It will probably appear mundane to an average developer, but this is a must-have resource for developers and architects who work with domain experts and want to realize their vision with an extensible and maintainable object model. Go buy it now. It also has its own site.
Object Design: Roles, Responsibilities, and Collaborations: If you've never done real object-oriented design (and there are many people who think they're doing OO, but in fact, they're just putting procedural code inside of objects), this book is a great introduction. It covers candidate selection, stereotypes, responsiblities, collaboration, and development of a flexible model. Not a “top 10” book, but a good one nonetheless.
Object Thinking: Based on its description, I was really looking forward to this book. And after reading a couple of chapters, I decided to give it a little more time. And I kept reading. And yes, there is some interesting history, and there are mildly interesting tangents into philosophy, but overall, Mr. West seems to want to listen to himself talk and drop names. He makes some good points about what it means to truly be an object in an object-oriented system, and there are kernels of good information sprikled throughout the text. But, in the end, this book wasn't written for the audience. It was written for Mr. West. Read Domain-Driven Design instead (or Object Design for that matter).
Test-Driven Development in Microsoft .NET: I haven't read this one yet, but it's coming up on my schedule (yes, I have to schedule these things). James Newkirk (of NUnit fame) is one of the authors, and I peeked at the chapter on testing with databases which looked pretty good. Otherwise, I can't say much until I've read it.
Balancing Agility and Discipline: A Guide for the Perplexed: This book discusses both Agile software development techniques and more traditional methodologies. It then talks about successfully balancing different aspects of each for different project types and sizes. If you're in an organization that is interested in Agile development, but management isn't quite yet sold on the idea, this is a good book to read. It can either be used as evidence to support your case, or it can help you blend some Agile techniques into a traditional style which might make the transition easier for those who might be uncomfortable.
Coder to Developer: Tools and Strategies for Delivering Your Software: A great book by Mike Gunderloy that I have reviewed elsewhere on my blog. It has its own site.
Writing Secure Code: Second Edition: I'm sure you've heard about the Microsoft security push, and volume 2 of Michael Howard's book contains a lot of lessons-learned from our internal experiences. Many very good techniques are discussed, including security principles, threat modeling, buffer overruns, running with least privilege, defending against bad input, reviewing code for security, and many more. If you write code and you care about security (which should be every developer), I can almost guarantee you that this book will be very insightful. Highly recommended.
I guess my “quick overviews“ weren't so quick, but hopefully they were helpful. If anyone would like more insight into any of these books, leave a comment, and I'll try to fill in some details. If enough people ask, I'll write a short book review as a posting.
Comments
Anonymous
June 24, 2004
Nice to see John Goughs book there :) What about the Probablistic Reasoning Intelligent Systems?Anonymous
June 25, 2004
Dude... thanks for the Christmas list. Only thing that is missing is the ISBN numbers so that I can print it out and hand it directly to my wife! 8^)
Seriously, this really will be my Christmas list for this year. So many quality books, and too little time.
P.S. to my wife... in leiu of books, please provide Amazon gift certificates 8^).Anonymous
June 25, 2004
The comment has been removedAnonymous
June 25, 2004
Phew, I feel much better about myself after reading your review on "Object Thinking". I, too, had huge expectations based on the previews, and I felt EXACTLY like you do when I was finished. Up until right now, I was almost ashamed, feeling like I had "missed the point". Thanks for giving me back a little self-confidence!Anonymous
June 25, 2004
An interestinglist of books. I gues its time for me to dive into the Brad's book. I bought POSA a few years ago with my own cash. I've been quite disappointed and its been gathering dust ever since. A few more books I would add to your list: "Effective Java" by Josh Bloch - most of what it is could be applied to C#. Finally for a refreshing perspective on Agile methodologies try Alistar Cockburn (perhaps his Crystal Clear book which is now in draft form http://alistair.cockburn.us/crystal/books/cc/crystalclear.zip).Anonymous
June 25, 2004
The comment has been removedAnonymous
June 25, 2004
Sure this isn't a photo of my shelf? Great minds 'read' alike.Anonymous
June 25, 2004
The comment has been removedAnonymous
June 25, 2004
Greg:
I'd trust your instincts on this one. Bail out while you still can. :)Anonymous
June 25, 2004
Andrew:
"Probablistic Reasoning in Intelligent Systems" is a book that I bought to help me understand Bayesian inference techniques for the NxOpinion project I keep mentioning (http://www.microsoft.com/presspass/features/2004/jan04/01-21NxOpinion.asp). It is a very deep text that talks about making plausible decisions when faced with uncertainty. Of course, it is all based on probability and statistics. I'd be lying if I told you I had read the whole thing. I've only read through small sections...if I read it too long, blood starts to ooze from my brain. Of course, that's my own deficiency. I can't properly assess it, but I can say that it came highly recommended.Anonymous
June 30, 2004
Gold! pure gold!
May I make a suggestion?
Smalltalk Best Practice Patterns
by Kent Beck
ISBN: 013476904X
It is not just about Smalltalk, perhaps the Smalltalk part is very small
TITLE: Programming Pearls
by Jon Louis Bentley
ISBN: 0201657880
serious thinking about programmingAnonymous
April 01, 2007
Almost three years ago, on June 25, 2004, I wrote a post titled My Current Bookshelf . It inspired aAnonymous
April 01, 2007
Almost three years ago, on June 25, 2004, I wrote a post titled My Current Bookshelf . It inspired aAnonymous
January 14, 2008
I tend to read a lot of books , and most of them have a technical focus. Every once and awhile, I run