
What is the single most influential book every programmer should read? - krn
http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read
======
edw519
Hard to argue with any of the books in OP's post. The ones that I have read
(at least half of them) are great. If I had to pick one, it would be the
Rhinocerous book, simply because Javascript is everywhere.

I've been a professional programmer for many years, but oddly, programming
books, as good as they often are, have had surprisingly little affect on me.
I've learned much more about programming from working on projects, other
programmers, and websites about the technology at hand.

Programming has always come naturally to me, but business hasn't. So since the
original question is "most influential book" and not "most influential
_programming_ book", I would prefer to mention some of my favorite business
books. They helped me become the programmer I am much more than any
programming book.

    
    
      Differentiate or Die - Jack Trout
      Art of the Start - Guy Kawasaki
      Controlling Software Projects - Tom DeMarco
      You Can't Teach a Kid to Ride a Bike at a Seminar - David Sandler
      Carnegie - Peter Krass
      Do More Faster - Brad Feld and David Cohen
      Founders at Work - Jessica Livingston
    

But if I had to pick only one:

    
    
      How to Get Rich - Felix Dennis
      

because it got me to dreaming, it's so much fun to read, and for the line, "If
it flies, floats or fornicates, always rent it - it's cheaper in the long
run."

~~~
qqqq2010
Oh man... the Rhino is a good reference, but lacks all kinds of best practices
and essential style pieces.

Between 'proper' OO style, short circuiting on falsey assignment (var a = b ||
"default"), checking existence to avoid errors ( if (myObject &&
myObject.getJSON()){//block to deal with JSON} ) and the DOM, I feel like this
is only useful to look up the Date() and Math() methods.

Sorry, just griping because it was the first 'real' programming book I got,
and I feel that it misled me for quite a while. </rant>

~~~
bad_user
I wonder why they don't add the <rant> tag to the HTML5 standard.

------
latch
I wrote one of the books on the list, Foundations of Programming. It's a free
ebook, largely focused at .NET developers. I'm also finishing off a more
focused follow up (on github, <https://github.com/karlseguin/Foundations-of-
Programming-2>).

The reception of the book, and the company people sometimes place it with, has
always been humbling.

I'm generally not a huge tech-book reader. It isn't how I like to consume such
material, but I see the value. To me, Peopleware was likely the most
influential book. This is probably largely because I read it relatively young
- when I was easier to influence. I also spent the first part of my career in
a Microsoft world, where many, many tech books are (or at least were) little
more than reference bibles - regurgitating content found on MSDN.

 _edit_

I'd also like to point out that, as an amateur tech writer, The C Programming
Language was very influential. Such a perfectly written, simple and useful
book.I used to read it every year, and was amazed at how much content was
contained within its pages, and how easy it was to understand.

I'd also be sad if I didn't mention some of _why's work, the most influential
to me was his Shoes manual.

~~~
mcantor
K&R is one of my favorite books, too. It's probably one of the only
programming books that I like to read purely for leisure and enjoyment. Often,
when novice programmers ask me if they should learn C, I say yes, not because
I'm sure it will help them in their careers (though I feel it does), but
because it will get them to read and enjoy K&R.

------
tptacek
_In order, up to 20 votes:_

Code Complete 2nd Ed -- Pragmatic Programmer -- SICP -- K&R -- Refactoring --
CLR -- Design Patterns -- Mythical Mammoth -- TAOCP -- Compilers (Dragon Book)
-- Head First Design Patterns -- G.E.B. -- Effective C++ -- Programming Pearls
-- Code (Petzold) -- Working Effectively With Legacy Code -- Zen and the Art
Of Motorcycle Maintenance -- Peopleware -- Clean Code -- Coders at Work --
Surely You're Joking -- Effective Java -- Patterns of Enterprise Application
Architecture -- Little Schemer -- The Inmates Are Running The Asylum -- Why's
Ruby -- Practice of an Agile Developer -- The Elements of Style -- The Art of
Unix Programming -- Joel on Software -- Modern C++ Design -- The Design of
Everyday Things -- Test Driven Development -- How To Win Friends And Influence
People -- Agile Software Development -- Domain Driven Design -- The Practice
of Programming -- Don't Make Me Think -- Writing Solid Code -- Pragmatic
Thinking And Learning -- Software Estimation -- Foundations of Programming --
Algorithms + Data Structures = Programs -- The Passionate Programmer -- Facts
And Fallacies of Software Engineering -- Getting Real -- The Story About Ping

 _Depressing._

~~~
HSO
Why is it "depressing"?

~~~
tptacek
These are the top books chosen by the _whole community_. The all-time most
influential book is _Code Complete_? What's with all the Agile? Multiple books
on design patterns? More books about the profession of being a developer ---
and, in particular, a BigCo developer --- than about the most interesting
aspects of designing programs.

~~~
Sandman
I would be very interested in seeing your top ten list of books that every
programmer should read, tptacek. First, because I value your opinion, and
second, because I honestly believe that most of the books on this list
actually are books that every programmer should read and I'm curious as to why
you're so averse to them. What would you consider 'a book about the most
interesting aspects of computer programming'? Do books like SICP and
'Introduction to algorithms' not fall in this category?

~~~
tptacek
Of the books on that list, the ones I think you could call legitimately
essential are:

SICP -- K&R -- CLR[1] -- Design Patterns -- Mythical Mammoth -- TAOCP --
Compilers (Dragon Book) -- Effective C++[2] -- Programming Pearls --
Peopleware -- Little Schemer[3] -- Modern C++ Design -- The Practice of
Programming[4]

[1] _... except I'd recommend Skiena instead of CLR._

[2] _... except I'd recommend Effective STL over any other Meyer book, and I
also wouldn't concede that C++ is essential._

[3] _... except I'd recommend Lisp In Small Pieces, which I know is a totally
different book, but do you need it and SICP?_

[4] _... but only to someone new to programming._

You can see I've chucked all the methodology and career crap (except for
Brooks and Peopleware; I think you probably already know everything in Brooks,
but Peopleware is something you should reread annually).

To that list I might add:

On Lisp -- Javascript: The Good Parts -- Pattern Oriented Software Design
#2[1] -- Computation Structures -- Computer Architecture (Hennesy and
Patterson) -- C Interfaces and Implementations -- The Visual Display Of
Quantitative Information -- Windows Internals[2]

