views:

98108

answers:

476

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?

I expect this list to be varied and to cover a wide range of things. For me, the book would be Code Complete. After reading that book, I was able to get out of the immediate task mindset and begin to think about the bigger picture, quality and maintainability.

+1070  A: 
Justin Standard
yes, great book, a MUST READ
ila
We used to call this the "Bible" at one development shop. "Hey, you need to refer to the bible, the naming of your methods are terrible."
Haacked
I was very impressed with Code Complete, I think that it's a must for every programmer. If I have one book to recommand, it's this book.
Patrick Parent
The book is also bound very well. I'm just a few pages in and it already stays open without something to weigh the left side down :)
Chris Serra
I wouldn't go so far as labeling this the most influential that every programmer should read. It is certainly worth reading, but I don't think it deserves the religious following...
Tim
I was deeply unimpressed by Code Complete. I hate to use an over-used PGism, but it's mired in Blub. So much of the book was irrelevant to me.
Rich
I read Code Complete (first edition) about 15 years into my career. It was the first book I'd read about *why* code should be written a certain way. I don't know if I would have appreciated it as much if I'd read it earlier in my career, before personally experiencing some of the problems discussed.
JeffK
Nice book if you are in college maybe. If you have at least 1 year of programming experience, it is a total bore.
Bogdan Gavril
It has a lot of useful information in it but it's buried in hyperbole, waffle, and repetition, which makes it a hard read.
Jeff Yates
@ Bogdan - I totally disagree. While it's useful for beginners, much of the advice is hard to appreciate without a few years experience. For beginners, please note you need a basic foundation in OO programming to follow many chapters. The text generally assumes you're an OO programmer.
Cory House
You should already know everything in this book. Really.
Tim Williscroft
The only computer book that touched my soul.
WOPR
Everyone always recommends this book, but no one ever says why, which leaves me with the opinion that everyone must have been brainwashed. :P
chaiguy
After reading the recommendation from Coding Horror, I went and ordered it.
Notorious2tall
Great book. Everything in this books seems so obvious after reading. :)
Tuoski
I read this book 3 years into my career. I hadn't taken a software engineering course nor a programming language constructs course but had taken some intro CS courses. It is by far the best single book I've ever read for becoming a better programmer. It won't make you a specialist but it will make you much more than a tinkerer.
Arnshea
I love this book. Its officially my bible
ChrisAD
Its not for beginners. Most of the things said there and effects of them can be fully understood only by experienced programers, IMO. You need to have dozen of frameworks designed in order to fully appriciate this enciclopedia of good practices. I do agree however that book is somewhat borring and repetitive, but that doesn't have anything to do with insights it presents. Its pedagogical thingy...
majkinetor
The problem with this book is that for a beginner, it doesn't really make sense as the concepts are a little advanced. By the time you are ready to be able to read it, you should already know and practice 99% of the concepts in the book.
esac
I read it during my last year of CS studies, thats the perfect time to read it, most topics are covered during the studies, but its a nice recap, and well written with a lot of references to dive deeper if you want to. Chapter 5 about design is freely available on the site, try it, for me it was one of the most fun chapters
Emile Vrijdags
This book will give you the right sight : you will never code as you were coding before. You will keep asking : He, I'm not writing a letter to my compiler, I'm writing code that my fellows will have to maintain - how can I give them a break ? How can I create code that last, that's valuable for my customer and for which I could be proud of ? It's not the panacea - it just a guideline covering all aspect of development. It was my best computer book ever. I still read it in the subway 10 years later.
Sylvain
That's the deal with common sense suggestions, like those found in this book. Every so often you need to be reminded of them to fall back in line.
JohnFx
Code Complete is fundamentally about software construction. Comp sci programs are not. The book fills in the gaps at a critical point, right out of school.
Underflow
Reading this at the moment. Cause of this answer. :)
Arnis L.
I don't think this book is only for beginners. There is always something that you understand differently when reading as a senior and if not, it's always nice to have a confirmation that you do know all the "basics".
Jimmy
This book is overhyped...
Janie
This book should be part of every programmers reference. I would make this required reading for a degree in CS!
Molex
@ Bogdan and others, disagree totally, this is a book to read at 3 - 5 years experience. True you'll run though much of it nodding your head, but it will re-enfoce your good habits and make you question your bad ones
Cruachan
For all the Nah-Sayers ... This book opened my eyes to the fact that I should be programming not just for myself, but so when other people came after me, they could easily read my code. Readability, pseudo-code design, methods should only have a single purpose, basically all the BASICS of what a good programmer should do. HENCE, I would read this at the beginning of my career (about 1 - 2 years earlier than I did).
Martin
Actually, this book is too simple for me.
ablmf
There is a big difference between ed 1 and 2. The first one was about defensive code in detail, the 2nd ed seems to be just an arguement for 'Big Design Up Front'
Martin Beckett
Most computer books are either very narrowly focused, or they are written by pitchmen touting the panacea of the month, complete with a guide to 'getting certified'. This book can take someone who knows programming and teach him or her practical techniques that teach how to write actual finished applications in the real world.
Jim In Texas
I have v1 of this and can see how it would've been relevant in the late 80s. Def not much use to db devs
adolf garlic
I have to wonder if this book would be so high on the list of a bunch teenagers who have yet to make all the mistakes this book. Don't you have to fail before this book can explain how not to fail?
jmucchiello
Definitely THE book every developer should read !!
Arno
This book was pretty boring. It's great if you're a college student, but if you've been working for at least a year...you'll find this trivial.
Ryan Thames
I can't get past the fact that it's named after a myth. Is it supposed to be ironic? Isn't this the one that touts all that "craftsman" junk? I'm sure it' a fine book but it's not exactly *Design Patterns* or *Test-Driven Development: By Example*? ...is it?
Nice summary of nearly every programming related flame war I've seen.
Jasper Bekkers
Some comments state that programmers with more than a year of experience should know and practice the concepts in the book. I agree, they really *should*, but that doesn't mean they actually know and practice them. Reading the book improves the odds that it really happens.It's also not necessary to read all of it as you can read the key points and checklists, and read more on the points you didn't understand or agree with.I especially enjoy using it as a quick reference for things like checking a list of solutions to deep control structures.
Heikki Naski
This book is highly overrated. It is basically redundant for someone who's done professional programming for a few years. Also, it could probably be cut in half if it weren't for all the repetitions and fillers.
shoosh
@chaiguy One reason for recommending this book is [the excellent reviews from world-famous programmers](http://cc2e.com/Default.aspx?hid=338). People like Martin Fowler, Grady Booch, Jeffrey Richter, Mike Gunderloy, John Vlissides (coauthor of Design Patterns), Jon Bentley, [Joel Spolksy](http://www.joelonsoftware.com/navLinks/fog0000000262.html), Software Development Magazine, IEEE Micro Magazine, Windows Tech Journal, IEEE Computer Magazine... I agree if you are an expert already with years of experience, you may not get much from it. But that's not the point of this question.
MarkJ
I will try to read this book then.
LockOn
Thank you for mentioning this book! Just finished reading it and must say that its really good! While i was reading it i saw the explanations of many my own mistakes..Strange that when there was my first attempt to read this book(almost 2 years ago) it didnt interest me! Recommend to all!
nihi_l_ist
A: 

+1 for Code Complete

Also: What books would you recommend for a beginning Software Developer?

saniul
what's up with the duplicates?
drozzy
+322  A: 
John Downey
I found this book interesting, but a little single minded. Make sure to get the "anniversary" edition, the author corrects many of the outdated principals in the additional chapters.
alumb
I just read the Mythical Man-Month in my CS-Engineering capstone class. Great Book!
TahoeWolverine
I found it good but overrated too.
Jahanzeb Farooq
This is a book that requires reading every other year or so by any software practitioner. There are excellent insights if you read carefully.
Xepoch
While I can certainly see how it was groundbreaking for its time, I think that the author's presentation loses his audience. He assumes that the audience is familiar enough with projects such as OS/360 to immediately grasp his points about them, and metaphors are heavily Biblical. I'd argue that, as a Software Engineering book, it's in poor form in assuming the audience to be Christian, that it's showing its age and largely inaccessible to those who weren't in the industry at the time, and that its insight is now much better documented elsewhere. A classic, perhaps, but far from timeless.
T.R.
This isn't really a software programmer's book but, rather, a book for software managers. The key points Brooks makes, while made during the early days of professional software engineering, still apply today and the mistakes managers made 40 years ago are the same mistakes being made today. The concept that adding more programmers to an already late project will only make the project even later is a fundamental law whose violation invariably causes death and destruction. Its still an important book every engineer should read.
Larry
I keep misreading the title as "The Mythical Man-Moth" which automatically makes me interested.
Zack Mulgrew
Read it -- wasn't a huge fan. Probably because most of the things that seemed revolutionary for this book's time are old hat nowadays -- i.e. most every axiom of the "No silver bullet" essay are repeated over and over and over 24 hours a day 7 days a week on SO
Billy ONeal
Frankly this book bored the crap out of me. Peopleware is 10x the book
el chief
This book is overrated. He devotes a chapter to describing the structure of a team that's analagous to a surgeons team with the architect being the lead surgeon an official document writer, and a language expert and some other nonsense roles. In reality nobody structures a programming team like this and multiple times in my career I've done the jobs of multiple roles without officially being appointed to that role.
sashang
+156  A: 

I recommend CODE by Charles Petzold. In this age of tools and IDEs that abstract a lot of complexity away from the programmers, this one is an eye opener.

book cover

I read this over the summer. It's a brilliant book that explores the digital revolution from the ground up. Lots of 'a-ha' moments are crammed into this gem.
tyshock
The book every engeneer should read, not only programmer!
AnSGri
I find it's useful for both managers (who aren't programmers) and increasingly new graduate programmers who don't seem to know whats under the hood.
Martin Beckett
I think this is even more important than Code Complete... how can anyone code anything if they didn't understand how all the parts in the computer fits together?? ... When they've know how to work their tools is when they should continue on to readability and maintenance issues in Code Complete ... I just hate when people try to enforce all the rigorous practices on newbies without even telling them why and they are already struggling with solving the simple problems they've been tasked to do!
chakrit
Brilliant book!
techzen
I bought this book based on this post. I just finished reading it a couple of days ago. Definitely well worth it. Thanks!
Jason Down
I can't recommend this book highly enough!
Dinah
I got this book as a teenager, didn't understand the relevance or importance of most of it, but kept revisiting it as I learned more about computers, and eventually as a CS undergrad and now as a developer. It's a good traversal of the world of computers and I keep it on my bookshelf so I can brush up on fundamentals every now and again.
Matt Garrison
If I wasn't doing computer science or computer engineering or electrical engineering (most doing these will learn the stuff in this book), I'll get this book.
blizpasta
Awesome book, either as an eye-opener or as a refresher - I agree with most comments that this one gave me more than most higher-voted answers here, perhaps with The Pragmatic Programmer as notable exception though that one didn't teach anything, it merely made me feel good about myself and my notions...
Oskar Duveborn
This book is one of the greatest examples of explaining skills I know. I never had problems with understanding (the basics of) electricity and light switches and I have loved software programming from age 8. What I never could understand was the part in the middle, which I imagined where little gnomes slaving away in the CPU. Petzold explains it all and makes you feel super-smart during the ride. The chapters to come would always look 'beyond me' while the chapters I already read kept looking easy until the very last page. Amazing.
Teun D
+302  A: 
Peter Coulton
Are there any people who read this? I guess this is what you call a book to use, not to read...
nojevive
Upvoted just to get it above the silly zen book. Knuth's book is one I'll actually read and keep on my shelf.
Dietrich Epp
I've read it all. Fantastic book.
Jim Dovey
I read all the books. I often read them while brushing my teeth at bedtime.
Christopher
did anybody answer this exercise? "4. [M50] Prove that when n is an integer, n > 2, the equation xn + yn = zn has no solution in positive integers x, y, z." The answer is here: http://math.stanford.edu/~lekheng/flt/taylor-wiles.pdf now the question is who can program it? :)
pageman
OMG, how is this NOT #1? How can you even call yourself a real progammer if you havnt read this?
RBarryYoung
Computer programming is not art.
sakra
@sakra: Trolling is an art. And if you read this book programming might become an art for you too.
Peter Coulton
@sakra: Maybe you're doing it wrong ;-)
nikie
I read it every night before bed. It makes such an interesting, smooth read - much like reading the manual to my Microwave
Chris S
This isn't #1 because it's a holy terror to actually read through. CLRS (ranked above this) is ranked up there because the majority of us *can* read that without pain.I can see having Knuth around for reference, but it's not something most folks are sitting down to read.
Dean J
On the effort Knuth put into it: Most authors write a manuscript. Knuth personally positions every dot of ink on the page.
jleedev
This is THE BIBLE. Second these with "The C Programming Language"
lalitm
Knuth is the godfather of modern computer science. You should own a copy, just so that you can hope that some of the magic is absorbed by osmosis...
thecoop
For a title like that, I'd expect the cover to be a little more... artistic.
Wallacoloo
@wallacoloo, the cover is more than artistic. It is created with TeX! And TeX (and CM) is created to write this cover.
osgx
IMHO, This is one of two correct answers to this question. The other one is http://mitpress.mit.edu/sicp/ (Abelson and Sussman)
ראובן
@sakra (and everyone else): You can read Knuth's thoughts in his lecture "Computer Programming as an Art" (Turing lecture 1974) here: http://www.paulgraham.com/knuth.html He means many things, such as the fact that it is not a perfect science, that it requires skill (a la the art of a craftsman), that it does have aethetics and produce beautiful results, etc.
ShreevatsaR
The Art Of Computer Programming is the monograph of Donald Kunth, father of modern C.S. . It's completely unreadable by mortals, but as said by Knuth himself: "where named among the best twelve physical-science monographs of the century by American Scientist, along with: Dirac on quantum mechanics, Einstein on relativity, Mandelbrot on fractals, Pauling on the chemical bond, Russell and Whitehead on foundations of mathematics,..., Feynman on quantum electrodynamics, Smith on the search for structure, and Einstein's collected papers."
HaskellElephant
It's like El Ingenioso Hidalgo Don Quijote de la Mancha, everybody should read it, but in fact just a few have done it :-(
fortran
I used it once as a reference on matter of calculating if point on oriented graph is reachable. Good book if you are at the very start of Computer Science and have a lot of time to read.
RocketSurgeon
+7  A: 

@John, NotMyself

+1 for Brooks' MMM

Its a classic book with many lessons regarding software projects that, though written over 30 years ago, are still relevant today. Brooks' writing style is easy to read and very friendly, and though there are parts where I find myself rolling my eyes at the datedness, there are many more times when I find my self nodding in agreement to the fact that what he is saying is still very relevant.

shsteimer
duplicate of higher up
Ruben Bartelink
+927  A: 
Xenph Yan
I personally rate this over Code Complete because it's at a higher level conceptually and is concise - easy to read and start benefiting from (Code Complete's dense detail is great when you want it). Due to this however, the book is aging a lot quicker - hopefully a new edition is on the way?
Gordon Hartley
Well Harriyott, it'd have better be good, I've just ordered it on your recommendation! :D
Spedge
Code Complete is good, but pragprog is much more concise and readable.
orip
Great book! (Don't pay attention to the part about coding by contract though -- write unit tests instead)
Akrikos
Just finished reading, excellent book!
Tuoski
I thoroughly enjoyed this, but agree with @Gordon Hartley - it is definitely starting to show its age. Additionally, it has a bit of a focus on the Unix environment, which can make application on Windows of some of the ideas trickier. +1 anyway, though!
alastairs
I really like the 'Pragmatic Programmer' too but I like 'Code Complete' too. I don't think these two books are mutually exclusive, as they cover different topics.
Danielb
it's the second book i have read in my programming experience. all people in that time told me not to read it so soon, cos' it's really professional! but i soon realized that it's really the Bible of programming! everyone should read it!
DaDa
@Gordon Hartley, about your second point - on the contrary, I'd think this book will remain relevant longer precisely because it is at a higher level conceptually, and does not go as much into details.
Jonik
Good book. Very good book. But it's a little behind Code Complete. Well, maybe it's because I read Code Complete before... For someone who never read CC, Pragmatic Programer can be a softer while serious introduction to good programming practices. But I think they should then read Code Complete.
Sylvain
@akrikos: unit testing is a form of coding by contract; the tests define the contract.
SnOrfus
Very overrated!
Jahanzeb Farooq
I read this a couple months ago, totally useless — don't buy this unless you're just starting out.
cloudhead
This book has some good advice in it, but also some downright terrible advice. It's been awhile since I read it, but I recall it recommending you use Perl to write code generators for other languages, and even ignoring how terrible that advice is I recall their example use cases for that being pretty dismal too.
Joseph Garvin
An overrated book that tosses the field back into the 70s and 80s.
omouse
@cloudhead and others: If all you got from this book is that you should use Perl (sometimes you really could) or any other outdated language or technology, than read it again, maybe after some time. You didn't get it!
Bojan Milenkoski
@bojan: Yuck. They seriously need to get off their "use only ONE EDITOR" high that leads to the proliferation of crap like EMACS and VIM! They're not bad tools, but I'm sick of the prevailing idea that you should do everything AND cook breckfast with these tools. They're jacks of all trades. They do everything and nothing well. And more programmers need to be pushed into the UNIX philosophy of design like the ocean needs more water.
Billy ONeal
Indeed this is an excellent book, even for someone like me who has been developing for many years. Highly recommended especially if you need to make a transit from programming simple and small applications to the big demanding world!
Spiros
@BillyONeal: You are absolutely right. EMACS and VIM are not that good tools, these days. But the point is that you should really learn how to use your favorite editor, whatever it might be. I personally use Eclipse and Notepad++. But I really know my way around these two. Now I need to use Visual Studio and things are going slow for me, although it is also a great tool (if you know how to use it and a few plug-ins ;)).
Bojan Milenkoski
I never said emacs and vim were bad. I don't have a terrible amount of experience with these tools and can't really say that. I'm just saying the idea of using a single tool for every job is just dumb. There are multiple tools for every job. I use Visual Studio for C++ development, but I'd never think of using it for PHP, just as I'd never think of using Netbeans (which I use for PHP) for C++.
Billy ONeal
I really liked this book, but I think that it's showing its age in some parts.
Doppelganger
@Doppelganger: Yeah, I'd love to see a second edition. Although the second edition would probably just say "Use Ruby", over and over again.
Skilldrick
+309  A: 

I personally think Design Patterns by the Gang of Four is a very useful book. It's not about the "meta" aspects of programming like so many of the other suggestions, but it emphasises encapsulating good programming techniques as patterns, and has since encouraged others to come up with new patterns and antipatterns to use in programming dialogue.

Now for a rider....

@kevin, @modesty: Great answers! If I could place a 3-vote like on uservoice, I'd gladly use it here.

To the naysayers who downmodded them, I say: please, grow a sense of humour! :-)

