What is the single most influential book every programmer should read?

Resources

Resources Problem Overview


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.

To search: Use the search box in the upper-right corner. To search the answers of the current question, use inquestion:this. For example:

inquestion:this "Code Complete"

Resources Solutions


Solution 1 - Resources

  • Code Complete (2nd edition) by Steve McConnell
  • The Pragmatic Programmer
  • Structure and Interpretation of Computer Programs
  • The C Programming Language by Kernighan and Ritchie
  • Introduction to Algorithms by Cormen, Leiserson, Rivest & Stein
  • Design Patterns by the Gang of Four
  • Refactoring: Improving the Design of Existing Code
  • The Mythical Man Month
  • The Art of Computer Programming by Donald Knuth
  • Compilers: Principles, Techniques and Tools by Alfred V. Aho, Ravi Sethi and Jeffrey D. Ullman
  • Gödel, Escher, Bach by Douglas Hofstadter
  • Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin
  • Effective C++
  • More Effective C++
  • CODE by Charles Petzold
  • Programming Pearls by Jon Bentley
  • Working Effectively with Legacy Code by Michael C. Feathers
  • Peopleware by Demarco and Lister
  • Coders at Work by Peter Seibel
  • Surely You're Joking, Mr. Feynman!
  • Effective Java 2nd edition
  • Patterns of Enterprise Application Architecture by Martin Fowler
  • The Little Schemer
  • The Seasoned Schemer
  • Why's (Poignant) Guide to Ruby
  • The Inmates Are Running The Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity
  • The Art of Unix Programming
  • Test-Driven Development: By Example by Kent Beck
  • Practices of an Agile Developer
  • Don't Make Me Think
  • Agile Software Development, Principles, Patterns, and Practices by Robert C. Martin
  • Domain Driven Designs by Eric Evans
  • The Design of Everyday Things by Donald Norman
  • Modern C++ Design by Andrei Alexandrescu
  • Best Software Writing I by Joel Spolsky
  • The Practice of Programming by Kernighan and Pike
  • Pragmatic Thinking and Learning: Refactor Your Wetware by Andy Hunt
  • Software Estimation: Demystifying the Black Art by Steve McConnel
  • The Passionate Programmer (My Job Went To India) by Chad Fowler
  • Hackers: Heroes of the Computer Revolution
  • Algorithms + Data Structures = Programs
  • Writing Solid Code
  • JavaScript - The Good Parts
  • Getting Real by 37 Signals
  • Foundations of Programming by Karl Seguin
  • Computer Graphics: Principles and Practice in C (2nd Edition)
  • Thinking in Java by Bruce Eckel
  • The Elements of Computing Systems
  • Refactoring to Patterns by Joshua Kerievsky
  • Modern Operating Systems by Andrew S. Tanenbaum
  • The Annotated Turing
  • Things That Make Us Smart by Donald Norman
  • The Timeless Way of Building by Christopher Alexander
  • The Deadline: A Novel About Project Management by Tom DeMarco
  • The C++ Programming Language (3rd edition) by Stroustrup
  • Patterns of Enterprise Application Architecture
  • Computer Systems - A Programmer's Perspective
  • Agile Principles, Patterns, and Practices in C# by Robert C. Martin
  • Growing Object-Oriented Software, Guided by Tests
  • Framework Design Guidelines by Brad Abrams
  • Object Thinking by Dr. David West
  • Advanced Programming in the UNIX Environment by W. Richard Stevens
  • Hackers and Painters: Big Ideas from the Computer Age
  • The Soul of a New Machine by Tracy Kidder
  • CLR via C# by Jeffrey Richter
  • The Timeless Way of Building by Christopher Alexander
  • Design Patterns in C# by Steve Metsker
  • Alice in Wonderland by Lewis Carol
  • Zen and the Art of Motorcycle Maintenance by Robert M. Pirsig
  • About Face - The Essentials of Interaction Design
  • Here Comes Everybody: The Power of Organizing Without Organizations by Clay Shirky
  • The Tao of Programming
  • Computational Beauty of Nature
  • Writing Solid Code by Steve Maguire
  • Philip and Alex's Guide to Web Publishing
  • Object-Oriented Analysis and Design with Applications by Grady Booch
  • Effective Java by Joshua Bloch
  • Computability by N. J. Cutland
  • Masterminds of Programming
  • The Tao Te Ching
  • The Productive Programmer
  • The Art of Deception by Kevin Mitnick
  • The Career Programmer: Guerilla Tactics for an Imperfect World by Christopher Duncan
  • Paradigms of Artificial Intelligence Programming: Case studies in Common Lisp
  • Masters of Doom
  • Pragmatic Unit Testing in C# with NUnit by Andy Hunt and Dave Thomas with Matt Hargett
  • How To Solve It by George Polya
  • The Alchemist by Paulo Coelho
  • Smalltalk-80: The Language and its Implementation
  • Writing Secure Code (2nd Edition) by Michael Howard
  • Introduction to Functional Programming by Philip Wadler and Richard Bird
  • No Bugs! by David Thielen
  • Rework by Jason Freid and DHH
  • JUnit in Action

