Every programmer seems to have their own list of favorite programming books. The lists are very personal and seem to be influenced by the age of the programmer, their training, and their field of endeavor. My own list follows.
I’ve tried to keep the list short and list only books that are still in print. These are in no particular order. (Disclaimer: The following links are through my Amazon Associates account. If you buy a book after clicking a link, Amazon is supposed to send me a few cents of the transaction. If you object to that, just copy the title and paste it into the Amazon (or BN or other) search box and look it up on your own.)
The Pragmatic Programmer: From Journeyman to Master Filled with good advice about getting programming projects done with an emphasis on Java. Getting a little long in the tooth for a book on programming, but the advice is still good. The success of this book kicked off a series of additional “Pragmatic” guides on topics such as unit test and version control, all very good in their own right.
Effective Java (2nd Edition) Written by one of the architects of the language. Describes the way to do it right in Java. Also describes a lot of common practices that are just plain wrong and the techniques preferred in their place. Includes good description text of the reasons behind the solutions presented.
The Joy of Clojure: Thinking the Clojure Way A relatively new book on a relatively new language. Besides just teaching the syntax of the language, it shows you how to use the language idiomatically — the Clojure way. Besides improving your own code, it will help you understand the code written by others, always a great way to study any language.
Numerical Recipes 3rd Edition: The Art of Scientific Computing The code style is not the best and the algorithms are generally at an introductory level, but this has proved to be a great start to understanding the algorithms needed to do a lot of scientific programming. When they don’t prove adequate to your needs they provide a sound basis to doing your own research into more modern methods. The source code has some of the weirdest licensing restrictions I can remember. But the source code libraries also apparently include languages I’ve never seen in the printed versions like Modula-2 and Lisp. I’d love to see the Lisp versions of some of these algorithms, but am not motivated enough to spend the $95 it would cost me.
Practical Common Lisp It’s hard to believe that this book is almost seven years old. It’s a great introduction to the language, but some of the material is out of date, such as the “Lisp-in-a-Box” development environment that is no longer maintained by the author. Still, if you’re looking for a good, understandable introduction to the language, this is a great choice.
Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp Once you’ve started working with the fundamentals of Common Lisp, this is a great second book on the language. It is also probably one of the best books on how to program ever written too.
Java Concurrency in Practice The definitive source on concurrency in Java. ‘Nuff said.
Historical Note: Algorithms + Data Structures = Programs by Niklaus Wirth was a watershed for me back in the 70’s. In high school when I started programming in Basic and Fortran, my programs always started with good intentions and a nice structure, but rapidly became huge buggy messes. I carried this style with me to college (where I was a chemistry and mathematics major, not CS). This book proselytized the Structured Programming method. It gave me to tools to create more reliable, maintainable, and extensible programs. No other book made as big a difference to my programming abilities. Sadly it has been out of print for a long time now. And its a bit out of step with advances in the field. But I still have fond memories of the influence it made on my.