Chris Jester-Young
For lurkers and archive (because modesty/Shawn's answer got deleted, and who knows if Kevin's will too): modesty/Shawn's answer is Lolita, and Kevin's is HTML for Dummies. :-)
Chris Jester-Young
This book is good, but I've all too often been the victim of someone over-eager to apply the patterns it contains.
PeterAllenWebb
I like the Gang of Four (GoF) book. For most beginners I would recommend the O'Reilly 'Head First Design Patterns' as it is a bit easier to digest than the GoF. The difference between the two is the GoF is written by very intelligent researchers and the Head First is written by very good teachers!
Danielb
+1 on 'Head First' if you are not an academic type.
Jim In Texas
Design Patterns is useful. When I read it, it presented some ideas that hadn't occurred to me before (I seem to recall liking the flyweight pattern, though still haven't had need for it). On the other hand, it's extremely dense. Fundamentally, it's a reference book. It's an encyclopedia.
Daniel Yankowsky
This is an awful book to give to a programmer who is just starting out. This book is for people who've already made factories and singletons and visitors and never knew what to call them. The jargon of patterns is as useful as the jargon baseball statistics to someone who has never played/watched baseball. A child first learning baseball doesn't need to understand a WHIP or batting average. Those are tools he will pick up as he becomes more familiar with the game. Even if it only gives him the knowledge that there is such a thing as a singleton, there are better books to start with.
jmucchiello
@jmucchiello: I don't know if you're responding to my post, or to the comments here, but my post was not written with beginners in mind (I try to avoid answering "newbie" questions on SO, because other people can answer them much more skilfully than I can). :-) If anything, I'm targeting people of a similar experience level to mine.
Chris Jester-Young
(In response to the actual question: I started my development career at 20, by which time I've already been coding with a number of programming languages for more than 5 years. I suspect that a large proportion of the SO readership is in a similar circumstance. They may be new to professional development, but they're definitely not programming newbies.)
Chris Jester-Young
@Chris: this book can also be dangerous to seasoned programmers. The main risk is what happened to some fellow programmer of mine : think backward. He picked a pattern at random (well, not really) and forced the problem to match it, instead of thinking of the real problem. There is nothing in this books to avoid this pitfall and it is more easy than it seems. Another related pitfall is considering the GoF book covered every possible design patterns, instead of just picked a selection of common ones. Also some patterns are nowaday considered harmfull, typically singleton.
kriss
@kriss: +1 Yes, we have some work code here written by an ex-employee who had a case of patternitis. Part of my job is to untangle all that! I hate the overemphasis of patterns to the point of making round problems fit square patterns. As an aside, I have a SCEA (Sun Certified Enterprise Architect) certification, and I dislike the heavy emphasis their test has on patterns. Don't get me wrong, I love patterns (or I wouldn't have made this post!), but, there can be too much of a good thing. Think garlic. :-P
Chris Jester-Young
@kriss: On your last point...I think singletons have their place, but, they _are_ too often overused, at least in code I've encountered. (Coming from a Java background, one learns to treat patterns as essentially single-valued enums, and unless one wants to trash all enums....)
Chris Jester-Young
One of the first book I read on the subject. It actually is hard to read for beginners, but once you've digested the content, your programming really gets better.
Séb
Design Pattern (n) - One of a series of awkward workarounds to the inherent limitations of Object-Oriented programming and C++.
Jamie Cox
One should not learn about patterns in order to apply them, but rather to gain a vocabulary with which to discuss and describe the designs of real systems (including one's own). Design Patterns is a great book but it is not - and should not be treated as - a cookbook!
dajames
+78  A: 

Why's (Poignant) Guide to Ruby !!!!!

Chunky bacon.

Orion Edwards
I enjoyed the beginning, but as I got further into it, the less helpful it was.
Phoenix
+1 I loved that book.
fluffels
It's probably fun to read if you're not already a programmer, but it's tedious if you're already a programmer and just want to know the overall language syntax (in which case, the PickAxe is a lot more useful)
Simon Howard
@Phoenix yea by the end of it i had no idea what was going on
Tomek
@fragglet, @Phoenix: +1... felt the same way.
Jared Updike
That's two hours I'll never get back...
Michael Myers
I enjoy the humor in that book.
Alex Baranosky
This book really transports the idea of meta-programming. (If you like the humor. :))
pi
That book was written by a raving lunatic. I loved it. ;)
Alex Baranosky
The site hosting the book went down with why's disappearance (http://news.ycombinator.com/item?id=773106), however, a PDF version exists at http://www.ember.co.nz/resources/whys-poignant-guide-to-ruby/.
gotgenes
Poignant guide is not about programming Ruby but the culture of Ruby. It's only required reading in Ruby-ville because we're tired of writing hello world. We want to write goodbye cruel world and Dwemthy's Array to learn.
Chuck Vose
Who is Ruby and is she so complicated she needs a guide book? And why should I date her?
Mark Schultheiss
Poignant guide is half cartoons and half easy techniques that may or may not be useful for beginning rubyists
Sam
@mmyers: That's two hours I'll never *give* back.
Caffeine
+45  A: 

I have a different answer -- I really liked Joel's Best Software Writing I.

Maybe that's just me... but that collection opened my eyes to the "bigger picture" and inspired me to think of my programming as an art/craft.

yoliho
The contents of that book are available free on the web http://www.codinghorror.com/blog/archives/000346.html
MarkJ
I'm tempted to downvote: I read that book a number of times, and it was a good book but I didn't learn much from it. More of a lazy Sunday book imo. I don't think that every programmer should read it.
SnOrfus
+5  A: 

@Peter Coulton -- you don't read Knuth, you study it.

For me, and my work... Purely Functional Data Structures is great for thinking and developing with functional languages in mind.

nlucaroni
+11  A: 

The Pragmatic Programmer after 12 months programming (when you can code as easy as you write). Code Complete after ~6 months industry experience.

Graphain
-1: 1 book please (and both have been mentioned higher up the vote ranking)
Ruben Bartelink
+1  A: 

Code Complete is the number one choice, but I'd also cite Gang of Four's Design Patterns and Craig Larman's Applying UML and Patterns.

The Timeless Way of Building, by Christopher Alexander, is another great one. Even though it's about archtecture, it's included in the bibliography of many great programming books I have already read.

Another one, from which I'm learning lots of new things, is Data Access Patterns, by Clifton Nock.

Mario Marinato -br-
+1  A: 
I am going to have to say Pragmatic Programmer. It gives the best overview for software developers/engineers. I found the book very useful starting out, and still after a few years of professional work.
marked
-1 duplicate please delete
Ruben Bartelink
+19  A: 

It depends on exactly what purpose you're aiming for - I like Code Complete for pure programming, and Don't Make Me Think is a great book on UI design.

bcwood
I really rate 'Don't Make Me Think', its really easy to read which means its a lot easier to coax people to read it :)
Danielb
Can you post a pic? And put the +1 for CC either on CC or at the end. This desrvers more votes and doesnt get them because it doesnt answer the question directly.
Ruben Bartelink
+95  A: 

book cover

The Inmates Are Running The Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity, or any of Alan Cooper's books.

Because most programmers produce more WTFs/minute in the user interface than they do in the source code.

Patrick McElhaney
Can't upvote this enough.
Anderson Imes
I agree with Anderson - this deserves at least 3 up votes. Brilliant!
Stuart Helwig
Definitely the best book I ever read on IT. I have read all the others such as Steve McConnell, Knuth, and many more, but this one beats them all!But not a book for nerds, as this is a book about how to make great commerical products, not hobby projects.
Zubair
Great. Also a bit irritating and confrontational here and there. Which is exactly why it is so good.
Teun D
Vote up a thousand times.
Renesis
I rather liked the 2nd half of the book which details out strategies to accomplish a good user experience. However, the 1st part went out of it's way to effectively say "Engineers are idiots. Don't get me wrong, they're brilliant! But they're idiots."
Jesse C. Slicer
I'm finding it really hard to not judge this one by its cover
zem
+151  A: 
Wolfbyte
I agree - I wish I had read that book earlier.
David Grant
Agree. Too many developers talk about writing software with a clean slate. But I'd think that almost all developers spend some time eating other people's dog food (or is that dog poo?).
Bernard Dy
+1. I've worked with a PM who was obsessed with the "clean slate" thing - even keeping new recruits away from the old codebase in case they picked up bad habits from it. The company is now stuck with a bunch of half-functional rewrites but no improvement in functionality, and is dying.
finnw
It's funny, but it seems like whenever I'm told I'll be reusing code from another project, the reuse always ends up being a "refactoring" per say...like I inherit C++ code that is clearly written by a C programmer who completely violates the single responsibility principle. In the end, the class structure might contain similar logical code, but it looks like a completely different (and object oriented) beast.
Gary
I hope this one gets less and less important over time but it's pretty important, now.
+226  A: 

I know that Design Patterns by the Gang of Four is a standard text, but rather than try and read that brick of a book start with the easier Head-First Design Patterns, and once you have got your head around the basic principles, progress to the great GoF bible...

Calanus
Head-First Design Patterns is a wonderful introduction for someone who takes programming seriously, but didn't spend four years of school studying it.
bouvard
I find the head-first series sickeningly unreadable.
Draemon
@D I agree. I'd point someone at Fowler's POEE to start before Head First any day.
Troy Howard
I found Head-First Design Patterns very biased towards food based businesses, I'm not sure what they were trying to say about developers!
Antony Scott
Sorry, -1. Head-First Design Patterns cannot be kept as a reference book. And it introduce patterns using 100 pages while 10 would have be enough for most of us. But it's design is cool :)
Sylvain
@Sylvain - it's not meant to be a reference book, it is merely an introduction to design patterns that I believe is easier to study than the GOF book. Yes, once you have got your head around design patterns use the GOF book as your reference...
Calanus
I agree with Calanus: I tried to read Design Patterns at the book store, fresh off not having much knowledge of design patterns. I found it very hard to read. Though I am sure now that the Head First book has helped me digest the ideas behind the patterns better, the GoF book may be a lot more readable, and therefore helpful.
Alex Baranosky
the GoF book is a pattern catalog. It's not really intended to be a 'learning' tool about what design patterns are and how to use them.
SnOrfus
I found this to be a really good illustrator of the major OO ideas. It had great examples of why you'd need things like encapsulation and polymorphism, whereas most texts leave it pretty abstract. I think it's knowing to use(and when not to use) the OO ideas that's most important in programming.
LoveMeSomeCode
@SnOrfus: You must have not read the entire book all the way through. It highlights the most common patterns used, and then goes in to lots of detail where they do and don't work.
monksy
Any techie book with a picture of an attractive female on the cover automatically makes me think that the publisher doesn't take their market seriously.
Ether
She's hot......
Mark Kadlec
@Mark Kadlec: ... if you like women with large heads. ;-)
harschware
I found this book to be a very good introduction to design patterns. As fresh out of collage with very limited experience this book introduced me to (in my opinion) some very handy concepts.
Clean
@Ether, I thought the same way when my professor gave me this book... but reading through it was enought to show me that this is one of the best design patterns reference I've read until then; it's a new approach to the teaching of design patterns, as they do for every Head First's book
Wilhelm
+1 Excellent advice
01010011
@Ether - Hence the phrase, don't judge a book by its cover :)
Martin Clarke
@mark same girl shilling for vagisil. Still think she's hot with an itchy cooter? http://fishbowl.pastiche.org/2005/08/12/the_head_first_girls_double_life/
Will
@harschware--clearly, she's SMART with a grande melon like that
Jay
I sat down in Barnes and Noble to peruse this. When I got up I had read over 100 pages, and had a much, much better understand of patterns. I can see people being annoyed by the Heads First books, but they can very effectively communicate (to some people's learning styles, like mine).
Jay
I think the Head First books are very accessible. They explain things in very simple terms and using a variety methods (e.g. text, diagrams, questions). They aren't your typical programming books though, some may find them to be a little too simplistic
Phil Hale
+8  A: 

Object-Oriented Analysis and Design with Applications by Grady Booch.

Vaibhav
+3  A: 

@NotMyself,

The Mythical Man Month tells a great story about the common themes of delivering software: what works, what doesn't, etc. It's amazing that the book is 30 years old and is still highly relevant.

mando
Duplicate post (sorry).
Ether
A: 

The Bible, followed by How to win friends and influence people. Neither are specific to any field but they are the two books that have had the biggest (good) impact on my life.

Teifion
Not appropriate for "EVERY" programmer
Egg
Every programmer that needs to meet people should read the latter. As for the former I'm aware that there may be some disagreement over that which is not best discussed through the medium of comments on stackoverflow.
Teifion
ooh the Injil! :)
pageman
2 books, >=1 duplicate
Ruben Bartelink
+3  A: 

I can't believe no one's mentioned Structure and Interpretation of Computer Programs (SICP). It's not a beginner's (as in it shouldn't be the first programming book you read) but it's been quite influential to me. This book explains why concepts like design patterns, high cohesion and low coupling are good things. On top of that you will learn why being able to pass around functions as arguments and return values is a great asset. You'll never program the same way after you grasp this concept.

Code Complete is a great book, but I would say it's a secondary book. You can't be a great programmer if you don't know how to program and Code Complete doesn't teach you that. Once you know the important concepts you can start applying the lessons in Code Complete. SICP and Code Complete are completely different books. In fact, reading both is probably the biggest one-two punch I can suggest to programmers.

I used SICP in my college course so I'm not sure how it would be as teach-yourself book, but I've read it since college and it's written very clearly and should be accessible to anyone with some knowledge of programming.

Cristian
-1 A dup is higher up
Ruben Bartelink
+1  A: 

Programming Pearls by Jon Bentley.

BrianLy
-1: tinyurl.com/nom56r
Jim G.
+18  A: 

I'm going to go a different route than the other answers so far...

Hackers: Heroes of the Computer Revolution. It's an informal history of computers that really gives you an amazing feel for how this whole "computer culture" formed. It had a very powerful effect on me when I read it, oh, sometime around 1988.

Tim Sullivan
+3  A: 

The first edition of Code Complete was hugely influential in its time. The second edition was somehow, well, annoying. From his initial assertion that he had not expected to have to update the book at all, through his (dubious) claim to have pretty much invented Extreme Programming, the book just didn't deliver a real update to the original. Or maybe it's just that I was a decade older?

I don't think MMM would carry as much weight at the outset of one's career as it does when one has some personal experience to provide context. And the same, but in a different way, applies to another favourite, Refactoring.

I think if I had to choose one book to make the most beneficial difference in someone else's programming career, it would be The Pragmatic Programmer.

Mike Woodhouse
+3  A: 

I've been arounda while, so most books that I have found influential don't necessarily apply today. I do believe it is universally important to understand the platform that you are developing for (both hardware and OS). I also think it's important to learn from other peoples mistakes. So two books I would recommend are:

Computing Calamities and In Search of Stupidity: Over Twenty Years of High Tech Marketing Disasters

bruceatk
-1 One book please
Ruben Bartelink
Give me a break. Why in the world would you mark this down because I mentioned two books?
bruceatk
+31  A: 

I recommend Writing Solid Code. Old, but still very much worth a read.

Shane O'Grady
One of my best ! Nice, I will begin reading it again tonight :)
Sylvain
+14  A: 

Getting Real by 37 Signals. It doesn't matter if you don't "ship" something at the end of the day.

dustinupdyke
+30  A: 

I found The Practice of Programming by Kernighan and Pike is a very good read.

Cros
+13  A: 

For programming, without question, the "correct" answer is Code Complete. This book is really unparallelled in setting a framework of thought around a disciplined approach to the actual construction of code. McConnell was able to do this in a way that was largely agnostic to language of implementation and even in the types of systems the programmer is working on...useful stuff to anyone who spends any part of their day actually writing code.

Code Complete is also noteworthy in that this book was really the first to tackle only the construction aspects coding completely and while followed with other books by other authors, I believe Code Complete still stands as the most ambitious and successful in convincing you the practices that Steve advocates are paramount to successful programming.

To throw in another book by Steve McConnell, I think the book Rapid Development is equally important. While this book is somewhat less unique in the subject matter of running successful development teams, it is equally fun to read as Code Complete and no less important to programming project team leaders.

Code Complete for the good of the individual. Rapid Development for the good of the team.

Tall Jeff
Sorry, but no. There is no 'correct' answer for a subjective question such as this. What is the best programming language? What is the best anything? How silly.
thenduks
@thenduks - Clearly, you must have not read Code Complete then. :-) PS: Did you look at the number one answer to this question...and the margin for which it is ahead by?
Tall Jeff
-1 as rambling. However now I see http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read/73235#73235 is a dup of this, can you edit in a picture, make it clear thats the book you mean and let me change my downvote to an upvote please!
Ruben Bartelink
+11  A: 

Alice's Adventures in Wonderland Best programmers have read the book!

popopome
+1  A: 

I'm going old school with this: I think the most influential book on programming ever written is The Art of Computer Programming.

Mike Heinz
This is yet another duplicate
Ruben Bartelink
+359  A: 

I think I would have to recommend Refactoring: Improving the Design of Existing Code.

Refactoring: Improving the Design of Existing Code

Martin
I am only seventy pages into this, but it is already the most useful book I have ever read on best-practices-oriented programming.
bouvard
I have to agree, my favorite programming quotation comes from this book: "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." - Martin Fowler
Justin Standard
I really like this book too, the code smells quick reference is very useful.
Danielb
It sure changes the way you think
Leyu
The opening movie-rental example also makes great TDD practice, if you're just learning test-driven development and want to see how it works in practice.
Kyralessa
Actually I'm quite surprised this book made it so high on the list. Might be something i've missed put the step by step guides to, for example, renaming\adding\removing a parameter, is just idiotic.
Viktor Sehr
While I respect Martin Fowler, I don't think much of this particular book. The problem is that the book was written in part to prompt tool developers into adding refactoring tools. Refactoring in general is a good idea, but you only need a list of refactoring names if you need to know which option to select to get your tool to do it for you - otherwise you just need a mental model of how the code should be structured at the end. In C++, even now, refactoring tools aren't widespread or particularly powerful.
Steve314
Justin: Seems like virtually the same as SICP ("Programs must be written for people to read, and only incidentally for machines to execute"), except more insulting, and 15 years later. :-)
Ken
+138  A: 
Gustavo
Peopleware is excellent. Provides a lot of insight in the the softer factors on a dev group.
Chris Ballance
I discovered the Psychology of Computer Programming (without double "of") from my university library. The library lady had to bring it to me from somewhere down the celler - nobody had borrowed it for ages. I read it, and thought, what is wrong with people - this book is just magnificent!
Rene Saarsoo
Sure. It's quite unknown, but I consider it a classic. Great book.
Gustavo
I've read and own the first two, which are both excellent. The third title sounds very interesting.
Danielb
It's quite a pity almost everyone dismisses the "developers need a quiet working environment" chapters. :(
Ether
Excellent book about human interactions.
CodeSavvyGeek
+1 My #1 as well.
Martin R-L
While I agree with what DeMarco and Lister wrote, it was very frustrating for me to read. I am not in a position to implement any of the suggestions, such as private offices. Thus I got very little of value from this book.
aaaa bbbb
+9  A: 
Gustavo
-1: Can you edit this to be one book that hasnt been mentioned higher in the voting please?
Ruben Bartelink
+349  A: 

Introduction to algorithms (Cormen, Leiserson, Rivest, Stein) - Code Complete teaches you how to program correctly, The Mythical Man-Month teaches you how to manage correctly, Design Patterns teaches you how to design correctly...

This book teaches you how to write think about algorithms.

Introduction to algorithms cover image

In my mind, code is just a tool, not the essence. The main part of developing software (IMO) is creating new algorithms or re-implementing existing ones. Other than that it's just assembling Lego bricks or creating "management" layers. I still dream about the workplace that would allow me to invest most (>50%) of my time in writing algorithms, leaving the management details to other people...

Ran Biron
I used this book extensively in my undergraduate career. It it written as a text book not a reference book. This means that many of the central concepts are "left as an exersize for the reader". Great book for schools, I don't recommend it as a reference book.
alumb
alumb: In that case, what would you recommend as a reference book?
Epic bible, a 1200 page introduction. Truly massive.
moffdub
This book is a hard read and is overkill for a typical software developer. But it does provide a good overview in general on how to design algorithms. The typical job of business apps will not even use a fraction of the information in this book though.
Cervo
> This book teaches you how to write code.I have to disagree. It teaches you algorithms, not how to implement them. Sedgewick's books are better about this.
Blaisorblade
This was one of the recommended texts for much of my degree course. I found most of the book completely impenetrable, and (as alumb has already said) leaves the crucial bits out as a learning exercise. I haven't picked it up since I finished my degree (I went straight from my finals into a graduate programming job).
James Muscat
I have to disagree with most commentators (to date) - Without this book, or the rigorous way it teaches algorithms, I would've been hopelessly lost when the time came to move beyond "get data from server, transform and output in a nice html". When it came to writing algorithms, this book gave me the best tools for the job. The added bonus of having actual GOOD and understandable content is what puts this over the top (as opposed to "the art of programming" series). However, IMO, "how to create a hash map" is not as important as "how to think about creating a hash map".
Ran Biron
Yarrr, seeing this book cover again gives me the creeps.
Ciryon
My personal favourite!
Swanand
This is clearly one of the most important books for anyone who wants to claim to be a software developer. That it is not the highest vote getter is somewhat surprising, but for it to not even be top 5 is truly shocking. However, this book does not teach you "how to write code"; it is far more important than that. It teaches you how to use a computer to solve problems.
William Pursell
This book is sitting on my desk right now! I still have dreams about finding better algorithms because of it (I said dreams not nightmares).
Molex
MIT have released videos of there lectures which use this book... http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/CourseHome/index.htm
Vagnerr
I read this book as text book during undergraduate. To study this book, reader should have to be good at mathematics.
Syed Tayyab Ali
This was the textbook for my 200-level algorithms course and I found it quite inpenatrable at the time, but is invaluable as a reference and for better understanding "wtf is actually going on". :)
Ether
This was my course textbook for an algorithms class I took my 2nd year of uni, and while it's fairly good at explaining things, you can tell that it is written by a mathematician - the psuedocode is absolutely horrendous.
Xiong Chiamiov
Awesome book.. Every programmer should read this for sure.. Im reading it now and learning many things from this book:)
lakshmanan
Excellent set of lecture notes and videos on MIT OCW with one of the authors (Leiserson) http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/VideoLectures/index.htm
bobobobo
this was in my course
nicky
Don't know. The appendix explains used mathematical concepts by using unexplained mathematical concepts. :-(
stesch
CLR, tha was the acronym we had to a course at Kings College London, 'Algoristhms: Design and Analysis'. It was one of the best courses attended when student.
Sunscreen
+1 This one's a classic.
alexander.biskop
Cool, taking a class that uses this book this semester!
Baddie
Reviewing this book for work and interviews reminds me how important it is.
Michael Shopsin
+14  A: 

The C Programming Language. Seriously!

Ashwin
I can't believe more people haven't given this answer yet. It is typically the first and most frequent answer to questions like this. And it is very much correct. I'm afraid, however, that too many "programmers" these days have no idea how Von Neumann machines work.
Max
-1: Dup (even if it was earlier)
Ruben Bartelink
+17  A: 

The Passionate Programmer cover

