The ranking of this list is extremely suspect.<p><i>Code Complete</i> is a fine book. <i>The Pragmatic Programmer</i> is okay. But neither book holds a candle to <i>Introduction to Algorithms</i> for career-long usefulness. For that matter, neither one holds a candle to <i>Design Patterns</i> for the ability to expand your mind and improve your ability to think about code (I read both at the same time, and <i>Design Patterns</i> is the only one whose lessons I remember distinctly, years later).<p>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.
"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.
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.<p>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.
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.<p>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.<p>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)
The Mythical Man-Month<p>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.<p>Also this talk by Greg Wilson: <a href="http://vimeo.com/9270320" rel="nofollow">http://vimeo.com/9270320</a>
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.
Just to be contraversal, I'm going to suggest 'The Old New Thing', by Raymond Chen.<p>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.
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.
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.<p>1. <a href="http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319/ref=sr_1_1?s=books&ie=UTF8&qid=1323207252&sr=1-1" rel="nofollow">http://www.amazon.com/Code-Language-Computer-Hardware-Softwa...</a>
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.<p>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.
I'm not sure that all those people on Stackexchange have read the question properly.<p>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?<p>As a programmer, lets consider the answer to the question, as parsed logically (regardless of intent).<p>Typing 'most influential books' into Google brings me to this list: <a href="http://en.wikipedia.org/wiki/The_100_Most_Influential_Books_Ever_Written_(book)" rel="nofollow">http://en.wikipedia.org/wiki/The_100_Most_Influential_Books_...</a><p>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.<p>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.<p>So I suggest:<p>Number 13, Euclid's Elements<p>Number 32, Machiavelli's The Prince<p>Number 93, Orwell's Nineteen Eighty-Four<p>I'm not sure every programmer should read <i>Elements</i> - maybe, but its a little abstract these days.<p>I think <i>The Prince</i> 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.<p>Finally, I believe without a doubt, <i>1984</i> should certainly be required reading for all programmers - a single read is worth a great many 'ethics for technologists' courses.<p>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.<p>Any differing opinions?
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.
For me it's not even a programming book... which is what I felt the people who have answered have artificially limited themselves to.<p>For me, it's: <a href="http://www.amazon.co.uk/dp/0195019199" rel="nofollow">http://www.amazon.co.uk/dp/0195019199</a><p>Pattern Language<p>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.<p>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.<p>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.<p>There was a lot that I learned from that book, and a lot that I still go back and refer to.<p>GOF took their inspiration here, it's obvious from the structure... perhaps you should see why?
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.
The Elements of Style by Strunk&White.<p>If it has to be a programming book, then The Unix Programming Environment by Rob Pike and Brian Kernighan.
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.
Patterns of Enterprise Application Architecture is one of my all time favourites, though it hasn't been as influential as it should have been.<p>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.
I'm a little surprised by the results. Why would a tome on C be the most influential book that <i>every</i> programmer should read?<p>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.<p>My reasoning is that the most common problem I find with other programmers is not their programming skills, but their communication of interpersonal skills.<p>Edit: Aha! "How to Win Friends and Influence People" is on page 5 with 74 points!
<i>The Hacker's Dictionary</i> (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.
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.<p>But talking for me, the most influential book I read is SICP.<p>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!
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.
there is comprehensive list at
<a href="http://www.goodbookson.com/index.php/category/programming/" rel="nofollow">http://www.goodbookson.com/index.php/category/programming/</a>
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".
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 <i>me</i> that had a big impact on you then I'd feel differently but as it stands I hate this question.<p>What's the best widget to help me get a random task done? Let the "definitive" answers be spewed.
I'm not much of a butt-licker, but Hackers and Painters: Big Ideas from the Computer Age from PG is a classic.
<a href="http://www.amazon.com/Hackers-Painters-Big-Ideas-Computer/dp/1449389554/ref=ntt_at_ep_dpt_1" rel="nofollow">http://www.amazon.com/Hackers-Painters-Big-Ideas-Computer/dp...</a>