Solution 2 - Resources

K&R

@Juan: I know Juan, I know - but there are some things that can only be learned by actually getting down to the task at hand. Speaking in abstract ideals all day simply makes you into an academic. It's in the application of the abstract that we truly grok the reason for their existence. :P

@Keith: Great mention of "The Inmates are Running the Asylum" by Alan Cooper - an eye opener for certain, any developer that has worked with me since I read that book has heard me mention the ideas it espouses. +1

Solution 3 - Resources

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

enter image description here

I started reading it because I wanted to learn Common Lisp. When I was halfway, I realized this was the greatest book about programming I had read so far.

Solution 4 - Resources

Discrete Mathematics For Computer Scientists

Discrete Mathematics For Computer Scientists by J.K. Truss.

While this doesn't teach you programming, it teaches you fundamental mathematics that every programmer should know. You may remember this stuff from university, but really, doing predicate logic will improve you programming skills, you need to learn Set Theory if you want to program using collections.

There really is a lot of interesting information in here that can get you thinking about problems in different ways. It's handy to have, just to pick up once in a while to learn something new.

Solution 5 - Resources

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.

Solution 6 - Resources

Definitively Software Craftsmanship

alt text

This book explains a lot of things about software engineering, system development. It's also extremly useful to understand the difference between different kind of product developement: web VS shrinkwrap VS IBM framework. What people had in mind when they conceived waterfall model? Read this and all we'll become clear (hopefully)

Solution 7 - Resources

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!

Solution 8 - Resources

Solution 9 - Resources

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.

Solution 10 - Resources

The practice of programming. By Brian W. Kernighan, Rob Pike.

The style shown here is excellent - the code just speaks for itself, and the whole book follows the KISS principle. Personally not my languages of choice, but still influential to me.

Solution 11 - Resources

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

Solution 12 - Resources

alt text

Solution 13 - Resources

Database System Concepts is one of the best books you can read on understanding good database design principles.

alt text

Solution 14 - Resources

Programming from the ground up. It's free on the internet. This book taught me AT&T asm. It is very easy to read.

alt text

Solution 15 - Resources

@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.

Solution 16 - Resources

"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."

Solution 17 - Resources

alt text

This last year I took a number of classes. I read

http://books.google.com/books?id=lqKho8KWXmAC&dq=the+innovator%27s+dilemma&printsec=frontcover&source=bn&hl=en&ei=MLhnSu_-DJWHlAev4LjgCQ&sa=X&oi=book_result&ct=result&resnum=4">The Innovator's Dilemma (disruptive tech)
http://en.wikipedia.org/wiki/The_Mythical_Man-Month">The Mythical Man Month (managing software)
http://en.wikipedia.org/wiki/Crossing_the_Chasm">Crossing the Chasm (startup)
http://pages.cs.wisc.edu/~dbbook/">Database Management Systems, The COW Book
http://oreilly.com/catalog/9780596003098/">Programming C#, The OSTRICH Book
http://www.apress.com/book/view/1430216263">Beginning iPhone Developmen, The GRAPEFRUIT Book

Each book was amazing but the Innovator's Dilemma by Clayton Christensen (1997!!!) is really a fantastic book, and it got me really thinking about the modern software world. The challenge addressed is disruptive technology, and how disk drive companies and non-technical companies are always disrupted by new, game changing technology. It gives one a new perspective when thinking about Google, probably the biggest 'web' company. Why do they have their hands in EVERYTHING? It's because they don't want to have their position disrupted by something new. The preview on google is plenty to get the idea. Read it!