Not the most influential, but certainly a good read and absent so far is My Job Went To India by Chad Fowler. It consists of 52 chapters/mini essays giving guidance on how to differentiate yourself as a developer rather than a code monkey (whose work could easily be outsourced).

Edit by different person: This is now called "The Passionate Programmer".

James Marshall
I've just finished reading this and it's brilliant. I haven't read the first edition, but apparently the retitled second edition has a very different feel - much more positive in tone.
Skilldrick
+92  A: 
nmiranda
... my professor is one of the authors. Care to guess what language our intro CS is taught in?
erjiang
I'd have liked to be taught in LISP in my beginnings
nmiranda
I hated it at the time. There was nothing I wanted to do more than punch the Scheme professor in the face for being such an arrogant prick. However, some time after graduating I found myself writing a LISP program just for fun.
amischiefr
I picked up The Little Schemer because it had such high praise, and was disappointed. It certainly has a unique format, but it can be a pain to navigate.
Daniel Yankowsky
The Little Schemer is one of my favorite CS books of all time and I definitely think it deserves to be higher in the list. The amount of power it delivers in such brevity is amazing.
rcampbell
Schemer Series actually taught me how to program. If it werent for this book (and HtDP), I would still be writing spaghetti code, I would still be jumping to write that first line of code without thinking about all the actual design steps, I would have never groked SICP , I would have never appreciated the beauty of Scheme and functional programming , I would have never learned how to think recursively, I would have never appreciated the power of abstraction. Like they say in the forward "The price [was] worth paying for the sheer joy of the discovery process, the elegance of the result...]
kunjaan
+10  A: 

I though Jurgen did a decent job with his Top 100 Best Software Engineering Books, Ever.

Mike Polen
+2  A: 
  1. Google
  2. Newsgroups and Forums (and now, SO)
  3. blogs

Books are great, on the free time, on vacation, but relevent, up to the minut "save the day" information is from blogs/forums and internet stuff.

csmba
Yeah, no doubt. But the question was specifically about books, so -1. "If you could go back in time and tell yourself to read a specific book [...], which book would it be?" - Google?
Jonik
Irrelevant, since it does not answer the question
Eduardo Molteni
+8  A: 

Since you didn't say you wanted programming books specifically, I can be a little more creative.

Every programmer should have read Lewis Carol's Alice in Wonderland.

Slightly more down-to-earth - every programmer should read Getting Things Done - especially the ones that I work with, because once you 'get it' you will be annoyed at how unorganized other people can be :)

Thomas Vander Stichele
I would also recommend "The Annotated Alice" (annotated by Martin Gardner)
Regent
Gulliver's Travels, too, if only to see where the whole big-endian/little endian thing started.
James McLeod
-1: Too much creativity - 1 book please so the voting can mean something in the context of the question
Ruben Bartelink
+23  A: 
Chris Conway
I thought this was an exellent read. and would reconmend it to any .Net Developer to show them some tools for loosly coupled code. (That is Foundations of programming)
dbones
Interesting. I've not seen this before. It looks like a good book for people not already following these practises.
RichardOD
+9  A: 

Framework Design Guidelines will give you a very good start on how to organize code.

Dana
and dont forget thhe 2nd edition
Ruben Bartelink
I'm surprised no one else has mentioned this. I learned more good practices from reading this and running FxCop than from most other .NET books. **Highly** recommended.
TrueWill
+9  A: 
Pete
A: 

I second the recommendations for The Pragmatic Programmer and the Gang of Four's Design Patterns.

I also think that Joshua Bloch's Effective Java is first rate, even for those working in other languages. It's presented in an easy-to-digest, point-by-point style. I learned a lot from it about things like implementing hashCode() methods and so on.

Phillip Wells
A: 

I'll second the Little Schemer and the Seasoned Schemer. Not necessarily because you want to write Scheme, but actually, reading and understanding these has changed the way I think even about my Java code at my day job.

levand
+29  A: 
flipdoubt
or the C# version thereof. Clean Code is a real page turner too.
Ruben Bartelink
This book really helped me to understand how to organise my code, not just into classes but into modules. Ignore the fact it says "Agile" on the cover, for me the real good stuff in this book is about code organisation and dependencies and should be applicable to any programming style or language. I cannot recommend this book highly enough.
flamingpenguin
What the hell is that on the front cover? it looks like Martin Fowlers dirty laundry...
Jonathan
+68  A: 

Practices of an Agile Developer

Working in the Real World.

alt text

mattruma
The Pragmatic Programmer has to be my favorite programming book ever. Easy to digest, very well written, straight to the point; it has everything. Does this one pick up from the Pragmatic Programmer and introduce Agile methods? I am thinking of making this one next in my reading list.
Yorgos Pagles
It's similar, but focus more on the "practices". Venkat does a great job and if you ever have the opportunity to hear him speak ... do it! =)
mattruma
I thought this book sucked. It is full of fluff about how each practice should *feel*. To me this book felt more like a talk from an inspirational speaker than a useful technical manual.
joeforker
It my favorite programming book too.
Pierre 303
+7  A: 

I think that "The Art of Unix Programming" is an excellent book, by an excellent hacker/brilliant mind as Eric S. Raymond, who tries to make us understand a few principles of software design (simplicity mainly). This book is a must for every programming who is about to start a project under Unix platform.

lurks
this is a duplicate.
Christopher Mahan
+514  A: 

alt text

Personally, Structure and Interpretation of Computer Programs is by far the most influential programming book I have ever read.

Some classics like Code Complete, Refactoring and Design Patterns teach you the effective working habits and the painstaking details of the trade. Others, like Peopleware, Psychology of Computer Programming and The Mythical Man-Month delve into the psychosocial aspects of software development. Numerous others deal with algorithms. These books all have their place.

SICP, however, is in a different league. It is a book that will enlighten you. It will evoke in you a passion for writing beautiful programs. Moreover, it will teach you to recognize and appreciate that very beauty. It will leave you with a state of awe and an unquenchable thirst to learn more. Other books may make you a better programmer; this book will make you a programmer.

And in the meanwhile, you will learn a thing or two about functional programming (side effects won't be introduced until chapter three), lazy evaluation, metaprogramming (well, metalinguistic abstraction), virtual machines, interpreters, and compilers.

Some think that SICP is not a beginner's book. Personally, I probably wouldn't have appreciated the book in full without having some programming experience under my belt, but I would definitely recommend it for a beginner. The book is, after all, written for the famous 6.001, the introductory programming course at MIT. It may require an intellectual effort (especially if you do the exercises - and you should), but the reward is well worth the price.

Not convinced? Read the Foreword or the Preface to the First Edition. The full text is freely available on the web.

It's available online for free, and there are even video lectures to go along with it.

Antti Sykäri
Note that MIT is no longer using this (see http://lambda-the-ultimate.org/node/1840 ) but that in no way detracts from it being a great book.
pjz
Duly noted. It's a shame. Same happened to my school as well - they even had the audacity to replace it with a Java course.
Antti Sykäri
http://www-mitpress.mit.edu/sicp/full-text/book/book.html
roman m
Also the text book for University of California, Berkeley intro course CS 61A (at least it was 10 years ago) although it is heavily supplemented with OOP material.
Trey
Also the SICP lecture videos. http://www.youtube.com/results?search_query=sicp
Jared Updike
Hey I recognize that book cover from college! I almost lost my mind in the first couple weeks programming in Scheme (LISP)... Then I got pretty good at it. I'll have to take another look at this one.
Alex Baranosky
The reviews on Amazon are incredible. Just about half of the people loved it, and the other half hated it. There are almost no fence sitters.
Wayne Conrad
As any Lisp book out there, it starts with whining about the fact how misunderstood Lisp is.
stesch
The overabundance of complex math in SICP is a real problem.
Daniel Straight
@ Daniel Straight. See How to Design Computer Programs. www.htdp.org, self considered to be the way sicp should have been written for wider beginning programming students, as argued in this link. http://www.ccs.neu.edu/scheme/pubs/jfp2004-fffk.pdf
Joshua
when i took a course that was ABOUT THIS BOOK, it was sooo useless. i could get what he wanted to say, nor how to do it right.
none
A: 

Ooh, a toss-up between Bentley's "Programming Pearls" and Kernighan and Ritchie's "The C Programming Language".

Duplicate post (sorry).
Ether
-1: tinyurl.com/nom56r
Jim G.
-1: 2 duplicates in one post; Please dont toss up here
Ruben Bartelink
A: 

I know so many others have had the same answer but needed to add my 2 cents:

Code Complete by Steven McConnell

Rob Bazinet
+17  A: 

Robert M. Pirsig's Zen and the Art of Motorcycle Maintenance has a little section near the end about Gumption Traps. That's the best advice I've ever read on how to debug code or solve problems in general. The rest of the book is pretty good, too.

tuxedo
duplicate, see earlier
CrazyJugglerDrummer
+17  A: 
FantaMango77
Information about why it should be read, please?
Andrew Grimm
I bet that one project management book worth a dozen of technical/art books in programming. The software as any other industry rewards good teamwork more than individual team member talent. But out of all industries, software looks like most difficult one for good team building.
RocketSurgeon
+3  A: 

Mr. Bunny's Guide To ActiveX

Paul Tomblin
+4  A: 

I have a few good books that strongly influenced me that I've not seen on this list so far:

The Psychology of Everyday Things by Donald Norman. The general principles of design for other people. This may seem to be mostly good for UI but if you think about it, it has applications almost anywhere there is an interface that someone besides the original developer has to work with; e. g. an API and designing the interface in such a way that other developers form the correct mental model and get appropriate feedback from the API itself.

The Art of Software Testing by Glen Myers. A good, general introduction to testing software; good for programmers to read to help them think like a tester i. e. think of what may go wrong and prepare for it.

By the way, I realize the question was the "Single Most Influential Book" but the discussion seems to have changed to listing good books for developers to read so I hope I can be forgiven for listing two good books rather than just one.

Onorio Catenacci
A: 

To answer the first question I would be original and say Code Complete;) And Pragmatic Programmer in a close second. But to answer the rephrased question:

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

I´m not quite sure. I do not think Code Complete would be as valuable in the beginning of my career. I´t is a harder question. Maybe "Object Oriented Analysis and Design" should top the list then.

Kim
Can you transform your answer into one that clearly nominates one [non-duplicate] book with a pic please?
Ruben Bartelink
+5  A: 

While I agree that many of the books above are must-reads (Pragmatic Programmer, Mythical Man-Month, Art of Computer Programming, and SICP come to mind immediately), I'd like to go in a slightly different direction and recommend A Discipline of Programming by Edsger Dijkstra. Even though it's 32 years old, the emphasis on "design for verifiability" is highly relevant (even if "verifiability" means "proof" instead "unit tests").

joel.neely
A: 

+1 for "The Mythical Man Month" - it's fascinating that the same issues exist in software projects after 30-40 years.

Another +1 for "Programming Pearls" (and a more hesitant recommendation for later books in the series); PP encourages you to think rationally about problems.

moobaa
+430  A: 
Nathan
i concur.... but i'd use the first edition. not as 'useful' as a reference, but more 'just the basics' to teach you to think low-level
Javier
I didn't get to The C Programming Language until fairly late in my education, and it was a real eye opener. Having been programming in both C and C++ for a couple of years, I burned through the book going "so THAT's what's going on!" on essentially every page. Highly recommended.
Electrons_Ahoy
mpez0
I totally agree - great reference book also
Aaron
This is the book that came to my mind when I read the question. Great book.
Anthony
If you invent a new language and the manual is longer than K+R, you have done something wrong.
Martin Beckett
@mgb: I hope you are not counting the libraries, otherwise, C#(.net framework), Python(bateries includes), etc. are in real trouble ;)
voyager
while it is the best book on C, C should just die, so the fewer that read this book the better :)
Anders Rune Jensen
Wow, it's maybe the only book about C I will never recommand. Anti-Code Complete, Anti-Pragmatic Programer. But I have to give that it was well written - like an interresting story. But it's awfull in respect to today development standards.
Sylvain
Jason Watkins
+1 nice! Read this when I was 16 years old! :) memories ...
pageman
xcramps
I love the fact this book is also very easy on my hands. I'm not keen on lugging around a 900 page book. It's concise, clear and the programs are designed in a way that builds on what you've learnt before, without implying anything.
Dominic Bou-Samra
And why exactly should I read this?
UpTheCreek
Because it not only teaches you C, it is well written. In fact should be the template for all "how to program language foo" books.
jmucchiello
Christopher Barber
I've had this book on a shelf for the past 10 years. Never opened it once. If I need a C reference, google is always closer.
shoosh
-1: I read this book 15 years ago. It's not bad, but IMO not a good starting point for programmers (as it was recommended to me then). Nor is it a must read for every deveoper.
Adrian Grigore
+159  A: 
John Channing
+1 for Scott Meyer's "Effective"s (there's also "Effective STL")
orip
The effective STL isn't quite such a breakthrough, there are generally fewer gotchas in STL than C++.
Martin Beckett
I've really enjoyed any of the "Effective" series of books. Especially Effective Java.
Alex Baranosky
Actually for me it's Jason Weiss's "Java Cryptography Extensions" (ISBN 0127427511) as the single most influential book but if I had one book to start with it would be pretty much anything in the "Effective" series as Effective C++ with Effective STL would have saved me hours digging through those remarkable dumps to find strlen blowing out on beginner work. Scott's observations on the stl error dumps are remarkable as it is the voice of experience.
Nicholas Jordan
@Martin Beckett: Maybe, but I see STL screwups much more often than I see C++ screwups on SO. C++ programmers really should take a look at effective STL as well.
Billy ONeal
@BillyONeal, true but the EffC++ books gave you a lot of insight you wouldn't have without a deep knowledge of C++. The STL errors can be summed up by "RTFM". The STL is confusing and complicated but it's documented confusing and complicated - the effective C++ books describes side effects you wouldn't have though of.
Martin Beckett
@Martin Beckett: Perhaps. There are some things though (such as passing vector/string data to legacy APIs) that are non-obvious upon first inspection.
Billy ONeal
This book is high on my list not only because it helped with C++, but it revolutionized the organization of programming books! Brilliantly done and massively influential.
Michael Easter
Learned on first read: where the pointy bits were and how to keep the bleeding to a minimum. Learned on further review: C++ will always bite you, it's just a matter of where, when, and how hard. Insight after lots of reflection: C++ is like Nitroglycerin, powerful but unstable; the best move is to not play Stroustrup's game.
Kelly French
This book is *not* on my list because it deals almost exclusively with enumerating and working around the deficiencies of C++, but treats them as though C++ problems are problems of computing itself. It is useful if you must use C++, but it suggests that the numerous and egregious faults of C++ are obstacles to computing in general. It is *not* a good book for learning how to program. And it makes a lot of really bad attempts at humor and folksiness.
Tim Schaeffer
+3  A: 

There are a lot of votes for Steve McConnell's Code Complete, but what about his Software Project Survival Guide book? I think they're both required reading but for different reasons.

Can you add a pic - right now it scans as if its yet another parroting of the CC recommends that this entire thread seems to be abotut
Ruben Bartelink
+2  A: 

I recently read Dreaming in Code and found it to be an interesting read. Perhaps more so since the day I started reading it Chandler 1.0 was released. Reading about the growing pains and mistakes of a project team of talented people trying to "change the world" gives you a lot to learn from. Also Scott brings up a lot of programmer lore and wisdom in between that's just an entertaining read.

Beautiful Code had one or two things that made me think differently, particularly the chapter on top down operator precedence.

pbhogan
-1 One book please
Ruben Bartelink
+12  A: 

The Design of Everyday Things

alt text

and Things that Make Us Smart - both by Donald Norman

These apply to so much more than just user interface design... Make things that work as others would expect - even if the others are developers using code that you've created.

The Timeless Way of Building - Christopher Alexander

The original "patterns" book. Helps to understand why some software design just "feels" right and some does not.

Terry Longrie
I thought the original "patterns" book was *A Pattern Language*. It's a lot more tangible than *The Timeless Way of Building*.
Robert Rossney
Tangible as in more easy to get a copy of? I imagine the books are both as solid as each other. I'm still looking for a copy of TTWoB.
Matt Ellen
+1 for design of everyday things. Can you say doorhandles?
drozzy
-1 For mentioning >1 book and DoET being a dup
Ruben Bartelink
+1  A: 

Great question!

After some consideration, I would have to say The Fountainhead by Ayn Rand. Not a programming book, but makes you think about what you want out of your work at a higher level.

Apocalisp
+2  A: 
A: 

The only software design type of book I have read is The C Programming Language by K&R. I read it the first time when I was 12 and I asked my dad for a book to teach me how to program. I keep going back to it time and again when ever I get a urge to program. Since I don't yet program for a living I don't have it all internalized.

Joel on Software is something worth reading even if you aren't a manager or team lead. If you are just starting out in the software industry it will give you an idea of what a software company should look like and have in place ie. The Joel Test.

Tanj
-1: >1 book, >1 duplicate
Ruben Bartelink
+1  A: 

Hey, my favorite book, Alice in Wonderland, has been mentioned :D

Other than that... I was blown away when I read Javascript: The Definitive Guide, because at the time it was the only JS book I'd read that wasn't talking about crappy rollovers or things like that.

It may be the first time I learned the OO side of javascript, and the book was by far the most complete on the language (core, and browser-side).

I wish I'd read it before getting bad habits and a false image of JS.

Of course the situation is much different now, with many books by JS gurus who have written stylish and robust JS like jQuery and the like...

Ced-le-pingouin
+24  A: 

A great follow on to Code Complete - indispensable once you start working on projects of any decent size & need to communicate to your stakeholders about project delivery dates, etc.

Software Estimation: Demystifying the Black Art by Steve McConnel

andyp
I read this book after a disastrous project and it was a revelation to me. It let me see that I had been trying to do six month's worth of work in six weeks. It's the natural follow-up to Code Complete.
Rory MacLeod
This book is titled "Software Estimation: Demystifying the Black Art" for those like me that aren't seeing the image but don't want to click through.
sliderhouserules
+73  A: 

Effective Java 2ed will teach you how to write beautiful and effective code. It's a Java book, but there are many cross-language concepts.

Marcio Aguiar
+1 A great book, probably my favorite Java book. Not "most influential", but has much needful tactical advice on how to write elegant and stable Java code. Bloch is a master.
Dave Sims
Cross-language for any value of Object Oriented Language.But for Java programmers, it's an absolute must-have
Steen
the single most important book for java developers. not to learn the language, but to learn how to use it
seanizer
This is the book that should be in every java team... not a book to read from beginning to end, but one to keep close because you will need it every now and then!
Séb
A Great book for java
nguyendat
+1  A: 

I'm backing the Mythical Man-Month as well, with all those before me. Other books have great insights on how to code, the practical knowledge of the craft, Brooks' work however so clearly illustrates those human failures that arise in any real software engineering project. It's almost a crime for young programmers to be sent out into the corporate world without having this in their back pocket.

domoaringatoo
A: 
  • Sedgewick's Algorithms in C++
  • Effective Java by Joshua Bloch
  • Java Performance Tuning by Shirazi
mmorrisson
A: 

Code is Law - you are doing all this writing, editing, and thinking in [language of your choice] but WHY? What does you code MEAN? What will does it actually DO?

