Books every Computer Scientist should have

The following is a list of books that I feel every Computer Scientist should have and know. They’re the kind of books that have made a genuine difference in my programming methodology over the years, increasing efficiency and making things in general more manageable. A few of these are biased towards a specific language or programming environment, but the principles used are valuable in a much more general sense.

  • John Robbins, “Debugging Applications”. The version I know was published in 2000. The latest version is “Debugging Microsoft .NET 2.0 Applications”, Microsoft Press, 2006. ISBN: 9780735622029. An indispensable guide to defensive programming.
  • Steve McConnell, “Code Complete”. Second edition, Microsoft Press, 2004. ISBN: 9780735619678. SDLC in practice.
  • Martin Fowler, “Refactoring: Improving the design of existing code”. Addison-Wesley, 1999. ISBN: 0201485672. Keeping code usable in long-term projects.
  • Gamma, Helm, Johnson, & Vlissides, “Design Patterns”. Addison-Wesley, 1995. ISBN: 0201633612. AKA: Gang-of-four. Sanity in OO Programming.
  • Kent Beck, “Extreme Programming Explained”. Second edition, Addison-Wesley, 2004. ISBN: 0321278658. A fresh look at programming practice that works.

Another list follows of reference books that is specific to languages I tend to use.

  • Bjarne Stroustrup, “The C++ Programming Language”, Special Edition, Addison-Wesley, 2000.
  • Bruce Eckel, “Thinking in C++ vol. 1: Introduction to Standard C++”. Second edition, Prentice-Hall, 2000.
  • Bruce Eckel and Chuck Allison, “Thinking in C++ vol. 2: Practical Programming”. Prentice-Hall, 2004.
  • David M. Beazley, “Python Essential Reference”, Third Edition, SAMS, 2006.
  • Hans Petter Langtangen, “A Primer on Scientific Programming with Python”, Second Edition, Springer, 2011.