Continuing with my introduction to software development posts, I have listed some of my favorite computer science books. Many of these are fairly theory based, or were really important when they were released. Many software developers I know have huge libraries, but I wanted to focus on some that I refuse to give away. The books are not listed in any particular order because you really can not rank these books in the same list. For full disclosure, the links below are all Amazon affiliate links in case you actually want to buy some of these, but beware some of them are expensive.
General Software Development
Design Patterns, also known as the Gang-Of-Four (GOF) book, is still very important today. It is by far the best design patterns book I have read. The book itself is not as important now as the content is available in many forms, like CD, PDF and many other types I am sure.
Code Complete is an excellent book for general software development. It is more about the practice of development than any particular development process.
Pragmatic Programmer is one of those books that is hard to explain, you just have to read it. The only way I can describe it is that it is a handbook for the journeyman programmer that wants to improve their skills.
Refactoring is a book that I recommend to every junior developer I know. It is similar in presentation to the Design Patterns book, but gives you the general ideas behind code refactoring or clean up. Tools like Eclipse do a lot of these things for you, but sometimes it is good to know what is happening in the background.
Agile Software Development
Rapid Development is another fantastic book from the author of Code Complete. Rapid Development expands on the ideas of the first book, but looks at the rapid application development processes that were around before the agile processes really gained popularity. Even though agile processes are more popular now, there is still some very good information in this book.
Agile Software Development is a book that looks at the agile processes in general without real bias towards XP, Scrum or any others. It is a very good read, especially for people who are not sure which agile process they want to look at. This book presents the basic ideas, so that you can make a more informed decision when you choose your process.
Extreme Programming Explained is included in this list because it was the first agile book that really made sense to me. This talks more about the core tenets of Extreme Programming, not how to run a project. More importantly, these tenets are most of the basic principles of many agile software development processes.
Agile Software Development With Scrum is important because it was one of the first “how to run an agile project” books. It is a very good introduction to what Scrum is and how an agile project works. I am a big fan of the Scrum ideas as they can be applied to many different projects, even if it is not really being run as an agile project.
Modern Operating Systems is obviously about operating systems. If you have no interest in how an OS works, skip this part. Generally, this is very low-level information about the OS, the file systems and other basic commands. Many of the basic concepts are illustrated in the books using an operating system called Minix, a precursor to Linux.
Computer Graphics was once considered the bible of the graphics industry. It is definitely showing its age now, but if you are interested in computer graphics the theory and algorithms all still apply. Be careful if you buy this book, as the 1st edition used a pascal-like syntax and talked about SRGP. The 2nd edition gives algorithms in C so that it is a little more updated. Do not expect tips on using Photoshop, this is hardcore “write your own raytracer” type of information.
Structure and Interpretation of Computer Programs is something that older geeks will appreciate. It was used for introduction to programming courses in many universities before getting into more language specific courses. Be aware, the language used in the course is Scheme, a powerful subset of LISP. In this book, the language is not nearly as important as the content.
Algorithms is a fantastic reference book on algorithms. It has tons of general information on algorithms for almost any problem. I have used this for years as a way to get me thinking about a different way to approach a problem.
Artificial Intelligence is a large tome covering many aspects of the AI field. Because it is meant as an introduction, the coverage of specific techniques is a little light at times, but AI is a huge industry. If you are even minimally interested in AI, this book must be bought. If you are looking for details about specific areas, there is probably a better book written about that niche in particular.
Godel, Escher, Bach is a fantastic book for anyone looking to read something that makes you think. This is very much not a programming book as much as a philosophy of programming book. If you are remotely interested in artificial intelligence it is a good book to read. You will not learn AI from this book, but you will learn how many AI researchers think and what they are thinking about.
Machine Learning is another artificial intelligence book, but obviously it has a focus on the learning aspects of artificial intelligence. Machine learning is a surprisingly large field, and the book gives a very good overview of many of the technologies available. Machine learning techniques are also used as the basis for many fields you have heard of like expert systems, natural language processing, categorization and recommendation systems.