简约之美

编程所要用到的艺术和才能——化繁为简。

本书旨在表明软件设计可以成为科学。作者以软件设计的目标与方程式为准绳,以设计所遭遇的挑战(变化、缺陷、复杂)和应对挑战的方法(简洁、测试)为事实依据,揭示了存在于软件设计中的规则与条例。

软件设计是为了解决问题,而渐进式的开发及设计能够有效地解决问题。所谓的“化繁为简”,就是要找到问题的真正所在,设法缩小问题的规模并降低问题的复杂度。

文摘

每个写代码的人都是设计师,团队里的每个人都有责任保证自己的代码有着良好的设计,任何决策都必须由单独的个人而不是一群人来做出。

软件设计的目标

  1. 确保软件能提供尽可能多的帮助;

  2. 确保软件能持续提供尽可能多的帮助;

  3. 设计程序员能尽可能容易开发和维护的软件系统,这样的系统才能为用户提供尽可能多的帮助,而且能持续提供尽可能多的帮助。

改变的合意程度(可取程度),正比于软件当前价值与未来价值之和,反比于实现成本和维护成本之和。相比降低实现成本,降低维护成本更加重要。

  • 变化定律:程序存在的时间越久,它的某个部分需要变化的可能性就越高。

  • 缺陷定律:在程序中新增缺陷的可能性与代码修改量成正比。

  • 简洁定律:软件任何一部分的维护难度,反比于该部分的简洁程度。

  • 测试法则:你对软件行为的了解程度,等于你真正测试它的程度。

未来的某些事情,是我们所不知道的。程序员犯的最常见也是最严重的错误,就是在其实不知道未来的时候去预测未来。

软件设计的三大误区:

  • 编写不必要的代码

  • 代码难以修改

  • 过分追求通用

不要编写不是必需的代码,并且要删除没有用到的代码。设计程序时,应当根据你现在确切知道的需求,而不是你认为未来会出现的需求。仅仅根据目前确知的需求来考虑通用。

永远不要“修正”任何东西,除非它真的是一个问题,而且有证据表明问题确实存在。

以下做法会增加复杂性:

  • 新增功能

  • 扩展软件的用途

  • 新增程序员

  • 做无谓的改变

  • 困于糟糕的技术

  • 理解错误

  • 糟糕的设计或不做设计

  • 重新发明轮子

大多数麻烦的设计问题,都可以用在纸上画图或写出来的办法找到答案。