从系统的角度看软件开发
经过长时间的观察,我发现软件开发过程中的许多活动都与自动控制系统、通信系统有非常相似的地方,于是把它们变成我的一个指导思想。本文就从这两个系统的角度来思考软件开发,仅代表个人观点,也许还是不够成熟的观点。
1. 自动控制系统
在自动控制系统中,有一个最大的特点是反馈控制。在软件开发过程中,我们也需要更快的反馈,同时,反馈距离越短,成本越低。我把软件开发过程当做一个自动控制系统,人和事都是为这个系统服务,如下:
从上图中,只有“静态检查”、“单元测试”这一栏的活动反馈最及时、成本最低,想提升生产效率时,优先考虑这一栏的活动。为了确保产品高质量,每一个阶段的反馈均不能少。
2. 通信系统
通信系统是为了传递信息,但是它还有噪声干扰和信号衰减等特点,同时,它也满足信息论。人与人之间的交流,本身就是通信系统。软件编码,先给人看,最后才给编译器生成机器码,它也逃脱不了通信系统。
通信系统的特征如下:
信息量度量的是一个具体事件发生所带来的信息,衡量信息量大小就看这个信息消除不确定性的程度;
信息熵是用来衡量事物不确定性的。信息熵越大,事物越具不确定性,事物越复杂。
进行软件设计、制定编码规范时,我选择“信息熵最小”的原则。大部分情况下,我们需要统一规范,避免开发人员引入各种怪异的实现,统一一种实现方案,信息熵最小。
进行需求或方案传递时,我选择“避免多级传递”的原则。组织扁平化、客户参与,也满足这个原则。