Wednesday, May 07, 2008

a deeper reason why programmers aren't reading books

The Coding Horror blog managed once again to excite the echo chamber of software development blogs with the entry Programmers Don't Read Books - But You Should. (To paraphrase a moldy joke: when Jeff Atwood wants to screw in a lightbulb, he humbly holds it in place as the virtual world revolves around him. He's not arrogant, he just has every reason to be.) I mostly agree with him, which is unsurprising since I wrote a programming book review just a few posts ago. However, I disagree with his blanket disregard for "how" books because I have found that an up-to-date, well-organized, authoritative, understandable "how" book is better for teaching or reference than a time-consuming Web search whose results can be quite questionable. I'll certainly concede that many "how" books fail one or more of those criteria.

My slant is that the phenomenon of programmers not reading books could in some cases be a symptom of a deeper shortcoming: the illusion that busyness is equivalent to worthwhile accomplishment. This mentality is exemplified by mottos like "just do it [write code]" and "you're paid to do your job, not think". Its primary activity is scouring the Internet for example code to copy. To the extent it has an associated training regimen, the training happens at the same time as the work happens or perhaps after-the-fact. Its top goal is to produce more lines of code, not to aid the users. It has no inherent notion of a systemic approach to performance, security, exception-handling, and logging. Its style of thought is nonlinear and incoherent, i.e., absorbing ideas that may be excellent individually but nevertheless lack context and organization. Its medium of choice is the Internet (or as the old book Amusing Ourselves to Death alleges, TV). It not merely prefers prose that is broken up into little chunks, it actively rejects prose that isn't. It admittedly excels at the tasks of searching, skimming, and filtering data, yet such tasks are external to the notion that programming should proceed logically.

On the other hand, someone shouldn't respond by slipping into a false dilemma here. The Internet is a fantastic resource for programmers, especially on Web-related topics; programmers who don't cultivate a collection of browser bookmarks are missing out, as are those who don't communicate with the rest. The Internet is an excellent way to keep one's knowledge current, although it's naive to assume that Web trends are necessarily indicative of actual software development trends, which shift direction slowly like a huge ship. The narrow focus that typifies the Internet complements the comprehensive context that a book provides. And the distinction between the two can be murky. I've read online tutorials that are effectively unprinted books (or true unprinted books like Dive Into Python), and I've used some "quick-reference" books whose entries are so terse that I had to supplement the information with an Internet lookup.

Programmers should have the patience (prudence, really) to learn and ponder the entirety and meaning what they do. They should be mindful. Good books aid in that. The work of programmers shouldn't fit the metaphor for life from Macbeth:
Life's but a walking shadow, a poor player
That struts and frets his hour upon the stage
And then is heard no more: it is a tale
Told by an idiot, full of sound and fury,
Signifying nothing.


  1. Picking good book publishers is important as well. I find that publishers like APress, O'Reilly, and Sitepoint all produce quality material, while publishers like Wrox and Sams tend to publish lower grade books (IMHO). I find the internet to be invaluable for cursory overviews or API references, but if I want to learn something in depth, I turn to ink on paper.

  2. Anonymous11:34 AM

    After picking up your "must have" books (Code Complete, Pragmatic Programmer, etc) it becomes very hard to find a good source of information on your more concrete topics. If I want a book on LINQ I probably have over 10 choices right now. Out of those 10+ books how do I pick one? Do I use reviews? Well, the books are fairly new and I might get a handful of reviews which isn't a good cross section. Do I use publisher? Not all offerings from a publisher carry the same weight. Do I use author? This might be the best but you have to know "John Doe" LOVES LINQ and is very knowledgeable. If you knew that you probably read his blog and most of the book is someplace in John Doe's blog. Do I go to my local mega bookstore and flip through the pages? That's a huge waste of my time and if I spend 15 minutes look at 10+ books that is two and a half hours!!

    However, I agree with Joel Spolsky on this and that most developers just don't care.

    Also, thank you for the link to the Head First Design Patters sample chapter. I might grab that before I get the GoF book.

  3. If you want useful theory, then read books published by Springer-Verlag, Cambridge University Press, and MIT Press. The best place to go for a book recommendation is or type into google "[name of book] review".

    Personally, I think the biggest weakness is that people who DO read are afraid to read books that are old. I just turned 24, and I own about 15 computer books published in the 70s, and about 15 computer books published in the 80s.

    At the same time, I arbitrarily violate such disciplined cover-to-cover reading by using a search engine as a dowsing rod. Some APIs I work with are just too plain abstract.

    My biggest gripe here is ASP.NET books that mostly tersely cover the core features of the important classes, but give you little sense of the ambition of ASP.NET's designers or what one day in the life of an ASP.NET programmer is like. Ultimately, I concluded that: (1) ASP.NET uses stateful concurrency (2) doesn't make creative use of lazy binding to simplify it's totally arbitrary lifecycle (3) has a poor model of encapsulation as a result