Programmers Don't Read Books -- But You Should

April 28, 2008

One of the central themes of stackoverflow.com is that software developers no longer learn programming from books, as Joel mentioned:

Programmers seem to have stopped reading books. The market for books on programming topics is miniscule compared to the number of working programmers.

Joel expressed similar sentiments in 2004's The Shlemiel Way of Software:

But the majority of people still don't read. Or write. The majority of developers don't read books about software development, they don't read Web sites about software development, they don't even read Slashdot.

If programmers don't learn from books today, how do they learn to program? They do it the old-fashioned way: by rolling up their sleeves and writing code – while harnessing the collective wisdom of the internet in a second window. The internet has rendered programming books obsolete. It's faster, more efficient, and just plain smarter to get your programming information online. I believe Doug McCune's experience, which he aptly describes as Why I Don't Read Books, is fairly typical.

I lay part of the blame squarely at the feet of the technical book publishing industry:

  1. Most programming books suck. The barrier to being a book author, as near as I can tell, is virtually nonexistent. The signal to noise of book publishing is arguably not a heck of a lot better than what you'll find on the wilds of the internet. Of the hundreds of programming books released every year, perhaps two are three are truly worth the time investment.
  2. Programming books sold by weight, not by volume. There seems to be an inverse relationship between the size of a programming book and its quality. The bigger the book, somehow, the less useful information it will contain. What is the point of these giant wanna-be reference tomes? How do you find anything in it, much less lift the damn things?
  3. Quick-fix programming books oriented towards novices. I have nothing against novices entering the programming field. But I continue to believe the "Learn [Insert Language Here] in 24 hours!" variety of books are doing our profession a disservice. The monomaniacal focus on right now and the fastest, easiest possible way to do things leads beginners down the wrong path – or as I like to call it, "PHP". I kid! I kid!
  4. Programming book pornography. The idea that having a pile of thick, important-looking programming books sitting on your shelf, largely unread, will somehow make you a better programmer. As David Poole once related to me in email, "I'd never get to do that in real life" seems to be the theme of the programming book porn pile. This is why I considered, and rejected, buying Knuth's Art of Computer Programming. Try to purchase practical books you'll actually read, and more importantly, put into action.

As an author, I'm guilty, too. I co-wrote a programming book, and I still don't think you should buy it. I don't mean that in an ironic-trucker-hat, reverse-psychology way. I mean it quite literally. It's not a bad book by any means. I have the utmost respect for my esteemed co-authors. But the same information would be far more accessible on the web. Trapping it inside a dead tree book is ultimately a waste of effort.

The internet has certainly accelerated the demise of programming books, but there is some evidence that, even pre-internet, programmers didn't read all that many programming books. I was quite surprised to encounter the following passage in Code Complete:

Pat yourself on the back for reading this book. You're already learning more than most people in the software industry because one book is more than most programmers read each year (DeMarco and Lister 1999). A little reading goes a long way toward professional advancement. If you read even one good programming book every two months, roughly 35 pages a week, you'll soon have a firm grasp on the industry and distinguish yourself from nearly everyone around you.

I believe the same text is present in the original 1993 edition of Code Complete, but I no longer have a copy to verify that. A little searching uncovered the passage Steve McConnell is referencing in DeMarco and Lister's Peopleware:

The statistics about reading are particularly discouraging: The average software developer, for example, doesn't own a single book on the subject of his or her work, and hasn't ever read one. That fact is horrifying for anyone concerned about the quality of work in the field; for folks like us who write books, it is positively tragic.

It pains me greatly to read the reddit comments and learn that people are interpreting the stackoverflow.com mission statement as a repudiation of programming books. As ambivalent as I am about the current programming book market, I love programming books! This very blog was founded on the concept of my recommended developer reading list. Many of my blog posts are my feeble attempts to explain key concepts outlined long ago in classic programming books.

How to reconcile this seemingly contradictory statement, the love and hate dynamic? You see, there are programming books, and there are programming books.

The best programming books are timeless. They transcend choice of language, IDE, or platform. They do not explain how, but why. If you feel compelled to clean house on your bookshelf every five years, trust me on this, you're buying the wrong programming books.

I wouldn't trade my programming bookshelf for anything. I refer to it all the time. In fact, I referred to it twice while composing this very post.

my-programming-bookshelf-small.jpg

I won't belabor my recommended reading list, as I've kept it proudly the same for years.