Solution 18 - Resources

hackers, by Steven Levy.

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

Solution 19 - Resources

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.

Solution 20 - Resources

Solution 21 - Resources

The Practice of Programming

alt text

and

How to solve it by computer

alt text

Solution 22 - Resources

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

Solution 23 - Resources

The Mythical Man-Month by Fred Brooks http://en.wikipedia.org/wiki/The_Mythical_Man-Month

Solution 24 - Resources

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.

Solution 25 - Resources

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][1] 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").

[1]: http://www.amazon.com/gp/product/013215871X/103-8873709-5948669?ie=UTF8&tag=slidiuptheban-20&linkCode=xm2&camp=1789&creativeASIN=013215871X "A Discipline of Programming"

Solution 26 - Resources

Code Craft by Pete Goodliffe is a good read!

Code Craft

Solution 27 - Resources

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.

Solution 28 - Resources

alt text

C++ How to Program It is good for beginner.This is excellent book that full complete with 1500 pages.

Solution 29 - Resources

http://www.amazon.com/Masters-Doom-Created-Transformed-Culture/dp/0812972155/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1225044816&sr=8-1">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!

Solution 30 - Resources

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!

Solution 31 - Resources

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

Solution 32 - Resources

The TCP/IP Guide, by Charles M. Kozierok

Although it is described as an 'encyclopedic reference', it is incredibly readable as a narrative.

This author provides a very , very, very well written, comprehensive, introduction to networking and the infrastructure that underlies the web. Something all programmers ought to know.

For me it is the natural follow-on from Charles Petzold's 'Code'. If "Code" explains to the layman how computers work, 'The TCP/IP Guide' explains how they connect together.

If you gave a 12 year old geek a copy 'Code' and a copy of 'The TCP/IP Guide' - they'd be building the next Google by the age of 17.

In other words, if I could go back in time and tell myself to read a specific book at the beginning of my career as a developer, this (plus Code) is up there in the top of my list.

Solution 33 - Resources

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

Solution 34 - Resources

The Pragmatic Programmer: From Journeyman to Master without a doubt. The advice in it is so well presented, and simple, that it comes across as if it was 'The Common Sense Programmer'. Love it.

Solution 35 - Resources

Solution 36 - Resources

In no particular order except how they're arranged on my bookshelf:

  • The Pragmatic Programmer
  • Rafactoring by Fowler
  • Working Effectively with Legacy Code by Feathers. This is practically a companion volume to Refactoring.
  • UML Distilled by Fowler. Among its other virtues is brevity.
  • Debugging the Development Process by Steve Maguire
  • Design Patterns (aka "Gang of Four") by Gamma et al

Solution 37 - Resources

Mr. Bunny's Guide To ActiveX

Solution 38 - Resources

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.

Solution 39 - Resources

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.

Solution 40 - Resources

Rapid Development by McConnell

Solution 41 - Resources

As I started out developing in Java (and am still doing so to this very day) I'd have to recommend the outstanding work in the field: Mr Bunny's Big Cup o' Java.

From the author's blurb:

> There is simply no better way to learn Java than to have the pineal gland of an expert Java programmer surgically implanted in your brain. Sadly, most HMOs refuse to pay for this career saving procedure, deeming Java to be too experimental. At last there is an alternative treatment for those of us who cannot wait for sweeping health care reforms. > > Mr. Bunny’s Big Cup O’ Java is recommended by n out of ten doctors, where n is any integer you wish to make up to impress an astoundingly gullible public. The book begins with an overview of the book, and quickly expands into the book itself. Just look at the topics covered: > > - Java > > In short, MBBCOJ will teach you all you need to know for a successful career in today’s rabbit development environments.

The insight into pixels alone would have cut years off my software developing life.

Solution 42 - Resources

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

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

Solution 43 - Resources

alt text

alt text

Solution 44 - Resources

Solution 45 - Resources

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.

Solution 46 - Resources

This one isnt really a book for the beginning programmer, but if you're looking for SOA design books, then SOA in Practice: The Art of Distributed System Design is for you.

Solution 47 - Resources

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

It had a profound influence on how I write software.

Solution 48 - Resources

Facts and Fallacies of Software Engineering by Robert L. Glass

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.

Solution 49 - Resources

Not the most influential, but worth a look is Youth by J.M.Coetzee.

