What is the single most influential book every programmer should read?
stackoverflow.com
stackoverflow.com
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."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>
Sounds like the punchline in a math joke.
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.
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.
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.
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. :-)
I had a copy of CLR back in school, but like most of my textbooks from back then, I'm sure I sold it for food. Before rebuying the same book, I figured I'd see if Skiena's might be better.
I think having Lisp in Small Pieces and SICP is reasonable. Lisp in Small Pieces dives pretty deep, but doesn't cover anything comparable to what chapters 3 and 4 of SICP do.
Given that, the choices make sense to me.
Arguably GEB?
Edit: Nevermind, GEB is on the list too
Another point: Which books deal with "the most interesting aspects of designing programs" in your opinion?
I don't think it's a bad book.
In no way did I find it enlightening. I found it to be straightforward, dense, and boring.
I'd be interested to see a list that separates responses from the "Windows people" and the "Unix people." Hopefully that doesn't sound elitist, I just feel like they are completely different worlds sometimes. Most of the Joel/Atwood/SO fans seem to fit this archetype, and CC is their favorite book.
Is this a quirky, alternate title? :-)
Also, I can't help but wonder how many people are recommending books they haven't read.
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.
It's fiction, but there's nothing wrong with that!
I have a hard time seeing this as a negative. If he drew from knowledge about real-life computers, we'd all be snickering at the dated references.
I enjoy Snow Crash (more as brain candy), but the reasons for doing so have absolutely nothing to do with how accurate the descriptions of technology are.
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.
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.
----
[1]: http://www1.idc.ac.il/tecs/
[2]: http://www.amazon.com/Elements-Computing-Systems-Building-Pr...
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.
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.
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.
If you read it again today, you would think it's about Apple.
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.
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
4 Steps the Epiphany - http://www.amazon.com/Four-Steps-Epiphany-Steven-Blank/dp/09...
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.
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.
Then my sister gifted it to me on a relatively long, boring journey and I finished a major portion of it as a better person.
TL;DR - This book tells you to be genuinely interested in people instead of just manipulating them for your own selfish gains.
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.
If you create an account, they have a buy one get one free ebook deal running all the time.
Thanks heaps!
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.
SICP and K&R also happen to be up on that thread's list.
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).
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
See also: _why's (Poignant) Guide to Ruby, Nobody Knows Shoes.
I think it will increasingly come to be recognized as important, as functional programming becomes more popular. I hope so at least.
It's not a programming book but I quit my job 2 weeks after I read it :)
The 4-Hour Work Week: http://www.amazon.com/4-Hour-Work-Week-Anywhere-Library/dp/0...
Book eibrahim wrote: http://www.amazon.com/ASP-NET-Test-Driven-Development-Proble...
Blog: http://www.emadibrahim.com/2009/03/09/i-quit-1-year-annivers...
To truly understand the machine and the software layers on top of it