(I could have recommended a book on QA, but I didn't...)

benc
+163  A: 
Matt Warren
Never read it, thanks for the hint ! Just bought it on Amazon.
Sylvain
If you "didn't understand half of it", then why are you recommending it? - http://tinyurl.com/nom56r
Jim G.
Honestly, because the half I understood was more interesting and I learnt more from it that almost any other book I've read.
Matt Warren
Contains the clearest explanation of heapsort ever written. Which just shows how perfect the book is.
Loadmaster
@Loadmaster, thanks for pointing that our, I've just starting re-reading it starting with the heapsort chapter.
Matt Warren
Matt - I can appreciate that you do not understand half of it. A great book will stretch your comprehension abilities. And as you change, your interpretation and understanding of a great book will change as well. Many great books are very difficult to understand, but the parts that are understood resonate deeply.
galaxywatcher
@galaxywatcher: Perhaps you're right. I think this principle applies to Knuth's 'The Art of Computer Programming'.
Jim G.
+189  A: 
Tim Howland
Very fun book, this was optional reading for my Theory of Computation class at UW Madison.
Peter Turner
This is THE book that propelled me into a career in software development. Really timeless.
Guido Domenici
This is one of the best books I have EVER read, funny and very insightful..
Jamie Lewis
This is one my favorite books of all time.
They even made this book an MIT course:http://ocw.mit.edu/OcwWeb/hs/geb/VideoLectures/index.htm
I love this book, one of these days I might even finish it.
Noel Walters
This book will make you a better programmer, matematician, musician and philosopher all at once. I recomend this book to everyone I know, not only programmers. His other book, Metamagical Themas is also highly recomended.
Tirpen
Very challenging, **very** rewarding. I call it one of the "head explody" kind of books, as in "Man's mind, once stretched by a new idea, never regains its original dimensions." - Oliver Wendell Holmes
Ether
**The** book that changed my life.
Loadmaster
This book has been sitting on my shelf for years. Calling me to battle with it again and again. It's exhausting. Perhaps I should summon the courage to tackle it once again.
galaxywatcher
just skip the dull parts, come back later. The book is pretty fractal; I suspect you can jump forward and still get the important stuff in your head.
Tim Howland
The set of all people who don't understand EGB.
Ian Boyd
This is the book to give non-programmer friends who are mystified why you are so excited by the dragon book and SICP. It was a NYT bestseller.
Stephen
To paraphrase DaVinci, once you've been in a hot-air balloon, you'll never look at the world the same way again. This book is like that.
Michael Easter
Great dialogs, great stufff in it, you can read it more than once and get different things from ot. A great book, not only for programming, but clearly for thinking.
Sunscreen
Loved the book, but I cannot see how all programmers would have to read this (which is the question asked)
Teun D
I found the true ending, and the reason why it was :) Love that book!
Thorbjørn Ravn Andersen
If you want your brain smashed so you can put it back together, use that book!
Daniel Mošmondor
+286  A: 
db
Buy this book. Probably the best undergraduate text out there. Also, take compilers when doing an undergraduate Computing Science degree. It is often a hard course, but really worth it in the end.
alumb
Absolutely. I think I learned more in that one semester of compilers that just about the rest of the program combined. And I still have that book on the shelf, too.
Electrons_Ahoy
I agree, I have never had to write a compiler but out of all the courses I did for my degree Compiler Writing was my favourite and this book was probably why.
tpower
I have the second edition (the purple dragon book), it is okay, but a tough read. I also found it to be biased towards LR parsing. For a standard developer I think there are other texts that show how to use parser generators. But for those interested in the underlying concepts this book is good.
Cervo
If you liked this one, check out Linkers and Loaders by Levine for the other side of the equation. Aho, Sethi, and Ullman tell you how to parse and compile. Levine does the same for runtime loading.
D.Shawley
My favorite class.
Anthony
Martin Brown
This book was my real introduction to bits and bytes ! But I will no read it again. For compiler developer, it's a must.
Sylvain
The first thing that popped into my mind when I saw the cover was "Here there be dragons"...
Matthew Scharley
I've got the second edition of this book, it's just mind-blowing. My favorite computing-related book. Not for everyone though, if you don't care about compilers, don't go for it.
Raoul Supercopter
i hate this book :( too complicated ...
nightingale2k1
so called RED DRAGON, a bible in compilers science.great book! The first time I have heard of that book is in the movie Hackers actually ;)
Ivan
Everyone that claims they'll never use this stuff because they aren't writing compilers is missing out. Writing a compiler requires solving some of the most universal practical problems in programming. There are good, well-understood, general solutions to these problems, and any programmer will benefit from familiarity with them. And I'm not the only one who thinks so: http://steve-yegge.blogspot.com/2007/06/rich-programmer-food.html
Steve S
Why did they ever get rid of this cover? The mind boggles. Throw a little "2nd ed." or something on there, sure, but have some respect for the dragon.
Doug McClean
Like SICP, this book will make your brain snap.
Stephen
+1 i <3 my Red Dragon book.
Ioxp
oh my gosh, I just bought this book (first edition) because of the awesome book cover. :D
townsean
I'm sure the second edition is better, but the cover is a step backwards.
Tim
+161  A: 
akr
I hadn't thought about this book, since I was thinking about programming books, but this book is great and you are totally correct.
icco
Great choice. This book has influenced my programming in more ways than I can count. I keep trying to explain to people around me about "Gumption loss", but they don't seem able to get it unless they read the book.
endian
I had never heard about this book before. But thanks to this post I spotted it on my local bookstore, bought it and read from cover to cover. Magnificent! Thanks for mentioning.
Rene Saarsoo
Yup. and the sequel "Lila". This one is more relevant to programming though.
CAD bloke
You guys have drank some wacky kool aid. I've read this book and it's value to programmers *specifically* is weak at best. Still a good book though.
Factor Mystic
Good programmers probably don't need a book to tell them to strive for perfection since they are probably already perfectionists and that is what attracted them to the craft. And the people who would need the motivation aren't the type to ask for outside reading. Still it sounds like a good 'life' book.
Jared Updike
Having read this book 2 or 3 times, my opinion is that is not worth the paper that it is printed on. The "Tao of Pooh" addresses most of the same concepts in less than 1/4 of the page count and uses bigger print. "Zen" seems to wind its way through all sorts of crap while "Tao" zeros in on the guts of the matter
Peter M
Hmm. I really liked this as a young teenager, perhaps it's worth a reread?
André Laszlo
May not be the single most influential, but it is definitely top 5 material. It teaches you so much about the philosophy surrounding the creation of Quality. Great stuff.Was the first book I though of when I saw the question actually :)
Ticcie
-1: Irrelevant. And if you're going to post philosophy books, at least post **good** ones.
TrueWill
It's a great book, but not The One Book for software developers.
Jim In Texas
Not to be confused with http://en.wikipedia.org/wiki/Zen_in_the_Art_of_Archery
Chris S
Cool title, overrated content.
UpTheCreek
Xiong Chiamiov
Peter M: "Having read this book 2 or 3 times, my opinion is that is not worth the paper that it is printed on." So, the first two times, the book was worth re-reading. Then BANG! Completely worthless.
Rafe Lavelle
Weirdly, there is a programming link to this book. But it's not significant.
Stephen
The part where the mechanic picks up the wrong wrench and immediately damages the bike... had a profound influence on me.I regard it as a sort of Hippocratic Oath for engineers.
Jonathan Watmough
+8  A: 
Michael Hinds
+1  A: 

Pro Spring is a superb introduction to the world of Inversion of Control and Dependency Injection. If you're not aware of these practices and their implications - the balance of topics and technical detail in Pro Spring is excellent. It builds a great case and consequent personal foundation.

Another book I'd suggest would be Robert Martin's Agile Software Development (ASD). Code smells, agile techniques, test driven dev, principles ... a well-written balance of many different programming facets.

More traditional classics would include the infamous GoF Design Patterns, Bertrand Meyer's Object Oriented Software Construction, Booch's Object Oriented Analysis and Design, Scott Meyer's "Effective C++'" series and a lesser known book I enjoyed by Gunderloy, Coder to Developer.

And while books are nice ... don't forget radio!

... let me add one more thing. If you haven't already discovered safari - take a look. It is more addictive than stack overflow :-) I've found that with my google type habits - I need the more expensive subscription so I can look at any book at any time - but I'd recommend the trial to anyone even remotely interested.

(ah yes, a little obj-C today, cocoa tomorrow, patterns? soa? what was that example in that cookbook? What did Steve say in the second edition? Should I buy this book? ... a subscription like this is great if you'd like some continuity and context to what you're googling ...)

Luther Baker
+1 for Object Oriented Software Construction - a must read.
Tobias Langner
+41  A: 

@lurks

The Art Of UNIX Programming by Eric S. Raymond

It is useful regardless operating system you use.

J.F. Sebastian
Image link is broken
Aaron Digulla
@Aaron Digulla: Thanks. I've changed the url.
J.F. Sebastian
People get turned off by some of Raymond's antics, but this is a damn good book. I keep a printout of the 17 basics of Unix philosophy taped above my desk. They are invaluable (at least the ones that have aged well). The best part is it's free, search for it.
+1  A: 

"Debugging the Development Process: Practical Strategies for Staying Focused, Hitting Ship Dates, and Building Solid Teams" by Steve Maguire.

No-non-sense, down-to-earth, entertaining, profound.

