Making Software: What Really Works, and Why We Believe It
Many claims are made about how certain tools, technologies, and practices improve software development. But which claims are verifiable, and which are merely wishful thinking?
In this book, leading thinkers such as Steve McConnell, Barry Boehm, and Barbara Kitchenham offer essays that uncover the truth and unmask myths commonly held among the software development community.
Their insights may surprise you.
Review By: Harry Acosta
01/06/2012
Making Software is a great compilation of software engineering topics written by more than thirty practitioners of programming and software quality engineering or assurance. It covers topics that range from code complexity to code modularization, design patterns, failure prediction, using qualitative methods, complexity metrics, pair programming, test-driven development, and others.
Chapters are short, to the point, the reader can easily pick chapters of interest without having to read in order. I was especially attracted to "Conway's Corollary" (chapter 11), "Modern Code Review" (chapter 18), and the discussion of "Open Source vs. Proprietary Software" (chapter 15), as well as the interestingly unusual research into why there aren't more women in computer science. Since the behavioral and cultural aspects behind gender preference to study computer science were rarely discussed during my formal instruction, it was especially enlightening for me to read about a causal model for gender disparity in science, technology, engineering, and mathematics (chapter 13).
I liked that the chapters refresh concepts and topics that I had forgotten about through lack of use. I also liked that many of the chapters are based on actual experience and therefore apply in real-life projects. Perhaps it was not the intent of the authors of this book to write it from the context of a course textbook but I missed having a questions and exercise section at the end of each chapter.
The authors provide a lot of practical advice on designing and engineering, programming, debugging, testing, and performing quality assurance as well as software development and team management best practices. Chapter 25 provides thorough and very well documented research into the study of software flaws that should be studied by every reader interested in delivering a quality product. Novices will find chapter 26 especially inspiring, as it provides advice on how to hit the ground running in terms of the soft skills required to be successful in their first software engineering jobs. There is also a chapter dedicated to exploring the benefits and perils of copy-paste or code cloning as a principled engineering tool. For those interested in the behavioral and cultural aspects of the people and groups in software development workshops, there are many applications of behavioral theory and cognitive dimensions throughout the book that can be applied to optimize group cohesiveness and teamwork productivity. This book has something for everyone in the software quality engineering universe.