第 21 章 结论
Chapter 21 Conclusion
This book is about one thing: complexity. Dealing with complexity is the most important challenge in software design. It is what makes systems hard to build and maintain, and it often makes them slow as well. Over the course of the book I have tried to describe the root causes that lead to complexity, such as dependencies and obscurity. I have discussed red flags that can help you identify unnecessary complexity, such as information leakage, unneeded error conditions, or names that are too generic. I have presented some general ideas you can use to create simpler software systems, such as striving for classes that are deep and generic, defining errors out of existence, and separating interface documentation from implementation documentation. And, finally, I have discussed the investment mindset needed to produce simple designs.
这本书只针对一件事:复杂性。处理复杂性是软件设计中最重要的挑战。这也是为什么系统难以构建和维护的原因,而且复杂的系统通常运行也很缓慢。在本书中,我试图描述导致复杂性的根本原因,例如依赖性和模糊性。我已经讨论了可以帮助您识别不必要的复杂性的危险信号,例如信息泄漏,不必要的错误情况或名称过于笼统。我提出了一些通用的思想,可以用来创建更简单的软件系统,例如,努力创建更深和更通用的类,定义不存在的错误以及将接口文档与实现文档分离。最后,我讨论了产生简单设计所需的投资思路。
The downside of all these suggestions is that they create extra work in the early stages of a project. Furthermore, if you aren’t used to thinking about design issues, then you will slow down even more while you learn good design techniques. If the only thing that matters to you is making your current code work as soon as possible, then thinking about design will seem like drudge work that is getting in the way of your real goal.
所有这些建议的缺点是它们会在项目的早期阶段需要额外的工作量。此外,如果您不习惯于思考设计问题,那么当您学习良好的设计技巧时,您的速度会比较慢。如果对您而言唯一重要的事情让您当前的代码尽快运行,那么思考设计就好像是件苦差事,而这实际上妨碍了您实现真正的目标。
On the other hand, if good design is an important goal for you, then the ideas in this book should make programming more fun. Design is a fascinating puzzle: how can a particular problem be solved with the simplest possible structure? It’s fun to explore different approaches, and it’s a great feeling to discover a solution that is both simple and powerful. A clean, simple, and obvious design is a beautiful thing.
另一方面,如果良好的设计对您来说是重要的目标,那么本书中的思想会让编程变得更有趣。设计是一个令人着迷的难题:如何用最简单的结构解决特定问题?探索不同的方法很有趣,找到一种既简单又强大的解决方案是一种很棒的感觉。干净,简单和明显的设计是一件美丽的事情。
Furthermore, the investments you make in good design will pay off quickly. The modules you defined carefully at the beginning of a project will save you time later as you reuse them over and over. The clear documentation that you wrote six months ago will save you time when you return to the code to add a new feature. The time you spent honing your design skills will also pay for itself: as your skills and experience grow, you will find that you can produce good designs more and more quickly. Good design doesn’t really take much longer than quick-and-dirty design, once you know how.
此外,您对优质设计的投资将很快获得回报。在项目开始时仔细定义的模块,在您一遍又一遍地重复使用它们时,会节省您的时间。您六个月前编写的清晰文档将为您节省返回代码添加新功能的时间。花在磨练设计技能上的时间也将有所回报:随着技能和经验的增长,您会发现您可以越来越快地做出好的设计。一旦您掌握了方法,好的设计实际上并不会比草率的设计花费更多的时间。
The reward for being a good designer is that you get to spend a larger fraction of your time in the design phase, which is fun. Poor designers spend most of their time chasing bugs in complicated and brittle code. If you improve your design skills, not only will you produce higher quality software more quickly, but the software development process will be more enjoyable.
成为一名优秀设计师的回报是,您可以将大部分时间花在设计阶段,这很有趣。糟糕的设计师花费大量时间在复杂而脆弱的代码中寻找错误。如果您提高了设计技能,不仅可以更快地生产出更高质量的软件,而且软件开发过程也将也会更加愉快。