编程所要用到的艺术和才能——化繁为简。
本书旨在表明软件设计可以成为科学。作者以软件设计的目标与方程式为准绳,以设计所遭遇的挑战(变化、缺陷、复杂)和应对挑战的方法(简洁、测试)为事实依据,揭示了存在于软件设计中的规则与条例。
软件设计是为了解决问题,而渐进式的开发及设计能够有效地解决问题。所谓的“化繁为简”,就是要找到问题的真正所在,设法缩小问题的规模并降低问题的复杂度。
文摘
每个写代码的人都是设计师,团队里的每个人都有责任保证自己的代码有着良好的设计,任何决策都必须由单独的个人而不是一群人来做出。
软件设计的目标:
确保软件能提供尽可能多的帮助;
确保软件能持续提供尽可能多的帮助;
设计程序员能尽可能容易开发和维护的软件系统,这样的系统才能为用户提供尽可能多的帮助,而且能持续提供尽可能多的帮助。
改变的合意程度(可取程度),正比于软件当前价值与未来价值之和,反比于实现成本和维护成本之和。相比降低实现成本,降低维护成本更加重要。
变化定律:程序存在的时间越久,它的某个部分需要变化的可能性就越高。
缺陷定律:在程序中新增缺陷的可能性与代码修改量成正比。
简洁定律:软件任何一部分的维护难度,反比于该部分的简洁程度。
测试法则:你对软件行为的了解程度,等于你真正测试它的程度。
未来的某些事情,是我们所不知道的。程序员犯的最常见也是最严重的错误,就是在其实不知道未来的时候去预测未来。
软件设计的三大误区:
编写不必要的代码
代码难以修改
过分追求通用
不要编写不是必需的代码,并且要删除没有用到的代码。设计程序时,应当根据你现在确切知道的需求,而不是你认为未来会出现的需求。仅仅根据目前确知的需求来考虑通用。
永远不要“修正”任何东西,除非它真的是一个问题,而且有证据表明问题确实存在。
以下做法会增加复杂性:
新增功能
扩展软件的用途
新增程序员
做无谓的改变
困于糟糕的技术
理解错误
糟糕的设计或不做设计
重新发明轮子
大多数麻烦的设计问题,都可以用在纸上画图或写出来的办法找到答案。