(Update: Tim Spalding kindly set up a LibraryThing account on my behalf – and members have already documented and entered every book pictured on these shelves. Impressive, and quite cool!)

But I do have this call to arms: my top five programming books every working programmer should own – and read. These seminal books are richly practical reads, year after year, no matter what kind of programming I'm doing. They reward repeated readings, offering deeper and more penetrating insights into software engineering every time I return to them, armed with a few more years of experience under my belt. If you haven't read these books, what are you waiting for?

Code Complete 2 Don't Make Me Think Peopleware Pragmatic Programmer Facts and Fallacies

It is my greatest intention to make stackoverflow.com highly complementary to these sorts of timeless, classic programming books. It is in no way, shape, or form meant as a replacement for them.

On the other hand, if you're the unfortunate author of Perl for Dummies, then watch your back, because we're definitely gunning for you.

Posted by Jeff Atwood
231 Comments

I am a relatively young programmer, specialising in Actionscript.
It is unfortunate but true that alot of programmers of my generation do not read as much as they should. The good ones, really condense many years of wisdom and experience, allowing young programmers like me to improve on their craft very rapidly.

The consolidated concepts and ideas in books makes the knowledge more digestable, making the required leaps in thinking less painful for the uninitiated.

I do admit, that I have some programming pornography on my desk, but i feel that in this case some pornography is better than no books at all!

at the least it shows a respect for the knowledge that books can offer.

kevin on May 4, 2008 11:45 AM

