It's been a long time since I wanted to read this book, given enthusiastic reviews from various influential programmers. After "digesting" it (it took me almost three months) I can confirm the absolute value of this publication!
Title: The Pragmatic Programmer: From Journeyman to Master
Authors: Andrew Hunt, David Thomas
Editor: Addison Wesley
The book has a very free-form structure, the single chapters are not meant (except a few exceptions) to be read sequentially. Each section can be read indipendently from the others and at the end of each there is a nice section with links to other parts of the book. A very... pragmatic approach indeed (pun not intended) that allows the mythical Busy Programmer® to read it and comprehend it in his or her free time, which is often limited and/or fragmented.
Since the begining, authors manage to convey their love for software development in all of its facets, which is way more than just programming. The base principles depicted here are the base for all subsequent hints and suggestions. They write about responsibility, commitment, study, pride in implementing something "as it should be", but knowing when to stop and how to evaluate our own work and others'. This chapter made famous the motto "Don't live with broken windows", a true mantra of programming.
Later chapters go deeper into the matter of study, showing how to face everyday problems of software development and giving practical advice on how to use available tools more effectively, how to communicate, how to stay current in a world that changes at the speed of light.
Who is this book for?
I am sure about this: as soon as I turned the last page of this book, I regretted not to have read it years ago, when I was a rookie. Having a guide like this would have probably spared me hours of overtime, frustration and stupid errors. I would have surely made mistakes anyway, but after these suggestions they would have been less in number, and way less catastrophic!
I thoroughly recommend The Pragmatic Programmer to junior developers or to anyone wanting to start this profession.
Who is this book not for?
Senior developers with years of experience will not find this book very helpful, for the same reasons above. After all, we all learned the hard way much of the material exposed in the book, and we in some way or another already employ some or all their techniques and suggestions.