[1] _... this book was_ wildly* ahead of its time and is no doubt overlooked
because of it's patterns-y enterprise-y marketing.*

[2] _... 10 years ago I'd have recommended _The Magic Garden_ but, even though
I'd rather eat a bug than use a WinAPI system full time, it's hard for me to
argue that Unix kernel design is as relevant now as the Windows kernel ---
and, more importantly, there's no Unix book that does as good a job as
Russinovich on the Intel architecture._

I wish I had good books to recommend on:

SQL performance optimization -- distributed systems -- compression and coding
-- the HTML/JS DOM programming model.

The reality is, at this point in my career, I don't find myself going to books
for programming stuff so much; that doesn't mean I don't read, but I tend to
take the "man pages" approach. So my choices may date me. If I'm going to pick
up a book today, it's going to be for something domain specific. I find myself
reading for maths (I suck at math), or for graphics, or for market
microstructure, or signal processing. I won't pretend that stuff is relevant
for everyone. I feel confident, though, in saying that nobody needs more than
one "Agile" book.

~~~
tom_b
I'm currently reading and preparing to work through C Interfaces and
Implementations based on your recommendation - so thanks. At first blush, I
like it very much and wish to tie it more closely to a more modern C reference
that is the successor to K&R (which doesn't seem to exist).

Skiena instead of CLR? Hmmmm . . . not sure I'll agree with that.

You might want to consider having a look at the Stepanov Elements of
Programming book. I think there is a chance it could be a good follow-up for
hackers interested in moving from Hanson's elegant looking code to a nice,
minimal C++. I lack enough applied C/C++ experience for this recommendation to
have much weight.

Regarding SQL optimization - I suspect most people would be best served to
work through Celko's books to have the most thorough grounding in applied SQL
and then refer to the docs included with their RDBMs of choice that deal with
access plans, performance monitoring, and general engine tuning. The problem
is that there are just too many knobs built into the different RDBMs products
for it to be a general topic. Oh, and the answer is always a better index,
materialized view, or to use a column store engine. :-)

~~~
froydnj
Counterpoint: Elements of Programming is an exercise in overengineering
written by architecture astronauts. I was not impressed by it.

------
tjr
_The New Hacker's Dictionary_ served as my whirlwind tour of programming
culture, and was one of the first computer-related books I read. Either
directly or indirectly due to this book, I ended up: using Emacs, learning
Lisp, learning LaTeX, reading (portions of) Knuth's _Art of Computer
Programming_ , contributing work to the GNU Project, and generally went on to
enjoy programming more than I think I would have otherwise. I didn't learn how
to program from this book by any means, but I think it played a notable role
in how I developed as a programmer.

That said, the book is woefully outdated, with the last printed edition being
published in 1996, and a lot of the topics it covers were kind of old in
technology timelines even then.

