Take the 2-minute tour ×

I have come across numerous older posts that highly recommend the following language agnostic programming books:

  1. Code Complete by Steve McConnel
  2. The Pragmatic Programmer - Andrew Hunt and Dave Thomas
  3. Programming Pearls - Jon Bentley
  4. Refactoring - Fowler, Beck, Brant, Opdyke, Roberts
  5. Design Patterns - Gamma, Helm, Johnson, Vlissides
  6. Don't Make Me Think: A Common Sense Approach to Web Usability - Steve Frug

I found these recommendations on Jeff Atwood's Coding Horror and Scott Hanselman's Blog and mostly the same recommendations on other sites as well.

If I read these book today, are they still relevant and will they improve my code, expand my mind, thinking abilities and generally make me a better programmer?

Are some timeless, while others are not?

Are there other brilliant books, I have missed, that will be useful today?

share|improve this question
Design Patterns is not really a book you read. It's more a catalog of patterns than a book about patterns. Trying to learn about patterns from reading Design Patterns is like studying psychology (patterns of human behavior) by reading a phonebook (a catalog of people). Note: it's a good book, and a book you should own, and maybe you actually should read it … but don't do it with wrong expectations. It's not going to teach you about patterns. It is going to teach you some patterns. –  Jörg W Mittag Feb 15 at 5:30
Should Clean Code – Robert C. Martin be in this list? –  SetiSeeker Feb 15 at 5:38
The Pragmatic Programmer is still something I recommend to other developers. Its short, to the point, and really makes you think about your craft. The only other book I have read on your list is Code Complete. Whilst good, I do honestly think it is starting to age. Still worth the read though. –  Simon Whitehead Feb 15 at 10:24
You call those classics? They have nothing on SICP. –  Euphoric Feb 15 at 10:48
@Euphoric Knuth's The Art of Computer Programming is still the classicist's classic. And Brooks' The Mythical Man-Month will never go out of style. –  Ross Patterson Feb 15 at 14:21
show 4 more comments

closed as primarily opinion-based by MichaelT, Bart van Ingen Schenau, gnat, GlenH7, James McLeod Feb 15 at 21:32


3 Answers

up vote 10 down vote accepted

Although Code Complete may be showing its age a little bit (I've only read the first edition), all of these books are relatively timeless.

(Caveat: I don't think I've read more than an excerpt from Don't Make Me Think but thinking about usability is important if you have, well, users. I own at least some edition of all the others and I've read them at least once each, some of them not so recently).

What you learn from them may depend on the kind of software you work on and the phase of your career, so it's probably worth going back and revisiting them every two or three years.

Programming Pearls is, in a way, a book of war stories, and while the specific solutions he had for his particular problem constraints, you'll probably benefit by learning how he thought through a problem. Squeezing space and time are still problems we face as developers, though certainly the constraints we face are a lot less tight for many categories of problems. The book also covers testing and debugging topics whose details may change, but what has to be done doesn't change much.

The Pragmatic Programmer isn't really about code, but about craft, and so the technical examples are mostly illustrative. It's also something you can read in a few hours and if nothing else will hopefully drive you to think about why you do things the way you do and whether you can do better.

The patterns and refactoring books will only change meaningfully if you change programming paradigms; these two books assume an object-oriented approach. While the refactoring book probably translates pretty easily to, say, functional or declarative paradigms, there are probably better books on say, functional programming design patterns if you're working in languages like OCaml, F#, Haskell or similar. And you'll probably have to solve similar problems to those identified in the patterns book even if you work in a functional paradigm; the style will probably be different.

Reading these books will ultimately be a test of how you translate specific examples into general practice; if you look at every programming reference as a simple how-to, you may not get much out of these books. (I remember looking at the Design Patterns book when I was a C++ newbie and dismissed it because some perceived problem I had wasn't obviously solved by whatever chapters I was skimming, which was rather shortsighted; it meant more to me once I had been doing things the hard way for a little too long).

These are books that will hopefully impact how you think about software rather than serve as instruction manuals on how to write code.

share|improve this answer
"These are books that will hopefully impact how you think about software rather than serve as instruction manuals on how to write code." That is exactly what I was hoping to gain from these books. –  SetiSeeker Feb 15 at 6:16
add comment

Code Complete was recommended to me when I started out in IT, and I learned more from that book on how to be a programmer than a university degree.

A book that is worth reading is Code: The Hidden Language of Computer Hardware and Software by Charles Petzold. If you have an electronics background, this book will help you understand CPU and memory architecture. This knowledge will help you performance tune, understand pointers, data structures and processor threading.

The other book that is worth reading is Death March by Edward Yourdon. It won't help you code, but it will help you understand how projects work.

share|improve this answer
add comment

These are just as relevant today as when they were written. Code Complete and Design Patterns will never become irrelevant.

Also, Jeff Atwood, Scott Hanselman, and even Joel Spolsky have very good, and often funny, points of view about software development.

You can't go wrong with any of those.


I have read both the original and first revision to Code Complete. While the vast majority of both books were very similar, there were some updated points made in the revision. I do know that this one book has helped me to focus on how to build solid software. It causes me to think about what can go wrong. That in turn makes me build in such a way as to mitigate issues that come from users, other systems, and even failures like the network or power.

Someone else noted that Design Patterns is more of a reference book than one you read. I can see that point of view. I did read it straight through though. While I haven't used all of the patterns in the book, I have and do still use quite a few of them in every coding. The patterns that I don't use still rattle around in my head. Occasionally, I will refer back to this book to compare a pattern to something I am building.

One very nice thing about a book: you can always refer back to it. That isn't always easy with a blog (they get moved frequently, or dropped).

Blogs tend to be more about what is going on today than the timelessness of a book. Blogs do have the advantage of being possible to update.

share|improve this answer
If you are going to downvote, please at least do the courtesy of telling me why. –  Adam Zuckerman Feb 15 at 17:31
I didn't downvote, but I can see some flaws in the answer that might have prompted the downvote. It's a very short answer, and most short answers aren't that good. They don't have much room to contain information. The answer is more informative than just "yes", but not by much. It doesn't say why Code Complete and Design Patterns won't be irrelevant, or what "plenty of others" are out there. –  Michael Shaw Feb 15 at 21:08
add comment
