At first, computer programming was reserved for highly skilled people. Over the decades, programming languages have become more and more user friendly, making them accessible to more people. Nowadays, several countries around the world are generalizing the teaching of computer programming at earlier stages of education [1,2]. Results have shown that, generally, students find learning how to code easy and fun.
It is, however, important to distinguish between the ability to write code to do the expected task and to deliver it on time, and the expected quality of the code that makes it sustainable in the long term. To achieve the latter, software engineering has emerged as a discipline that covers the art of building and managing software projects. Following the evolution and need for well-crafted, large-scale software products, a set of principles and techniques have emerged to manage the complexity of software and ensure quick maintenance when needed. Software craftsmanship, as the author succinctly claims, identifies “the difference between writing something to meet a deadline versus actually building something sustainable for the future.”
The book compiles a set of disciplines, standards, and ethics that,
like an old friend, will remind you of what matters, what works, what doesn’t, what creates risk, and what diminishes it. These lessons are timeless. You may find that you already practice some of the techniques contained within, and I bet you’ll find something new.
Chapter 1 summarizes the history of flying for the purpose of making an analogy with the evolution of computing. The content is clearly biased toward western culture, ignoring the earlier attempts by Muslim pioneers. More information can be found in the following [3,4,5]. The last section is insightful, highlighting the milestones in software engineering history (pages 8 and 9). The analogy is meant to convince the reader that, in any discipline, we always test things out, learn from experience, and improve toward the best. The topic of the book is software craftsmanship, that is, a step toward clean, robust, and sustainable software. The rest of the book is divided into three parts, each of which covers what the author Robert Cecil Martin, colloquially called “Uncle Bob,” believes is a pillar of clean craftsmanship, namely the disciplines, the standards, and the ethics.
Part 1, “The Disciplines” (chapters 2 to 8), discusses the main rules a programmer should follow to produce clean and robust code. This includes the use of test-driven development, refactoring, simple design, collaborative programming, and acceptance tests. These disciplines aim at the production of software that satisfies the client’s expectations and contains as few bugs as possible.
In Part 2, “The Standards” (chapters 9 to 11), standards are defined as the baseline expectations. The author focuses on three standards: productivity, quality, and courage. Although the two first standards are self-explanatory, courage means being honest about estimates in completing a task; saying no when the answer is no, rather than rambling around; and continuous learning and mentoring as a way to learn from others.
The book ends with Part 3, “The Ethics” (chapters 12 to 14). The use of software encompasses everyday applications, to safety-critical systems such as medical devices, to railway/aircraft and electrical systems. It is therefore important that software professionals adhere to a code of honor. In addition to the disciplines and standards discussed earlier, programmers must adhere to a set of rules. The author proposes a ten-point oath (page 293), which covers three major axes: harm, integrity, and teamwork, detailed respectively in chapters 12, 13, and 14.
The book is not about teaching how to code, but rather about structuring the software development process in order to deliver high-quality and sustainable software by the agreed deadline. The book is useful to programmers and managers of programmers. It compiles the major experiences of the author and provides valuable advice for the development of software projects. I strongly recommend it to anyone involved with the coding of medium- and large-scale software; the benefits won’t be apparent in small projects. One of the book’s strengths is that it lays out all of the history behind any idea that led to the current state of the art. It gathers a set of existing good practices and proven solutions that realize clean craftsmanship.
More reviews about this item: Amazon