There are plenty of good books on software design for programmers. So why read another one? Well, unlike other books, Your Code as a Crime Scene focuses on your codebase. This book will help you identify potential problems in your code, find ways to improve it, and get rid of productivity bottlenecks.
Your Code as a Crime Scene blends forensic psychology and software evolution. Yes, it is a technical book, but programming isn’t just about lines of code. We also need to focus on the psychological aspects of software development.
But forensics—isn’t that about finding criminals? It sure is, but you’ll also see that criminal investigators ask many of the same open-ended questions programmers ask while working through a codebase. By applying forensics concepts to software development, we gain valuable insights. And in our case, the offender is problematic code that we need to improve.
As you read along, you’ll:
Predict which sections of code have the most defects and the steepest learning curves.
Use software evolution to find the code segment that matters most for maintenance.
Understand how multiple developers and teams influence code quality.
Learn how to track organizational problems in your code and get tips on how to fix them.
Get a psychological perspective on your programs and learn how to make them easier to understand.
This book is written for programmers, software architects, and technical leads. The techniques in the book are useful for both small and large systems. On small systems, you’ll get new insights into your design and how well the actual code reflects your ideas. On large projects, you’ll learn to find the code that matters most for your productivity and save maintenance costs, and you’ll learn how to track down organizational problems in your codebase.
It doesn’t matter what language you program in, as long as you are comfortable with the command prompt. The case studies in the book use Clojure, Java, and C#, but you don’t need to know any of these languages to be able to follow along. Our discussions will focus on design principles, which are language-independent.
We’ll also interact a lot with version-control systems. To get the most out of the book, you should know how to work with Subversion, Git, Mercurial, or a similar tool.
The strategies you’ll learn will be useful regardless of the size of your codebase. But the more complex your codebase is, the more you’ll need this book.
This book covers both technical and social issues in large-scale projects. If you’re in a leadership position, use the strategies to maintain a high-level view of your system and development progress.