Monday, 3 November 2008

Book review of ... The Pragmatic Programmer

[caption id="attachment_331" align="alignleft" width="240" caption="The Pragmatic Programmer by Andy Hunt and Dave Thomas"]The Pragmatic Programmer by Andy Hunt and Dave Thomas[/caption]

'The Pragmatic Programmer: From Journeyman to Master', by Andy Hunt and Dave Thomas.

An essential part of the education of any scientist-programmer (indeed, any programmer full stop) is reading good books on the subject. So we're going to review some of the books we think are both super-useful and also accessible/easy to read. We'll start with 'The Pragmatic Programmer'.

'The Pragmatic Programmer' shows you what you should be doing to become a great programmer. Its advice it not theoretical, it is grounded in the practical, and acknowledges that the reason people write software is to solve problems. Its premise is that as programmers, our job is to create programs that are well constructed and suitable for the job they have to perform. One of the many interesting ideas this book proposes is that programming is a craft rather than an art or a science. They make this claim because there is no single way to solve any non-trivial problem and that it requires the programmer to creatively apply their skills and knowledge in order to solve them, in the same way a master craftsman would do so in the creation of a piece of furniture.

The book is divided into 8 sections each with 5-7 chapters. The sections cover topics such as the philosophy behind being a Pragmatic Programmer (it has chapters called Software Entropy, Good-Enough Software and Communicate!), The Pragmatic Approach (chapters include Orthogonality, Reversibility and Estimating) and Pragmatic Projects (Pragmatic Teams, Ruthless Testing and Pride and Prejudice). Each of the sections is self-contained so you can read the book in any order you like, dipping in when a topic catches your eye, when you are at a certain stage of a project or when you have a particularly tricky problem to solve (or aren't sure about the solution you currently have).

'The Pragmatic Programmer' isn't about a particular language or development environment, but it teach programmers how to think about programming as a discipline. For instance section 1, A Pragmatic Philosophy, is about how to think as a pragmatic programmer. The chapters focus on responsibility, discipline, handling/instigating change and how to maintain your skills. This pattern is repeated throughout the book and includes specific technologies to provide examples rather than as proposing solutions to problems. The Pragmatic Programmer also goes beyond the typical 'X vs Y' battles that are common amongst programmers. Instead it suggests that by using other tools, languages and methodologies we become better programmers by creating a more varied toolbox of skills. This variety prevents the 'if all you have is a hammer, everything look like a nail' school of programming.

As well as being informative, 'The Pragmatic Programmer' is very readable. The style is approachable without being too chatty and the information is presented clearly with well chosen examples. This book is a great source of information on topics and jargon that can make reading about programming difficult. The authors introduce, and concisely explain, topics such as Orthogonality, The Law of Demeter and Metaprogramming and show how they are used in the real world.

Scattered throughout the book are 'tips' which sum up the points being made as well as acting a handy ways of remembering them in the future. These tips are invaluable and you'll see us using them, often subconsciously, on this site! They are a great way communicating ideas between people who have read the book and a great way to introduce new people to the ideas it contains. The book contains a tear out sheet with all the tips that should live on every programmers desk, probably taped to their monitor.

The tag line 'from Journeyman to Master' is particularly apt. Any programmer, regardless of the amount of experience, can pick up this book and find something new. Re-reading this book always provides a new view on an old problem or a new way to think about your current problem. Its knowledge is classic and timeless and we're sure people will be reading, and quoting, this book as long as there are computers that need programming.

1 comment:

  1. I just started reading this book, and so far it's great. Highly recommended.