The narrator of Youth, a student in the South Africa of the 1950s, has long been plotting an escape from his native country: from the stifling love of his mother, from a father whose failures haunt him, and from what he is sure is impending revolution. Studying mathematics, reading poetry, saving money, he tries to ensure that when he arrives in the real world, wherever that may be, he will be prepared to experience life to its full intensity, and transform it into art. Arriving at last in London, however, he finds neither poetry nor romance. Instead he succumbs to the monotony of life as a computer programmer, from which random, loveless affairs offer no relief. Devoid of inspiration, he stops writing. An awkward colonial, a constitutional outsider, he begins a dark pilgrimage in which he is continually tested and continually found wanting.

youth cover

Solution 50 - Resources

Perfect Software: And Other Illusions about Testing

TITLE Cover

Perfect Software: And Other Illusions about Testing by Gerald M. Weinberg

ISBN-10: 0932633692

ISBN-13: 978-0932633699

Solution 51 - Resources

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.

Solution 52 - Resources

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.

Solution 53 - Resources

Enterprise Patterns and MDA: Building Better Software with Archetype Patterns and UML

An excellent read for those looking to leverage ORM and UML

Enterprise Patterns and MDA: Building Better Software with Archetype Patterns and UML

Solution 54 - Resources

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.

Solution 55 - Resources

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.

Solution 56 - Resources

Solution 57 - Resources

Programming Perl (O'Reilly)

Solution 58 - Resources

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

Solution 59 - Resources

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

Solution 60 - Resources

Object-Oriented Software Construction by Bertrand Meyer

Solution 61 - Resources

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.

Solution 62 - Resources

Solution 63 - Resources

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.

Solution 64 - Resources

Solution 65 - Resources

How influential a book is often depends on the reader and where they were in their career when they read the book. I have to give a shout-out to Head First Design Patterns. Great book and the very creative way it's written should be used as an example for other tech book writers. I.e. it's written in order to facilitate learning and internalizing the concepts.

Head First Design Patterns

Solution 66 - Resources

My vote is "How to Think Like a Computer Scientist: Learning With Python" It's available both as a book and as a free e-book.

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!

Solution 67 - Resources

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.

Solution 68 - Resources

This isn't a direct answer to the question, because I feel it's already been answered above, however, one of the books that definitely had an impact on how I code is Code Reading, Volume 1: The Open Source Perspective.

alt text

Solution 69 - Resources

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.

Solution 70 - Resources

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.

http://www.amazon.co.uk/Code-Language-DV-Undefined-Charles-Petzold/dp/0735611319/ref=sr_1_1?ie=UTF8&s=books&qid=1221573014&sr=8-1">Code</a>

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.

Solution 71 - Resources

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.

Solution 72 - Resources

Cocoa Programming for Mac OS X by Aaron Hillegass

Solution 73 - Resources

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

Solution 74 - Resources

The Unix Programming Environment by Kernighan and Pike.

The Unix Programming Environment

More than any other book, it taught me the benefits in building small, easily-tested tools that can be combined to do big things.

Solution 75 - Resources

Extreme Programming by Kent Beck

Solution 76 - Resources

http://ecx.images-amazon.com/images/I/519J3P8ANML._SL500_AA240_.jpg"/>

Took my programing to a whole new level.

Solution 77 - Resources

Coder to Developer, by Mike Gunderloy.

Solution 78 - Resources

The most influential programming book for me was Enough Rope to Shoot Yourself in the Foot by Allen Holub.

Cover of the book

O, well, how long ago it was.

Solution 79 - Resources

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

[1]: http://www.amazon.com/Smalltalk-Best-Practice-Patterns-Kent/dp/013476904X/ref=pd_bbs_sr_5?ie=UTF8&s=books&qid=1221725048&sr=8-5 "Smalltalk Best Practice Patterns"

Solution 80 - Resources

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.

Solution 81 - Resources

A Whole New Mind, by Daniel Pink. Interesting take on the future of our industry.

I assume most of the folks reading this will have read the books at the top of the list already. So, i'll offer a book that takes a different look at our industry.

alt text

Solution 82 - Resources

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.

Solution 83 - Resources

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.

Solution 84 - Resources

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)

Solution 85 - Resources

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

Solution 86 - Resources

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

Solution 87 - Resources

