Patrick Chanezon's favorite programming books

I'm always been an avid reader of books about programming. The Computer Science curriculum I followed in engineering school gave me some good bases, but I've really learnt my craft in books. In the past 14 years I must have read more than one programming book per month in average.

Since many years I recommend books to fellow programmers and bring a growing library with me from company to company, where my colleagues are free to borrow anything. I finally took some time to gather these recommendations in an organized way in a single document, in order to share them more easily. I also registered in the Amazon Associates program, so if you follow these links to buy the books I'll be able to buy and read more:-)

I tried to list only the most important books here, the ones that taught me something deep and durable. A few of them I haven't read: I keep Knuth for a time when I have more free time. Each of these books if you haven't read them already, has the potential of making you a better programmer. Thanks to all these authors who stimulated my intellect, taught me my craft, and made my job as a professional programmer so much more enjoyable.

Enjoy the reading. If you have good books to recommend me, send me email at firstname at lastname dot com.

You can find other things that I find interesting to read in my shared bookmarks and blog.

The list is organized by categories.

Algorithms and data structures

If you interview at a company like Google you want to re-read a few books about algorithms and data structure to make sure you have not forgotten the basics. I keep a list at http://delicious.com/chanezon/algorithms+books.

Cedric Beust liked "Algorithms", by Sanjoy Dasgupta, Christos Papadimitriou and Umesh Vazirani, which is available as a free PDF.

Architecture

The Gang Of Four Books, required reading by any would be architect.
A catalog of design patterns that are known to work well. They form a basic architecture vocabulary to talk about software architecture at a higher level of abstraction.

One of my favorite architecture books: software architecture is all about resolving constraints through design decisions involving tradeoffs. In this book Stroustrup explains the decisions and tradeoffs he had to make when designing C++, which is a pretty complex project. You need to know C and C++ to really appreciate the gist of the explanations though.

A classic of software architecture and project management. About the importance of conceptual integrity.

One of the most interesting offshoot of the XP methodology, this technique explains some systematic ways to refactor your code. I've experimented with some of them by writing custom perl programs to refactor from one API to another, but many tools now include some refactoring browser (Eclipse, IntelliJ).

Basic UML cheat-sheet, to be able to draw what you think.

Methodology / Project Management

Explains XP. A very interesting approach. If you read this one you'll get hooked and read the others in the series. I typically don't use all the practices described in the book but it's worth having an idea of what XP has to offer.

A classic, about the importance of people in software development projects. Short but full of wisdom. Should be a required reading for every people manager in a software project.

Weinberg's book is a classic: a must read for developer team managers, but also for you crazy developer, to better understand your own motivations and quirks.

The most useful book I've read about the open source. Raymond's book is about the philosophy, this one is about how to manage an open source project in practice, from getting started to the different management styles for open source projects.

Very practical. In the line of his C book.

General Programming

Excellent book. They're close to the XP/Agile movement.

This is one of my favorite programming books. It achieves a delicate balance between exposing interesting algorithms and giving good pragmatic programming advice. Examples mostly in C but the principles he talks about are very general and applicable to anything.
Fun anecdote: this is the only book I took with me to get in the interview mood before my interviews at Google. The second interview was conducted by a guy named Rob. We have an excellent conversation, times fly, then at the end, discussing about good books about STL he says: "When I was writing the book with Kerninghan...". I interrupt him: "Who are you?". "-Rob Pike" he says. I started shaking and said I was glad I did not know beforehand, then asked him to autograph my copy of his book. I don't havet he book anymore: lent it to another Googler who did not return it to me yet:-)

A good overview of many techniques used for software construction, from architecture to design, coding and testing, methodology etc...

Loved this one when I read it many years ago. Examples and techniques are in C but I think are general enough to be usefully applied elsewhere.

Many cool algorithms in there, design tips.

A good refresher on Data Structures & Algorithms if you're a java guy.

I haven't read these but if you like algorithms and have some time on your hands these are the ultimate references.

In many situations a mature developer will spend some extra time to generate code instead of writing it from scratch. Excellent book, adding many tools in your toolbox, and a new way of thinking about software development. See more comments about it in The future of AOP ? Intentional Programming !.

Java

Required reading for any serious java developer.

A great companion to Effective Java: Josh and Neal's puzzlers are a fun way to learn about the side effects and dark corners of java.

Bruce Eckel's classic. I've not read it but it has an excellent reputation. You can get it online for free.

Jason's book will teach you all about servlet programming. Delightful book.

If you need to do JSP, this is the book to read.

A great handbook describing in an ordered way many different ways to deal with concurrency in java. Will enhance your design culture.

Many good tips about performance in java, as well as a good background in performance tuning methodology: main lesson: design cleanly and avoid premature optimization.

Ruby

Known as the Pickaxe book, it's not only the best book to start Ruby, but also one of the best books about learning a language.

If you program in Ruby you'll want to Rails, and this book by the pragmatic programmers and the Rails creator is the best introduction.

Python

Mark Pilgrim's Dive into Python is the best way to start with Python. It is available online for free, but I recommend buying the hardcopy to read in the bus and compensate Mark for his remarkable tutorial.

If you want to dig deeper after reading the Mark Pilgrim book.

Perl

I do more Python and Ruby than Perl these days but I've always had a soft spot for Larry Wall's postmodern language. His book is excellent.

PHP

PHP explained by his creator.

C#/.NET

The O'Reilly book was fine to get started in C#.

Learning C# is not very interesting if you know Java already: there are a few concepts that Java misses (delegates, unsafe code) but large parts of the language are similar. What is interesting to study though is the .NET architecture and Don Box's book is an excellent explanation about how it is structured.

C/C++

The K&R classic C book. A good place to start programming.

Tools

Regexp are an essential part of any developer's toolbox: this book is invaluable, and a great fun to read.

A great introduction to the various tools available in Unix, by Tim O'Reilly and his team.

Essays

One of my all times favorite, outlining the idea that programs as written as much for machines to perform a task as for other humans to understand the ideas expressed in the code. The idea of literate programming is what has led to javadoc, but I'm still waiting for much more profound implementations of Knuth's ideas. Simonyi may be on this track with intentional programming.

A practical as well as philosophical book about the design of Unix programs and the Zen design behind Unix architecture. One of the best software books I've read. Don't miss the aphorisms listed at the end.

A nice collection of thoughful essays about software development, handpicked by Joel. Don't miss his own essays on Joel On Software.

Tracy Kidder's book uncovers the dynamic of a team designing a new machine. Reads like a novel, full of insight.

Articles

A few articles you don't want to miss: