F's Blog

博客 收藏夹
软件科学

05 Jul 2016

在读《简约之美》。

软件的最终目的是“帮助其他人。”

一个人写出优秀软件的潜力,完全取决于他在多大程度上理解了“帮助其它人”的思想。

针对每一个功能,我们都要问自己:“这个功能怎样帮助用户?”,并用一个短句写下来。

确保软件能持续提供尽可多的帮助。

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

因为只有程序简单可维护,才能持续用户提供新的有用的功能。

D = V/E

D,优先级;V,价值;E,成本。

也就是说,一个功能,价值越高,开发成本越低,就应该更优先去做做。

价值

这个变化能带给人多大帮助。

价值又分:可能价值和潜在价值。

所以在判断价值时要考虑:

  1. 多大比例的用户会从此项工作中受益?
  2. 此功能对用户有价值的可能性有多大?
  3. 在它发挥价值的时候,能发挥多大的价值?

成本

时间就是成本。

  1. 编程时间。
  2. 研究时间。
  3. 沟通时间。
  4. 思考时间。
  5. 各种相关的时间。

但是,考虑到未来!

价值 = 当前价值 + 未来价值,V = Vn + Vf。

成本 = 实现成本 + 维护成本,E = Ei + Vm。

那么:

D = (Vn + Vf) / (Ei + Vm)

随着时间的流逝,Vn和Ei回到可以忽略不记的程度,那么:

D = Vf/Vm

一般来说,软件系统都需要维护很长时间,大多数情况下,未来长期收益和维护成本才是真正需要考虑的, 与之相比,当前价值和实现成本变得无足轻重。

如果维护成本的增长速度比价值快,就会遇到麻烦!

理想的解决方案——也即保证成功的唯一途径——就是这样设计你的系统:

保证维护成本随时间降低,最终降低到零(或者可能接近零)。

虽然实现成本很高,维护成本却会下降。如果维护成本会随时间推移而逐步降低,这项工作就会变得越来越有价值。

相比降低实现成本,降低维护成本更加重要。

不要把自己禁锢在某种工作定势里,要保持灵活;不要做任何以后无法改变的决策;在设计时要慎重,慎重,再慎重!

但是,未来是不可预测的。

变化

变化定律(Law of Change):

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

关键在于,你并不需要去预测什么变化,你需要知道的是,变化必然会发生。 程序应该保证尽可能合理的灵活性,这样,不管未来发生什么变化,都可以应付得了。

软件设计的三大误区:

对应解决方案:

从根本上避免三大误区的方法:渐进式开发和设计。

它要求按照特定顺序,一点一点地设计和构建系统。

这个方法的精妙之处在于,它是根据实现的顺序来决策的。总的来说,在其中的每个阶段,下一步都只做 最容易的事情。

缺陷与设计

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

最好的设计,就是能适应外界尽可能多的变化,而软件自身的变化尽可能少。

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

理想情况下,任何系统里的任何信息,都应当只存在一次。

简洁

感想

自己写的代码,之所以不想去后续修改,就是因为写得不够简单,改一处而牵全身。

本文由 付豪 创作,采用署名 4.0 国际(CC BY 4.0)创作共享协议进行许可,详细声明