definitely, the text [about programmers not reading books] is present [in the original 1993 Code Complete]. It appears at the end of page 760.
Time machine? A citation from 1999 in a 1993 edition would indeed be prescient (-:

The 1993 edition of Code Complete cites 'DeMarco and Lister 1987', which is the first edition of Peopleware.

Peter Hilton on May 5, 2008 6:48 AM

Unfortunately it's a reciprocating problem. Programming books are written by programmers, and those that don't read typically can't write well.

Keith Henry on May 6, 2008 6:56 AM

I hate books.i just manipulate things up .

hafizan` on May 9, 2008 7:56 AM

Interesting. If a physician said he/she didn't own Gray's Anatomy, or if a chemist said he/she din't own the Rubber Bible, I'd lift an eyebrow. Knuth has the answers for most of your programming problems, superbly written, superbly typeset, and superbly bound. The 2nd editions are a pleasure to read, hold in one's hands, and to drowse over at midnight. I've shown them to ME's, EE's, acountants, and attorneys, and the universal reaction has been astonishment that technical books could be so beatutiful.

Nat on May 12, 2008 6:16 AM

What's that between Defensive Design and Website Usability? Designing the Obvious?

Adam Fortuna on May 13, 2008 11:42 AM

When I look up a coding question on Google, I usually quickly get an answer to my question.

But when I read a book, I get the answers to a lot of questions that I haven't even thought of asking yet.

Also, when I read a book online, all I get is a headache.

That's a great list of books, but I wish fewer people had taken "The C Programming Language" literally and left us the legacy of two-character variable names.

Milligan on May 21, 2008 9:24 AM

I miss books that had personality. The books which were written explaining stuff. Not dumbing down, not hiding author's ignorance, not throwing up a ton of reference-style pages. I remember Peter Norton's book on PCs. It was that what made me intereted in computers at the time...

Clever guy on June 6, 2008 3:17 AM

books that I'm currently reading

SICP
On lisp
Paradigms of Artificial Intelligence Programming


alok on June 21, 2008 8:45 AM

For algorithms there is the book Introduction to Algorithms, and Part II Problem Solving of Artificial Intelligence: A Modern Approach. But for new technologies like user interfaces in Windows Forms it is hard to find good books, especially in Romania. And I also did not find a good practical book about the details of the software development (requirements gathering, scheduling, source control usage, debugging, testing and so on).

Jeno on July 15, 2008 2:36 AM

Good programmers write good code
Great programmers steal great code
:)
Then who writes the great code? :P

Bill on July 21, 2008 12:31 PM

Business Analyst book recommendations

I have recently started publishing business analysis books. Thats the new thing Analyst do when the retire. These are easy how to guides and they are selling really well on lulu.com. I would like to invite you to visit my website )(www.echoicesolutions.com). On the services and products link you will find information on how to purchase electronic eAnalyst Redbooks. I priced them really low - 25.00. I guess that is why everyone is buying. I have and Introduction To Business Analysis and a Business Analysis Templates books. These books combined are great resources for conducting business analysis. I will like to get your thoughts.

DeEtta on September 10, 2008 10:57 AM

I clicked the books you recommended (I owned 3 of them before reading this blogpost). Funny is that the Amazon's page of Facts and Fallacies of Software Engineering states that Customers Who Bought This Item Also Bought and 3 others from your 5 follow. You are a powerfull blogger :-).

Michal Pravda on September 22, 2008 5:32 AM

The low quality of many books is explained in this article by Philip Greenspun.
http://philip.greenspun.com/wtr/dead-trees/story.html

I don't read so many boooks on programming now. Though I used. I try to focus my attention. For programming languages I look for the definitive books, not the Dummies Books. For how to program well in a language I look for the experts, like Scott Meyers.

Sadly I do not see the likes of P J Plauger or Jon Bentley anymore.

I used to follow the pragmatic guys and the agile guys, but they been publishing so many books ( compare to two or three really important books for Structured Programming )--makes me wonder if it's all hype to promote themselves, their business and sell a lot of books.

BubbaT on October 15, 2008 12:52 PM

Can anyone recommend any good books on embedded programming?

Chris on November 14, 2008 8:49 AM

Indeed, there are books to read for everyone, no matter what you're looking for. Take the bookshelves you presented, for example. Perfect for a programmer, I say.

bookshelves on July 22, 2009 3:49 AM

Very very interesting and informative post !
Thanks keep writing such great posts

Ronnie Sullivan on July 29, 2009 4:15 AM

Im a novice programmer. I started out reading "beginning programming" in 24 hours. Cover to Cover. I felt like it really was a good into, even considering i couldn't write 1 meaningful program in any language after reading it, but it was a foundation at least of the terminology. Then on to Python for dummies. It was fun, and i can now code basic stuff. I just get a little jealous of other tech geeks, who are really good at programming who claim they never took a single class or read one book... Where am i going wrong...? I will continue to read these posts for insight....

t.martinez on August 8, 2009 3:48 AM

Nice list. Hey why all the hatred for the Perl for dummies author? I'm going to buy it just to see how bad it is! :-)

According to the comments of this post http://antoniocangiano.com/2009/08/15/do-programmers-still-buy-printed-books/ programmers (the good ones) still read books and they favour printed copies.

I know I do at least.

David on August 17, 2009 2:49 AM

When did you sneak into my study and take a picture of my book shelf? Not a complete match but certainly there is a lot of commonality there, and just looking round one of the oldest I have to hand is Stroustrup's Design and Evolution of C++ and although I did often buy reference books back in the pre-internet days they are all long gone. The classics just keep being useful, I mean you wouldn't see a 20th anniversary edition of "The Windows 32 API Reference Guide" but The Mythical Man Month is just as relevant today and even my 20th Anniversay Edition is now 12 years old!

But even if programmer's don't read books they don't read off the web either, the only time they do is when they need to do something and want to find the answer so you end up getting The CodeProject Programmer who just pulls together a bunch of code from sites like CodeProject but if something goes wrong have no idea how to solve the problem. Learning on the job is fine but then it needs to be structured and guided into better ways of using that knowledge and when indeed to use that knowledge. I know that my continued usefulness in this industry is only because I never stopped learning, and it pains me to see how many people think that having a degree means that is all they need.

All I would say is all us who care have a obligation to keep banging the drum wherever we are to ensure that we together raise the professionalism of this noble art.

Simon Wilson on February 6, 2010 10:24 PM

Nice! BASIC Computer Games made the shelf! That was the first programming book I ever read.

Aston on February 6, 2010 10:24 PM

I come into this upside down, I think, because I was a book lover before I was a programmer, and I read programming books before I got into university. Code Complete was the first programming book I read, and it was a good first choice.

There's a big difference between reading for theory and reading for reference. Nobody keeps "Introduction to Automata Theory, Languages, And Computation" around for reference, but it's valuable background for learning about compilers and high-level languages.

I have mixed feelings about Safari books online. They have some great books, but the formatting sometimes leaves something to be desired.

Ron on February 6, 2010 10:24 PM

I guess I'm not the average programmer around here. I do a lot of scientific programming and data analysis. So I value books like "Numerical Recipies in {C, Fortran, Radish}", and references about things like spectral analysis, and data mining.

I do like your bias toward good GUI design.

Sheldon

Sheldon Stokes on February 6, 2010 10:24 PM

I used to buy computer books all the time and they would fill up my book shelves at home and the office. I got the safari book shelf from oreilly and I haven't bought more than 4 books in the past 3 years since getting the subscription. As someone mentioned already, you had to buy "slots" for how many books you want to check out. Well now they have a new tier, which I jumped on, called "library" that removes the limits of what you can see online. This makes it great as a reference tool and if you find code that is good, you can copy much easier than from a book.

Jason on February 6, 2010 10:24 PM

Oreilly books are the best!!!

Ron on February 6, 2010 10:24 PM

It's because of the internet, not because programmers don't want to read books. Mainly all the content found in books can be found scattered on the internet, so why spend $40 for a book, when searching the internet is free.

Jon West on February 6, 2010 10:24 PM

I think the thing that makes the valuable books valuable is perspective. KR doesn't just teach C; it teaches a useful way to think about learning a language, a useful way to organize a book, and a useful philosophy of programming (see also 'The UNIX Programming Environment'). 'The Pragmatic Programmer' is a terrific meta-example of this kind of writing. There's an attitude of curiousity, professionalism and craftsmanship that isn't necessarily the focus of books like 'Learn Blub in n units'. I sought out one of Jerry Weinberg's PL/C primers just to see how a professional programmer thinks about programming and about teaching it, and was richly reward for the time (and thanks, 'Amazon Used'!) At the same time, there's a place for the more prosaic 'how do I foo a whatzit'. I love the idea that stackoverflow will try to mediate between both worlds.

Pat Morrison on February 6, 2010 10:24 PM

Also, those of you who have ACM memberships, it appears that all of the books listed except for "Peopleware" are available through your ACM PD/Safari.

http://pd.acm.org/

Jason Mock on February 6, 2010 10:24 PM

My favourite interview question is "what is the name of the last book you read about software". My favourite follow up question is "what is the last software book that you bought".

Usually, the answer to the first question is "uh, ... I can't remember", or worse "uh, ... it's been a while since university".

Answers to the second question are almost along the lines of "I can't remember when I last bought a book on software".

This is all very sad.

I have purchased and devoured books on programming and software on a regular basis since the mid eighties. I no longer buy a book a quarter and I have long since moved on from how-to-use-technology-X books.

These days I am looking for books to change the way I think so pure technology books don't cut it any more.

I suppose this is an experience thing. I'm past the point where I need books to tell me how to use something, I now use books to see how I can learn new ways to think.

Books with new, or challenging ideas are few and far between at the moment.

Also, I have become just as guilty as everyone else at using Google as my crib sheet. I no longer attempt to hold vast amount of information in my head about APIs or cryptic syntax since I can find that information *very* quickly.

Finally, I still have a copy of the 2nd edition KR C book, printed on high-quality paper. I think it is probably one of the best books ever written on an language. Everything about the language is there albeit only ever mentioned once.

I remember a colleague of mine once telling me that how much she hated the KR book. For her it was a terrible book because there wasn't enough reinforcement of key ideas throughout it. She found it hard to find things in the book. She preferred one of those 500+ page books on C that were popular in the early nineties.

The thing about the KR book is that it is meant to be read like a novel. It is not a manual. I think that this is why I still find it to be one of the best language/technology books ever written.

I suppose, more than anything, the KR book is about how you think with C. It is far less about how you write a program in C.

Gordon J Milne on February 6, 2010 10:24 PM

Big fan of programming books here too. Websites tend to be a mess of someones else's code. But more importantly... you have to know what you are looking for when searching the web, whereas a book lays out everything right in front of you. I cant tell you the number of times I reread through an old C# book and saw something very basic, but new to me. Books all the way. I avoid the web as much as possible.

JAtkinson on February 6, 2010 10:24 PM

As a developer with intermediate programming skills, I absolutely love reading technical books. When grappling with a difficult concept or technique, it is very helpful to consult different explanations by different authors.

Most technical books are available on-line via bit torrent, and I will typically print out selected chapters related to difficult concepts. Then, to assuage my piracy guilt, I will actually buy the hard-copy of a programming book every few months.

My favorite part of programming is those "aha! moments" when everything fits together. I often experience such moments when physically coding, but I also experience those moments when reading through excerpts from programming tomes. Regardless of the medium, such moments feel great!

Aaron on February 6, 2010 10:24 PM

«Back

The comments to this entry are closed.