[ http://stackoverflow.com/questions/559/what-books-would-you-recommend-for-a-beginning-software-developer#1150 ]

Sven Semmler
A: 

Since you've asked for the single most influential book, I recommend Deitel's "C++ How to Program. This is the one I kept referencing throughout University.

I actually enjoyed reading Head First Design Patterns and Joel On Software more, but they came along after I'd learned the basics

Matt
-1: Duiplicate of higher voted insance
Ruben Bartelink
+1  A: 

I found "The art of Prolog" a very good read.

pkoch
+2  A: 

I think I grew up in a different generation than most here....

One of the most influential books I read, was APUE.

Or pretty much anything by W. Richard Stevens.

Dominic Eidson
+1  A: 
ddowns
-1 The way we second around here is by +1ing (and commenting). OK, commenting probably wasnt implemented yet - but I really like this everything about thread except the duplicates
Ruben Bartelink
Duplicate of previous vote
SteveC
A: 

My development odyssey began with the venerable Camel book, followed by Cay Horstmann's and Gary Cornell's excellent Core Java series. In retrospect this was a reasonable start, though far heavier on practice than principles and concepts.

As a few have said, most influential and most influential in the context of beginning a development career may be very different. I didn't appreciate many of the stellar recommendations here such as SICP, Code Complete, Mythical Man Month, the Pragmatic Programmer, and Peopleware until I'd had a few years and a few projects under my belt.

Andy Hunt and Dave Thomas put it best - continually invest in your knowledge portfolio - read a new book every quarter.

Thomas H
+1  A: 

Roger S. Pressman - Software Engineering (A Practitioners Approach). It has got a lot of usefull information.

Gürkan Yeniçeri
+1  A: 

Books are great, on the free time, on vacation, but relevent, up to the minut "save the day" information is from blogs/forums and internet stuff.

I have to respond to this. Clearly for answers to specific questions and probelms, sites like this and the methods described above are obviously the best. For cutting-edge newest technology, the lead time for books obviously is going to leave you no choice but use the internet. And perhaps my age (46) is a bias here.

But one of the things that troubles me greatly has been the decline of Technical Publishing. A lot of tech writers are moving away for it because it doesn't "pay the bills' (Petzold for example) and as I mentioned - there is likely a generational thing (I'll just have to "get-over") I don't like doing extensive reading on a laptop screen...

But I think to truly get a "Deep Understanding" of a broad topic - the effort necessary to write a book allows the writer to focus his or her thoughts in a way that otherwise I don't belief lets the reader truly "Grok" a deep concept.

Yes if you want a "how-to" - a good web post might be more than sufficient. But if I REALLY need to understand something, I want a good book.

Furthermore, when I need to go back to something, I always know where that darn book is on my bookshelf. But how many times have you pulled your hair out trying to find that link you know you say several months ago?

Please everyone here - support tech writers (who derserve it) by BUYING the book!

fuzzbone
Please make recommendation and keep discussions to the forums or comments!
drozzy
+11  A: 

I prefer Stroustrup's The C++ Programming Language (3rd edition) - it's the C++ book. C++ may be out of fashion these days, but this book takes you from the basics to OO to templates (STL) and even covers things like improving compile and link time. I still learn something every time I pick it up, and it's never, ever bad to know C++.

Agreed! I learned C++ directly from Stroustrup (I read it fully cover-to-cover over about 2 months, doing many of the exercises) and I still wonder why people consider it "too hard" and "inaccessable".
Ether
+8  A: 
Kilhoffer
I like this book, but I really wish more books with a central example (this one being a fireworks factory) would choose something a little more practical. Who the heck is writing automation software for fireworks in C#? High-volume financial transaction processing seems like something a lot of folks would be doing in this day and age.
Jesse C. Slicer
+5  A: 
Kilhoffer
Too narrow to be the 1 book every programmer should read
toolbear74
+13  A: 
blowmage
This is most definitely the best programming book I have read. I wish I had had it back when I started uni (1999). I cannot heap enough praise on this book. It opened my mind to what OOP is really about.
Matt Ellen
+1 The object revolution has yet to begin... This and Domain Driven Design by Evans are probably the books you need to get through if you haven't already. These 2 reinforce that design exists in the true 'agile' teams : also tunes you into macro-refactoring opportunities which are seldom published but produce the most bang for invested unit of time.
Gishu
+2  A: 
  • -1 For Code Complete
  • +1 For Pragmatic Programmer
  • +1 For SICP

I don't know if it was because I read the Pragmatic Programmer first, but I thought Code Complete was the biggest book I've ever read that didn't really ever say anything. I mean there is a lot of text there, but no substance in my opinion. You get a lot more out of the 300 pages of the Pragmatic Programmer than you will ever get out of the 800 pages of Code Complete.

I also have to second Structure and Interpretation of Computer Programs. It is definitely is the most influential book on programming that I have ever read.

+4  A: 

Do users ever touch your code? If you're not doing solely back-end work, I recommend About Face: The Essentials of User Interface Design — now in its third edition (linked). I used to think my users were stupid because they didn't "get" my interfaces. I was, of course, wrong. About Face turned me around.

Garth T Kidd
-1: Good book, but Duplicate, see earlier
Ruben Bartelink
-1: dup, and Cooper's "Inmates" is a better start for the subject
toolbear74
+1  A: 

I'd recommend The Dilbert Principle: A Cubicle's-Eye View of Bosses, Meetings, Management Fads & Other Workplace Afflictions for a good cry. Too close to home to be funny though..

Duplicate of previous vote
SteveC
+21  A: 
Henrik Warne
It is a great book, but I personally found it to be a reference book to other books. Every few pages it directs you to a load of other books to read.
mlk
A: 

Not a programming book, but still a very important book every programmer should read:

Orbiting the Giant Hairball by Gordon MacKenzie

busse
+8  A: 

This is a great book for a Java developer new or old:

Effective Java by Joshua Bloch

This was really eye-opening for me as junior developer a few years ago, and it's definitely *the* Java book I'd recommend (others agree: http://stackoverflow.com/questions/75102). But it is sufficiently Java specific that I don't think *every programmer* should necessarily read it.
Jonik
-1: Dup of one higher up
Ruben Bartelink
+3  A: 
mattruma
I had high hopes for this book, but it doesn't do it for me. I think it stating the obvious. It's probably good for those new to programming.
projecktzero
A: 

The Unix Programming Environment by Brian Kernighan and Rob Pike. After reading this I 'got' Unix. I understood the philosophy behind it and everything suddenly started making much more sense.

It's also a brilliant introduction to the Bourne shell and C programming.

dr-jan
-1: duplicate of higerh voted
Ruben Bartelink
A: 

Code Complete has been mentioned numerous times - and is definitely a great book and I agree with Introduction to algorithms. To add one to the list - as a good primer for algorithms - Concrete Mathematics by Knuth - this book explains the underlying math used in higher levels of compsci.

mbowcock
Can you add a pic so others can quickly determine what you're suggesting ass opposed to having to tell it apart from yet anothjer CC me too please?
Ruben Bartelink
+2  A: 

Software Tools by by Brian W. Kernighan and P. J. Plauger

It had a profound influence on how I write software.

Bryan Oakley
+8  A: 

Paradigms of Artificial Intelligence Programming: Case studies in Common Lisp

http://norvig.com/paip.html

+4  A: 
Stephen Marney
Duplicate of http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read/3655162#3655162
Wesley Wiser
+2  A: 

to get advanced in prolog i like these two books:

The Art of Prolog

The Craft of Prolog

really opens the mind for logic programming and recursion schemes.

WaldWolf
+9  A: 
+1  A: 

Here are two I haven't seen mentioned:
I wish I had read "Ruminations on C++" by Koenig and Moo much sooner. That was the book that made OO concepts really click for me.
And I recommend Michael Abrash's "Zen of Code Optimization" for anyone else planning on starting a programming career in the mid 90s.

AShelly
Can you narrow it down to one please?
Ruben Bartelink
+1  A: 

"The World is Flat" by Thomas Friedman.

Excellence in programming demands an investment of mental energy and a dedication to continued learning comparable to the professions of medicine or law. It pays a fraction of what those professions pay, much less the wages paid to the mathematically savvy who head into the finance sector. And wages for constructing code are eroding because it's a profession that is relatively easy for the intelligent and self-disciplined in most economies to enter.

Programming has already eroded to the point of paying less than, say, plumbing. Plumbing can't be "offshored." You don't need to pay $2395 to attend the Professional Plumber's Conference every other year for the privilege of receiving an entirely new set of plumbing technologies that will take you a year to learn.

If you live in North America or Europe, are young, and are smart, programming is not a rational career choice. Businesses that involve programming, absolutely. Study business, know enough about programming to refine your BS detector: brilliant. But dedicating the lion's share of your mental energy to the mastery of libraries, data structures, and algorithms? That only makes sense if programming is something more to you than an economic choice.

If you love programming and for that reason intend to make it your career, then it behooves you to develop a cold-eyed understanding of the forces that are, and will continue, to make it a harder and harder profession in which to make a living. "The World is Flat" won't teach you what to name your variables, but it will immerse you for 6 or 8 hours in economic realities that have already arrived. If you can read it, and not get scared, then go out and buy "Code Complete."

Larry OBrien
A: 
Ben Dempsey
+6  A: 
metadave
ooh that's a good one too, especially since I'm not a Unix programmer. It really gave me a different perspective.
Kevin
Duplicate, see earlier
Ruben Bartelink
+1  A: 

Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp by Peter Norvig

Michiel Borkent
+4  A: 

Code Complete by Steven McConnell 1993 version of Code Complete

I really should buy the updated version!

John Sibly
Code Complete Version 2. It has done a lot for my programming and development standards.
Penguinix
Yes the older version has examples in Ada, C, and Pascal - not so relevant today!
John Sibly
-1: Good book, but Duplicate, see earlier
Ruben Bartelink
+4  A: 

It's not strictly a development book and I believe that I've mentioned it in another answer somewhere but it's a book I really believe all developers should read, from php to Java to assembly developers.

Code

It really brings together what's under the hood in a computer, why memory shouldn't be wasted and some of the more interesting parts of the history of computing. It's an introduction to the computer and what it is. It gave me my ultimate passion for low level programming and helped me understand pointers and memory more than any other computer.

PintSizedCat
-1: Good book, but Duplicate, see earlier
Ruben Bartelink
+1  A: 

Design Patterns: Elements of Reusable Object-Oriented Software, by the GoF

Alexandre Brasil
+2  A: 

Code Complete 2

Design Patterns in C#

Greg Ogle
+1  A: 

Modern C++ Design by Andrei Alexandrescu

Ferruccio
+1  A: 

Code Complete, Second Edition

www.amazon.com

jdmichal
+2  A: 

I think code complete is going to be a hugely popular one for this question, for me it corrected many of my bad habits and re-affirmed my good practices.

Also for my Perl background I really like Perl Best Practices from Damian Conway. Perl can be a nasty language if you don't use style and best practices, which is what I was seeing in the scripts I was reading ( and sometimes writing ) .

I like the Head First Series, they are quite good and easy to read when your are not in the mood for more serious style books.

Brian G
+1  A: 

Code Complete by Steve McConnell

ehymel
+1  A: 

Code Complete followed closely by Head First Design Patterns

Aston
+1  A: 

Writing Solid Code by Steve Maguire.

+18  A: 
Jon
Duplicate of earlier
Ruben Bartelink
dupe of http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read/169051#169051
Pascal Thivent
+12  A: 

There are similar questions here and here.

John B
+8  A: 

Programming Pearls b Jon Benley (both books)

akr
Duplicate (at least one book)
Ruben Bartelink
+10  A: 
Keith Smith
-1: Dup of http://stackoverflow.com/questions/1711/what-is-the-single- most-influential-book-every-programmer-should-read/8942#8942 Can someone edit this pic in there?
Ruben Bartelink
+7  A: 

This is very similar to this question.

mattruma
+1  A: 

"Object-Oriented Analysis and Design with Applications" by Grady Booch. I read this a long time ago and it showed me that there could be a methodology to developing Object Oriented Software. Since then many other books have had an impact on me but this one got me started.

David Dibben
A: 

The Interpretation of Object-Oriented Programming Languages by Ian Craig

Because it showed me how much more there was to OO than standard C++/Java idioms

Garth Gilmour
+2  A: 

Programming Perl (O'Reilly)

A: 

Programming in C - K & R

The book is actually titled "The C Programming Language" as has been mentioned (twice) before in answers to this question.
tialaramex
+1  A: 

Object-Oriented Software Construction by Bertrand Meyer

A: 

Close call: Extreme Programming Explained, Kent Beck, or Refactoring, Martin Fowler.

plindberg
A: 

Another vote here for Head First Design Patterns

Marc Gear
+1  A: 

The Mythical Man-Month here as well. Despite being an old book, a lot of the stuff in there is still true and only new development methods like agile, xp, tdd may change some of this finally. It explains in detail why adding new developers to a late project will make the project even later. It will not improve your coding skills, but after being a developer for a few years, this will open your eyes for sure and explain a lot of the problems you have faced before.

FrankS
A: 

Thinking in Java (Patterns) , Bruce Eckel

paiNie
A: 

Professional Excel Development This book showed how to make high quality applications within one of the most ubiquitous programming platforms available.

+1  A: 

Mine is Test Driven Development by Example

jop
+2  A: 

Lean Software Development by Mary and Tom Poppendieck is definitely one for every developers bookshelf

Saul
+1  A: 

The Pragmatic Programmer

TrickyNixon
+30  A: 
Curro
This book is a real masterpiece.
Ikaso
I don't care how good or elegant your code is. If you don't have tests you might as well have not written the code. This book should be much higher than it is. People talk about writing software that users like (Inmates run the asylum) or really effective code that is of good design and robust (Effective *) but it all really doesn't matter if your software is consistently buggy.
Adam Gent
I think it speaks volumes about our industry that this entry comes so late and with so few votes. Testing is much more important than anything else we do, yet it's the first thing that get's neglected.
Aaron Digulla
A: 

Programming Perl by Larry Wall

+3  A: 

Modern c++ Design.

by Andrei Alexandrescu

ugasoft
I thought I knew C++ until I read this book. Really opened my eyes to what template meta-programming can do.
Ferruccio
-1: Good book, but Duplicate, see earlier
Ruben Bartelink
+1  A: 

Cocoa Programming for Mac OS X by Aaron Hillegass

Jonathan
Wonderful book. Runs through all the basics that a beginning Cocoa programmer on the Mac or iPhone/iPad will need to know.Very readable, with lots of examples. A winner!
Jonathan Watmough
+1  A: 

It's a toss up between Head First Design Patterns, for many of the reasons cited above, and Perl Testing: A Developer's Notebook, which should be one of the bibles for any Perl programmer wanting to write maintainable code.

Penfold
+4  A: 

Effective C++ and More Effective C++ by Scott Myers.

Jay
-1: Good book, but Duplicate, see earlier
Ruben Bartelink
A: 

The Pragmatic Programmer, probably.

Steven Rogers
+1  A: 

This will probably date me, but the "dragon book" on compilers. It was from the depths of groking that book that I started my first real project, and launched my career.

skamradt
Definitely a good one. My favorite course in CS in college was the compilers class, and we used that book. I can't imagine anyone using lex or, especially, yacc (flex/bison, get off my lawn) without that book.
smcameron
-1, dupe.` `` `
Ether
+5  A: 

Pragmatic Unit Testing in C# with NUnit by by Andy Hunt and Dave Thomas with Matt Hargett. It made me really understand unit testing and that affects my code in so many ways. It pushed me towards becoming better at understanding Object Orientation.

Microserf
+1, not a bad book. A bit out of date though - barely mentions RhinoMocks and Moq didnt exist. Really could do with an update. I think xUnit Test Patterns (for accuracy and completeness) + Osherove (for opinions with some very debatable stuff that det=finitely makes you think and teaches things)
Ruben Bartelink
Too narrow to be the one book every programmer should read
toolbear74
+2  A: 

This one started me off into true OOA&D.

Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development - Craig Larman

These would be up there as well:

  • Patterns in Enterprise Application Architecture - Fowler
  • Domain-Driven Design - Eric Evans
One will be fine, hopefully not a dup. Which one?
Ruben Bartelink
A: 

PHP objects, patterns and practice. http://www.apress.com/book/view/9781590599099

A: 

McConnell's Code Commplete Zeldman's Designing With Web Standards

A: 

'How to be a Programmer: A Short, Comprehensive, and Personal Summary' by Robert L Read

Not exactly a book but an essay, but this one was definitely an inspiration for me when I got into coding. Loved the notion of entering a tribe. Worth a read.

Bjoern
+1  A: 

Development books:

  • K&R, naturally
  • Apple Machine Language (for the Apple II/IIe)
  • the Macintosh Programming reference library (MacOS 6-8)
  • *NIX Network Programming/Advanced *NIX Programming
  • TCP/IP Illustrated vol 1-3
  • The early O'Reilly library (early-mid '90s)

Non-development:

  • Wargames
+1  A: 

Win32 Programming by Charles Petzold

Bharani
+3  A: 

Rapid Development by McConnell

MattH
-1 Good book, but dup of http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read/13281#13281 (even if it rambles, it has critical mass)
Ruben Bartelink
A: 

Code Complete

A: 

Second for Domain Driven Design
Second for Design Patterns: Elements of Reusable Object-Oriented Software, by the GoF

ARKBAN
+2  A: 

I suppose we could ask the same top rated question every couple of weeks and upmod all those who mention code complete or The Pragmatic Programmer.

Not that there is anythng wrong with it :-)

Pat
+1  A: 

The Career Programmer: Guerilla Tactics for an Imperfect World by Christopher Duncan

Daniel Fisher lennybacon
A: 

Head First Design Patterns. Still love it

Robse
+10  A: 

About Face - The Essentials of Interaction Design (now in third edition)

This book opened my eyes to a very different viewpoint of development, focused on the interactions of the end user. It also helped me realize that creating great software is about more than just patterns and architecture, it's about helping people achieve their goals.

JeremyDWill
Cooper's "Inmates" is a better first read. This is a good follow on if the subject interests you.
toolbear74
A: 

In terms of income - Petzold's Programming Win95
In terms of career - Pragmatic Programmer

stephbu
+2  A: 

"The Design and Evolution of C++" by Bjarne Stroustrup

Besides giving much background on C++, it is also a lengthy study on the trade-offs and design concerns involved in a large scale program.

BN.com

James Curran
A: 

Code Complete by Steve McConnell

Kevin
+1  A: 

The Little Schemer. I've never learned as much about programming than from this book. Teaches you how to solve a problem by decomposing the problem into a step and recursively applying it.

+2  A: 

Programing Pearls by Jon Bentley, a collection of essays that originally appeared Communications of the ACM

Robert Gatliff
Yes! Other books come and go, but this one stays on my bookshelf.
Barry Brown
Duplicate of higher up
Ruben Bartelink
+11  A: 

Kernighan and Richie's "The C Programming Language" - The only C book you'll ever need.

Mr. Matt
the second edition (above) is better, and you will probably need it because a lot of modern software is written for C89 if not C99.
tialaramex
but the first edition is the one that open up the possibilities, which is what the question was about
Steven A. Lowe
http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read/34526#34526 is the only copy of this post we need
Ruben Bartelink
A: 

Mine was The C Programming Language--the original "K&R" book. What fierce simplicity!

Very recently, I'm getting a lot out of Kent Beck's work.

catfood
+1  A: 

Learning C# 2005, by Jesse Liberty & Brian MacDonald (O'Reilly).

ISBN 10: 0-596-10209-7.

When I first made the jump from ASP classic procedural code to object-oriented C# code in VS2005, this book set me on the right path.

Kelly Adams
A: 

C++ How to Program, was very good for me as my first programing book.

Peter GA.
+3  A: 

While not strictly a software development book, I would highly recommend that Don't Make me Think! be considered in this list.

Craig Hyatt
A: 
  • Code Complete
  • Pragmatic Programmer
  • Refactoring by Martin Fowler
  • Mythical Man Month
renil
A: 

Two: Programming Perl by Larry Wall and Agile Web Development with Rails, by Dave Thomas and DHH

I got complex data structures reading the section on Hash of Hashes in the "camel book", and finally saw MVC as something useful with Rails, learned by reading the Rails book.

A: 

I enjoy the "blog Book" -- The Best Software Writing - by Joel Spoksky

dezwald
A: 

I'm going to cheat and answer with a short list:

  1. The C Programming Language, 1ed (Kernigan & Ritchie)
  2. Large Scale C++ Design (Lakos)
  3. Mr Bunny's Guide to ActiveX (Egremont III)
Seb Rose
+2  A: 

The Pragmatic Programmer...less about the technical details that Code Complete covers well, and more about thinking at a higher level about programming.

PP and CC, and the Mythical Man-Month should be on everyone's shelves. But they should read them before they put them on the shelf. Just saying.

-1 duplicate of higher up
Ruben Bartelink
+1  A: 

Software Tools by Brian W. Kernighan and P. J. Plauger by a wide margin had the most effect on me.

Bryan Oakley
+31  A: 
First half of this book was great, the last half kinda devolved into crap.
TM
+11  A: 

The Art of Computer Programming vol I, by D. Knuth

Fabio Ceconello
I think that the other books of the series are much underappreciated. They might be hard to read but worth a look.
akr
I agree! If you can, for sure it's worth it to read all. I've read Vols I and III, recently bought II (still pending for reading). I mentioned the Vol.I because I consider it "the essential". The other books, although as valuable, have a slightly narrower field. In an ideal world, Vol I should be in any CompSci/CompEng undergrad course, the others should be in any grad course.
Fabio Ceconello
I like the third edition.
Seen http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read/1729#1729 ?
Ruben Bartelink
+1  A: 

Inside the C++ Object Model by Stan Lippman. It made C++ finally "click" for me, before it was all "magic". This book gave me a different frame of mind when approaching a new programming language.

guardi
A: 

Practical C Programming by Steve Oualline, if for no other reason than that it was the first programming book that I read cover to cover, then started over with again. I might've gotten into programming eventually anyway, but it definitely kickstarted what has since become a life long interest, matter of study and career.

Hank
+1  A: 

Literate Programming by Donald Knuth, it's a great book on code structure.

A: 
Craig Trader
+2  A: 

Working effectively with legacy code

and

Refactoring to Patterns

jacko
+1  A: 

Object-Oriented Software Construction by Bertrand Meyer

I found this book very useful in my early days - it introduced me to the art and science of of large scale framework design. Whatever happened to Eiffel?
Andrew Matthews
A: 

The user's manual for Robert Uiterwyk's BASIC for the SWTPC 6800. This was in high school in 1976. (You youngsters have no idea...)

http://www.swtpc.com/mholley/BASIC_2/Uiterwyk.htm

DarenW
+1  A: 

Expert C Programming: Deep C Secrets by Peter Van Der Linden

R Caloca
A: 

None! Books are old school, most info on the web is more current and relevant.

EvilEddie
*herp* ... *derp*
Urda
A: 

For learning how to program: The C Programming Language by Kernigahan and Ritchie although that probably has more to do with my age. For changing my worldview with respect to developing software: Agile Software Development by Alistair Cockburn and Extreme Programming Explained by Kent Beck. More recently books on Test Driven Development.

tvanfosson
+1  A: 

Working Effectively with Legacy Code by Feathers

I actually ordered this book one afternoon because I saw it laying in the back seat of someone's car in the parking lot at lunch. The title grabbed me because I was, at the time, trying to figure out how to deal with making a lot of small modifications to a huge code base that had been developed a decade ago and "tweaked" numerous times by people long gone since then. "Working effectively with legacy code" seemed like exactly what I needed to figure out how to do...

The book didn't disappoint.

A: 

The Pragmatic Programmer is the best book I've read in years. I've read most of the other books mentioned in the answers here, but The PP (hereafter) steps back from specific languages and technologies, and focuses on practices that will make you more effective, regardless of technologies you're using now, or may encounter later on.

In that sense it's similar to (say) Design Patterns, in that it's agnostic with respect to your language etc. However it goes further into software development practices and looks at how you should be designing / writing / testing etc. I reference and recommend it in conversations with every client I deal with.

Brian Agnew
A: 

I hate to be a suck-up, but I'm new to this profession and for me the most influential book so far has been More Joel on Software.

Tommy Herbert
+9  A: 
alumb
A: 
  • Expert C Programming : Deep C Secrets - amazon
  • The C Programming Language - amazon
  • The C Puzzle Book - amazon
Drew Frezell
+2  A: 

Extreme Programming by Kent Beck

thvo
A: 

Refactoring, Chapter 3. This will teach an intermediate/advanced programmer more about OOD than any other source I've seen.

Design patterns is good for a beginner, but by the time you are intermediate/advanced, you should be using these all anyway--so I always thought the best thing about the design patterns book was providing names so that we could discuss the things we already did.

Bill K
A: 

Code Complete Second Edition. Hands down opened my eyes to how development should go.

A: 

A collection it was, and stunning. Edsger Dijkstra's (with some help from C.A.R. Hoare) little black book Structured Programming and particlarly the essay titled "On Our Inability To Do Much".

A: 

My high school math teacher lent me a copy of http://www.amazon.com/Are-Your-Lights-Figure-Problem/dp/0932633161 that I have re-read many times. It has been invaluable, as a developer, and in life generally.

Buzz
A: 

It is not a book, seriously it was a blog www.codinghorror.com that introduced me to the world of good book and ideas

Azlam
+1  A: 

As with others, yes, Code Complete, Bertrand Myers, and so on, are part of my SW dev foundation today. but way back the very first programming "book" was more of a booklet on the Intel 8008. Mail ordered from an ad in an electronics magazine. This had all the opcodes, programmer's model of the chip architecture, etc. No guidance on structuring code, commenting, compiling or linking, algorithms or any of that high level stuff! Now, in my career, i have a deep understanding of register-level programming, bits, pixels, interrupt handlers and all that, but am relatively an idiot at databases, networks, GUI apps, large business systems.

An interesting follow up question: has the way you started in programming been a benefit or hindrance to your career and an influence today, or was it so long ago it doesn't matter? What books helped you expand beyond your initial skills into broad new areas?

DarenW
+2  A: 

The question is, "What book really made an impact of how you work as a developer?" Without any doubt, Programming Windows with MFC, by Jeff Prosise, is the book that had the greatest impact on HOW I work as a developer. It did not teach me the fundamentals of "programming" but it opened the world of Windows platform development to me and many thousands of other developers.

I had written a little Windows code previously in the "Petzold style" before MFC was developed. I quickly decided the Windows platform we just not worth the trouble as a developer. When Prosise came out with his MFC book, I realized (along with thousands of other non-Windows programmers) that I could create an easy to use interface that users would not just understand, but actually enjoy using. I devoured the book, making so many notes in it and turning down so many corners, I eventually bought a second copy.

Prosise, Jeff. Programming Windows with MFC 2nd Ed. Microsoft Press 1999 ISBN: 1-57231-695-0

TMarshall
+1  A: 

Most impact? K&R C second edition when I read it at college. It's effectively what started my career.

Steve Lacey
+1  A: 

The Productive Programmer by Ford

I'm not quite through this one yet, but I'm already thrilled by some of the tips/tricks I've picked up to become more...well...productive.

Sure, there's plenty of the stuff we all already know (use the keyboard shortcuts, DRY, etc). But there's plenty of new stuff to go with it. And careful readers will quickly start to see how things can be combined for even greater effect.

+1  A: 

Object Oriented Analysis and Design - by Grady Booch

Vaibhav
A: 

One of Andre La Mothe's game programming books from the mid 90's got me hooked to programming. I don't remember the original English name of the book.

A: 

The C++ Series of programming books by Deitel and Deitel

Joe Morgan
A: 

"Thinking in C++" by Bruce Eckel

DavidGR
+2  A: 

Domain Driven Design by Eric Evans

Mark Holtman
A: 

Managing Gigabytes is an instant classic for thinking about the heavy lifting of information.

Joe Liversedge
A: 

C# for Experienced Programmers

or really anything from Dietel & Dietel. I have read several of their books, and everything has been awesome.

A: 

Years ago, Bruce Eckel's Thinking in C++ taught me a great deal about C++ but also the importance of isolating an issue to a small 'sandbox' for study/analysis. This technique has greatly impacted my career and routinely helps me troubleshoot problems both for myself and others.

These days, I refer to Thinking in Java, which is written in the same style. Somehow, the style is beyond mere, simple 'examples' and profoundly gets at the heart of the issue.

I am so grateful that I will buy virtually anything by Eckel, sight unseen.

Michael Easter
A: 

Design Patterns: Elements of Reusable Object-Oriented Software AKA the Gang of Four book!

+1  A: 
Justise
+1  A: 

The Mythical Man-Month required reading for any developer. The very fact it is as old as it is and still relevant makes it necessary reading.

StubbornMule
Duplicate of higher up
Ruben Bartelink
+1  A: 

Actually the book that had a biggest influence on me is often not liked by the programmers: I am talking about Cooper's "Inmates are running the asylum". However this book forever changed the way I look and think about the things I am building.

Rimantas
I couldn't agree more. This changed the way I approach my job!
Stuart Helwig
Duplicate of higher up
Ruben Bartelink
A: 

When I first started, there was "Mastering Turbo Pascal" by Tom Swan. There is nothing terribly profound about this book. It was clear and concise with usable examples. Based on this knowledge, I spawned a software development career now 15+ years in.

EmmEff
A: 

C++ BlackBook. KISS all the way through

+1  A: 

GOF Design Patterns Fowler's Refactoring

John Flinchbaugh
A: 

So far it would be Joel on Software as it has guided me here (by finding his blog) and found many more good books to read.

Tanj
A: 

Donald Norman, 'The Design of Everyday Things'

Not about programming, per se, but about how things in the world should work -- kind of the psychology of usability.

It's been invaluable for me in designing both end-user interfaces and APIs.

Nate
A: 

Mastering C++ from Tom Swan. It was the best kind of book, it had examples which were simple enough to teach concepts but useful enough to solve other problems. It was very readable, it was the first book I read when got to college, and it only needed to be read once.

Zartog
A: 

code complete

A: 

Tenenbaum's first operating systems book. My first look at kernal level programming.

A: 

The pragmatic programmer and Code Complete had the most impacts on my career

+2  A: 

CLR via C#, by Jeffrey Richter

Drakiula
A: 

"Algorithms in C" (1st edition) by Sedgewick taught me all about algorithms as well as teaching me all about the pitfalls of documentation and copy/pasting code as all the example code in this version was taken from the "Algorithms in Pascal" version and were simply passed through a simple code translator which did not adjust for the different indexing schemes.

Joe Corkery
+1  A: 

Kernighan & Ritchie's "The C Programming Language"

Craig Fisher
A: 

Head First Design Patterns and Code Complete

Lucas
A: 

My all-time favorite was the C# Back Book, by Matthew Telles.

Ryan Skarin
A: 

Most of the books listed here are rather old, for example: The Mythical Man-Month (1995) Code Complete (1993) Effective C++ by Scott Meyers (1998)

Isn't there any recent classic out there, let's say from 2007-2008 ?

There may be classics written that recently, but it is hard to tell a classic is classic until it has aged awhile.
Shannon Severance
A: 

Dreaming in Code Has probably had the most profound impact in the last 6 months.

A: 

"The C++ Programming Language" by Bjarne Stroustrup

Roskoto
+3  A: 

Coder to Developer, by Mike Gunderloy.

Scott A. Lawrence
A: 

Head First Design Patterns here too

A: 

Head First Design Patterns +1

eriklane
A: 

Actually, two books stand out. The first was Code Complete. Despite its age, this is still a very useful book, and the chapter on the dangers of premature optimisation is worth the price of the book on its own.

The second one was The Psychology of Everyday Things (now called The Design of Everyday Things, I think), which changed the way I think about user interfaces when designing applications. It made me more user-focused.

Bob Moore
A: 

Amiga ROM Kernel Manuals :)

tkrehbiel
A: 

Code Complete 2

artur02
+1  A: 

As a C++ programmer I liked Scott Meyer's but, despite of lesser production value of presented solutions, much bigger impact made "Modern C++ Design" by Andrei Alexandrescu. Very good book.

As a theoretical cs hobbyist the most important for me were Don Knuth's books, especially Concrete Mathematics, which showed me a wide range of interesting tricks.

Few days ago I finished reading Beautfiful Code (Andy Oram & Greg Wilson) and I found many interesting ideas there.

I looked in the bookstore at Head First series, metioned by posters before me and didn't like the series at all. I don't know why. The best book about patterns is, in my opinion, Design Patterns by the Gang of Four.

rawicki
+1  A: 

The Art of Computer Programming by Donald Knuth.

I had to read this at University and I bitched and moaned, like everyone else. But by the end of the course I praised the book, simply for the fact that it shows you why you can't create inefficient loops (conditionals, etc) in code.

On the lighter side, The Pragmatic Programmer is a close runner-up.

typicalrunt
A: 

Code Complete. I realize I am the 900th person to say it, but it deserves the statement.

Additionally, The Art of Computer Programming might be a close second for me personally.

phreakre
+1  A: 

The Practice of Programming

Giao
+2  A: 

Programming Pearls by Jon Bentley

There is nothing like writing your own quicksort implementation to get you thinking about datastructures and algorithms.

Joe Skora
+1  A: 

The Art of Computer Programming, by Donald Knuth, especially volumes I and II. (Oops, is that two books?)

xpda
A: 

Inside the c++ object model by Stanley Lippman http://www.amazon.com/Inside-Object-Model-Stanley-Lippman/dp/0201834545

gt124
A: 

Read the faq: Avoid asking questions that are subjective

+32  A: 
Lck
It's worth the cover price for Chapter 3 (Typelists) alone. This book gave me surreal spooky dreams and changed the way I approached programming in all languages, not just C++. IMHO it's more influential on structure and design than "Design Patterns".
Ether
This book shows how effective tinkering within a well-known beast of a compiler can yield unexpected results. It teaches to see things beyond the intended design. Very cool, simply mind-bending!
GregC
A: 

How to think like a computer scientist: learning with python

May not be the most advanced book on the world but it made me understand programming concepts that I couldn't, especially object oriented topics.

Gustavo Rubio
+1  A: 

This might not count as a "development book" but I have to throw it in anyway: Hackers by Stephen Levy. I found that it spoke to the emotional side of programming.

wykyd
A: 

"Writing Solid Code: Microsoft's Techniques for Developing Bug-Free C Programs (Microsoft Programming Series)" by Steve MacGuire.

Interesting what a large proportion the books mentioned here are C/C++ books.

A: 

For me "Memory as a programming concept in C and C++" really opened my eyes to how memory management really works. If you're a C or C++ developer I consider it a must read. You will defiantly learn something or remember things you might have forgotten along the way.

http://www.amazon.com/Memory-Programming-Concept-C/dp/0521520436

+1  A: 

Code by Charles Petzold. I don't have a traditional CS background, so its a great book for helping people like me understand the machine and what goes on under all those layers of abstraction.

Don
Duplicate of higher up
Ruben Bartelink
A: 

Effective Java by Joshua Bloch

Craig
+111  A: 
mike511
it's a really cool book. Richard Feynman is a character :D
Alex Baranosky
Yes, I also really like this book. Great stories in there. Not really programming related, though.
Peter Stuifzand
I love Feynman. Hilarious fellow.
wesgarrison
Read the connection machine stories.
Stephen
Great person, great phsysician, great book (read it while studying physics) though does it answer the question?
Sunscreen
+100, excellent book
Alex
I recently read this book and I now love it. Really fun and refrshing read.
Dan
Yes, it's a great book by Feinman. There is a chapter where Feynman is put in charge of the department that runs the computers (pre transistor machines), and how they worked to solve computational difficulties (one machine per operation). That was fun. Other then that it's really inspirational to read about how Feynman approaches everything that he does. It's amazing how he keeps things simple at such lofty heights.
HaskellElephant
What a great man! Really good book
Raynos
A: 

Fowlers Patterns of Enterprise Application Architecture. Code Complete was a good read but it simply confirmed my thought and practices rather than taught me a lot new material. It's a great book to give someone who needs a clue.

rob_g
+5  A: 
Jonathan Barbero
I wonder why it is rated so low?!?
Peter Parker
I don't know. This books are the bible =) .
Jonathan Barbero
Maybe because it is already mentioned? http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read/1729#1729
Vanuan
But I did it before =D
Jonathan Barbero
@Jonathan: Sometimes life is like that. I've spent ages in this question because its an important question. It would be useful for all posts that are dups of ones that have been massively outvoted to just be deleted. Sometimes you have to take one for the team. (But I appreciate its no fun being the victim of voters who dont take care to vote the first instance to discourage this)
Ruben Bartelink
+8  A: 

I'm really surprised that nobody has mentioned Advanced Programming in the UNIX Environment by W. Richard Stevens. It's not necessarily the book that had the most impact on me, but it definitely deserves a place among many of the other greats mentioned here.

Even though I mostly did (and do) Perl programming, reading this book really helped me understand more about what's going on under the hood. It covers a ton of really critical low-level concepts like File IO, system files (passwd, group, etc), process control, signals, and so on.

Having some idea of how this stuff works at the C level is very useful, even if you never write any C code, because every language you use (on a Unix system) is using these APIs under the hood.

Dave Rolsky
i absolutely agree with you. his networking book is also fantastic...
+2  A: 

Separately, I'd mention The Third Manifesto by Hugh Darwen and CJ Date. If you're interested in understanding data (which seems uncommon among programmers) this book is a must-read. It will also make you sad when you realize just how badly broken SQL is, but it'll also help you cope with that brokenness. Knowing how a tool is broken lets you design with those deficits in mind.

Dave Rolsky
+2  A: 

Test Driven Development

Jonik
-1 Duplicate, assuming you mean beck tdd by eg
Ruben Bartelink
+1  A: 

Agile Software Development with Scrum by Ken Schwaber and Mike Beedle.

I used this book as the starting point to understanding Agile development.

A: 

Thinking forth

http://thinking-forth.sourceforge.net/

Flinkman
A: 

The Pragmatic programmer was pretty good. However one that really made an impact when I was starting out was :

Windows 95 System Programming Secrets"

I know - it sounds and looks a bit cheesy on the outside and has probably dated a bit - but this was an awesome explanation of the internals of Win95 based on the Authors (Matt Pietrek) investigations using his own own tools - the code for which came with the book. Bear in mind this was before the whole open source thing and Microsoft was still pretty cagey about releasing documentation of internals - let alone source. There was some quote in there like "If you are working through some problem and hit some sticking point then you need to stop and really look deeply into that piece and really understand how it works". I've found this to be pretty good advice - particularly these days when you often have the source for a library and can go take a look. Its also inspired me to enjoy diving into the internals of how systems work, something that has proven invaluable over the course of my career.

Oh and I'd also throw in effective .net - great internals explanation of .Net from Don Box.

Ian
A: 

SAP ABAP programming? "Teach Yourself ABAP in 21 Days" is the best book!

It contains no clever tricks or wizardry, but after 3 years, I never came upon a more comprehensive book

+1  A: 

Structure and Interpretation of Computer Programs

A: 

Schaum's Outline of Programming with C++ by John R Hubbard.

This was the first programming book I read, when I started out with C++. It was gifted to me by someone who saw my interest in programming. The book is very good for beginners - it started from the elementary concepts, went up to templates and vectors. The examples given were pretty relevant. The book made you ponder and ask more questions, and try out things for yourself.

A: 

Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans

cvs
+1  A: 

Many of the books listed could fit the bill. If restricted to one, I'd probably pick "UNIX Programming Environment" by Kernighan and Pike as THE most influential, though "Software Tools" and "The Elements of Programming Style" were also extremely influential on me when I started, a long time ago (80s). Slightly more recent influences would include "The C Programming Language" and both "Code Complete" and "Writing Solid Code" (90s). Current influences (00s) would include - not in order:

  • The Art of Unix Programming
  • Test-Driven Programming
  • Refactoring
  • Pragmatic Programmer
  • The Practice of Programming
  • Working Effectively with Legacy Code
Jonathan Leffler
+2  A: 
Great title.
MusiGenesis
A: 

Code Complete because it was about the things that are most relevant when writing good code. It got an extra bonus when I realized none of those things was ever mentioned by my CS professors

Kiranu
+1  A: 
Rob
+2  A: 

Martin Fowler's Refactoring: Improving the Design of Existing Code has already been listed. But I will detail why it has impacted me.

The essence of the whole book is about structuring code so that it is simpler to read and understand by humans. It teaches me strongly that the code that I write is meant for my colleagues and successors to consume and possibly learn something good out of it. It inspires me to consciously program in a manner that leaves people praising my name, and not cursing me to damnation for all eternity.

icelava
+1  A: 

Turbo Pascal 7! "I can make the computer do things?!?!?!"

Symbioxys
A: 
1) Programming .Net Components by Juval- "i am able to build a software architecture that has been used by the company since 2004 until now."
2) Code Complete - "its like looking into mirror every time i read it." 
3) Coder to Developer by Mike Gunderloy 
4) Joel on Software 
Joel Nat
+1  A: 

