a companion discussion area for blog.codinghorror.com

Programmers Don't Read Books -- But You Should


So, what would you recommend for a business analyst?

I have an odd job. In our group, I spend most of the project hopping around from group to group. I code with the devs, I do CSS with the designers, I attend management meetings, I look at content with our content owners. Why all this jumping around? Because I’m the documentation fairy. Having a moderate hands-on knowledge helps me create documentation that means something more than ‘get the man off our back.’

So, I don’t need high level programming books. I’m never going to design a system on my own. I need books that are more about how things fit together. Anything you can recommend for that?


All these books are available here:


as online versions. A very cost effective way of getting these books IMHO.

$45 a month for as many books as you like or $25 a month for a 10 slot bookshelf.

Highly recommended.


definitely, the text [about programmers not reading books] is present [in the original 1993 Code Complete]. It appears at the end of page 760.

Thank you!

what would you recommend for a business analyst?

Hi Katie,

Here’s my top 5 for business analysts; two are the same.

  1. Krug’s “Don’t Make Me Think”
  2. DeMarco and Lister “Peopleware”
  3. McConnell’s “Rapid Development” (more project management oriented)
  4. Cooper “The Inmates Are Running The Asylum”
  5. Nielsen/Loranger “Prioritizing Web Usability”

I don’t think you’ll be disappointed!


Hmmm, i guess im different to ‘most’ programmers then…i have read 5 programming books this month (currently part way through The Mythical Man Month), and i really enjoyed the Don’t Make Me Think book.

Thanks Jeff for your recommended reading list!


Inspired by the same line in McConnell’s Code Complete I wrote this blog ages ago:


Recently I was writing a follow-up, trying to list all the newer books that would now be in my top ten and found that the list was pretty much identical. I might have added Conceptual Blockbusting and I liked the idea of adding Programming Perl to show that it was possible to have a densely technical book that was also well thought out and entertaining.

Also, your comment about Dummies Guides rang a bell!



I still prefer books over learning over the internet. The internet is a source for quick fixes, but with the good books (and you’re absolutely right, most programming books are an utter waste of paper) I don’t just get whati should stick into my code to make it work, but rather the prinicples upon which the language is based, how it works, and a list of commands, variable types, and their properties which allow me to play about and instantly grasp what i am doing.

In fact, thinking more on it, I think you’ll find that the best programming books consist of that: a general vocabulary of the language in question, and the general principals on howthe language works.

You can’t get by with just a sheet of terms such as print, else, if, or, etc… without understanding the logic behind it, any more than you can get by knowing that a language was developed to give you a variety of means to object oriented tasks, without knowing the difference, for example between the variables “int” and “string”.


Good programmers write good code
Great programmers steal great code



I think the main problem with coding books is that to be able to write a good one, you have to a) really, DEEPLY understand your subject (not just be competent in it) and b) be able to communicate that understanding in a clear way, step by step, while keeping in mind what it might be like to be a complete beginner.

This is not easy. Essentially, you have to be a natural or trained teacher. And that’s something that not many people are.


I was pleased to see “The Design of Everyday Things” on your bookshelf - one that has been on mine since the early 90’s university sojourn and one that pre-dates most of Nielson’s usability writing (although …Everyday Things was not about software in particular). Cheers to the design of everyday things - which now does include software!


You can’t call yourself a Windows programmer unless you have read and understood:

  • Programming Windows, Fifth Edition (Petzold)
  • Programming Applications for Windows, 4th ed (Richter) or the new title, Windows via C/C++
  • Ideally, Windows Internals, 4th or 5th ed (Russinovich, Solomon).

Programming Applications was originally called “Advanced Windows” but the 4th edition covers Windows 2000. Windows Internals was called “Inside Windows NT” then “Inside Windows 2000” but again, you probably want the more up-to-date information. Programming Applications tells you what to do, Windows Internals tells you what the OS does when you do that.

If you plan to write server applications, “Programming Server-Side Applications for Windows” (Richter, Clark) is also helpful.

All of this is C/C++ material, but it’s the fundamentals of how Windows works. As we know, abstractions leak, and the .NET Framework is no exception. If you want to know what’s going on with your .NET program, you still need to know this stuff.

All these books are monsters. There’s a reason. Windows is big. Very very big. None of these books provide complete coverage but they provide the fundamentals on which everything else is built.


As well as applauding the great books you talk about here, I think there’s more scope for naming and shaming some of the real shockers.

I think a five “worst” books would be an equally interesting list…

Julian Bucknell nails some of them here:


  • Roddy


On a related note, has anyone ever read a good book on microsoft programming techNologies (VB6, .NET, MFC, etc)? I don’t mean to single out MS developers/writers (I am one by day) but they seem to be the orst offenders in this regard.

It seems like everyone of these books (and the vast majority of msdn documentation) boils down to a click here, type this, click there, select this walkthrough.

If I’m reading documentation I want an explanation of the concepts and key parts involved (with links to reference documentation), not a step by step guide.

The same goes for tutorials. In a tutorial there needs to be some hand holding, but it should also take breaks at appropriate points to explain the concepts it’s dealing with.

