Sunday, September 4, 2011

Top Ten Most Influential Programming Books of All Time

As voted on by several thousand members of StackOverflow in this article here.

The original question was:

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

Since it was first posed back in 2008, this question has become the second most popular question of all time on StackOverflow.

Here are the results:
  1. Code Complete (2nd Edition)
    By Steve McConnell
    Published: July 7, 2004
    Publisher: Microsoft Press
    Amazon Link: here

    Widely considered one of the best practical guides to programming, this book has been helping developers write better software for more than a decade. The second edition was updated with leading-edge practices and hundreds of new code samples, illustrating the art and science of software construction. Capturing the body of knowledge available from research, academia, and everyday commercial practice, McConnell synthesizes the most effective techniques and must-know principles into clear, pragmatic guidance. No matter what your experience level, development environment, or project size, this book will inform and stimulate your thinking, and help you build the highest quality code.

  2. The Pragmatic Programmer: From Journeyman to Master
    By Andrew Hunt and David Thomas
    Published: October 30, 1999
    Publisher: Addison-Wesley Professional
    Amazon Link: here

    Like any other craft, computer programming has spawned a body of wisdom, most of which isn't taught at universities or in certification classes. Most programmers arrive at the so-called tricks of the trade over time, through independent experimentation. In The Pragmatic Programmer, Andrew Hunt and David Thomas codify many of the truths they've discovered during their respective careers as designers of software and writers of code. The cool thing about this book is that it's great for keeping the programming process fresh. The book helps you to continue to grow and clearly comes from people who have been there.

  3. Structure and Interpretation of Computer Programs, Second Edition
    By Harold Abelson, Gerald J Sussman and Julie Sussman
    Published: August 1, 1996
    Publisher: McGraw-Hill Science/Engineering/Math
    Amazon Link: here

    Teaches readers how to program by employing the tools of abstraction and modularity. The authors' central philosophy is that programming is the task of breaking large problems into small ones. You will learn a thing or two about functional programming, lazy evaluation, metaprogramming (well, metalinguistic abstraction), virtual machines, interpreters, and compilers. The book was originally written for the famous 6.001, the introductory programming course at MIT. It may require an intellectual effort to read, but the reward is well worth the price.

  4. The C Programming Language (2nd Edition)
    By Brian W Kernighan and Dennis M Ritchie
    Published: April 1, 1988
    Publisher: Prentice Hall
    Amazon Link: here

    Concise and easy to read, it will teach you three things: the C programming language, how to think like a programmer, and the C abstract machine model (what's going on "under the hood"). Co-written by Dennis Ritchie, the inventor of the C programming language.

  5. Introduction to Algorithms
    By Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein
    Published: July 31, 2009
    Publisher: The MIT Press
    Amazon Link: here

    Introduction to Algorithms, the 'bible' of the field, is a comprehensive textbook covering the full spectrum of modern algorithms: from the fastest algorithms and data structures to polynomial-time algorithms for seemingly intractable problems, from classical algorithms in graph theory to special algorithms for string matching, computational geometry, and number theory. The revised third edition notably adds a chapter on van Emde Boas trees, one of the most useful data structures, and on multithreaded algorithms, a topic of increasing importance.

  6. Refactoring: Improving the Design of Existing Code
    By Martin Fowler, Kent Beck, John Brant and William Opdyke
    Published: July 8, 1999
    Publisher: Addison-Wesley Professional
    Amazon Link: here

    Refactoring is about improving the design of existing code. It is the process of changing a software system in such a way that it does not alter the external behavior of the code, yet improves its internal structure. With refactoring you can even take a bad design and rework it into a good one. This book offers a thorough discussion of the principles of refactoring, including where to spot opportunities for refactoring, and how to set up the required tests. There is also a catalog of more than 40 proven refactorings with details as to when and why to use the refactoring, step by step instructions for implementing it, and an example illustrating how it works The book is written using Java as its principle language, but the ideas are applicable to any OO language.

  7. Design Patterns: Elements of Reusable Object-Oriented Software
    By Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides (Also known as "The Gang of Four")
    Published: November 10, 1994
    Publisher: Addison-Wesley Professional
    Amazon Link: here

    Design Patterns is a modern classic in the literature of object-oriented development, offering timeless and elegant solutions to common problems in software design. It describes patterns for managing object creation, composing objects into larger structures, and coordinating control flow between objects. The book provides numerous examples where using composition rather than inheritance can improve the reusability and flexibility of code. Note, though, that it's not a tutorial but a catalog that you can use to find an object-oriented design pattern that's appropriate for the needs of your particular application--a selection for virtuoso programmers who appreciate (or require) consistent, well-engineered object-oriented designs.

  8. The Mythical Man-Month: Essays on Software Engineering
    By Frederick P. Brooks
    Published: August 12, 1995
    Publisher: Addison-Wesley Professional
    Amazon Link: here

    Few books on software project management have been as influential and timeless as The Mythical Man-Month. With a blend of software engineering facts and thought-provoking opinions, Fred Brooks offers insight for anyone managing complex projects. These essays draw from his experience as project manager for the IBM System/360 computer family and then for OS/360, its massive software system. Now, 20 years after the initial publication of his book, Brooks has revisited his original ideas and added new thoughts and advice, both for readers already familiar with his work and for readers discovering it for the first time.

  9. Art of Computer Programming, Volume 1: Fundamental Algorithms (3rd Edition)
    By Donald E. Knuth
    Published: July 17, 1997
    Publisher: Addison-Wesley Professional
    Amazon Link: here

    The bible of all fundamental algorithms and the work that taught many of today's software developers most of what they know about computer programming. One of the book's greatest strengths is the wonderful collection of problems that accompany each chapter. The author has chosen problems carefully and indexed them according to difficulty. Solving a substantial number of these problems will help you gain a solid understanding of the issues surrounding the given topic. Furthermore, the exercises feature a variety of classic problems.

  10. Compilers: Principles, Techniques, and Tools (2nd Edition)
    By Alfred V. Aho, Monica S. Lam, Ravi Sethi and Jeffrey D. Ullman
    Published: September 10, 2006
    Publisher: Prentice Hall
    Amazon Link: here

    Known to professors, students, and developers worldwide as the "Dragon Book," the latest edition has been revised to reflect developments in software engineering, programming languages, and computer architecture that have occurred since 1986, when the last edition published.  The authors, recognizing that few readers will ever go on to construct a compiler, retain their focus on the broader set of problems faced in software design and software development.

    Follow @dodgy_coder

    UPDATE:  There was just too many great books that finished outside of the top 10 to ignore... below I've added the programming books which finished placed 11th through to 30th in the survey... enjoy!

  11. Head First Design Patterns
    By Elisabeth Freeman, Eric Freeman, Bert Bates and Kathy Sierra
    Published: November 1, 2004
    Publisher: O'Reilly Media
    Amazon Link: here

  12. Gödel, Escher, Bach: An Eternal Golden Braid (20th Anniversary Edition)
    By Douglas Hofstadter
    Published: February 5, 1999
    Publisher: Basic Books
    Amazon Link: here

  13. Effective C++: 55 Specific Ways to Improve Your Programs and Designs (3rd Edition)
    By Scott Meyers
    Published: May 22, 2005
    Publisher: Addison-Wesley Professional
    Amazon Link: here

  14. Clean Code: A Handbook of Agile Software Craftsmanship
    By Robert C Martin
    Published: August 11, 2008
    Publisher: Prentice Hall
    Amazon Link: here

  15. Programming Pearls (2nd edition)
    By Jon Bentley
    Published: October 7, 1999
    Publisher: Addison-Wesley Professional
    Amazon Link: here

  16. Working Effectively with Legacy Code
    By Michael Feathers
    Published: October 2, 2004
    Publisher: Prentice Hall
    Amazon Link: here

  17. CODE: The Hidden Language of Computer Hardware and Software
    By Charles Petzold
    Published: November 11, 2000
    Publisher: Microsoft Press
    Amazon Link: here

  18. Peopleware: Productive Projects and Teams (2nd Edition)
    By Tom DeMarco and Timothy Lister
    Published: February 1, 1999
    Publisher: Dorset House
    Amazon Link: here

  19. Coders at Work: Reflections on the Craft of Programming
    By Peter Seibel
    Published: September 16, 2009
    Publisher: Apress
    Amazon Link: here

  20. Effective Java (2nd Edition)
    By Joshua Bloch
    Published: May 28, 2008
    Publisher: Prentice Hall
    Amazon Link: here

  21. Patterns of Enterprise Application Architecture
    By Martin Fowler
    Published: November 15, 2002
    Publisher: Addison-Wesley Professional
    Amazon Link: here

  22. The Little Schemer (4th Edition)
    By Daniel P. Friedman, Matthias Felleisen, Duane Bibby
    Published: December 21, 1995
    Publisher: The MIT Press
    Amazon Link: here

  23. The Inmates Are Running The Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity
    By Alan Cooper
    Published: March 5, 2004
    Publisher: Sams - Pearson Education
    Amazon Link: here

  24. The Art of UNIX Programming
    By Eric S Raymond
    Published: October 3, 2003
    Publisher: Addison-Wesley Professional
    Amazon Link: here

  25. Practices of an Agile Developer
    By Venkat Subramaniam and Andy Hunt
    Published: July 1, 2005
    Publisher: Pragmatic Bookshelf
    Amazon Link: here

  26. The Elements of Style: 50th Anniversary Edition
    By William Strunk and E. B. White
    Published: October 25, 2008
    Publisher: Longman
    Amazon Link: here

  27. Test-Driven Development: By Example
    By Kent Beck
    Published: November 18, 2002
    Publisher: Addison-Wesley Professional
    Amazon Link: here

  28. Don't Make Me Think: A Common Sense Approach to Web Usability
    By Steve Krug
    Published: August 28, 2005
    Publisher: New Riders Press
    Amazon Link: here

  29. Domain Driven Design: Tackling Complexity in the Heart of Software
    By Eric Evans
    Published: August 30, 2003
    Publisher: Addison-Wesley Professional
    Amazon Link: here

  30. Modern C++ Design: Generic Programming and Design Patterns Applied
    By Andrei Alexandrescu
    Published: February 23, 2001
    Publisher: Addison-Wesley Professional
    Amazon Link: here


    Follow @dodgy_coder

24 comments:

  1. I sorely miss Kernighan and Pike's The Practice of Programming in the list

    ReplyDelete
  2. @phidip, "The Practice of Programming" made it to number 38 in the original StackOverflow list. I like Robert C Martin's "Agile Software Development, Principles, Patterns, and Practices" which came in at number 36.

    ReplyDelete
  3. What of the Wirthless book, "Algorithms + Data Structures = Programs"?

    ReplyDelete
  4. @Joel "Programming Pearls" by Jon Bentley was 43rd

    @RCHaslock "Algorithms + Data Structures = Programs" by Niklaus Wirth was 15th

    Some other ones that missed out were...

    11th: "Head First Design Patterns" by Elisabeth Freeman, Eric Freeman, Bert Bates and Kathy Sierra.
    12th: "Gödel, Escher, Bach" by Douglas Hofstadter.
    13th: "Effective C++" by Scott Meyers.
    14th: "Clean Code" by Robert C Martin.

    ReplyDelete
  5. Although not directly related to programming the most influential book that I did read in the beginning of my career was Gerald Weinberg "Introduction to General Systems Thinking".

    ReplyDelete
  6. Personally I think that you are completely missing the point.
    Knuth books (now 4) should show up in ther first places. Just followed by Wirth's.
    None of the first 8 books would make sense without them.
    This is my opinion, of course.

    ReplyDelete
  7. @Enzo I get your viewpoint - a lot of developers like Knuth, although I haven't personally read any of his books. Note that this list isn't my personal view either - its the results of a question on Stack Overflow, which had several thousand respondents.

    ReplyDelete
  8. Kernighan and Pike's The Practice of Programming was certainly a great book, but not very influential, as the bulk of todays code is bloated and non-portable, the primary characteristics their book showed you how to avoid.

    ReplyDelete
  9. k&r thoroughly whips my ass everytime I attempt to read it. however, I am very good at writing the temp conv program from memory.

    ReplyDelete
  10. I suppose Structure and Interpretaton of Computer Programs would top my list from those on the list.

    Christopher Alexander's Notes on the Synthesis of Form was very important as a designer.

    ReplyDelete
  11. Well, after the books of Knuth:
    Bjarne Stroustrup,
    The C++ Programming Language

    ReplyDelete
  12. Notes on Structure Programming by Dijkstra, Hoare, and Dahl

    Should probably be 1 or 2. Everything written about programming since has in some way been influenced by that book. Same with Knuth.

    ReplyDelete
  13. I might be going out on a limb here, but I think the reason the top two are trade craft books is because the voters were registered users of StackOverflow, which is generally used by working developers who use the site to solve language-specific problems. It might also be an acceptance that the problems faced by devlopers in the real world, things like entropy, legacy code, requirements (or lack thereof) and test coverage are generally not addressed by theoretical type books. As Martin Fowler put it nicely "Any fool can write code that a computer can understand. Good programmers write code that humans can understand".

    ReplyDelete
  14. Code Complete, 2nd ed (Steve McConnell) is full of absolute gems like this quote ... "When you or someone else says 'This is really tricky code,' that's a warning sign, usually of poor code. 'Tricky code' is a code phrase for 'bad code.' If you think code is tricky, think about rewriting it so that it's not."

    ReplyDelete
  15. I realize it's pretty unfashionable these days but I'd argue 'Programming Windows' by Charles Petzold is one of the most influencial programming books ever published, with 'Programming Visual C++' by David Kruglinski a close second. I realize how far technology has come but if you consider most of us still spend plenty of time pressing buttons and selecting from lists and menus it's hard to ignore these two books that first set the standards for thousands of developers - many of whom are still working, albeit using different tools.

    ReplyDelete
  16. @Frank1914, those Charles Petzold Windows books were classics and did a great job in teaching Windows GUI development in C. He's written a more recent book called "Code: The Hidden Language of Computer Hardware and Software" which I'd like to check out some time.

    ReplyDelete
  17. Hmmm... I think "A Discipline of Programming", " Formal Development of Programs and Proofs" or "A Method of Programming" by Edsger W. Dijkstra should be included here. In fact, Dijkstra should go at the top, followed by Knuth. Also, "The Enigma" by Alan Turing should be included. All else is superfluous: without those three, none of us would have a job.

    ReplyDelete
  18. I need, that give you at traslator widget on your blog, thanks, excume for my english, but I am spanish of Nicaragua, thank, good bye.

    ReplyDelete
  19. "About Face" by Alan Cooper (1995) opened my eyes to how to think about user interface design decisions, usability, and intuitiveness.

    ReplyDelete
  20. @NutsNBolts, there's a new edition of that written in 2007: About Face 3: The Essentials of Interaction Design [by Alan Cooper, Robert Reimann and David Cronin]... from the reviews it looks to be still a great read ...

    ReplyDelete
  21. McGuire's "Writing Solid Code" and Dijkstra's "A Discipline of Programming" - both changed the way I look at code now.

    ReplyDelete
  22. @Bernd OK, thanks for the comment - E.W.Dijkstra was a giant of computer science, and even has an algorithm named after him (Dijkstra's algorithm, for finding the shortest path between two points in graph theory). His most famous book was A Discipline of Programming written in 1976 however there is a more recent book co-written by himself and W.H.J.Feijen, named A Method of Programming from 1988, but unfortunately there isn't many reviews or descriptions of this one online.

    ReplyDelete
  23. @Bernd OK, "Writing Solid Code" by Steve Maguire was full of ideas which are still relevant today, like:
    * Fix bugs now (not later)
    * Use asserts to write code that will break loudly as soon as the slightest thing goes wrong, so errors aren't hidden away
    * Don't add needless flexibility to your code
    * Don't over-rely on QA to find your bugs
    * Take responsibility for your own code

    This book was probably sidelined a bit however, when Steve McConnell's 'Code Complete' came out four months after it - McConnell's book was similar in theme, but covered more ground.

    ReplyDelete