
What is the single most influential book every programmer should read? - ihodes
http://stackoverflow.com/q/1711/142240
======
timr
The ranking of this list is extremely suspect.

 _Code Complete_ is a fine book. _The Pragmatic Programmer_ is okay. But
neither book holds a candle to _Introduction to Algorithms_ for career-long
usefulness. For that matter, neither one holds a candle to _Design Patterns_
for the ability to expand your mind and improve your ability to think about
code (I read both at the same time, and _Design Patterns_ is the only one
whose lessons I remember distinctly, years later).

I think the main problem here is that the easy, mechanical reads get more
votes than books that are harder, but more valuable. It's the technical
equivalent of a lolcat photo.

~~~
jamesbritt
_Design Patterns_ needs to be read with the understanding that the patterns
are for specific types of languages and are not universally applicable.

Also, it should have a short appendix explaining that you do not get geek
brownie points simply by using as many patterns as you can think of.

I realize these are not problems with the book per se, and it's worth reading,
but some developers seem to get the wrong message from it.

~~~
azylman
I read Design Patterns and was unimpressed. Maybe it's because I'm used to
large codebases that are already well designed, but all I got out of Design
Patterns was formal names for patterns that I already used in my code because
they're intuitively the correct thing to do.

~~~
yvdriess
Indeed, that is the only correct use of Design Patterns.

------
droithomme
"Without Conscience: The Disturbing World of the Psychopaths Among Us" by
Robert Hare. If only I understood more about how many corporate executives and
venture capitalists think about things and regard others earlier in my career,
it would have saved a lot of grief. Now that I understand this disorder and
how it works, I am able to avoid distasteful and frustrating scenarios and get
much more done.

~~~
aantix
What sort of situations have you encountered?

------
famousactress
Man, still Code Complete? I dunno. Wasn't that big a fan, honestly. I think I
got more out of the first three chapters than the sum of the rest of the book.