Not to mention books that have already been mentioned MANY times, one of the best books on what NOT to do is AntiPatterns (Refactoring Software, Architectures and Projects in Crisis) from Wiley.

AviD
+2  A: 

Another book that has not been mentioned yet, and SHOULD be required reading for EVERY programmer, newbies on up to gurus, in ANY programming language, is Michael Howard's Writing Secure Code (2nd Edition) from MSPress.

AviD
A: 

The first book that made a real impact on me was Mastering Turbo Assembler by Tom Swan.

Other books that have had an impact was Just For Fun by Linus Torvalds and David Diamond and of course The Pragmatic Programmer by Andrew Hunt and David Thomas.

Jonas Gulle
+1  A: 

Thinking in Java - I'm a .net developer now :-)

+1  A: 

As so many people have listed Head First Design Patterns, which I agree is a very good book, I would like to see if so many people aware of a title called Design Patterns Explained: A New Perspective on Object-Oriented Design.

This title deals with design patterns excellently. The first half of the book is very accessible and the remaining chapters require only a firm grasp of the content already covered The reason I feel the second half of the book is less accessible is that it covers patterns that I, as a young developer admittedly lacking in experience, have not used much.

This title also introduces the concept behind design patterns, covering Christopher Alexander's initial work in architecture to the GoF first implementing documenting patterns in SmallTalk.

I think that anyone who enjoyed Head First Design Patterns but still finds the GoF very dry, should look into Design Patterns Explained as a much more readable (although not quite as comprehensive) alternative.

+1  A: 

Craig Larman's Applying UML and Patterns. While the Gang of Four book Design Patterns is very instructive, I found that I didn't "get" how to use design patterns until I ran across Larman's book in a programming class.

A: 

Without a doubt GoF's Design Patterns mainly due to the fact that I discovered that I had in fact chosen to solve particular problems using two of the patterns mentioned without knowing about the patterns before.

Peter Hoeg
A: 

WROX - Beginning ASP

I read it from and did all of the exercises in one week and taught myself programming. This was how I got into coding.

Scott and the Dev Team
A: 

"Basic für Kleincomputer", Robotron Verlag

EricSchaefer
A: 

Tom Swan's books.

Mladen Mihajlovic
A: 

Advanced MS-DOS by Ray Duncan.

A: 

Probably "C for Dummies" vol 1, back in 1997 or so. Just an introduction really, but it was a good read after having picked up the taste for programming in GFA Basic on the Atari ST. The Coronado C tutorial around the same time helped too.

Desty
+1  A: 

for low level entertainment i would suggest Michael Abrash's
i) -Zen of Code Optimization- and
ii) -Graphics Programming Black Book-
even if you dont do any graphics programming.

gio
+1  A: 

"Head First Design Patterns" helped me to understand objects oriented programming.

This book has opened my mind :-) I've tried GoF first.I was discouraged...

But now, GoF is my next step.

Code Complete 2nd edition is very good too.

Luc M
A: 

Michael Abrash The Zen of Assembly Language

dwelch
A: 

Applying UML and Design Patterns.

It helped design patterns to click with me, and provided a justification for UML that made sense to me in the phrasing 'UML as Sketch'. Namely that UML should be used as a brief sketch of the system that has the additional benefit of you not having to explain the notation to others (they either already know UML or you give them a UML book to read)

workmad3
+1  A: 

If you are doing anything in Unix/Linux/MacOS etc, you must read Advanced Programming in the Unix Environment (also known by the acronym APUE), by the late W Richard Stevens. If you don't know how file descriptors work or what sessions are, or all the things you should do when you daemonize yourself (admit it, you don't), then this book will tell you.

You'll feel amatuerish for a bit afterwards, but if you want to consider yourself a professional programmer (in any language) in the Unix environment you need to read this.

Lot105
-1 Duplicate of higher voted one?
Ruben Bartelink
+1  A: 

If you are doing anything in Unix/Linux/MacOS etc, you must read Advanced Programming in the Unix Environment (also known by the acronym APUE), by the late W Richard Stevens. If you don't know how file descriptors work or what sessions are, or all the things you should do when you daemonize yourself (admit it, you don't), then this book will tell you.

You'll feel amatuerish for a bit afterwards, but if you want to consider yourself a professional programmer (in any language) in the Unix environment you need to read this.

Lot105
A: 

There isn't a single book I can pinpoint as more influential than the rest. A lot of the books that I would consider as influential to my current knowledge also wouldn't have made sense to me when I started programming.

workmad3
A: 

Keep in mind that I'm not a designer, but Tom Peter's "design" has really stuck with me. While it doesn't deal with coding, or development per se, the book is a fantastic read for anyone in the development field.

rkalajian
+1  A: 

Zen and art of Motorcycle Maintainence

Undoubtedly.

Vardhan Varma
A: 

I would say that "Beyond Code - Learn to Distinguish Yourself in 9 Simple Steps" is quite a good and motivational book. I doesn't cover technical issues, but it describes ways of working with people, being professional, ... For me, this is a book you can read again and again if you are in need of some pep talk. Besides that, it is cheap and very easy and enjoyable to read in 3 to 4 hours.

There is a little review over at my blog: http://www.herrodius.com/blog/54

Christophe Herreman
+1  A: 

Whether you are coding in Smalltalk or not Smalltalk Best Practice Patterns is a great read. Full of small observations that will change the way you code; for the better.

A: 

Scrum and XP from the Trenches

Arne Evertsson
+1  A: 

Even though I had been programming rofessionally for years, Rocky Lhotka's "Business Objects" series about his CSLA framework was the book that opened my eyes.

His ideas he got me excited about software development patterns and theory again. It set me on the path of a new interest in learning how to be a better developer, and not just learning about the latest gee-whiz control or library. (Don't get me wrong, I still love a good technical book too - you gotta keep up!)

Doug L.
+1  A: 
Doug L.
I think I still have a copy of that! ;)
TrueWill
A: 

recommended for Windows Programmer, Programming Windows

A: 

I am surprised there is no mention yet of this book: "Starting Forth", by Leo Brodie. After all Forth, being a stack-based language, should fit the audience on this site...

Admittedly, Forth is a weird language and not very popular these days. But this book is a joy to read. And it has cartoons! The book, as well as Brodie's other book, "Thinking Forth", are both available free on the web.

[http://home.iae.nl/users/mhx/sf.html][1] [http://thinking-forth.sourceforge.net/][2]

[1]: "Starting Forth" home page [2]: "Thinking Forth" home page

A: 

As a self taught programmer without any formal college classes, Code Complete (Vols. 1 and 2) and Rapid Development both made me think about the software development process in new ways. They solidified some ideas I had learned by trail and error, and provided new insights.

Steve MConnell's writing style is one of the most entertaining out there when it comes to programming books.

Code Addict
+4  A: 
Krirk
I totally agree. Deitel's approach in learning a programming language is amazing. I consider Java How to Program as my programming bible!
HH
+1  A: 
CR
+43  A: 
J.F. Sebastian
I heard someone talking about this book on NPR: "When it comes to 'shall' and 'will,' Strunk and White gives the following example: 'A swimmer in distress cries, "I *shall* drown; no one *will* save me!" But a suicide says, "I *will* drown; no one *shall* save me!" And I say, "You two pedantic know-it-alls deserve to drown."'"
Beska
+1 Ha! So many parallels between good coding and good writing.
Dave Sims
@Beska: In the spirit of pedantry, you should use single quotes on the inner quote of a quoted quote. ;)
Geoff
A good reference on the problems with "The elements of Style" is http://itre.cis.upenn.edu/~myl/languagelog/archives/001604.html
Zayenz
Read this after reading "Coders at Work"; it was the seemingly universal item on the every interviewee's recommended reading list.
devgeezer
A: 

My job went to India

+1  A: 

Anything by Edward Tufte: The Visual Display of Quantitative Information; Envisioning Information; Visual Explanations

Geoff Snowman
+1  A: 

The Pragmatic Programmer

And its best advice is to invest in your own knowledge by reading more books :-)

spilth
This might be a duplicate
Ruben Bartelink
+1  A: 

"clean code" by uncle bob is pretty good: http://books.slashdot.org/article.pl?sid=08/09/23/2243216&amp;from=rss

Duplicate of igher voted
Ruben Bartelink
+86  A: 

Surprised that no one has mentioned Martin Fowler's Patterns of Enterprise Application Architecture yet

alt text

levi rosol
+1: You could just read anything by fowler and come out winning.
SnOrfus
+1 This is one of the easiest software/programming books I've ever read
Leigh Shayler
+1 The influence of this book on current practice is staggering.
Dave Sims
+1  A: 

One of the best books on what NOT to do is AntiPatterns (Refactoring Software, Architectures and Projects in Crisis) from Wiley.

AviD
+4  A: 
AviD
Please provide link and image?
Ether
Sure thing - added link and pic.
AviD
@AviD: Can you unmangle it again please :P (I +1's so I get to whine!)
Ruben Bartelink
@Ruben, unmangle what? :)
AviD
@AviD: The picture was broken, IIRC (I dont!). Its good now.
Ruben Bartelink
+32  A: 
John Nilsson
I cannot recommend this book highly enough. Every programmer who's ever written a GUI should have it on their shelf.
abeger
+2  A: 

George Polya's "How To Solve It"

It might seem dry, overly mathematical, and antiquated, but there are few better books on learning how to break a seemingly formidable problem into workable sub-problems and how to learn from previous problems.

pookleblinky
+1  A: 

Facts and Fallacies of Software Engineering by Robert L. Glass is a really excellent book. I had been a professional hacker for almost 10 years before I read it, and a I still learned a ton of stuff.

Ben Godfrey
-1: Dup of higher voted
Ruben Bartelink
A: 

The key word in the question is "career". Read "How to Win Friends and Influence People". Nothing I've read made me even close to as much money and advanced my career as much as that book.

To have a successful career, you will need to interact well with other people. You've probably been exposed to dozens of technical books in college. But how much did you study how to get along with your coworkers, bosses, customers, etc. in college? "How to Win Friends and Influence People" gives you a blueprint for that. Your career will be much much more successful and smoother.

I was so astonished by this book, that I've given away about 30 copies of it. Not a single person has failed to be impressed by it.

-1 Duplicate of higher voted
Ruben Bartelink
+2  A: 
Tarski
+1  A: 
the0ther
or read it online for free here http://catb.org/esr/writings/taoup/html/
Chris Huang-Leaver
-1: Dup of higher voted
Ruben Bartelink
A: 

Dijkstra's "A Discipline of Programming"

Duplicate of higher voted
Ruben Bartelink
+1  A: 

OK, so the question is not "what's the best programming book", but "if you could tell yourself what to read in the beginning of your career"...

Probably one of "On Lisp" and SICP, plus one of CLRS or "Algorithms: a creative approach" by Udi Manber.

The first two will teach lots of programming techniques, patterns, and really open up one's mind to his/her own creativity; the other two are different. They're more theoretical, but also very important, focusing on design of correct and efficient algorithms (and requiring substantially more math).

I see lots of people recommending the three first books when the subject of "good programming books" pops up, but the last one (by Manber) is a great book, and few people know it. It's a shame! Manber focuses on the incremental development of algorithms through theorem proving using induction.

-1 Pick one, stick in a pic and let people vote on it
Ruben Bartelink
+1  A: 

I think it was after "On Lisp" by Paul Graham that I actually understood how much fun I could have while coding. It made me want to look for different ways of writing programs.

+1  A: 

If you write code in C then Expert C Programming is an eye opener. It has answers to all the things you wondered why it works this way. Peter Van Der Linden has a great writing style and makes arcane concepts very readable. A must read for all C developers

HeretoLearn
+4  A: 

It should be Paulo Coelho - The Alchemist, because many programmers have low self-worth, narcissism disorders and are approval seeking. This means that they do what others tell them to do. And that they think that being programmer is worse than being a manager. Reading The Alchemist may discover them the truth: being engineer is a reason to be proud.

A: 

Mythical man month ++ Code Complete 2 ++

Duplicate of higher voted. One per answer too
Ruben Bartelink
+1  A: 

You may take a look at

http://gleichmann.wordpress.com/2008/09/19/yet-another-book-recommendation-list-software-development/

I found thise books very valuable in the field of general software development.

Greetings

Mario

+3  A: 

Masters of doom. As far as motivation and love for your profession go: it won't get any better than what's been described in this book, truthfully inspiring story!

Jasper Bekkers
+1  A: 
lkessler
+3  A: 

Nobody seems to have mentioned Stroustup's The C++ Programming Language which is a great book that every C++ programmer should read.

I also think that Extreme Programming Explained: Embrace Change should be read by every programmer and manager. Many of the ideas in the book are common knowledge now but the book gives an intelligent and inspiring account of the pursuit of quality in software engineering.

I would second the recommendations for Knuth and Gang of Four which are classics.

nrl
A: 

Tao Te Ching - it transcends programming and will also help you deal with your own existence. Anyone unfamiliar with this text should find a copy and read through- as well as learn about the Tao. One easy way to learn is to read 'The Tao of poo' which walks through the main concepts of the Tao using Winnie the poo characters (not a childrens book).

Klathzazt
-1: Duplicate post of one higher voted. Please be so kind as to delete to make this thread cleaner. Even if the one with the higher votes is newer, please take one for the team to tidy this messy question and let the answers as a whole gain the value they should have
Ruben Bartelink
+18  A: 

It's an oldie, but still worth reading: Algorithms + Data Structures = Programs

alt text

Dave
Yes, this one is very nice. It introduced me to compilers
Stephan Eggermont
Why doesn't this have more upvotes?
Stephen
Another blast from the past! I saw the cover, and said hey.... I know that book!
Chris Thornton
+3  A: 

Applying UML and Patterns by Craig Larman.

The title of the book is slightly misleading; it does deal with UML and patterns, but it covers so much more. The subtitle of the book tells you a bit more: An Introduction to Object-Oriented Analysis and Design and Iterative Development.

serfmum
+1  A: 

Graphics Programming in Windows is difficult to fault.

Kramii
+3  A: 

Systemantics: How Systems Work and Especially How They Fail. Get it used cheap. But you might not get the humor until you've worked on a few failed projects.

The beauty of the book is the copyright year.

Probably the most profound takeaway "law" presented in the book:

The Fundamental Failure-Mode Theorem (F.F.T.): Complex systems usually operate in failure mode.

The idea being that there are failing parts in any given piece of software that are masked by failures in other parts or by validations in other parts. See a real-world example at the Therac-25 radiation machine, whose software flaws were masked by hardware failsafes. When the hardware failsafes were removed, the software race condition that had gone undetected all those years resulted in the machine killing 3 people.

Nicholas Piasecki
+3  A: 

Advanced Programming in the UNIX Environment by W. Richard Stevens.

