请先看下面的图示:
机器代码 --〉高级语言实现 --〉结构图 -〉自然语言
我们很早就认识到,高级语言是机器语言的抽象,结构图是对高级语言的抽象,
而自然语言是对结构图的抽象.这是很好理解的,也符合我们的思维习惯.可是
倒过来看,逆向思维一下,会有更惊人的发现.它们不正是我们"做"一个软件标
准的流程吗?
可以说,它们表达的都是同一个东西,只是抽象的层次不同而已.抽象层次越高,
所需要处理的基本抽象思考要素也就越多(它们通常被包含在丰富的语义中).
但是,涉及到的具体实现细节反而越少.一句话,我们的软件活动大都是从高度
抽象到底层抽象,这个演化过程是客观规律,随着软件工程水平的提高,从此岸
到彼岸的直接跨越就变得非常不合理(以前确实存在过,不过想想当时的软工
水平吧).
有了从高到低的抽象层次,就需要逐步地象下楼梯一样一层层往下.然而下的
过程是危险的,也是值得研究的.什么是这个过程中最重要的,我觉得是保持一
致性,起码是概念的一致性.为什么呢?举个简单的例子:
客户说我要一个信息系统,这是一个听起来很简单的自然语言表达,可是因为
过于抽象而让开发者无从下手.于是开发者要和客户进行不断地沟通,是客户
的概念能毫无遗漏地传达给开发者(如果客户很幸运有明确的概念的话).遗
憾的是,这个过程是没有保障的.当客户的概念大部分(或全部)都已传达给开
发者时,他开始设计,目的只有一个,实现那个概念.设计的输出将作为编码的
输入,我们仍然无法保障这个过程的一致性.可以看到,到此为止,系统中没有
保障的因素已经很多,如果中间存在任何稍大的不一致,就必须重复进行大量
的工作,就好像已从20楼走到2楼,突然发现忘了穿鞋,还得回到20楼一样令人
同情.假设我们已经顺利地到了2楼(值得庆祝),剩下的工作将容易许多,高级
语言到机器代码的一致性目前已经得到很好的保障,这个成就让软件业的生产
率提高了很多.可是这对我们现今的软件开发并没有实质性的帮助,因为:
在当前整个软件开发周期中,这个过程只占了少量的精力和时间(我认为接近
于零),没有一个高级语言程序员会关注自己代码的反汇编结果.类似的还有
开发工具等相当次要的因素.所以,问题仍然很严重.
危机不可避免地存在着,关注它们不代表我是悲观主义者.和所有不能由人类
完全控制却可以供人类充分研究并利用的自然科学一样,软件工程学必然有
客观的规律.矛盾总是存在的,因为那些一致性不可能100%的满足(人与人的
交流不可能是无缝的,除非被Clone),但我们可以不断校正,运用合理的方法
学使之接近理想状态,即不断地进步.在这方面,中国人又一次落后了,大学里
教条似的软件工程学,企业界对于新技术的偏执和对设计,管理的忽视,怎么
可能从根本上提高我们极低的软件水平.而从事理论研究,以科学的态度对待
软件业的研究人员,又在哪里呢?