Someone said, “I wish I could travel back to year 2000 by a time machine and read the book before starting my career”. I totally agree. However, at the same time, do not regret at all for reading it now :)
It’s a fan-tas-tic book that every programmer should read. This is essentially a self-help guide for programmers. Some sort of book that narrates the habit of happy and geeky programmers and at the same time makes you feel somewhat penitent for not rehearsing most of them.
Andrew Hunt and David Thomas wrote the book in October 1999. They were friendly while talking to their readers. As told by Ward Cunningham (who wrote the forward of the book), they wrote directly for you from their own experience of programming for many years.
The book is a collection of wisdom and practical advice from the authors’ collection of solutions. It describes, for many years of software development and project management, best practices based on experience. Then it compiles that description into a one-liner as a “tip”. There are 70 tips, and some of them are pure poetry. As suggested by the authors in the ‘Preface’ section, you can read this book in any order, and keep it around for reference on specific subjects.
The authors also mentioned quotes from famous scholars, proverbs (English, Chinese), metaphors (such as stone soup story, boiled frog etc), verses from the Bible, lyrics of popular songs related to each section. That makes the book really interesting to read.
Tips and checklists (e.g.: debugging checklists, when to refactor etc) are summarized in ‘Inside the front cover’ section. That will give you a synopsis of the book.
Beside a chapter-by-chapter analysis I wrote here, I am also mentioning here the points that came into my mind at a first glance.
· Learn new things (one language in a year, editors, frameworks). Invest in your knowledge portfolio every day.
· See how things work.
· If something's broken find out why, don't just get tests passing.
· If you find rotten code, refactor now, not keep it for later. Refactor often.
· Try to be a geek of shell and learn keyboard shortcuts.
· Write time saving scripts and tools.
· Automate everything especially testing.
· Test hard.
Sections I liked most
· Tracer bullets
· Design by Contract
· Decoupling and the Law of Demeter
· The Requirements Pit
· Ubiquitous Automation
The authors suggested using only one editor. Their logic behind this suggestion was mastering one editor would increase the productivity of the programmer. Personally, I do not mind mastering more than one editor. In fact, I like to use different editors/IDEs for different purposes like server administration (vim), coding and debugging (netbeans/webstorm) etc.
This is probably only one point that I disagreed. Other than this, the book is just freaking awesome.
Criticisms by other programmers
One might say that the book was written at a time when agile and iterative methodology was not broaden out as it is now and you may feel bored as most of the tips you already know from your agile knowledge. I do not agree. You will always gain something new when you read something you knew. Moreover, you will keep forgetting them if you do not practice them or continue reading them.
Someone assumes that the book narrates some strenuous topics and may be too difficult for a novice programmer who is still struggling on how to trace an apache log. I do not agree at all. It’s all about craft and attitude. That's the thing that makes the book so gush worthy. In fact, you read the thing and you realize "oh, so this is how grown-ups hack".
Like a friend said, this book is a real kick-in-the-pants for computer programmers. No matter where you are on the technology curve, this book will give you great insight into developing your craft.
The premise of the book is that software development is a craft. The subtitle of the book is, "From journeyman to master", which evokes the traditional pathway a person learned to ply a craft. An apprentice would sit at the feet of a master and learn the secrets of the trade.
In fact, the book can be used as an orientation book for new programmers in a software company.