100 Most Influential Books According to Stack Overflow

Please read this blog post to see why this is here. This data was created on 02/13/2012 20:00:00

All content found below was taken from Stack Overflow in accordance with the Creative Commons license governing the site. As such, you are free to use this data as you wish so long as the proper attribution is used.

Code Complete (2nd Ed) by Steve McConnell

cover

  • "The encyclopedia of good programming practice, Code Complete focuses on individual craftsmanship -- all the things that add up to what we instinctively call "writing clean code." This is the kind of book that has 50 pages just talking about code layout and whitespace." --Joel (NB imo there's more to it than semantics)

The Pragmatic Programmer; it's more about your trade, and how to apply it than the code per se, but it's still very good.

This is a great book for programmers who have learned the mechanics of programming, maybe in college, but don't quite feel secure deciding what to do. It's like the difference between drafting and architecture. What you learned in that class in college was drafting, and you can draw beautifully, but if you still feel like you wouldn't quite know where to begin if someone told you to write a P2P music-swapping network all by yourself, this is the book for you.

--Joel

The Pragmatic Programmer

enter image description here

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

Some classics like Code CompleteRefactoring and Design Patterns teach you the effective working habits and the painstaking details of the trade. Others, like PeoplewarePsychology 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 machinesinterpreters, 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.

The C Programming Language by Kernighan and Ritchie.

The C Programming Language Book

It is concise, easy to read, and it will teach you three things: the C programming languagehow to think like a programmer, and the low-level computational model. (It is important to understand what's going on "under the hood".)

Introduction to algorithms (Cormen, Leiserson, Rivest, Stein) aka CLRS - 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...

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

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

Refactoring: Improving the Design of Existing Code

In podcast 12, Jeff and Joel list a myriad of recommended books. Personally though I highly recommend The Mythical Man-Month.

image

The Art of Computer Programming if only for the effort Knuth put into it.

First Volume Hardcover

I'm surprised no one's mentioned the Dragon Book by Aho et al. (or if it has been mentioned, I missed it).

Compilers (The Dragon Book) by Aho et al Newer Version

I will never forget the first edition's cover. This book made me realize just how magically awesome compilers truly are. :)

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 easierHead-First Design Patterns, and once you have got your head around the basic principles, progress to the great GoF bible...

For a truly deep read, I'd suggest Douglas Hofstadter's Gödel, Escher, Bach. He dives pretty deep into many of the issues that programmers face every day- recursion, verifiability, proof, and boolean algebra. Great read, a little off the beaten path, occasionally challenging, and extremely rewarding once you fight through it and process what you've read.

Godel-Escher-Bach Cover

Clean Code

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

Effective C++ and More Effective C++

From the early days of my career, Scott Meyer's Effective C++ and later More Effective C++ both had an immediate impact on my programming ability. As a friend put it at the time, those books allow you to short cut the process of developing programming skills that otherwise would have taken years.

alt text

In the last year, the book with the biggest impact on my thinking has been The Cathedral and the Bazaar which taught me a lot about how the open source development process works and how to get rid of bugs from my code.

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 really recommend programming pearls, it's got some amazing stuff in it, although I'm not ashamed to admit that I didn't understand half of it!

alt text

Working Effectively with Legacy Code

by Michael Feathers. I don't think that any book has affected my opinion of how I code more than this one. It explicitly tells you how to deal with someone elses code but implicitly you'll learn what to avoid (and why).

Edit: Makes sense now.

alt text

For me the most influencal book is "Zen and the Art of Motorcycle Maintenance" by Robert Pirsig. It is all about no matter what you do, always strive for perfection, know your tools and task at hand inside-out, and, most of all, have fun (because if you are having fun, everything automatically leads to better results).

alt text

This book has a more recent edition (2000).

Two great long-quotes from it

Quality -- you know what it is, yet you don't know what it is. But that's self- contradictory. But some things are better than others, that is, they have more quality. But when you try to say what the quality is, apart from the things that have it, it all goes poof! There's nothing to talk about. But if you can't say what Quality is, how do you know what it is, or how do you know that it even exists? If no one knows what it is, then for all practical purposes it doesn't exist at all. But for all practical purposes it really does exist. What else are the grades based on? Why else would people pay fortunes for some things and throw others in the trash pile? Obviously some things are better than others -- but what's the ``betterness''? -- So round and round you go, spinning mental wheels and nowhere finding anyplace to get traction. What the hell is Quality? What is it?

Mountains should be climbed with as little effort as possible and without desire. The reality of your own nature should determine the speed. If you become restless, speed up. If you become winded, slow down. You climb the mountain in an equilibrium between restlessness and exhaustion. Then, when you're no longer thinking ahead, each footstep isn't just a means to an end but a unique event in itself. This leaf has jagged edges. This rock looks loose. From this place the snow is less visible, even though closer. These are things you should notice anyway. To live only for some future goal is shallow. It's the sides of the mountain which sustain life, not the top. Here's where things grow.

Get it here

Peopleware

Demarco and Lister demonstrate that the major issues of software development are human, not technical. Their answers aren't easy--just incredibly successful. New second edition features eight all-new chapters.

alt text

Coders at Work by Peter Seibel. A very influential book to learn from the experience of some of the top names in the field, how they think and work. 

alt text

ok, this is a slightly off-center answer, but believe it or not, it was on the reading list for a compsci course way back in the day. An excellent role model and a good book about curiosity.

Surely You're Joking, Mr. Feynman!

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.

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

alt text

I agree with Cristian, I think we should not forget SICP, I think every programmer should use it, al least as an exercise, you can complement it with;

The Little Schemer
alt text and

The Seasoned Schemer

alt text

I also include in the reading list Code Complete, Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process and Design Patterns and Design Patterns: Elements of Reusable Object-Oriented Software

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.

@lurks

The Art Of UNIX Programming by Eric S. Raymond

It is useful regardless operating system you use.

Many of the books already mentioned opened my eyes and influenced me, but a book every programmer should read is Test-Driven Development by Example. It really showed me the importance of unit tests and TDD and got me started very quick.

cover

Practices of an Agile Developer

Working in the Real World.

Practices of an Agile Developer Book Cover

Strunk, William. Elements of Style

elements of style

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.

enter image description here

How to Win Friends and Influence People by Dale Carnegie.

It taught me that in order to persuade people of your ideas, or lead them away from bad practices, you can never tell them that they are wrong. To do so will only entrench them further in their own ideas.

Domain Driven Design by Eric Evans

cover

alt text

I'd suggest "Modern C++ Design" by Andrei Alexandrescu, a really astonishing book about the awesome tricks and patterns you can achieve with C++, preprocessor directives and templates.

Modern C++ Design

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.

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

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

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

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.

enter image description here

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

alt text

Dilbert's Guide To The Rest Of Your Life: Dispatches from Cubicleland

alt text

This is more truth than you'd think.

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

I'm amazed that no one has suggested The Story About Ping yet.

If this text is displayed then the link to the image may be broken - apologies to Lynx users.

alt text

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

JavaScript - The Good Parts

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

The books listed here in this question are great. Code Complete, Pragmatic Programmer, Head First Design Patterns, all great.

My contribution to this list is a free read and is really focused on getting back to (best practice) basics. Foundations of Programming is a free eBook from one of the contributors to the popular Alt.Net blogs CodeBetter, Karl Seguin.

Covers Domain Driven Design, Persistence, Dependency Injection, Unit Testing, ORM etc.

alt text

I know this is a graphics book, but I am a graphics programmer and have been my whole career. Plus it's written in 'C' :)

It's as fundamental to me as the original K&R C Programming Language book.

Computer Graphics: Principles and Practice in C (2nd Edition) alt text

My favorite books are already covered here, but if you need to learn Java, I enjoyed Bruce Eckel's book, Thinking in Java.

alt text

Code Complete is the classic.

However, Facts and Fallacies of Software Engineering by Robert Glass has a lot of good information on topics other than coding, for example people-issues, testing and process.

cover

The Elements Of Computing Systems

This book walks the reader through the process of building a computer system given NAND gates and flip flops. It gives a good introduction to the "big picture".

The Elements Of Computing Systems

Refactoring to Patterns by Joshua Kerievsky

alt text

The Design of Everyday Things

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.

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

alt text

alt text

Not the most important, but a very fundamental one

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

Computer System - A programmer's perspective

alt text

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

My career as a developper is starting, so I cannot directly answer the question. But as .NET developper, the book that helped me the most in framework and reusable libraries design is "Framework Design Guidelines" by Brad Abrams. The book solves a lot of issue you can encounter when you are thinking about naming and crucial design choices. This is the best way to produce high reusable assemblies in .NET.

Framework Design Guidelines

I am pretty surprised that nobody mentioned that book. What is sure is that it has been really influential on my design and naming habits when writing reusable assemblies.

One thing I really appreciate in this book is the notes of .NET Framework developers giving details on issues they had when designing the .NET Framework, which I think are good advices as it is representative of a well designed framework.

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.

Growing Object-Oriented Software, Guided by Tests

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

=)

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

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

There are alot of really great books in the answers. One that isn't mentioned that I absolutely love is Object Thinking by Dr. David West. This book had a huge impact on me because it explains the why more than the how.

Object Thinking

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.

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

Hackers and Painters: Big Ideas from the Computer Age

CLR via C#, by Jeffrey Richter

alt text

Christopher Alexander - The Timeless Way of Building

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

I thought Design Patterns in C# by Steve Metsker was good. The examples are a bit more advanced (and useful) than some other design pattern books I've read.

alt text

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

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

Maybe not the single most influential for every programmer but... to expand really expand your mind about computation in general, and to learn to write some very interesting programs, I recommend the 
Computational Beauty of Nature.

alt text

BTW, the author is now head of Microsoft's Live Labs.

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.

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.

Writing Solid Code, by Steve Maguire. Code Complete is a close runner-up.

Here Comes Everybody: The Power of Organizing Without Organizations - Clay Shirky alt text

This is an incredible book about the social effects of the internet. A must read for anyone in the tech industry, doubly so for programmers.

Here Comes Everybody: The Power of Organizing Without Organizations is a book about what happens when people are given the tools to do things together, without needing traditional organizational structures.

I was lucky enough to read this pretty early in my so-called career:

Philip and Alex's Guide to Web Publishing

It was cutting edge in 1998 and still has plenty of relevant points. I found it an enjoyable read with a real sense of humour (not the twee kind you often get in software books). When he gets down to the details he talks about specific platforms though, so it shows it's age when Oracle 7 is mentioned!

I would still put this at the top of the required reading list for a web developer because of the way it assumes no prior knowledge, starting from first principles ("what's HTML?")

alt text

JavaScript: The Good Parts by Douglas Crockford

Opened my eyes to the goodness hidden in JavaScript and how bad the examples of JavaScript are strewn through tutorial sites.

Essential reading for anyone serious about web client side development.

It also improved my C# and showed me the light to dynamic languages.

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

Effective Java by Joshua Bloch

There are similar questions here and here.

I don't know if it were already suggested but:

alt text

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.

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

The Productive programmer. its a natural extension of "the pragmatic programer" which gets a little more into the every day details.

alt text

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?

JUnit in Action

Unit testing is one thing that I really wished I knew at the start of my programming career rather than the middle of it.

As to the general "what good books have you read" offshoot of this thread:

Mastering the Requirements Process

Writing requirements is one area where I suck, this book helped a lot.

Now off to order a book or two from Amazon... ;)

原文地址:https://www.cnblogs.com/yingkong1987/p/3286387.html