Sei sulla pagina 1di 11

Programmers Don't Read Books -- But You Should

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:

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.
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?
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!
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.

Without programming books I would be clueless… but I’m part of your generation Jeff
- the “old guys” who learned to code in the dark ages before 24 hour internet
access was a given. As such, I still use books (as well as the net). I simply can’t
get comfortable trying to snuggle up at night with my laptop - books work much
better in that respect.

Apr '08
Nicolas
Ugh. Did you see the (unofficial) documentation for writing software for
(jailbroken) iPhones?? There is one book, I think, but what is available the most
are VIDEO TUTORIALS ON YOUTUBE. Even more for tutorials explaining users how to
jailbreak. Looks like people can’t even be bothered to READ online. They need a
step by step in a freaking video.

Sheesh.

Apr '08
andrew_q
I think there will always be a small group of developers willing to pay for well-
written material, online or on paper, but hopefully the net will deal the death
blow to the hated “X in Y days” category.
With fast searching and Intellisense I don’t need to thumb through poorly written
books to find parameters for API calls or quirks of this or that library.

When I saw your bookshelf (Basic Computer Games - oh, the hours typing those into
my Apple II and the pointless hours playing Horserace!) I turned around and looked
at mine and, no, despite all the information at my fingertips I still like my
Meyers, Stroustroups and so on. I did notice I haven’t bought any in a while even
though I liked the Pragmatic stuff.

What are the numbers on your “Design Patterns?” - didn’t return it to the library?

Apr '08
unset
I must confess, that I avoided books about coding for years. After I made my
passion to my job, I began to read books. Mostly about GUI design, defensive
design, usability and performance. I fully agree to you: Programmers must read
books!

Apr '08
two_pi
I’ve always loved computer books. When I was a teenager (looooong ago) my brother
remarked that I’d have to write books myself, because I’d already read most of the
computer books out there. I haven’t come close to reading everything out there, but
I do write a lot of computing books (11 at last count.)

I was an elitist too, for a while. I never owned any Dummies Books, and I nearly
turned down the offer to write one. Now I’ve written two. A series isn’t bad or
good. Any author has the opportunity to treat any work as a task or as a
masterpiece.

The technical publishing industry is full of well-meaning English majors who find
themselves editing programming books while working part-time on their novel. Many
of them become quite proficient at technical work, and many of them actually care
about quality. I can’t really blame the people. When they find an author with
technical skills who also cares about the craft of writing, they do what they can
to support her or him. It’s very hard to find anybody who has the technical skills
and communication ability. (Of the two, I find writing ability more rare.)

Truth is, there’s not a lot of incentive to write great technical books. You’ll
earn a lot more money by being reliable than correct. If you just keep pumping out
copy, you’ll sell them and make back your royalty advances. It’s the rare tech book
that makes any money past the advance (only one of mine so far, but I’m very
optimistic about the latest one.)

Writing an excellent book, and writing it well doesn’t pay the bills.
It takes too long, and if the marketing department doesn’t understand it, you’ll
get no support. It doesn’t matter how good the book is if it doesn’t get to Amazon
and store shelves. I earn as much (or more) putting a buy-through link on my site
to amazon as I do writing the book in the first place. Why would anybody sane write
the book if marketing it on a web page is just as valuable?

Still, a part of me believes that quality matters, that the marketplace will
eventually recognize excellence, and that even the industry really wants to promote
quality (as long as it sells.) I’m hopeful that positive Amazon ratings will
eventually turn into meaningful sales, and that even people who buy Dummies books
deserve great writing - a combination of useful skills and insightful fundamentals.
I’m going to keep writing book I’m proud to have on my shelf. (None of mine are on
your shelf, but maybe they’re on the back shelf - grin.)

Ahl ROCKS. I’ve written two game dev books trying to be true to his spirit but
actually teaching something along the way.

Apr '08
Shlomo
I’d love to rectify the horrible state of programming literature out there. I’m a
graphic designer and would love to apply informational graphics that explain
computer programming concepts in a visual way. But alas - I am a novice programmer
not capable of doing it on my own. If anyone out there wants to team up with a
designer who gets geeked out as much as you about technology, let me know. You can
find my contact info at www.conartistry.net. (don’t want to post my email here for
privacy reasons)

now for my rant


Finally, someone who sees the horrible state of programming literature out there! I
have been trying to learn computer programming for years and have gotten nowhere
because of the shitty “books” out there. 99% of the programming books don’t make
sense to a newbie as they make congnative leaps and skip over minute, but important
information. I am a graphic designer, and also love technology and want to know how
gizmos work. Despite my interest, dedication, I have not become proficient in the
ways of the coding.

