Software craftsmanship is a mindset that emphasizes technical excellence over mere execution. The author of this book, Robert C. Martin, commonly referred to as “Uncle Bob,” is one of the signatories of the manifesto on software craftsmanship. In this book, he explains practices, disciplines, and mechanisms to follow the craftsmanship movement.
The book is divided into three sections. In the first section, the author focuses on technical aspects of software craftsmanship. The second section includes a few chapters focusing on the “standards” or expectations from a development team; it targets productivity, quality, and courage aspects. The final section discusses the “ethics” of software development, including aspects such as teamwork and integrity.
Throughout the majority of the book, the author expresses himself as a philosopher, weaving in stories, experiences, and metaphors and connecting abstract thoughts to concrete practices. For instance, he uses the example of a handwashing routine that is strictly followed by doctors to accentuate the importance of discipline. The author begins the book by establishing the meaning of “craftsmanship” by giving various historical examples from different fields; it keeps the reader engaged and asserts the importance of the term.
Practices such as refactoring and test-driven development (TDD) are essential pillars for software craftsmanship. The author dedicates individual chapters to such practices. Code examples are one of the strengths of this book; the author’s examples gradually increase in complexity and illustrate the rationale for introducing a specific practice. The stack example used in the TDD chapter perfectly showcases the author’s capabilities in conveying a complex point in a step-by-step manner. Chapters on test design present effective techniques to approaching the complex topic of testing. Similarly, the chapter on simple design touches upon practices to minimize the complexity of a software system.
Though the book does an amazing job in the first half, it falls short of expectations in the second half. Specifically, chapters on acceptance tests, collaborative programming, productivity, and quality are a mere rambling of expectations rather than concrete techniques or practices. The treatment of these chapters are shallow given that a lot of work has been done on these topics, both in academic literature and by the software development industry. Ethical topics such as “no harm” are welcome to see in a technical book; however, the discussion in this one lacks substance.
To summarize, the book is a great resource for software developers to understand the technical aspects involved in achieving software craftsmanship; however, the reader has to look to alternative resources to understand the nontechnical aspects discussed in the book.
More reviews about this item: Amazon