------
amackera
_Neuromancer_ by William Gibson. Single handedly (bookedly?) got me interested
in how the Internet worked and how computers work. It also gave me an
unshakable belief that programming was somehow _cool_.

It's fiction, but there's nothing wrong with that!

~~~
yolesaber
"Snow Crash" by Neil Stephenson is also an amazing read that has a better
technical grasp on the growing technology. "Neuromancer" is amazing and all,
with some really brilliant passages, but it was composed on a typewriter and
Gibson had relatively little experience with programming or computers.
Stephenson's work is like a mix between a coherent William S. Burroughs and
Thomas Pynchon - strangely prophetic ideas shown in complete detail with such
conviction as to make it almost ironic.

~~~
harpastum
If you like Snow Crash, I definitely recommend checking out _Daemon_ (and its
sequel _FreedomTM_ ) by Daniel Suarez. Just found them recently, and they're
fantastic.

~~~
chris11
In my opinion the daemon was just one big deus ex machina. It definitely is
not in the same league as Snow Crash.And I don't think Suarez had a very good
sense of tension. The book is fast-paced, but it never takes a break. And the
protaganist was poorly written. He basic had no control over events in the
story, he just responded to the antagonists actions. But it seems to be
popular on Amazon, and I haven't read the sequal.

------
div
In the programming category, I'd definitely have to say the pragmatic
programmer.

Written in a way that makes it very easy to understand, especially for
relative newbies, it's not technology bound, encourages good practices and
fosters curiosity. In short, it's timeless.

This should be required reading for any junior hire imo.

------
runjake
The actual question in the body of the SO post is different and evokes a
completely different answer from me:

 _If you could go back in time and tell yourself to read a specific book at
the beginning of your career as a developer, which book would it be?_

In this case, I'd probably have to go with a book that wasn't even directly
about programming -- like 4HWW, Never Eat Alone, or How To Win Friends...

Because looking back, the meta is more important that styles, conventions &
code.

------
shawndumas
The Elements of Computing Systems: Building a Modern Computer from First
Principles[1][2]

\----

[1]: <http://www1.idc.ac.il/tecs/>

[2]: [http://www.amazon.com/Elements-Computing-Systems-Building-
Pr...](http://www.amazon.com/Elements-Computing-Systems-Building-
Principles/dp/0262640686/ref=cm_cr_pr_product_top)

------
joezydeco
_The Soul of a New Machine_ \- Tracy Kidder.

To me, a kid in junior high school at the time, it was an introduction, an
inspiration...and a warning about how thrilling programming and computers
could be while at the same time driving you completely insane.

~~~
technomancy
I can't get enough of early computing history.

Steven Levy's Hackers is the definitive tome on this, and you can't really be
an educated hacker without being at least familiar in passing with the events
in the book.

~~~
joezydeco
I'm a fan too. We probably need another topic with lists of hacker history
books and/or sites (like folklore.org or doteaters.com).

------
jnsaff
I'd say every programmer should read 1984 by George Orwell, to always keep in
mind the big picture implications of their work.

When I first read it, I got shivers: "this book is about google!"

And after Amazon deleted the very same book from every Kindle remotely ... you
could not ask for a more ironic example of how well Orwell predicted things.

~~~
billmcneale
> When I first read it, I got shivers: "this book is about google!"

If you read it again today, you would think it's about Apple.

------
DanielBMarkham
Code Complete is the top item over on SO, its my choice, and it was recently
reviewed on hn-books: <http://hn-books.com/Books/Code-Complete.htm>

I tried really hard to ding the book, but it had such a big impact on me and
others when we read it that I really couldn't. McConnell knocked one out of
the park with CC.

I've read it twice, and the second time it still made a difference.

Excellent book.

BTW, it's interesting that when I posted the review on hn, I thought it would
get a great reception, but a couple of folks said they found the book tedious
and dull. <http://news.ycombinator.com/item?id=2263127> I really wish those
guys would elaborate a bit, because Code Complete is one of 2 or 3 books that
everybody seems to like and recommend.

------
michael_nielsen
Alan Kay has a great list of recommended reading:
<http://www.squeakland.org/resources/books/readingList.jsp>

It's very broad by comparison with most lists of this nature. Here is a HN
discussion of Kay's list: <http://news.ycombinator.com/item?id=664324>

------
T-R
Tragically locked - I'd add "Real World Haskell" to the list. Completely
changed the way I write code, in a way that books that more directly advocate
readability and testability failed to.

------
daleharvey
One that I am surprised to not see mentioned (here at least as opposed to
stackoverflow) is

