再论我的程序观

PowerEngine 2002-12-06 10:19:12
请先看下面的图示:

机器代码 --〉高级语言实现 --〉结构图 -〉自然语言

我们很早就认识到,高级语言是机器语言的抽象,结构图是对高级语言的抽象,
而自然语言是对结构图的抽象.这是很好理解的,也符合我们的思维习惯.可是
倒过来看,逆向思维一下,会有更惊人的发现.它们不正是我们"做"一个软件标
准的流程吗?

可以说,它们表达的都是同一个东西,只是抽象的层次不同而已.抽象层次越高,
所需要处理的基本抽象思考要素也就越多(它们通常被包含在丰富的语义中).
但是,涉及到的具体实现细节反而越少.一句话,我们的软件活动大都是从高度
抽象到底层抽象,这个演化过程是客观规律,随着软件工程水平的提高,从此岸
到彼岸的直接跨越就变得非常不合理(以前确实存在过,不过想想当时的软工
水平吧).

有了从高到低的抽象层次,就需要逐步地象下楼梯一样一层层往下.然而下的
过程是危险的,也是值得研究的.什么是这个过程中最重要的,我觉得是保持一
致性,起码是概念的一致性.为什么呢?举个简单的例子:

客户说我要一个信息系统,这是一个听起来很简单的自然语言表达,可是因为
过于抽象而让开发者无从下手.于是开发者要和客户进行不断地沟通,是客户
的概念能毫无遗漏地传达给开发者(如果客户很幸运有明确的概念的话).遗
憾的是,这个过程是没有保障的.当客户的概念大部分(或全部)都已传达给开
发者时,他开始设计,目的只有一个,实现那个概念.设计的输出将作为编码的
输入,我们仍然无法保障这个过程的一致性.可以看到,到此为止,系统中没有
保障的因素已经很多,如果中间存在任何稍大的不一致,就必须重复进行大量
的工作,就好像已从20楼走到2楼,突然发现忘了穿鞋,还得回到20楼一样令人
同情.假设我们已经顺利地到了2楼(值得庆祝),剩下的工作将容易许多,高级
语言到机器代码的一致性目前已经得到很好的保障,这个成就让软件业的生产
率提高了很多.可是这对我们现今的软件开发并没有实质性的帮助,因为:

在当前整个软件开发周期中,这个过程只占了少量的精力和时间(我认为接近
于零),没有一个高级语言程序员会关注自己代码的反汇编结果.类似的还有
开发工具等相当次要的因素.所以,问题仍然很严重.

危机不可避免地存在着,关注它们不代表我是悲观主义者.和所有不能由人类
完全控制却可以供人类充分研究并利用的自然科学一样,软件工程学必然有
客观的规律.矛盾总是存在的,因为那些一致性不可能100%的满足(人与人的
交流不可能是无缝的,除非被Clone),但我们可以不断校正,运用合理的方法
学使之接近理想状态,即不断地进步.在这方面,中国人又一次落后了,大学里
教条似的软件工程学,企业界对于新技术的偏执和对设计,管理的忽视,怎么
可能从根本上提高我们极低的软件水平.而从事理论研究,以科学的态度对待
软件业的研究人员,又在哪里呢?
...全文
27 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ColderRain 2002-12-08
  • 打赏
  • 举报
回复
有同感,抽象到具体的过程是最难的。
ozzzzzz 2002-12-07
  • 打赏
  • 举报
回复
机器码和高级语言(结构图也是一种语言)都是形式语言 它们都有明确的规则 表达的含义都确定无二 我们的自然语言不是形式化的语言 充满了不确定性 实际上我们开发软件的过程 就是把自然语言这种非形式化语言翻译为形式化语言的过程 很多时候设计是对自然语言的抽象 而有的时候又刚好相反 设计和编码的关系依然如此 他们所表达的东西不相同——概念和概念的一个实现是不同的 对同样一个事务我们可能会有多种抽象 所产生的程序也有多种可能 但是有一件事情是肯定的 需求必须是不抽象的 也就是需求必须是具体的——虽然不可能开始就是那么具体 但我们必须有办法让它实现具体 由于是抽象行为 所以它们不可能是一致的 不然还怎么叫抽象
人类可以抽象 但是这个能力还不是很强 多数情况下我们的要求首先都是具体的 由于语言和环境等问题 使我们具体的要求不能很好的得到表述 所以客户说我需要一个信息系统 这一定不是一个什么抽象的概念 它一定代表着客户现实的一些想法 而我们的工作就是把他们的各种想法汇总发现分析 把各种需求做到统一 从而抽象出一个比较适合他们的结构 但是客户的需求不可能一下子全部或者大部分传达给我们 这就要有一个过程 在这个过程中客户的需求依然会产生变化 于是这就是产生增量开发的原因
而机器语言是那么复杂(没有银弹有充分的分析) 我们很难保证我们所作的设计 在没有转换为机器码之前就能得到验证 于是设计的重要性在某种程度上很难在没有实现前体现 软件开发的过程如果说我们有些把握的 只能是从编码 而即使是这个我们做得依然不是很好
软件工程是工程师的领域 从事软件工程研究的学院派在国内和国外都没有什么市场 他们只能抱着一些似是而非的理论乱叫 可惜声音总是那么小 从来都不是软件工程的主流 可以说软件工程——悲观者的疆土
zag 2002-12-06
  • 打赏
  • 举报
回复
不错.

1,265

社区成员

发帖
与我相关
我的任务
社区描述
软件工程/管理 管理版
社区管理员
  • 研发管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