I think the reason most people don’t document code is that they don’t know how to make it usefull.


Interesting. I picked up a book “C# for Dummies” and read it cover to cover. I then picked up a C# reference book and starting reading that. I then picked up a heavy weight Asp.Net book and read that. After a lot of trial and error, I started get the hang of things. Of course the code was rubbish and thankfully it was all throw away stuff. It was only when I got away from the basic books and into the more professional books that my coding achieved a high enough standard for production.

Books are vital for for bringing this awareness to the development community. The Google look up won’t tell you the best way to do something just the way that can be explained in a few short lines.

To over simplify things - The quick fixes come from Google while the long term good code and good design comes from books.


I really should stop reading your blog, as I turn poor buying all the stuff you recommend.

Hey but at least I can use the Fenix L0D light to read the books. And if the battery runs out I can use recharge the eneloops using my shiny new BC-900 :wink:



All the books that you mention are relatively old, not of course to imply that they are any less relevant. I was wondering which books from say, the last three years, you would recommend?


I think it’s an age thing. I’m pre internet by several years and remember reading most of the books you give here. Reading online sucks as well - it’s much harder to remember stuff. O’Reilly try really hard with Safari but it’s a pain. I remember hearing a podcast (on Conversations Network somewhere) that was saying in general people are finding it harder and harder to pay attention to stuff because of this - always want it now - even when it is poor quality and not a lot of use.

You can also read books in bed without scorching your lap and scribble on them. It’s easier to try coding examples from a book because you’re less likely to cut and paste them and learn nothing. Typing it in makes you think about what you’re doing.

That said, I agree about the quality of programming books. I’ve been doing Ruby now for about a year and understand a lot of the deep stuff - code generation, metaprogramming etc., that can save you loads of time if you use it intelligently. I recently picked up a book on design patterns and the first third of the book was an introduction to Ruby padding it out - WHY? This ground already covered extremely well by at least 5 other authors - I want the advanced stuff (but couldn’t find it). And 40 (yup $80 or so) was a pure rip.

Also - you haven’t mentioned this - but I learned a TON of stuff at the Euoropean Rails conference and Scotland on Rails. Go to conferences and hang out with other coders, look at what they’re doing. Be humble.


What a coincide, I’m taking a few days of sick so yesterday I decide to order some books to keep me busy:

  1. Code Complete - as per Jeffs reading list
  2. The C programming language - as mention by Joel on the podcast. In short the Joels point is that C is close to machine language and so by understanding C you understand how the computer works at the most basic level.
  3. Concrete Mathematics - My reason for choosing this book are similar to choosing the C book. By understanding the problems which our program are to solve we’re in a better position to solve them efficiently.

I picked these books because they’ll let me understand the why. Also the few how-to style books I’ve read were really boring!



I’ve been programming either as a hobby or a career since I started learning on my father’s TRS-80 a loooong time ago. In that time, I’ve read several books from cover to cover. I prefer the electronic books, because they’re easier to search. Even then, most of them are useless. The big tomes (Pro C# blah blah, Pro this or that blah blah, etc.) mostly contain stuff I already know. Sure, I reference a lot, mostly because I’m senile. Sitting here now, I can think of only one book that truly stands out in my mind:

“The C Programming Language” (1st ed.)

That’s it. Not a good ratio if you ask me.

(Note: books on theory are a little different, about neural networks, embedded programming, animation, etc.)


Programming books are relevant for at best 2 years.

After that, the libraries have changed, the languages have changed, heck, the platform may well have changed.

If I need particularilly arcane knowledge for a project and I can find a book that covers it in quality depth, I will buy it so that I can read it a dozen times in a way that computer reading just does not afford. HOWEVER, many other computer books are just not worth the price.

I love books, and I have a library with fiction down one side and technical references down the other. Sadly, the book on computer graphics from 1985 is probably one of the least relevant reads you will ever have. Happily, the math and physics text books are still mostly relevant, as are the dictionaries and grammer guides (well, ok, grammer guides are really less useful in today’s devil may type world…)

That said, computer books are way to darn expensive for their expected useful life time.


Current literature has the low end covered. Lots of fluffy text and the same repeated drivel.

At the upper end it’s a desert. A wasteland, and while some books have promise, more often than not they’re just a mirage.

There’s a definite lack of quality books that talk about the bigger picture. Mostly they’re just waffling theory without evidence they know what they’re talking about, or at least without being able to communicate that knowledge without appearing to be waffle. How do I build it, and how do I know I’ve built it correctly? Am I just creating an enterprisey WTF?

Similarly for high end technical books. I want the facts and only the facts, and I want to read from someone who is smart and learn something. I want to know caveats, I want to see properly written code. Funnily enough one of the best books I read in the past few years was an ExamCram book for an MCSE. It was all facts, delved into edge cases, and didn’t mince words. A traditional ‘professional’ book would have been 5 times larger and probably missed out the important stuff.

Too much good knowledge is being lost, and reading over and over how to bind data to a repeater or set a label control isn’t cutting the mustard.