4 Steps the Epiphany - [http://www.amazon.com/Four-Steps-Epiphany-Steven-
Blank/dp/09...](http://www.amazon.com/Four-Steps-Epiphany-Steven-
Blank/dp/0976470705)

As a technical founder and general programmer + startup person, I was always
told that sitting in my room coding more and more features wouldnt help a
startup succeed but this is the first book that both explained exactly why
that was true and what I should be doing instead.

Its not a "read this and your startup will succeed" by any means, but its the
most useful and practical book along those lines I have read.

~~~
kschua
It is because it isn't relevant to developers in general. Not all developers
aspire to be entrepreneurs

------
francoisdevlin
How to win friends and influence people, Carnegie.

~~~
xsmasher
If anyone is put off by a snake-oil, slimy, manipulative impression from that
title... Don't be. Give it a try anyway, it's not what you think.

I always found the title offputting but I'm glad i looked past it; it contains
lots of great social advice and anecdotes, _not_ a recipe for becoming an
unctuous car salesman type.

~~~
benjohnson
Let me second that! The book teaches it's reader to be a kind, polite, and
considerate friend to people you meet every day. It's a life changer -
especially if you're of the shy persuasion.

------
rodh257
It sucks that so many of those books are not available in ebook format, I
would have thought programmers would be leading the way in ebook adoption.

I own Code Complete, and have for a year or two now yet I've not even got 1/4
of the way through it. I enjoy the book but I can't take it out of the house
because it's too big, and I can't lie down and read it, because it's too
unwieldy.

~~~
danibx
Code Complete is available at Safari Books.

~~~
zdw
Available for purchase at Oreilly's site:
<http://oreilly.com/catalog/9780735619678/>

If you create an account, they have a buy one get one free ebook deal running
all the time.

~~~
rodh257
Awesome! Can't believe I didn't see that earlier, I did Google it a number of
times but from memory all I got was torrent spam.

Thanks heaps!

------
erikstarck
The answer to this question depends a lot on in what stage of programming
maturity you are.

I remember the exact moment I "got" what a class in C++ was. It was a true
relevation. Even though I had been programming for a few years it wasn't until
I was 19 that I fully understood the concept of a class.

I can definitely say that I was a different programmer after that day. It was
like leveling up in an RPG.

It took me a few more years to get object oriented design...

Yeah, maybe I'm a slow learner (although I have seen enough of other people's
code to conclude that I'm not alone) but the point is that at different stages
of my journey to learn the programming craft I have been open to different
ideas and insights.

I don't think there's one book that alone would have taken me all the way.

------
jacques_chester
I'd just like to brag that I still have my Code Complete first edition. One
day it'll be worth _millions_ of microdollars, mark my words.

~~~
stevepotter
Code Complete is a great read. I recommend rereading it annually to make sure
you don't stray the course. I do not recommend reading it anally. Bad
lighting.

~~~
technomancy
It seems like a great book for folks just getting started, but I read it after
I had a few years under my belt, and all the advice seemed either really basic
or far too specific to the C++ Windows world. I can't imagine re-reading it.

------
bonyen
Nothing really surprising about this list. I think it's interesting that
programming languages and algorithms are both covered, but operating systems
is absent. I've long been looking for a good book about operating systems, but
all the popular ones (e.g. "Operating Systems Concepts" by Silberschatz) seem
overly verbose. Does anyone have a good recommendation in this area?