Peter Norton's Assembly Language Book for the IBM PC

alt text

I had spent countless nights in front of the pc (DOS), exploring unknown worlds :-D

Solution 88 - Resources

Advanced Programming in the UNIX environment - W. Richard Stevens

Solution 89 - Resources

Solution 90 - Resources

Working Effectively with Legacy Code is a really amazing book that goes into great detail about how to properly unit test your code and what the true benefit of it is. It really opened my eyes.

Solution 91 - Resources

Read Head First Design Patterns for a much more accessible introduction than the GoF book. I remember feeling like I'd leveled up after each chapter.

Kent Beck's Test Driven Development by Example for TDD.

Solution 92 - Resources

Solution 93 - Resources

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

Solution 94 - Resources

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.

Solution 95 - Resources

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

Solution 96 - Resources

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.

Solution 97 - Resources

Win32 Programming by Charles Petzold

Solution 98 - Resources

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 :-)

Solution 99 - Resources

"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

Solution 100 - Resources

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNotMyselfView Question on Stackoverflow
Solution 1 - ResourcesJustin StandardView Answer on Stackoverflow
Solution 2 - ResourcesJason BuntingView Answer on Stackoverflow
Solution 3 - ResourcesMichiel BorkentView Answer on Stackoverflow
Solution 4 - ResourcesTarskiView Answer on Stackoverflow
Solution 5 - ResourcesNicholas PiaseckiView Answer on Stackoverflow
Solution 6 - ResourcesSalvatore Dario MinonneView Answer on Stackoverflow
Solution 7 - Resourcesuser118861View Answer on Stackoverflow
Solution 8 - ResourcesamitView Answer on Stackoverflow
Solution 9 - ResourcesTrueWillView Answer on Stackoverflow
Solution 10 - ResourcesRD1View Answer on Stackoverflow
Solution 11 - ResourcesDave ClarkeView Answer on Stackoverflow
Solution 12 - ResourcesshawndumasView Answer on Stackoverflow
Solution 13 - ResourcesRyan BergerView Answer on Stackoverflow
Solution 14 - ResourcesladookieView Answer on Stackoverflow
Solution 15 - ResourcesnlucaroniView Answer on Stackoverflow
Solution 16 - ResourcesLarry OBrienView Answer on Stackoverflow
Solution 17 - ResourcesTahoeWolverineView Answer on Stackoverflow
Solution 18 - ResourcestsilbView Answer on Stackoverflow
Solution 19 - ResourcesDerrickView Answer on Stackoverflow
Solution 20 - ResourcesAseemView Answer on Stackoverflow
Solution 21 - Resourcesagupta666View Answer on Stackoverflow
Solution 22 - ResourcesMatthew J MorrisonView Answer on Stackoverflow
Solution 23 - ResourcesLoren CharnleyView Answer on Stackoverflow
Solution 24 - ResourceslurksView Answer on Stackoverflow
Solution 25 - Resourcesjoel.neelyView Answer on Stackoverflow
Solution 26 - ResourcesmattrumaView Answer on Stackoverflow
Solution 27 - ResourcesicelavaView Answer on Stackoverflow
Solution 28 - ResourcesKrirkView Answer on Stackoverflow
Solution 29 - ResourcesJasper BekkersView Answer on Stackoverflow
Solution 30 - ResourcesCharlie FlowersView Answer on Stackoverflow
Solution 31 - ResourcesmikeView Answer on Stackoverflow
Solution 32 - ResourcesJW.View Answer on Stackoverflow
Solution 33 - ResourcesbruceatkView Answer on Stackoverflow
Solution 34 - ResourcesNate SmithView Answer on Stackoverflow
Solution 35 - ResourcesKibbeeView Answer on Stackoverflow
Solution 36 - ResourcesEric PohlView Answer on Stackoverflow
Solution 37 - ResourcesPaul TomblinView Answer on Stackoverflow
Solution 38 - ResourcesOnorio CatenacciView Answer on Stackoverflow
Solution 39 - ResourcesGarth KiddView Answer on Stackoverflow
Solution 40 - ResourcesMattHView Answer on Stackoverflow
Solution 41 - ResourcesAdrianView Answer on Stackoverflow
Solution 42 - ResourcesSteven BoseView Answer on Stackoverflow
Solution 43 - ResourcesxportView Answer on Stackoverflow
Solution 44 - ResourcesMark BiekView Answer on Stackoverflow
Solution 45 - ResourceschristefanoView Answer on Stackoverflow
Solution 46 - ResourcesKilhofferView Answer on Stackoverflow
Solution 47 - ResourcesBryan OakleyView Answer on Stackoverflow
Solution 48 - ResourcesafternoonView Answer on Stackoverflow
Solution 49 - ResourcesPete KirkhamView Answer on Stackoverflow
Solution 50 - ResourcesRyan FernandesView Answer on Stackoverflow
Solution 51 - ResourcesDave ClarkeView Answer on Stackoverflow
Solution 52 - ResourcesGeorge MarianView Answer on Stackoverflow
Solution 53 - ResourcesDaniel MaurićView Answer on Stackoverflow
Solution 54 - ResourcesMario MarinatoView Answer on Stackoverflow
Solution 55 - ResourcesPatrick HoganView Answer on Stackoverflow
Solution 56 - ResourcesSvenView Answer on Stackoverflow
Solution 57 - ResourcesrikxikView Answer on Stackoverflow
Solution 58 - ResourcesCard VisitorView Answer on Stackoverflow
Solution 59 - ResourcesJayView Answer on Stackoverflow
Solution 60 - Resourcesuser12933View Answer on Stackoverflow
Solution 61 - ResourcesnlativyView Answer on Stackoverflow
Solution 62 - ResourcesstuView Answer on Stackoverflow
Solution 63 - ResourcesLevi CampbellView Answer on Stackoverflow
Solution 64 - ResourcesArielView Answer on Stackoverflow
Solution 65 - ResourcesDave NicholView Answer on Stackoverflow
Solution 66 - ResourcesErikTView Answer on Stackoverflow
Solution 67 - ResourcesMahol25View Answer on Stackoverflow
Solution 68 - ResourcesricinView Answer on Stackoverflow
Solution 69 - ResourcesWaldWolfView Answer on Stackoverflow
Solution 70 - ResourcesHenry BView Answer on Stackoverflow
Solution 71 - ResourcesBrian GView Answer on Stackoverflow
Solution 72 - ResourcesJonathanView Answer on Stackoverflow
Solution 73 - ResourcesChristian DView Answer on Stackoverflow
Solution 74 - ResourcesCraig TraderView Answer on Stackoverflow
Solution 75 - ResourcesthvoView Answer on Stackoverflow
Solution 76 - ResourcesKris GrayView Answer on Stackoverflow
Solution 77 - ResourcesScott LawrenceView Answer on Stackoverflow
Solution 78 - ResourcesAnton OrlovView Answer on Stackoverflow
Solution 79 - ResourcesFordView Answer on Stackoverflow
Solution 80 - ResourcesMike LouwView Answer on Stackoverflow
Solution 81 - ResourcesCR.View Answer on Stackoverflow
Solution 82 - ResourcesserfmumView Answer on Stackoverflow
Solution 83 - ResourcesAndrew HansonView Answer on Stackoverflow
Solution 84 - ResourcesSylvain RodrigueView Answer on Stackoverflow
Solution 85 - ResourcesRoubachofView Answer on Stackoverflow
Solution 86 - ResourcesscimView Answer on Stackoverflow
Solution 87 - ResourcesNick DandoulakisView Answer on Stackoverflow
Solution 88 - ResourcesEricSchaeferView Answer on Stackoverflow
Solution 89 - ResourcesMichał PiaskowskiView Answer on Stackoverflow
Solution 90 - ResourcesLeeView Answer on Stackoverflow
Solution 91 - ResourcesBill the LizardView Answer on Stackoverflow
Solution 92 - ResourcesflipdoubtView Answer on Stackoverflow
Solution 93 - ResourcespkochView Answer on Stackoverflow
Solution 94 - ResourcesDominic EidsonView Answer on Stackoverflow
Solution 95 - ResourcesGürkan YeniçeriView Answer on Stackoverflow
Solution 96 - ResourcesPenfoldView Answer on Stackoverflow
Solution 97 - ResourcesBharaniView Answer on Stackoverflow
Solution 98 - ResourcesPatView Answer on Stackoverflow
Solution 99 - ResourcesJames CurranView Answer on Stackoverflow
Solution 100 - ResourcesCraig HyattView Answer on Stackoverflow