聂同学

一个程序员和架构师的实践与思考

“程序员需要工程思维”

有同学提到工程思维,认为借助传统的建筑、机械工程的思考方式,有助于控制软件工程质量1。这当然是有益的。

但我们需要注意,软件系统与传统建筑、机械系统有非常重要的不同。直接借鉴传统的建筑、机械工程思维,很多时候是不足以解决问题的。

最大的不同在于:软件系统不仅是运行着的,而且是演进着的2。而且这个演进是必需的、积极的、有巨大价值的。这是软件质量控制的独特和真正困难之处。

传统工程一旦产出,产品本身就保持稳定。所以传统质量的定义是描述产出物的特征,符合这个特征的就是好质量,否则就是坏质量。对于特定的产品,质量的定义保持不变。质量控制的方法也以质量定义不变作为前提。

这个办法在软件这里不好用。因为产出物的特征不断变化,质量的定义必须不断变化。所以质量控制方法必须多增加一个维度,即质量定义本身的变化。有了这个维度,问题完全不一样了。

所以,从质量控制这个角度来说,将软件系统比作建筑、机械系统,软件工程比作建筑、机械工程是不理想的。不如把软件系统比作社会系统,把软件工程比作社会的发展演进。软件质量控制,更多的从社会科学领域借鉴方法。比如为了控制社会的有效运行,人类发明了立法、司法、执法等成体系的有效手段,我们可以借鉴,“反脆弱”3是个不错的尝试。


  1. 为了产品,程序猿请随时加满工程属性

  2. “卖出不管”的传统软件这里不讨论。主要讲互联网系统比如SAAS。

  3. “反脆弱”

方法论, 质量, 过程

分享 -