------
sayemm
I'm about to start working through these 4 books Joel Spolsky recommends for
any good programmer: [http://stackoverflow.com/questions/414779/what-should-a-
self...](http://stackoverflow.com/questions/414779/what-should-a-self-taught-
programmer-with-no-degree-learn-read/4473810#4473810)

SICP and K&R also happen to be up on that thread's list.

------
6ren
For one book, it's _The Mythical Man-Month_.

Widely read, far beyond programming. Quoted everywhere. The inspiration for
agile development. Beautifully, incisively written. Nails everything.

The author not only was a programmer, but headed up the largest commercial
project ever taken of any kind, that bet the company (the most influential
computer company, IBM).

------
mindcrime
I'd be really hard pressed to pick just one, but I agree with most of the
higher ranked selections on the first page of the SO thread. I didn't drill
down any further, but there was some good stuff there.

Of the ones I didn't see, I'd throw out:

 _The World Is Flat_ \- Thomas L. Friedman

 _Enterprise Integration Patterns_ \- Gregor Hohpe & Bobby Woolf

 _Thinking in C++_ \- Bruce Eckel

------
spc476
I've read some of the books listed, but the two books that completely changed
how I write code weren't---_Writing Solid Code_ by Steve Maquire and _Thinking
Forth_ by Leo Brodie. The second one is by far the more mind bending of the
two, and it's available online (for free) if you search for it.

------
getsat
Programming Erlang: Software for a Concurrent World

~~~
yesimahuman
While I don't use Erlang, I found this book to be full of very practical and
accessible examples. Erlang is a pretty elegant language (IMO) and pretty easy
to read after learning pattern matching.

~~~
getsat
I agree. I haven't done Erlang since 2009, but reading through that book
taught me a lot about functional programming theory, state mutation concepts,
parallelising code properly and many other things. Definitely not a book for
beginners to programming but I think that an individual with at least one
language under their belt will get a lot out of it. It's a very easy read
considering the myriad topics covered.

------
GeneralMaximus
I'll throw something recent into the mix: _Land of Lisp_. Build a HTTP server,
DSLs for producing HTML and SVG, a quirky game, and then combine all 3 to
build a quirky web-based game that renders the game board using SVG. And
that's just scratching the surface. Lisp and LoL make programming fun.

See also: __why's (Poignant) Guide to Ruby_ , _Nobody Knows Shoes_.

------
russell
I started so far back that the only thing written down was TAOCP. A book on
Simula 67 would certainly have influenced me had I known about it. The
mythical Man-Month, dated but still a good read. Sedgewick, Algorithms,
although there are newer and fatter books. I guess meta books got me to think
more about the art than did core technical books.

------
msluyter
It was _Godel, Escher, Bach_ that got me interested in computer science in the
first place. Good to see that in the list.

------
SteveJS
Crucial Conversations is the book that I'd most like my younger self to read,
but it didn't exist back then. However, if we're allowed to time-travel, I'd
probably switch to something with lots of detailed stock quotes. :-)

------
nathanwdavis
I was surprised to find 'Purely Functional Data Structures' so far down the
list.

~~~
joelburget
I'm kind of surprised it even made the list. It fills a very small niche
currently, and has a more academic flavor than the more popular books on the
list.

I think it will increasingly come to be recognized as important, as functional
programming becomes more popular. I hope so at least.

------
eibrahim
The 4-Hour Work Week: Escape 9-5, Live Anywhere, and Join the New Rich -
<http://amzn.to/ep7taj>

It's not a programming book but I quit my job 2 weeks after I read it :)

~~~
runjake
And then what did you do? What do you do now?

~~~
eibrahim
I created a startup, wrote a book (<http://bit.ly/1i5ede>), started my own
consulting company (i.e. freelancer), short sold a house, screwed up my
credit, got married. Hmmm... Overall, things went well :) More details on my
blog <http://j.mp/fzrhOF>

~~~
tetsuo13
URL shorteners aren't necessary.

The 4-Hour Work Week: [http://www.amazon.com/4-Hour-Work-Week-Anywhere-
Library/dp/0...](http://www.amazon.com/4-Hour-Work-Week-Anywhere-
Library/dp/0786168641/ref=sr_1_2?tag=dotnetfactory-20)

Book eibrahim wrote: [http://www.amazon.com/ASP-NET-Test-Driven-Development-
Proble...](http://www.amazon.com/ASP-NET-Test-Driven-Development-
Problem/dp/0470447621/ref=sr_1_1?ie=UTF8&s=books&qid=1250063048&sr=8-1&tag=dotnetfactory-20)

Blog: [http://www.emadibrahim.com/2009/03/09/i-quit-1-year-
annivers...](http://www.emadibrahim.com/2009/03/09/i-quit-1-year-anniversary/)

~~~
chollida1
I think it was an attempt to hide affiliate links.

~~~
eibrahim
Yes but they are also cleaner and I can track clicks, for example if you go to
<http://bit.ly/ikAlLF> you will see how many people clicked each link. What
can I say, I love stats.

------
pramit
The Success Manual - Actionable summaries from 200+ Most useful books.
<http://thesuccessmanual.bighow.com>

------
leebyrd
why not throw this up on kick-list.com and invite the community to contribute?

------
epynonymous
unfortunately code complete is not available for kindle yet.

~~~
allwein
Um, yes it is.

[http://www.amazon.com/gp/product/B004OR1XGK?ie=UTF8&tag=...](http://www.amazon.com/gp/product/B004OR1XGK?ie=UTF8&tag=keysofgeni-20)

------
gte910h
Code Complete 2

------
VB6_Forever
'The Elements of Computing systems' by Nisan & Schocken

To truly understand the machine and the software layers on top of it

------
gorgoroth666
Douglas Adams, Dirk Gently holistic detective

------
eibrahim
Rework, getting real, 4-hour work week and more. Check out the list here
<http://bit.ly/ikAlLF>

