Bob Martin is well known for his books on software development and design, however, he offers something more akin to ethics than engineering in The Clean Coder. Looking beyond the art of software development as a technical subject matter, Bob Martin expresses the attitude of a good software professional. Indeed the tagline for the book is: a code of conduct for professional programmers. Behind this rather dry title are memorable anecdotes and inspiring messages on how to be behave with courage, dignity and credibility within a wholly unregulated and under defined industry.
This book is a must read for anyone, not just developers, involved in software from the people on the ground to directors. It applies to all roles within the organisation. It’s just as relevant to people marketing software and managing software projects as it is to developers. Not only is the message universal in its guidance, but it also creates empathy between disciplines by considering how they can collaborate and communicate professionally.
If you’ve ever felt disenfranchised as a “techy” from your organisation, the advice in this book will give you a whole new voice by explaining the refining qualities that earn trust and respect. You will be rewarded with a greater sense of purpose within your organisation and a greater sense of belonging to a community of respected professionals.
The first chapter, “Professionalism”, sets out to broadly define the characteristics of a respected professional.
The second and third chapters, “Saying No” and “Saying Yes”, elaborate on the importance of clarity, honesty and courage.
Chapters four and five, “Coding” and “Test driven Development”, have been squarely pitched at developers, however they do offer good insight into the mind-set of a programmer. For instance, a section I found profoundly interesting was Bob Martin’s view and exploration of being in “the zone”. He proposes that this is in fact an undesirable state to enter because you start to operate with your blinkers on. Even though you may feel more productive, in the zone you may miss the big picture. If you aren’t a coder, it’s still worth persevering through these chapters otherwise you will miss some valuable insights.
Chapter six “Practicing” discusses the role of mentoring and the importance of refining your technique as a craftsman. I found this to be more important than a simple message about learning new things as it unravels the subtle difference between a master reinforcing what they know works and the more powerful journey-based approach of an apprentice discovering what works under guidance.
Chapters seven and eight, “Acceptance Testing” and “Testing Strategies”, examine how to ensure requirements are met and who should be involved. Although the focus may appear to be around testing, requirements are a central theme and a collaborative approach across disciplines is well emphasised. I liked the terms “happy path” and “unhappy path” used in the book as they immediately frame two different thought processes to assist in understanding the depth of a feature or requirement.
Chapters nine, ten and eleven, “Time Management”, “Estimation” and “Pressure” present an important and wide ranging set of tools from the meditative to the scientific (including standard deviations) that tackle the most feared and contested subject within your organisation: how long your project will take. Even a seasoned member of the software community should find something new to take away.
In chapters twelve and thirteen, “Collaboration” and “Teams and Projects”, Bob Martin has resisted the temptation to discuss particular methodologies. Instead, he chooses to offer a few nuggets of widely applicable wisdom.
The final chapter, “Mentoring, Apprenticeship, and Craftsmanship”, is about teaching and learning. Bob Martin provides a framework for a merit based approach to progression and advancement.
In summary, I think this is an essential read for anyone currently involved or thinking of getting involved in the software industry and I admire its effort in comprehensively tackling what it means to be a professional programmer.