Finished reading The Pragmatic Programmer a few weeks ago.  I've been slacking off on the book review but better late than never. 

This is a good book for people desiring to be a more pragmatic programmer.  At ~270 pages it's a quick read and loaded with content.   This book has several predominant themes

  1. Personal responsibility in programming
  2. Pragmatic approaches to problems
  3. Paranoid programming

My personal favorite has to be #3.  If you don't trust anything, including yourself, you're going to have fewer and fewer unexpected bugs in your code. 

Along those lines is the best chapter in the book: Pragmatic Paranoia.  This chapter details the virtues of design by contract, aggressive use of asserts and the virtues of crashing the instant a problem is discovered. 

The next best chapter in the book, "A pragmatic approach", deals with the general approach to programming.  You've likely heard these all in pieces before but the authors do a great job of organizing and presenting the material. 

One particular approach new to me is Tracer Bullets.  This is similar to prototyping but with a very different aim.  Prototypes should be used to quickly test out a subset of a bigger solution while ultimately being throw away code.  Trace Bullets are also designed to give a quick solution but also to be the final product.  They focus on getting the basic framework implemented and simple implementations for pieces in order to give the user a working product.  Feedback will create new iterations of the product on the same framework. 

While overall a good book there are some parts that advanced programmers will likely skip over.  They deal with the usage of basic tools of a programmer: debugger, text editor, source code control.  All great suggestion/requirements and reading for newer programmers though.

All in all a good book. 

Citation:

Hunt, Andrew and Thomas, David. The Pragmatic Programmer. Addison Wesley Longmam, Inc, 2000