As a designer, I think visually and am trained to communicate clearly. These two


characteristics are not common among a large percentage of engineers. Not to
stereotype here, out of all the engineers I’ve met personally, although they are
great people, usually dont’ have a good aesthetic sense, and they tend to
communicate in a way that I percieve as unclear. Perhaps they make sense to other
engineers. I think There are relatively few people who possess design and
programming skill sets (compared to those who only have one skill set) at a high
level of proficiency. Therefore engineers probably think and communicate in
different ways from us non-engineers. A good computer programming book also must be
written by someone who is a good teacher. One must possess the knowledge, be able
to write well, AND have the ability to teach. There are very few people who can do
all this at once. Thats why the books all suck.
The rare moments where I did find a good book, it was written by two people with
similar interests, but different educational or vocational backgrounds. And
sometimes I’d find a good book written by a designer/programmer. I even read one or
2 good computer books by a programmer. “So he’s read all these books, why can’t he
program?” you might be asking yourself (if you’ve read this far). The answer is
this: programming is just hard. It may come easy to some, but not me, I just dont’
think in the way that I need to write code. I may think that way one day, but I’m
not there yet. I have yet to meet or read work by someone like me who is a good
programmer, a good writer, and a good teacher. I can’t just read and make sense of
this stuff on my own, I need the aid of a teacher or friend to explain things in a
way that I understand.

Apr '08
Joan_Planas
You’re right, this is the fact that hate most from our field. People who depends on
their knowledge and forget feeding it from time to time.

And yes, it will always be better to have a paper book of 900 pages than a big pdf
file to read in a screen. Guys, pay for what is worth, and books are.

Apr '08
DanielC
I don’t see your copy of KR, “The C Programming Language”. Very slim book and it
teaches you C quikly without any tomfoolery.

I’d like to read more programming books but they’re actually pretty expensive, IT
doesn’t attract the brilliant salaries it used to.

Apr '08
Malcolm
I totally agree with you, with no books there’s no proper programming

I write programs for Java ME and well known in narrow circles so many people ask me
what to download to start programming. My usual answer is that first you buy books
for language basics and they better be real paper books, not online. People who
listened to me agree later that I was right and about others I usually don’t hear
anymore.

Apr '08
paul11
My entire dev/test and “program manager” team participate in a monthly book club.
The books we’ve read so far: http://www.amazon.com/Carpoint-nbsp-book-nbsp-
club/lm/R2VUI9C9YAYDDY

But it’s hugely challenging to find a new book each month. I look forward to
stackoverflow.com fulfilling its promise!

Apr '08
PhillipG
Now, I’m no expert, more of a hobbyist trying to turn a passion into a job
(somehow…), but:

I love programming books.

I like the ‘how’ style of books (Programming Ruby, and The Ruby Way in particular),
are very nice. Also books that introduce a framework are interesting (I have
Beginning Ruby on Rails E-commerce) are nice. They serve as quick introduction
(good language introductions include a reference of the language, too) into a
topic, and allow me to ask the right questions, and help me in getting to know the
problem domain or language domain.

And I also like the ‘why’ books. Or books covering a certain area in depth, too.
They can be especially useful if they cover libraries like the .NET library (it is
huge, I have little to no clue where to look to get to know the features), similar
the Java library.

And lets face it: API/library documentation on the web can be nasty, too.

However, there is a real issue in finding good books. And for that, I rely heavily
on recommendations by others, more expert than me.

I think I have almost all books Jeff recommends in my Amazon wish list.

I’ve also noticed, that the quality of a book depends highly on the publisher, too.

And the ‘For Dummies…’ books are a real mixed bag, I’ve noticed. They can be real
hit and miss (The SQL book is next to useless, while the Crystal Reports book was a
tremendous help to me).

Apr '08
steve36
I can see the point in reading timeless books, but rarely there are some amazing
ones you can learn a lot of.
I bought Omar Al Zabirs “Building a Web 2.0 Portal with ASP.NET 3.5”, this man is
one tricky genious! This was well worth my money.

Books like this are especially useful, if your a part time student that can’t
afford expensive internet connection while on the train.

Apr '08
RobinG
That’s a quite excellent bookcase there. I see many old favorites and many items
from my “to buy” list in there.

The truly shameful thing about our industry is that there are many practitioners of
software development who know how to do it well but there is something of a
disconnect with the way people tend to learn software development. Many who teach
themselves grasp at disjointed code samples provided by googling for specific
answers to specific problems and they tend to struggle mightily with attaining even
the smallest bit of maturity as an engineer. Many who learn through formal
education at colleges and universities receive either shoddy educations from a
system that has discovered it can make more money by lowering standards than from
producing competent professionals or they receive inapt educations which leave
graduates poorly trained for the real world (i.e. software engineer hopefuls who
learn computer science instead).

The result is that for every honestly good software engineer there are dozens (or
perhaps even hundreds) of coders practicing shoddy cargo cult programming
techniques or churning out software through copy-paste combined with random code
mutation. The result is also that for every individual who tries to extol the
virtues of good, well tested software development methodologies there are dozens
(no, definitely hundreds) of snake-oil salesmen peddling quick-fixes and magic
bullets.

We are indeed in some of the darkest days of software engineering to date, yet
there is still much hope. There is an impressive number of people who know the
better ways to develop software, and they are starting to find their voice,
starting to organize, and starting to influence others at an ever accelerating
pace.

Apr '08
Shy
Jeff, you read my mind.

The first programming language I applied “professionally” was PHP. I’ve decided I
need to come back to something like C++ to get a better foundation, and for this I
am reading Thinking in C++ by Bruce Eckel.

Before downloading this book (I know, hard copy is better etc) I ran Bruce through
your search and it seems you’re a supporter. Can you vouch for his book too?

Apr '08
Introspectre
Jeff, you wrote: “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.” I own a copy of that
edition, and definitely, the text is present. It appears at the end of page 760.
The chapter it is in is “Personal Character.”

Congratulations for your work,


Best regards,
Introspectre

Apr '08
hollystyles1
Apparently programmers aren’t buying technical books anymore then. The internet has
made information abundant albeit generously redundant and infinitely variable in
quality just like the invention of the printing press in it’s day. It’s no
different to the bound pages of the literary world just bigger and faster. The
internet is far more searchable, you can seek your info-fix in a finer grained
manner. A book needs to be sourced, opened and digested. A web page can be sought
appraised and used or ditched with a fraction of the effort. A book is a banquet
where as the internet can be grazed. But you can’t take the internet as
conveniently to the bath or your bed. Also books don’t disappear in a puff of smoke
when some navvy chops the line to your local exchange by mistake! Stereo typically
hackers have little regard for bathing and bedtime. But thanks to printers you can
turn bits of the internet into your own tailor-made book for off-line consumption,
it’s like on-demand TV. Yeah ‘On-Demand’ that’s what it’s all about.

Apr '08
jpsa
You should get Knuth, though, because its just a pleasure to read something so
authoritative and comprehensive.

Apr '08
Jose_Simas
I would also add to your list of reasons the fact that authors are barely paid if
at all for writing books. You probably went through that too. This state of affairs
is not specific to computer science and although you can argue that writing is a
call, the fact is that receiving a couple of thousand dollars for six months work
raises definite barriers to serious writing projects.

Apr '08
BlueRaja
I must be the exception to the rule - I read books constantly. Not just about
programming, either - math, physics, electronics (or in fact anything remotely
related to computers)…
I’d like to hope that there are a few more out there like me.
Apr '08
Katie
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?

Apr '08
GilesR
All these books are available here:

http://safari.oreilly.com/

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.

Apr '08
codinghorror
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.

Krug’s “Don’t Make Me Think”


DeMarco and Lister “Peopleware”
McConnell’s “Rapid Development” (more project management oriented)
Cooper “The Inmates Are Running The Asylum”
Nielsen/Loranger “Prioritizing Web Usability”
I don’t think you’ll be disappointed!

Apr '08
Andy
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!

Apr '08
StephenD
Inspired by the same line in McConnell’s Code Complete I wrote this blog ages ago:
http://www.zx81.org.uk/computing/opinion/noreaders.html

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!

http://www.zx81.org.uk/computing/opinion/why-i-hate-dummies-guides.html

Apr '08
TheP
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”.

Apr '08
Jonny
Good programmers write good code
Great programmers steal great code

:slight_smile:

Apr '08
Tina
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.

Apr '08
Brad_Mead
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!

Apr '08
MikeD
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.

Apr '08
Roddy
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:

http://www.boyet.com/Articles/WorstComputerBook.html

Roddy
Apr '08
flukus
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.

Apr '08
Brian
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.

Apr '08
DanielL
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:

Apr '08
Adrian
Jeff,

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?

Apr '08
FrancisF
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.

Potrebbero piacerti anche