总结:

软件设计的目的:帮助他人,包括其他的程序员

变化定律:程序存在的越久某个功能需要做出改变的可能性就越大

缺陷定律:新增的缺陷和修改或新增的代码数量成正比

简洁定律:维护难度反比于代码的简洁程度,代码应当简单

测试定律:你对软件的了解程度等于你所做的测试的程度




语句总结:

程序员:化繁为简


  • 任何设计都是由一个人来做主,而不是一个团队
  • 软件设计的目标:帮助其他人,包括程序员
  • 如果不添加也不修改任何代码就不会引入新的缺陷,所以在没有做好准备之前不要修改任何代码,除非代码真的有问题并且有证据和实例证明他有问题.
  • 在理想状态下,任何程序里的任何信息都应该只出现一次.
  • 过分拓展软件的用途是不可取的.
  • 写软件时要搞清楚:真正要解决的问题是什么
  • 在写代码的时候要注意:针对每个代码中的具体问题我都有具体的答案
  • 作为程序员要有前瞻性,要保持持续竞争力,(即使在未来,代码也能帮助别人),值得注意的是,程序员并不能预测未来,所以应该在已知信息下做设计和决策,要使程序具有灵活性,但是不要做到以下几点过犹不及:

1.不要编写任何不必要的代码,即使这个代码将来有可能用到,bit rot

2.避免做到僵化设计(对未来假设太多,不仔细设计就编写代码)

3.不可过分追求通用性,可以采取渐进式开发设计:例如先设计加法,在设计减法,然后乘除,而不是一次性对加减乘除同时设计,即使我认为自己的大脑可以完成.


不要轻易造轮子除非以下几点:

1.需要的东西不存在

2.现在的轮子真的很烂,而且会把自己困住

3.现在的轮子无法满足我的要求

4.现在的轮子没有维护并且我也不能维护,比如没有源码


推倒重来要满足以下All才可以:

1.我已经做完了准确的评估

2.我有足够的时间

3.我比原来的设计师更高明

4.我做的每一步都有用户愿意测试

5.我有足够的资源兼顾原系统


软件设计方程式:

D=Vn+Vf/Ei+Em

V表示价值(当前价值和未来价值)

E表示成本(开发成本和维护成本)

其中当前价值和开发成本会趋于0