stu
+108  A: 

Clean Code

Clean Code has a lot in common with Code Complete but it's more concise and practical with lots of clear examples.

Craig P. Motlin
I'm judging thibook strictly by the cover: It's awesome!
Alex Baranosky
+1: An excellent book!
TrueWill
The only problem that I had with this book is that other people's code often annoys me now because it is not clean :P
SeanJA
I found this book inspirational. It is a good book to recommend to developers who are starting to feel rundown managing a legacy code base and instills a sense of ownership and pride in refactoring it to make it "clean".
Gord
Great book. The first reference I found where he says don't comment your code. Further, if your code is clean you shouldn't need to comment - for the most part. And don't be afraid of long methods, variable, etc. Error on the side of descriptive names than short names.
Josh Pinter
+1: No book has made me think more about the code I write than this.
Johnsyweb
Image link is broken
Aaron Digulla
FWIW, I was one of the technical reviewers
George Jempty
+1  A: 

After K&R, I'll second that vote for Programming Pearls.

Why is the Brooklyn Bridge still standing while Galloping Gertie self-destructed in weeks? Every engineer should be fluent in the skill of making "back of the envelope" calculations and mentally keeping an eye on both the "forest and the trees" of their projects. The author Bently emphasizes their importance in every essay. Standing in line at a restaurant? Estimate your wait using the same math used in data queue analysis. How much water flows out of the mouth of the Mississippi river? Four different people use four unrelated methods to estimate an answer, all applicable to CPU processing speed calculations. And so on.

These are vital, fundamental skills that, sadly, are going the way of the slide rule.

+1  A: 

Writing Solid Code by Steve Maguire

Code Complete by Steve McConnell

gagneet
-1: Duplicate post of one higher voted. Please be so kind as to delete to make this thread cleaner. Even if the one with the higher votes is newer, please take one for the team to tidy this messy question and let the answers as a whole gain the value they should have
Ruben Bartelink
+4  A: 
Adrian
+1  A: 

Programming is a creative task, and there are a lot of great books about creative tasks in general. Here's one:

Whatever you think, think the opposite.

By Paul Arden.

This is a small book that helps you generate big ideas. Arden came from an advertising background, but he wrote for a general audience of creative individuals. If you don't think that's you, you should think some more.

Yes, there are great domain-specific books for programmers. But programmers, as creative professionals, should make more of an effort to tap into the broader world of books for "creatives."

+5  A: 
andHapp
+1 for Refactoring to Patterns. Missing link between the classics "Refactoring" and "Design Patterns".
Jonik
Pick 1. Clean code is my vote?.
Ruben Bartelink
Clean Code was already mentioned here: http://stackoverflow.com/questions/1711/317750#317750. Could you perhaps edit this answer and decidate it just to Refactoring to Patterns?
Jonik
Changed my -1 to a +1 thanks to edit (BTW have read RTP recently - slightly overrated - not grounddbreaking when compared to Ref or DP but still a very important book)
Ruben Bartelink
+4  A: 

I am still waiting for my copy of LiSP.

leppie
+1  A: 

Etudes for Programmers by Charles Wetherell, More Programming Pearls (Jon Bently),

Stephen
+5  A: 

Neuromancer by Gibson

Stephen
+3  A: 

Advanced Programming in the Unix Environment by Stevens and Rago (2005 Addison-Wesley Professional)

mepcotterell
-1: Good book, but Duplicate, see earlier
Ruben Bartelink
+3  A: 
dario minonne
+1  A: 

Hard to say, but the last programming book i found really interesting was "Beautiful Code" by O'Reilly

Nils
+3  A: 

For me it was Design Patterns Explained it provided an 'Oh that's how it works' moment for me in regards to design patterns and has been very useful when teaching design patterns to others.

Andrew Hanson
+3  A: 

Head First Design Patterns is a great book! at first it seemed a bit controvertial but i quickly fell in love with it and carried it with me everywhere until i finished. i tried reading other head first books but none could compare. all the other books i've read were strictly technical and there was nothing fascinating about them.

agnieszka
+1  A: 

The Scelbi-Byte Primer

I pored over the source code listings in this book many times until, one day, I suddenly grokked 8080 assembly language programming.

Ferruccio
A: 

Object-Oriented Programming in Turbo C++. Not super popular, but it was the one that got me started, and was the first book that really helped me grok what an object was. Read this one waaaay back in high school. It sort of brings a tear to my eye...

Dave Markle
A: 

Even though i've never programmed a game this book helped me understand a lot of things in a fun way.

Slayer SA
+1  A: 

I bough this when I was a complete newbie and took me from only knowing that Java existed to a reliable team member in a short time

Slayer SA
+4  A: 

The Tao Te Ching. Although it's a philosophy book and not a programming book, some of it's principles are very applicable to programming:

"Know when it's time to stop. If you don't know then stop when you are done."

Translation: Knowing your requirements means you know when to stop. If you don't know when to stop, you need to stop because the requirements have yet to be defined.

"The harder one tries, the more resistance one creates for oneself."

Translation: How many times have you worked on a problem for several hours, only to find the answer after taking a 15-minute break? The more you hammer at a problem, the harder it is going to be for you to solve it.

"One whose needs are simple can fulfill them easily."

Translation: Simple requirements lead to simple designs.

"When we lose the fundamentals, we supplant them with increasingly inferior values which we pretend are the true values."

Translation: Hubris is never a good substitute for good programming standards. If you get lax, no amount of design patterns will ever substitute for the lack of quality in your code.

plaureano
+1  A: 

Still a worthwhile classic is the Interface Hall of Shame. This website detailed a huge assortment of interface design faux pas that is quite entertaining. The original iarchitect.com no longer exists, but others have re-established the HOS on their own websites.

Chris Gallucci
+1  A: 

Object Oriented Design Heuristics is a great read. I couldn't put it down.

A: 

I'll add a couple that I haven't seen here that are influential for me:

  • Yourdon and Constantine, "Structured Design". Everything you need to know about software design is in here, if you're willing to dig for it a little.
  • Leonard Koren, "Wabi-Sabi: for Artists, Designers, Poets & Philosophers". A pragmatic philosophy balancing beauty and pragmatism.
Kent Beck
-1: One will be fine
Ruben Bartelink
+10  A: 

The Tao of Programming

swamy
(it's not a book though, is it!)
Pete Kirkham
The best book about Tao for programmers, and vice versa. *What is good for the master programmer is not appropriate for the novice.*
Loadmaster
Yes, it's a book. ISBN:0931137071. (No relation to the author, even though we share a surname)
dajames
+3  A: 
Pete Kirkham
+1  A: 

Hands down Head First Design Patterns!

It not only teaches you about design patterns, but also gives you real world problems they solve. Most notable, it walks you through the wrong ways to solve the problems, and the common mistakes, which I think is most beneficial.

rick schott
Agreed. Many people compare it unfairly to Design Patterns, but it takes its time with the material and takes nothing for granted. This is a good thing for people who are just learning about patterns and their use.
David Andres
Dupe post (sorry).
Ether
Yeah, but the explanation isn't the same, which is the main reason everyone needs to read it.
rick schott
+14  A: 
Mr Grieves
+1  A: 

Has to be Code Complete. I had the good fortune of buying as I started my first steps as a programmer. I learned so much from it I immediately re-read it. I firmly believe it transformed by skills in a short space of time.

I have recommended it to various junior programmers and university students but sadly my advice always seems to fall on deaf ears. shame really its just so packed with lessons learned from practical experience. It really is a treasure trove of great advice.

Dominic
+37  A: 
Ether
Of course, Microsoft's techie culture is structured around the decisive moment to call your manager brain-dead.
kmarsh
+5  A: 
Edison Gustavo Muenz
Yup – this is a great book. Also, the cover is very amusing.
David Wolever
Adding the title
Stephen
+1  A: 

Well, if I had to choose a single book it is definitely "Code Complete". To take the "righteous path" as a programmer - "Pragmatic Programmer" is also great.

A book that was an "eye-opener" for me, although I didn't expect it from such a book, is "The C++ Programming Language" by Bjarne Stroustrup.

And, finally, I would mention two Fowler's "classics" - "Patterns of Enterprise Architecture" and "Refactoring".

emirc
+1  A: 

How to Solve It: A new aspect of mathematical method Although not directly related to computer programming but it does teach you the art of problem solving and that's what computer programming is all about.

Sameer
A: 

Structure and Interpretation of Compunter Programs(SICP) of course. Such a good book.

And the book Functional Programming Using Standard ML, Prentice-Hall, 1987 by Åke Wikström. Åke's book taught me the importance to abstract, that the human brain can only handle like 4-6 concepts at the same time. Abstraction makes it possible to generalize and therefore handle more concepts at the same time.

Tommy
dupe: http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read/29433#29433
roman m
So I can't recommend SICP because some other already did it? What about me mentioning Åke Wikström's book, which is not mentioned in the post you link to?
Tommy
@Tommy: It's not that you can't recommend it, but you should be voting that entry instead. This way the best entries bubble to the top. You could also comment on the answer (maybe after you gain a few points). Still, keep the other book as your own post if it has not been mentioned before.
Hosam Aly
@Tommy: i.e., edit the post and all will be well
Ruben Bartelink
A: 

I saw a review of Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools on a blog talking also about XI-Factory, I read it and I must say this book is a must read. Altough not specifically targetted to programmers, it explains very clearly what is happening in the programming world right now with Model-Driven Architecture and so on..

Is it still happening? Is it the best MDA boook/info on the planet?
Ruben Bartelink
A: 

Beginning C# 3.0: An Introduction to Object Oriented Programming

This is the book for those who want to understand the whys and hows of OOP using C# 3.0. You don't want to miss it.

egyamado
+1  A: 

I'm reading now Agile Software Development, Principles, Patterns and Practices. For those interested in XP and Object-Oriented Design, this is a classic reading.

nandokakimoto
I've heard good things about it too, but it's been mentioned earlier, see: http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read/29285#29285 (Vote that up instead - ah, well, when you have the reputation to do it :)
Jonik
+3  A: 

Here's an excellent book that is not as widely applauded, but is full of deep insight: Agile Software Development: The Cooperative Game, by Alistair Cockburn.

What's so special about it? Well, clearly everyone has heard the term "Agile", and it seems most are believers these days. Whether you believe or not, though, there are some deep principles behind why the Agile movement exists. This book uncovers and articulates these principles in a precise, scientific way. Some of the principles are (btw, these are my words, not Alistair's):

  1. The hardest thing about team software development is getting everyone's brains to have the same understanding. We are building huge, elaborate, complex systems which are invisible in the tangible world. The better you are at getting more peoples' brains to share deeper understanding, the more effective your team will be at software development. This is the underlying reason that pair programming makes sense. Most people dismiss it (and I did too initially), but with this principle in mind I highly recommend that you give it another shot. You wind up with TWO people who deeply understand the subsystem you just built ... there aren't many other ways to get such a deep information transfer so quickly. It is like a Vulcan mind meld.
  2. You don't always need words to communicate deep understanding quickly. And a corollary: too many words, and you exceed the listener/reader's capacity, meaning the understanding transfer you're attempting does not happen. Consider that children learn how to speak language by being "immersed" and "absorbing". Not just language either ... he gives the example of some kids playing with trains on the floor. Along comes another kid who has never even SEEN a train before ... but by watching the other kids, he picks up the gist of the game and plays right along. This happens all the time between humans. This along with the corollary about too many words helps you see how misguided it was in the old "waterfall" days to try to write 700 page detailed requirements specifications.

There is so much more in there too. I'll shut up now, but I HIGHLY recommend this book!

Charlie Flowers
A unique contribution, and you took the time to clearly explain why it was worth reading. +1 for originality and effort! I shall look forward to reading this soon...
Avery Payne
Good. I do not think you will be disappointed.
Charlie Flowers
+1  A: 

I would not read a book. I would read someone else's code, then find a proper simple book for that language. That's what I did at the beginning of my passion. In my case, I dug into Commodore 64 BASIC code from journals (at that time, source was shared on dead-tree support, and it was up to you to type it). I then received a BASIC book as a gift (I was a child back then) and started tinkering, but this after I mindlessly typed in all the code, and checked what it did.

I did the same when I learned C. I first started with source code from a chat server, and then bought C for dummies (yep, fast and dirty, but I went somewhere). From there, I continued tinkering and at the same time getting additional knowledge from books.

Stefano Borini
+11  A: 
binil
This book is amazing! I HIGHLY recommend it.
Dinah
+1  A: 

Three books come to mind for me.

  • The Art of Unix Programming by Eric S. Raymond.
  • The Wizardry Compiled by Rick Cook.
  • The Art of Computer Programming by Donald Knuth.

I also love the writing of Paul Graham.

Levi Campbell
A: 

An introduction to GW Basic. With out it I never would have learned how to program and any other books wouldn't have done me any good.

Jared
A: 

Beginning Visual C++

When I first started programming in a OOP languages, I found this book not only to be a comprehensive book about C++ and MFC, it was also has one of the best explanations of Object Oriented concepts I've seen.

When I talk to developers who are just starting out programming in an object oriented language, I tell them to read this book.

Scott Lance
A: 
David Berger
Nice answer, but instead of adding duplicates, it would be better to vote up an existing answer (third one from the top: http://stackoverflow.com/questions/72406?sort=votes#sort-top)
Jonik
+3  A: 

The Art of War by Sun Tzu.

Oakcool
-1: Duplicate post of one higher voted. Please be so kind as to delete to make this thread cleaner. Even if the one with the higher votes is newer, please take one for the team to tidy this messy question and let the answers as a whole gain the value they should have
Ruben Bartelink
A: 

Visual F# 2010 for Technical Computing

Jon Harrop
125 British pounds for a book??? Is this an advertorial? Consider the excellent *Real world functional programming in F#* by Petricek and Skeet as a much better and cheaper alternative.
Abel
Please note that it's the author that recommends it. And that the post is edited, earlier it was about another book from the same author. Looks more like self promotion than book recommendations.
nj
+3  A: 

"Introduction to Functional Programming", Philip Bird and Richard Wadler. (First Edition)

I am still reading this book. I am liking it very much.

A: 

I have found that the first edition of The C++ programming language had a big influence on my programming. I also own the second and third version. There are other C++ books I really liked, such as The Design and Evolution of C++.

nojevive
Pick 1 that isnt a duplicate of the ones above in votes and edit thew answer to say that
Ruben Bartelink
+1  A: 
Curt Sampson
@Curt Sampson: Can you fix the link please?
Ruben Bartelink
+1  A: 

Algorithms in C++ was invaluable to me in learning Big O notation and the ins and outs of the various sort algorithms. This was published before Sedgewick decided he could make more money by dividing it into 5 different books.

C++ FAQs is an amazing book that really shows you what you should and shouldn't be doing in C++. The backward compatibility of C++ leaves a lot of landmines about and this book helps one carefully avoid them while at the same time being a good introduction into OO design and intent.

Jherico
+4  A: 

Kernighan & Plauger's Elements of Programming Style. It illustrates the difference between gimmicky-clever and elegant-clever.

+1  A: 

Solid Code Optimizing the Software Development Life Cycle

Although the book is only 300 pages and favors Microsoft technologies it still offers some good language agnostic tidbits.

Phaedrus
-1 Duplicate of higher rated, sorry
Ruben Bartelink
+4  A: 

One of my personal favorites is Hacker's Delight, because it was as much fun to read as it was educational.

I hope the second edition will be released soon!

tr9sh
+1 for "Hacker's Delight" by Henry S. Warren Jr - it's not about hacking in the popular sense but hacking as in low level bit twiddling and other "hacks" in the true and original sense of the word. Not for everyone, but if you are involved in code optimisation, compilers, etc, or are just a general nerd who is interested in low level stuff then this is a great book.
Paul R
+1  A: 

For me it was Code Craft.

Dustin Stevens-Baier
Nice book. Love it in fact. It is a little Code Complete oriented (I mean : it is sharing a lot of topics with Code Complete), but it is less technical. Would recommand it. Definitely. +1
Sylvain
-1 Duplicate. Please be so kind as to remove this (esp as posted after the other one)
Ruben Bartelink
+1  A: 

I read most of the books having an high score on this question - but not all of them (thanks God !) and I added the others one to my Amazon Wish List right away !

(Someone should create a list on Amazon for these books... Maybe a list named : "Stackoverflow best books ever" ? Anyone know how to do that ?)

To me, the best book ever has been Code Complete. It was a revelation. I bought the 2nd edition in english and then in French and I still think it should be a mandatory reading in any computer science school. Data structure is cool but Code complete, no joke, is much more important...

Then, my second best book was Writing Solid Code - having learn how to be understood, it was great to know how to write solid code.

Then a lot of very nice books but no one to mention here. Until 2001, I think : Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries. A jewel ! I read this book many times and it's still on my desk, just beside my LCD, along with Code Complete (really !). I Love the way it has been written (love the comment that has been added here and there - books should all be written like that !)

But well, I forget the very first great books I've read ! The ones who make me love computer science, with passion :

  • Compute! (C64 magazine - Will never forget Jim Butterfly :o)
  • Borland C++ User Guides (the old ones, circa 1991, those who tried to introduce object oriented programming, very nicely written).
  • Most Microsoft Developpement Tools User Guides, circa 1990-1995. Don't know who were writing them, but they was pretty cool ! I remember reading them late in the night, on saturdays...

Well, excellent question :o)

Sylvain
+4  A: 
Brillant, the book cover shows "La Sagrada Família", a large Roman Catholic basilica under construction in Barcelona, Catalonia, Spain. To be completed in 2026 (only 17yrs left). Like most programs, even with the best books, they never finished ...
PeterMmm
+9  A: 

alt text

Christopher Alexander - The Timeless Way of Building

Tobias Svensson
A really interesting book. And a poetic and well written one too.
edomaur
This book inspired design patterns
iChaib
Although it inspired the GoF, a programmer is better served reading "Design Patterns"
toolbear74
+28  A: 

Pragmatic Thinking and Learning: Refactor Your Wetware by Andy Hunt.

Bo Tian
Maybe not as important as "The Pragmatic Programmer", but still very much recommended. +1
Jonik
An excellent book about the process of learning and master, highly recommended.
Chris Nicola
+3  A: 

Clean Code by Robert Martin.

This book completely changed the way I wrote code (for the better). The first couple of chapters are the best.

Dean Povey
Ruben Bartelink
+3  A: 

All the Thinking in... books.

Bruce Eckel is THE genious of pedagogy! It's so easy to understand the implementation of polymorphism in C++. It contains all that you should known about C++, basic and advanced concepts. Way better than the Stroustrup's. I learnt Java with him too.

And last but not the least:

The C++ one is free !

http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html

Roubachof
+17  A: 
Shane
I've always done graphics code as a hobby, but you wouldn't believe the number of places the ideas come up in my day job which has nothing to do with graphics.
phkahler
This is a great book but I wish it would be updated
shoosh
+15  A: 
Nate
The first review at amazon is golden.
blizpasta
+6  A: 
TahoeWolverine
+3  A: 

Adding to the great ones mentioned above:

Patterns of Enterprise Application Architecture

Enterprise Integration Patterns

Ariel
Can you edit this and make it refer to one that isnt already mentioned with higher votes so I can change my -1 for not reading the Q to a +1 for EIP please?
Ruben Bartelink
A: 

Don't know if anyone mentioned it but I would recommend the book from Uncle Bob Martin.

pablo
He has written more than one book.
Christian Vest Hansen
-1: 3 mentioned and higher voted, can you remove this please?
Ruben Bartelink
+11  A: 
Kb
-1 dup. Already listed with a higher rating
toolbear74
+5  A: 

First read the best books regarding your language of choice and then regarding you OS of choice.

Then once you get the grasp of the language, please go through these language agnostic books. 1) Code Complete - Steve McConnell http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670

2)Design Patterns: Elements of Reusable Object-Oriented Software - Erich Gamma Erich Gamma , Richard Helm, Ralph Johnson, John M. Vlissides http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612/ref=sr_1_1?ie=UTF8&amp;qid=1248974754&amp;sr=8-1

3)The Pragmatic Programmer - Andrew Hunt and Dave Thomas http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X/ref=sr_1_1?ie=UTF8&amp;qid=1248974843&amp;sr=8-1

4)Refactoring: Improving the Design of Existing Code - Martin Fowler, Kent Beck, John Brant, and William Opdyke http://www.amazon.com/Refactoring-Improving-Existing-Addison-Wesley-Technology/dp/0201485672/ref=sr_1_1?ie=UTF8&amp;qid=1248974905&amp;sr=8-1

Christy John
A: 

Rich Dad Poor Dad, to realize that programming is just another job, and one that can be outsourced at that, and to focus on "minding my own business" instead rather than trading dollars for hours.

Chloe
good advice and a good book. the audio book edition is good for commuting to the cube farm... though not about programming. this book will help understand why non-tech managers often dont care about "important" things.
Arthur Ulfeldt
-1: Bad advice and a bad book. http://www.johntreed.com/Kiyosaki.html
Jim G.
terrible advice. that guy just wants to sell books based on sensationalism and insipid comments.
cygnus atratus
+5  A: 
tr3
+3  A: 