If we're talking about technical books, Refactoring is easily the most
beneficial read I can remember having. I was pleased to see it (barely) trump
Design Patterns... a book that I think (through no real fault of it's own) has
spoiled more developer-years than it's benefitted.

~~~
phillmv
Going through the list:

Code Complete: First ed 1993

Prag Prog: 1999

SICP: 80s?

K&R C: ditto

CLRS: 1990

Refactoring: 1999?

GoF DP: 1994

Mythical Man Month: late 70s, 80s?

TAOCP: Decades ago, and not a serious suggestion

Dragon book: 1986

GEB: 80s was it?

Programming Pearls: 1999

CODE: 1999

Off the top items in that list, only two have them have been published in the
last TWELVE years, which in our industry is at least two full generations.

I don't know about you guys but that makes me a little sad. I think somethings
have changed a lot in the last 20 years. I refuse to believe that Brooks had
the last word on project management several generations ago.

I accept the notion that "the more things change, the more they stay the same"
but I can't help but think this Greatest Hits List couldn't be improved
somewhat.

~~~
neilk
Given that JavaScript and Python are very mainstream now, we need some sort of
text that covers functional techniques for the average programmer in scripting
languages. SICP is dated and doesn't really match what modern languages can
do.

Mark-Jason Dominus' "Higher-Order Perl" is fantastic, but unfortunately
specific to a language that's most programmers are not choosing in 2011. There
was an attempt at a JavaScript port. Maybe someone should take that up again.

~~~
spacemanaki
> SICP is dated and doesn't really match what modern languages can do.

I disagree. There's over 200 pages before they even introduce mutation and
impure functions. Later they touch on the thorny problems that mutation
creates when they touch on concurrent programming. There's sections on
building lazy streams which are core parts of Clojure and Haskell. And I don't
think there's a more accessible intro compilers and programming languages text
than chapters 3 and 4.

While there might be other places to learn about functional programming to
apply to working in Python and JavaScript, SICP is a fine place to learn the
fundamentals. In some ways, I would say modern programming languages are just
starting to catch up to SICP. (yes I know Haskell is pretty old, and
disclaimer: I'm a huge fan of SICP)

~~~
neilk
> I disagree. There's over 200 pages before they even introduce mutation and
> impure functions.

That's kind of the point. I tend to be the one defending SICP on this board,
but only for someone who wants the very particular kind of education SICP
brings.

Meanwhile, over in languages people _are_ using, you don't have the option of
living without mutation. Time to learn how to protect yourself, or not, with
closures.

Recursion has a bigger speed and space penalty. You need to tell people when
to use maps and folds and when not to.

SICP doesn't really do combinators, and they are very useful in JS.

Also, a lot of libraries in JS use chaining, so a grounding in their theory
(maybe even a discussion of monads à la Haskell) might be very fruitful. SICP
has nothing like that.

Callbacks are everywhere in JS programming, so a discussion of how to avoid
spaghetti would be good.

Latency is a much bigger deal for JS -- how to balance very fast local
resources with potentially never-returning remote resources -- and techniques
for beating that are not to be found in SICP, as far as I remember.

And of course there's no discussion at all of UI or media in SICP.

------
malbs
Wow there were a lot of bad suggestions in that thread. I was just waiting for
'C Programming for Dummies' to pop up posted by E. Trollguy.

If you work in an object oriented language, I think one of the most useful
books you could read would be Kent Beck's Smalltalk Best Practise Patterns.
The reason being that the lessons and tricks Kent discusses in his book can be
applied to Ruby, Python, Java, C#, C++, Delphi, and any other language that I
insultingly forgot, where you are working with objects and polymorphism.

But it certainly wouldn't be useful for _every_ programmer to read. Those
would be much more abstract like the already listed ones (mythical man month,
sicp, code complete, gof, pragmatic programmer)

~~~
sneak
Hey, I know it's a laugh, but "C for Dummies" was my very first introduction
to C when I was 13 (I didn't know about K&R yet) and is responsible for
teaching this hacker about pointers and math thereupon.

While I still don't usually write C, having that base knowledge before jumping
into high-level stuff like Perl and PHP in my middle teens was invaluable.

------
hmottestad
The Mythical Man-Month

As always. Considering we are making great software, but a lot of projects
still seem to go over the estimated time....then I guess learning about that
is what will bring us ahead.

Also this talk by Greg Wilson: <http://vimeo.com/9270320>

~~~
v21
I remember hearing about it while I was at uni, and checking it out of my uni
library. I read through it, and it was a dusty old tome full of references to
long dead systems.

And it was good, while not saying anything I was hugely shocked by, but making
clear and sensible points.

And now a few years down the line, I'm out of uni and working, and I find
myself toying with buying it for my boss...

~~~
bjg
Do it, I bought Peopleware for a previous boss as a kind of thanks present
when I left that project. He really enjoyed it I think.

------
lclarkmichalek
A Mathematician's Apology is a good read on why the most abstract of subjects
is worthy of study. It is a justification of pure mathematics, without
resorting to applied mathematics. Though not directly related to computing, it
has some lovely insights, and is a thought provoking read. In computing we
talk a lot of "elegant" code, without ever defining what elegance is, and in A
Mathematician's Apology, Hardy talks of how the most beautiful mathematics is
that which has not applicable to the outside world. It is odd in a way that
the foreword to the book (a biography of Hardy, written by his friend C.P.
Snow) is by a mathematician who is remembered for his contribution to physics;
mathematics that seems to be the opposite of Hardy's definition of beauty.

------
CJefferson
Just to be contraversal, I'm going to suggest 'The Old New Thing', by Raymond
Chen.

Not so much for the details of windows (although those are interesting), but
it is the only book I have ever seen that attempts to show how a large
software project evolves over a long period of time.

------
kls
The funny part is the first page is all development books, my recommendation
would be one on the business of software development or on usability design.
Developers are naturally going to run across the information in those books if
they are interested. Understanding business or users is one of the things that
separates a good programmer from a great developer. Unless you are going into
some pretty hardcore space, read about the parts of software development that
you don't like, because the stuff that should be in a CS classroom will be
picked up along the way if you like what you do. Read a book on QA or SCM, you
will be the better for it.

------
jasonlotito
Recently, I've come to know "Code: The Hidden Language of Computer Hardware
and Software"[1], and I really enjoyed it. I don't think it's necessarily the
first book every programmer should read, but I do think it's a book every
programmer should read. It's an easy read, it's fun, and really does provide
what it promises. Highly recommended.

1\. [http://www.amazon.com/Code-Language-Computer-Hardware-
Softwa...](http://www.amazon.com/Code-Language-Computer-Hardware-
Software/dp/0735611319/ref=sr_1_1?s=books&ie=UTF8&qid=1323207252&sr=1-1)

~~~
famousactress
I really enjoyed it. Being self-taught, it provided a really handy primer and
computer-architecture fundamentals, logic gates, etc. that I imagine I'd have
otherwise gotten in school.

------
super_mario
H. Abelson and J. Sussman "Structure and Interpretation of Computer Programs"
aka SICP if I had to chose only one, but Cormen, Leiserson, Rivest, Stein:
"Introduction to Algorithms" and Sipser: "Introduction To The Theory Of
Computation" are other must read ones.

Seriously, asking for one book to read is silly in a profession that is all
about lifelong learning and disruption of established assumptions and
paradigms. If you want something timeless, then you need to go way low level
to the mathematical fundamentals of this profession.

------
Balauru
Clean Code wins hands down for me <http://stackoverflow.com/a/317750/261363>

~~~
rpledge
I though this was a great book too. It covers a lot of the stuff thats in Code
Complete but without being a massive tome.

------
jlao
I've seen so many lists like this and they always list the same books... Code
Complete, Prag Prog, SICP, Design Patterns, Refactoring, etc...

------
feral
I'm not sure that all those people on Stackexchange have read the question
properly.

The question is "What is the single most influential book every programmer
should read?" I.e. given the set of books that every programmer should read,
which one is the single most influential?

As a programmer, lets consider the answer to the question, as parsed logically
(regardless of intent).

Typing 'most influential books' into Google brings me to this list:
[http://en.wikipedia.org/wiki/The_100_Most_Influential_Books_...](http://en.wikipedia.org/wiki/The_100_Most_Influential_Books_Ever_Written_\(book\))

It turns out its just one persons opinion - but pageranked to the top for
'most influential books'; and notable enough for wikipedia - thats good enough
crowd-vetting for my purposes.

If I knew which books all programmers should read, it'd now be a simple matter
of finding the highest ranked; but here, I have to use my judgement.

So I suggest:

Number 13, Euclid's Elements

Number 32, Machiavelli's The Prince

Number 93, Orwell's Nineteen Eighty-Four

I'm not sure every programmer should read _Elements_ \- maybe, but its a
little abstract these days.

I think _The Prince_ would be good reading for the softer skills of the
programming profession - and genuinely has really influenced management
thinking; its short, so probably worth everyone's time.

Finally, I believe without a doubt, _1984_ should certainly be required
reading for all programmers - a single read is worth a great many 'ethics for
technologists' courses.

There are other candidates on that list too, but I don't think there's
anything that I'm as certain all programmers should read as 1984.

Any differing opinions?

~~~
radicalbyte
If we're assuming an America-centric question and your abstract definition
then you can summarize it with just one book:

1\. The Bible.

Closely followed by whatever the first book that people in stackoverflow's
demographic read whilst learning to read.

~~~
jacques_chester
Why is this being downvoted?

I'm an atheist, but even I can see the bible's profound impact on the course
of western and near-eastern civilisation.

------
konstruktor
Many of those books are great, and I have read shockingly many of them.
However, I find all "... every x should know/have done/have read" lists very
disturbing, since they seduce my ego into wasting time. Right now, my priority
is reduce todo-lists, focus on less stuff that actually gets done, and use
lean/just in time in as many areas as possible.

------
Radim
Ah, good old karma whoring times on StackOverflow, with inane questions that
make people feel warm and fuzzy (and press the plus).

~~~
Corvus
Please note this question was asked in 2008, when StackOverflow was
considerably more tolerant of subjective questions, and it was locked to
prevent any more votes. The notice on the question says "This question exists
because it has historical significance, but it is not considered a good, on-
topic question for this site".

------
buro9
For me it's not even a programming book... which is what I felt the people who
have answered have artificially limited themselves to.

For me, it's: <http://www.amazon.co.uk/dp/0195019199>

Pattern Language

It's about architecture, buildings, towns. How to make them work, to serve all
the needs of them, and how to allow them to grow.

What is important to me and influenced me heavily is the thinking behind it.
All parts of a large system in harmony, well-separated concerns, and working
together to achieve a common goal.

In architecture (computer as well as construction), there is also politics. We
pour ourselves into these systems, our beliefs come out in their design and
implementation.

There was a lot that I learned from that book, and a lot that I still go back
and refer to.

GOF took their inspiration here, it's obvious from the structure... perhaps
you should see why?

~~~
yvdriess
What is this sudden feeling? It is like a thousand HN readers cringed
simultaneously.

------
bergie
Innovator's Dilemma would be a pretty good option for those who want to get
into business with the software they make.

------
BadassFractal
Nobody mentioned Programming Language Pragmatics? It's a pretty great text
about how programming languages work, knowledge that's imho a prerequisite for
any decent programmer.

------
luriel
The Elements of Style by Strunk&White.

If it has to be a programming book, then The Unix Programming Environment by
Rob Pike and Brian Kernighan.

------
_THE_PLAGUE
Like others, I wish I had read "The C Programming Language" earlier than when
I did (probably did not get to it until my mid-20's or so). However, I am
really glad I read "The Road Ahead" by Bill Gates while still in high school.
That gave me a "vision for the future". So in terms of "what influenced me the
most" starting out, it was definitely that.

------
goodweeds
How To Win Friends & Influence People by Dale Carnegie, because software
development is about a lot more than writing code.

------
wonderhamster
Free Culture by Lawrence Lessig <http://www.free-culture.cc/>

------
radicalbyte
Patterns of Enterprise Application Architecture is one of my all time
favourites, though it hasn't been as influential as it should have been.

It's sitting proudly behind me next to The Mythical Man Month, the GOF book,
the Dragon book, Refactoring, Code Complete and The Visual Display of
Quantitative Information.

------
shaggyfrog
No love for Edward Yourdon's Death March?

I think a copy should be given to every CS student upon graduation.

~~~
brooksbp
Haven't heard of Edward Yourdon, so Google'd. Since you are familiar, can you
comment on this:

[http://sunsite.uakom.sk/sunworldonline/swol-07-1997/swol-07-...](http://sunsite.uakom.sk/sunworldonline/swol-07-1997/swol-07-bookshelf.html)

~~~
russell
It's a good read, but it's nearly 15 years old and there may not be enough
context to where Yourdon was coming from. Almost as much time has passed since
this essay was written as there was in Yourdon' career up to Death March. Much
has happened since then. No one uses heavyweight methodologies, like UML.
Processes are light and agile. Languages like Java, Python, and Ruby are way
better, as are the associated tools. I consider the 1-week release cycle the
biggest contributor to productivity.

It's ancient history. Lessons have been learned.

~~~
watmough
Maybe at the leading edge, but I joined a death-march project in 2004, then
left another one in 2008.

And I believe that many young programmers are still being thrown onto late
projects.

I'd really love to believe that UML is dead, but can it really be true? cite?

------
simonsarris
I'm a little surprised by the results. Why would a tome on C be the most
influential book that _every_ programmer should read?

I would think that before any of these books I would prefer that someone I was
working with or hiring had read something like "How to Win Friends and
Influence People" or a book on writing effectively, instead of any of the
books on the first two pages.

My reasoning is that the most common problem I find with other programmers is
not their programming skills, but their communication of interpersonal skills.

Edit: Aha! "How to Win Friends and Influence People" is on page 5 with 74
points!

~~~
Turing_Machine
It's not just a great C book, it's a great book. The writing is extremely
clear and concise, and packs an incredible amount of information into a few
short pages (short by comparison with the "doorstop" books that seem to be in
vogue).

People associated with writing technical documentation of any kind could learn
a lot from it.

You won't find many programming books from 1988 that are still relevant and on
the market -- the only exception that comes to mind is SICP, which also has a
very high rank.

------
tjr
_The Hacker's Dictionary_ (or Jargon File, if you prefer) introduced me to a
wealth of tidbits about the programming field. Either directly or indirectly,
it prompted me to learn Emacs, TeX, and Lisp; to study Knuth; to volunteer for
the GNU Project... but this was years ago, at a time when much of the contents
of the book were somewhat historical, but still relevant. It's more out of
date now, and perhaps wouldn't be as useful to novice programmers as it was
for me.

------
phzbOx
Great programmers won't learn a lot of things from 'Code complete' but since
the question says 'every programmers', I guess it makes sense to have it rank
#1.

But talking for me, the most influential book I read is SICP.

But before that, the book that really opened my mind about 'professional
programming' was effective C++. I wonder if Scott Meyers read HN.. and what's
happening with him. For some reasons, I even remember the name of his dog
(Persephone) which one of his book was dedicated!

------
pom
I think that if you had to select just one book, none of the obvious, literal
programming or technical books would seem enough... so I would suggest
"Fictions" by Borges as a real mind opener.

------
mi_mee
I just think that it will be more helpful if there is a list of books which
programmers don't need to read.

------
rohan80
there is comprehensive list at
<http://www.goodbookson.com/index.php/category/programming/>

------
pacomerh
the answer to this is "It depends on what matters to you". Or maybe the
question was asked wrong and it should be "list the most influential books for
a programmer".

------
chegra
Deitel and Deitel Turbo Pascal, my first programming book.

------
billpatrianakos
The one that helps you most. I hate questions like this because there's really
no answer. If the question were which books would you recommend to _me_ that
had a big impact on you then I'd feel differently but as it stands I hate this
question.

What's the best widget to help me get a random task done? Let the "definitive"
answers be spewed.

------
tete
Don't waste your time reading books. Read code from good programmers and
program yourself. You will get way more from this.

------
pefavre
I'm not much of a butt-licker, but Hackers and Painters: Big Ideas from the
Computer Age from PG is a classic. [http://www.amazon.com/Hackers-Painters-
Big-Ideas-Computer/dp...](http://www.amazon.com/Hackers-Painters-Big-Ideas-
Computer/dp/1449389554/ref=ntt_at_ep_dpt_1)

