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
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.
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.
Yes. It's full of really good, pragmatic, and practical advice, but isn't particular geared to a specific language or environment.
> This should be required reading for any junior hire imo.
Senior folks should give it a read, too. Just cause you've been around a while, that doesn't mean you know everything.
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.
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
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.
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."
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>
I think it's more startup founders who also have to have a foot in the business side of things. Sure people who just program don't need to know that stuff.
Just a note, I've switched from "Art of the Start" to "Reality Check" from Guy Kawasaki as my favorite, practical starting a business book. I think RC covers most everything in Art of the Start plus more.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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!
"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.
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.
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.
> but it was composed on a typewriter and Gibson had relatively little experience with programming or computers.
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.
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).
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
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.
SICP, The Art Of Unix Programming and The Little Schemer are on the list. Those are the only books I've read that actually influenced my approach to program design. What other books do you feel belong there?
These sorts of questions are a popularity contest. Books aren't upvoted based on how influential they are, but based on how many voters have read and liked them. So _because_ it is chosen by the whole community you can expect a book like Code Complete: it touches on some of the fundamental principles of programming and is a book that almost every programmer can learn from. This works well for SO I think.
As runjake points out[0] elsewhere in this discussion, the actual question is different: 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?
CC is a good book that's not steeped in programming terminology and is easy for even laypeople to understand. However it would've been nice for Steve to incorporate some code snippets from a functional language, just to compare and contrast how things are handled differently between paradigms.
I agree with the missing parts of the book (btw: anyone interested in that might find "Programming Language Pragmatics" by Michael Scott interesting), however, I think that there is not enough experience on using functional programming languages in an industrial/professional setting.
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?
Yeah, I've seen it. It's a good list, but it's mostly concerned with security, reverse engineering and similar topics. I'm not saying that this is not important but surely there are other things that a developer should know about. For example, how to write maintainable code, how to come up with elegant solutions to certain problems, and so on.
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.
I've had both CLR's Algorithms book and Skiena's on my wishlist for a while, and would be curious to hear why you prefer Skiena's.
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'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. :-)
What do you think of Zawodny and Balling's High Performance MySQL? I thought it did a really good job on optimizations for not just MySQL, but many things in common to various SQL systems.
Wow, Computation Structures looks like an excellent book; thanks for the reference.
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.
I bought some of these books because you hear the same titles over and over again, so I had to see what the fuss was about. Code Complete was one of them.
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.
Sorry to get statistical, but if you filter for the highest-reputation items of any category X, then most of them are likely to have a reputation that exceeds their actual value, due to reversion to the mean. So this shouldn't surprise you or discourage you from reading these books.
112 comments
[ 3.0 ms ] story [ 148 ms ] threadIt'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...
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.
> This should be required reading for any junior hire imo. Senior folks should give it a read, too. Just cause you've been around a while, that doesn't mean you know everything.
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!
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
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.
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.
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.
But if I had to pick only one: 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.
----
[1]: http://www1.idc.ac.il/tecs/
[2]: http://www.amazon.com/Elements-Computing-Systems-Building-Pr...
To truly understand the machine and the software layers on top of it
I think it will increasingly come to be recognized as important, as functional programming becomes more popular. I hope so at least.
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.
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
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.
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).
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.
Arguably GEB?
Edit: Nevermind, GEB is on the list too
Given that, the choices make sense to me.
[0]: http://news.ycombinator.com/item?id=2273050
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.
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.
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.
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 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.
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.