Since I'm a C# programmer and most generic books already has been mentioned I'd like to recommend Bill Wagner's book "More Effective C#.

I think most people that develop composite WPF-applications also should have a look at Microsoft's Composite Application Guidance (also known as Prism):

Composite Application Guidance

scim
-1: Can we have one non duplicate please?
Ruben Bartelink
+1  A: 
Nick D
+9  A: 

This book really set up a fundemental view that a programmer need to know about computer.

Computer System - A programmer's perspective

alt text

arsane
+3  A: 
Ryan Fernandes
A: 

The C Programming Language by Brian Kernighan and Dennis Ritchie. It is sometimes referred to as K&R, or the white bible, or K&R2 for the second edition.

lapinferoce
-1 Duplicate of higher voted
Ruben Bartelink
Duplicate of previous vote
SteveC
+4  A: 
Dave Nichol
I cant get past the cover
burnt_hand
I checked this one out of my local library, and returned it having made it only about 50 pages in. The "Head First" hurl-clip-art-and-sidenotes-on-every-page style may be an effective way of learning for _some_, but as a person with Attention Deficit Disorder, it made my head explode. I simply _could not_ keep focus on the content. I much prefer the original Gang of Four book for the same information.
SFEley
Duplicate post (sorry).
Ether
Duplicate of previous vote
SteveC
+4  A: 

Got to go with Sun Tzu's The Art of War.

Nick
A: 

Domain Driven Design By Eric Evans is a wonderful book!

Rejeev Divakaran
+5  A: 
ClaudioA
+12  A: 

Hackers and Painters: Big Ideas from the Computer Age

Chris Dwyer
+4  A: 

Extreme Programming Explained: Embrace Change by Kent Beck. While I don't advocate a hardcore XP-or-the-highway take on software development, I wish I had been introduced to the principles in this book much earlier in my career. Unit testing, refactoring, simplicity, continuous integration, cost/time/quality/scope - these changed the way I looked at development. Before Agile, it was all about the debugger and fear of change requests. After Agile, those demons did not loom as large.

TrueWill
+5  A: 
RD1
-1 Duplicate of http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read/13085#13085
Ruben Bartelink
+126  A: 
Jahanzeb Farooq
In case anyone missed it: the author was the guest on SO podcast #69 (http://blog.stackoverflow.com/2009/09/podcast-69/) discussing this book and other things
Jonik
I'm only halfway through and it's already on my list.
easement
I just finished it a couple of days ago. It has restored my faith in the superiority of the human brain over corporate systems.
Christopher Mahan
One of the best aspects of this is that it puts down in print some of the foundational aspects of computing that are mostly an oral history. One thing that isn't really made explicit is that this book is very hevily slanted to the old bearded unix hacker orgins of computing. Very little of it talks about current work. Not that this is a bad thing--just that the book IMHO should be more upfront about what it's about. Lots of lisp, lots of C, lots of reverence Knuth.
Kevin Won
+1: Awesome book. A page turner!
Jim G.
I found this book kind of dry. Some coders were more interesting than others. Much of it droned on and on though, even for the guys I found interesting.
Cervo
This is a brilliant book. It gives great insight into the minds of successful programmers, in a way that you just don't get otherwise. It's also great as a history lesson, because a lot of these programmers started off right at the beginning.
Skilldrick
+1  A: 

Personally, I like the handwritten notes by Edsger W. Dijkstra. A lot.

Ranieri
+11  A: 

The Annotated Turing was enlightening. It defines the box programmers work in.

alt text

Jason Rowe
+3  A: 

Apart from all the great books already recommended, there is one more book I would like to recommend.

This may be relatively unknown, however I use it every so often.

The book teaches computer architecture and how C code gets compiled to assembly code. It has great sections about the program stack, talks about low level operating system constructs and about various parts of the architecture from a programmer's perspective.

It has a great section on memory allocation and garbage collection. It also discusses network programming, profiling and much more.

One of my favorite books.

alt text

jsshah
+1 This is the single best book to really learn how a linker works. It really taught me to think like the compiler and the linker and that process has helped me decipher many error messages, both my own and those of my co-workers.
Dan Hook
-1 This is a duplicate thats been outvoted
Ruben Bartelink
+4  A: 
Arthur Ulfeldt
A: 

Dijkstra's A Discipline of Programming is a true classic. It will change the readers' way of reasoning about programs - it certainly has changed mine.

An easier read would be Gries' Science of Programming - it is along the same lines, but easier to read.

As an aside, I must mention that we are still struggling to come up with a scheme that these books propose for concurrent programs.

dasu
-1: Duplicate post of one higher voted. Please be so kind as to delete to make this thread cleaner. Even if the one with the higher votes is newer, please take one for the team to tidy this messy question and let the answers as a whole gain the value they should have
Ruben Bartelink
+4  A: 
mlk
+1  A: 

It seems most people have already touched on the some very good books. One which really helped me out was Effective C#: 50 Ways to Improve your C#. I'd be remiss if I didn't mention The Tao of Pooh. Philosophy books can be good for the soul, and the code.

cloggins
-1: Duplicate post of one higher voted. Please be so kind as to delete to make this thread cleaner. Even if the one with the higher votes is newer, please take one for the team to tidy this messy question and let the answers as a whole gain the value they should have
Ruben Bartelink
+4  A: 
Ucodia
-1: I'm surprised too. Can you check for dups higher up in the voting please? If I'm wrong, reply and I'll change this -1 to a +1 (if right, bet thing is a delete)
Ruben Bartelink
I checked again and I found one answer refering to it : http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read/28044#28044 As it had no description, I think I missed it before posting.
Ucodia
+4  A: 

It's a brand new book and I've only just skimmed it but Growing Object-Oriented Software, Guided by Tests right now is THE book on TDD. It really concentrates on the "design" part of software development and how it is closely related to how you develop code writing tests first. I've enjoyed other books on TDD and unit testing but this takes it to a higher level, I'm pretty sure this one is destined to be a classic.

FinnNk
Definitely worth a read
khebbie
I'm loving this book. The first 90 pages are the book - top distilled insights. The rest are a fantastic set of worked examples that are just as enjoyable. I'd love if everyone I can ever work with would read this book as the info is critical for modern development. I think it has connections to the DDD book too. BTW can someone stick in a post with a pic fot that please? And a pic for this book too?
Ruben Bartelink
A: 

One I didn't already see on here was xUnit Test Patterns: Refactoring Test Code by Gerard Meszaros. This book really helped me see unit testing from a fresh perspective.

Stacy Vicknair
+3  A: 

"The Practice of programming" by Brian W.Kerninghan & Rob Pike.

The language is easy and also the subject matter is interesting.

Steven Bose
Surely this is a duplicate?
Ruben Bartelink
+1  A: 

I'm late to this question but apparently still have something unique to offer... Software Engineering Economics by Barry Boehm which, to summarize, says that if you want to really improve software productivity get better people since better tools, hardware, languages, methods, etc. will all have a marginal impact. Only better people drive up productivity by significant amounts. I emphasize, this is better engineers, not more engineers!

Not the kind of book you'd take to bed with you, like you might do with Coders At Work but the kind of book that drives home a lesson that our industry has struggled mightily to take to heart. Witness off-shoring, a false economy that Boehm's model predicts will have only a marginal positive effect, if any at all. Check it out.

pajato0
A: 

Getting Things Done (GTD) teaches you how to deal with the thousands of small tasks you need to accomplish in your day-to-day job as a software developer. Although it is not specifically geared towards developers, it is definitely an invaluable aid, as software development typically involves a very lare number of small tasks that need to be done in a prioritized fashion. For example: implementing new features, fixing bugs, refactoring parts of the code, testing or retesting code, etc...

Dimitri C.
Is thsi *really* not a dup? (If it isnt, reply and you have a +1)
Ruben Bartelink
A: 

It has been suggested in response to another "Greatest books" question, but not here:

Guns, Germs, and Steel - The Fates of Human Societies by Jared Diamond

Guns, Germs, and Steel

Highly interesting read which powerfully increases one's understanding of the different developments of human societies. Asks questions such as "Why did the Spanish sail to South America and conquer the Inkas, and not the other way round?" that tickle one's curiosity. I think every programmer should read this book because I think every person should.

Tom Bartel
A: 

Essential reading for any mentor/team leader/manager or anyone who reports to the aforementioned.

alt text

Upper Stage
+4  A: 

alt text

Excellent book on getting up to speed with JavaScript, highly reccommend.

JavaScript - The Good Parts

Pace
Good book, undoubtedly, but *the single most influential book* for all programmers to read...?
Jonik
A book about javascript (a.k.a "The Internet Duct tape"), seriously?
Chepech
Chepech, you'll have to forgive me. For me the most influential book was Code Complete 2nd Ed. The reason I posted this here is at the time, I did not see a book on JavaScript listed... and for me, this is probably the best JS book.
Pace
+1  A: 

Code by Microsoft.

Granted, it does NOT teach you about programming but it explains so well how computers work and how humans have learned to translate their thoughts into math and how computers operate.

I never understood Boolean algebra til I read CODE. I consider it a must read book for all beginners in programming.

netrox
+3  A: 

hackers, by Steven Levy.

The personality and way of life must come first. Everything else can be learned.

tsilb
+1  A: 

Clean Code - Robert C. Martin

EricSchaefer
+3  A: 

Advanced Programming in the UNIX environment - W. Richard Stevens

EricSchaefer
A: 

Dictionary of the Khazars by Milorad Pavich

It's a hypertext book; it comes in two versions - a male version and a female version; and it is excellent.

Dictionary of the Khazars

Igor Oks
A: 

What happened to 'Expert C Programming - Deep C Secrets' by Peter Van Der Linden - a classical and enjoyable read. Should have read that immediately after learning C years ago but got it about after 3 years into learning C! A recommended book which answers the most common SO questions on pointers (a favourite subject of mine). Live it, eat it, breathe it! 10/10!

tommieb75
+1  A: 

Looks like we have the same taste in books. I have to admit that I really enjoyed some of the books listed above. Another book that I found outstanding this year due to its fresh and unique approach was 'is: The Phenomenon of the Facebook Status' by Patrick Hamilton Walsh. Did you read this one during the year? I think it will be huge in 2010. Its a book that... never mind it is Monday morning, so here is the review that sold it to me:

Patrick Hamilton Walsh shows remarkable ingenuity with this unique concept designed to offer an insight into life in today's world via the medium of social networking sites. 'Is' presents an insight into everyday life in the 21st century through the compilation of Facebook status updates, highlighting the joys and pressures of today's world with its 'warts and all' collection of laugh-out-loud, witty, poignant, crude and downright rude updates.

Each individual status update listed within 'is' allows the watching world to look into the updating person's soul as they share their thoughts and feelings of the day in a manner that has never before existed, giving a glance of what the person is made of, if not the image they are attempting to portray!

Taken as a whole, this compilation helps to unmask the population of Western society who, as individuals, are becoming more willing to share their thoughts with the world.

These individuals take full advantage of the opportunity afforded to them by the fact they can hide behind their computer screens and share thoughts they probably would never dare to on a face-to-face basis!

I got it for £5.49 on Amazon so its a bargain as well. Its also good for 'borrowing' good Facebook updates ;-)

Check it out and thank me later.

http://www.amazon.com/Phenomenon-Facebook-Patrick-Hamilton-Walsh/dp/1604942290/ref=cm%5Fcr%5Fpr%5Fproduct%5Ftop

Good work people, I look forward to reading more of your stuff in 2010. Happy Christmas everyone.

Rex
+1  A: 

This is a must read book for every programmer: Database system concepts by Abraham Silberschatz.

alt text

Koder_
Have it sitting on my desk now from over 7 years ago when I was a budding CS student :)
0A0D
A: 

This is a very rich and useful compilation, however, I am a bit surprised I have not encountered Andrew S. Tanenbaum among the authors. IMO he is one of the best CS professors, and his genius has to do mainly with his extraordinary ability in making rather difficult material accessible to the CS undergraduates. His books (Modern Operating Systems, or Computer Networks might ring a bell) did a wonderful job in providing me with a solid foundation in CS while doing my BS and I highly recommend them. Some other interesting stuff on Tanenbaum, proving his skills go beyond teaching: author of an OS called MINIX - Linus had his fare share of inspiration from it when implementing Linux; Amoeba - distributed OS; Turtle - free anonymous p2p network.

Vali Georgescul
Wall of text. What is your recommendation?
drozzy
+3  A: 

The New Turing Omnibus

Really good book. Has a high-level taste of the most important areas of computer science. Yes, CS != programming, but this is still useful to every programmer.

Derrick
+1  A: 

The before mentioned "The C Programming Language, Second Edition" and "The Structure and Interpretation of Computer Programs" are excellent books I would just like to add C++ How to Program by Deitel and Deitel. This book helped me a lot in school and provides many well explained and easy to use examples.

Alos
A: 

The first programming book I read was C++ for dummies. Needless to say, I still detest C++.

The one that changed me the most as a developer was probably php|architect's Guide to PHP Design Patterns. Not so much that it is great at explaining stuff (which it is), but that it was the one book that took me up a level or two as a programmer, just by reading it (because I was shitty before). Before I used to write lines of code (as long as it works, etc). After reading the book, I started writing apps, considering the whole structure and the flow.

Tor Valamo
+1  A: 

The Art of Game Design - A Book of Lenses by Jesse Schell

Jesse Schell has taught Game Design and led research projects at Carnegie Mellon’s Entertainment Technology Center since 2002.

Nuff said.

The Art of Game Design - A Book of Lenses

PS: Sorry If I am double posting, I couldn't find this book in the answers - either because the title was not exact or there was no image. Let me know and I'll delete it if so.

drozzy
+1  A: 

What Every Programmer Should Know About Memory

by Ulrich Drepper - explains the structure of modern memory subsystems and suggests how to utilize them efficiently.

PS: Sorry If I am double posting.

adatapost
+1  A: 

97 Things Every Programmer Should Know

alt text

This book pools together the collective experiences of some of the world's best programmers. It is a must read.

Zack
+1  A: 

Mr Bunny's Guide to ActiveX

Paul Mitchell
+1 You're no anonymous yet another Paul Mitchell who wont put detail in his profile! (No actual +1 as have used up votes on this thread on way to page 8!)
Ruben Bartelink
A: 

My vote is "How to Think Like a Computer Scientist: Learning With Python" It's available both as a book ( http://www.amazon.com/How-Think-Like-Computer-Scientist/dp/0971677506 ) and as a free e-book ( http://www.greenteapress.com/thinkpython/thinkCSpy/thinkCSpy.pdf )

It really helped me to understand the basics of not just Python but programming in general. Although it uses Python to demonstrate concepts, they apply to most, if not all, programming languages. Also: IT'S FREE!

ErikT
+1  A: 

The Pink Shirt book

Programmer's Guide to the IBM PC. The Pink Shirt book.

...well, someone had to say it.

Marc Bollinger
IIRC, I had that. Lots of low level groveling in MS-DOS and BIOS.
Arthur Kalliokoski
+1  A: 

Object Oriented Analysis and Design by Brady Booch

Aseem
A: 

You.Next(): Move Your Software Development Career to the Leadership Track ~ Michael C. Finley (Author), Honza Fedák (Author) link text

Mark Schultheiss
+4  A: 

Hitchhiker's guide to the galaxy, you need to relax sometimes too if you really want to be a good programmer...

David
+4  A: 

Wow I am kind of shocked that no Domain Driven Design books were mentioned on the first couple of pages?

alt text

emalamisura
+1 I agree. Evans' book is clearly the must read of the two, but I dont want the time back from reading this one as it really helps one get the ideas straight in your head. Reason Evans isnt higher up is that the person who stuck it in put two books in the answer. Removed DDD from that as it had a broken link so now would be a good time for you to put in DDD (with a pic!).
Ruben Bartelink
+3  A: 

Rework by Jason Freid and DHH of 37 signals is interesting - http://37signals.com/rework/

Not really a programming book, but aimed at programmers and business start-ups

stephenmurdoch
+4  A: 
Jonathan
+1  A: 

Maverick!: The Success Story Behind the World's Most Unusual Workplace

alt text

Will make you realise what a workplace should be like.

Jonathan
A: 

currently reading : the inmates are running the asylum - really good read... i felt like quoting every line of it and save it for further reference

mireille raad
+4  A: 

Most fun to read: The Art of Deception by Kevin Mitnick (one of world's most famous hackers)

Really shows that how secure your software may be, the weakest link is always the human controlling it, with entertaining examples.

alt text

SirLenz0rlot
great read, as is his other one - The Art Of Intrusion: The Real Stories Behind The Exploits Of Hackers, Intruders, And Deceivers
Anonymous Type
+6  A: 

alt text

Clean code is a fairly new book that gives good of lots of good examples on working with refactoring and complexity, recommended!

MattiasK
This book uses Java for examples, which I don't know anything about, but reading it has helped me make incredibly more readable code which is not littered with comments. It really helped me realize a number of things that I should be thinking about before writing any code. Ultimately, this has saved me lots of time!
letseatfood
I'm not sure, that this is only book, that should be read. I'll better to recommend SICP or Code Complete
Alex Ott
Duplicate of higher up
Ruben Bartelink
+3  A: 

Types and Programming Languages by Benjamin C Pierce for a thorough understanding of the underpinnings of programming languages.

supercooldave
+3  A: 

Design Concepts in Programming Languages by FA Turbak produces detailed implementations of many programming concepts and is very useful for understanding what's going on underneath the hood.

supercooldave
+1  A: 

The Practice of Programming

alt text

and

How to solve it by computer

alt text

agupta666
+4  A: 

alt text

alt text

xport
+4  A: 

alt text

shawndumas
+1  A: 

The Back of the Napkin, by Dan Roam.

The Back of the Napkin

A great book about visual thinking techniques. There is also an expanded edition now. I can't speak to that version, as I do not own it; yet.

George Marian
+1  A: 

alt text

Mastery: The Keys to Success and Long-Term Fulfillment, by George Leonard

It's about about what mindsets are required to reach mastery in any skill, and why. It's just awesome, and an easy read too.

Mahol25
+1: Love that book. Although... It's certainly not the most influential programming book, considering that most people don't know about it.
Brian MacKay
This was a really great book that is helping me improve in all of my hobbies/passinos.
Codygman
+8  A: 

I keep these 3 books on my shelf. As a reminder of the complex and exciting craft we do. I only recommend to read them if you happen to encounter with something that not even the entire Stackoverflow comunity can help you solve as I have:

alt text alt text alt text

=)

Chepech
Thar be dragons!
Jason Down
You'll need those to get through The Art of Computer Programming!
kirk.burleson
+1 for I am reading The Atrocity Archives
Marco Mariani
A: 

alt text

Hindi dictionary

aaa
http://www.amazon.com/Job-Went-India-Pragmatic-Programmers/dp/0976694018
Marco Mariani
How does that book help?
Yogendra
Helps you communicate with your development team in India. I don't think that this is what the question author meant but I sure think its a creative answer that hopefully was written as a joke.
Ido
+6  A: 

Godel Escher Bach wins hands down for me, but that's already been mentioned elsewhere. One book that motivated me highly that isn't already in an answer AFAIK is Tracy Kidder's Pulitzer prize winning book The Soul of a New Machine (amazon). Which charts the trials and tribulations of an engineering team trying to bring a new machine to market. It made me feel proud to be an engineer.

The soul of a New Machine

Andrew Matthews
I clicked, but I could not look inside. That's false advertising! ;)
Adrian Grigore
@Adrian Grigore - Fixed the image so it will now take you to the look inside. :)
Copas
Yay! Thanks :-)
Adrian Grigore
yes, thanks for that!
Andrew Matthews
Outstanding choice. It's been a while since I read this - maybe it's time to revisit.
Bob Mc
A: 

Another one is the "C Complete Reference" book by Herbert Schildt, a bit of a brick but very informative nonetheless.

brumScouse
Someone already mentioned "The C Programming Language". Please upvote that answer.
Evan Kroske
Right, you won't believe me if I said I didn't notice the paging....So either you know what page it is posted on, or you scrolled through each page looking to catch me out :) Will upvote when I have the time to scroll through the pages :)
brumScouse
Erm, I just noticed other people making reference to books already listed but they weren't down voted. Double standards there mate. I edited to remove reference to Programming Language.
brumScouse
Upvoted, mouth now shut.
brumScouse
http://catb.org/~esr/jargon/html/B/bullschildt.html ;)
John Barrett
@John - Ah well!!
brumScouse
Can people please justify the down votes. Citing someone else's comments as a reason just don't cut it. I want examples from the book which justify this downvote?! Oh and I upvoted the answer as requested upon realising my mistake
brumScouse
+3  A: 

The Python language was very influential to me, I wish I would have read these book years ago. The beauty and simplicity of the Python language really affected how I wrote code in other languages.

alt text alt text

Matthew J Morrison
I think starting new programmers with Python would reduce the amount of ugly code in the world. I work with someone who randomly indents lines - that person wouldn't do that if they had worked with Python for a few months.
xnine
I think starting new programmers with Python would reduce the amount of other languages.
Marco Mariani