程序员03年的.....
google就是 强一些。
评论人/二刀
外国人跟咱中国人一样,也是人上一百,形形色色:有迷编程的,有迷军事的,有迷游戏的,还有既迷编程又迷军事又迷游戏的。美国的最新战斗机F-22 “猛禽”,是军事迷们津津乐道的最先进战斗机,一架3亿美金,有优越的隐身能力,能作超音速巡航,超视距攻击不在话下,近距离缠斗也是极为出色。在著名的游戏“皇牌空战”中,F-22就是王牌战机,最后一关F-22近身格斗Su-37“金雕”,是令无数游戏迷激动的经典对局。那么F-22跟编程扯上什么关系了呢?
上个月,在著名的技术论坛slashdot.org上,有位发言者写了这么一个帖子:
最近一位匿名仁兄在一本期刊上发表了一篇文章,提到F-22即将取代美国空军中的F-15和F-16。
文章中有一句话我印象深刻: “现在航电设备突然出现了问题,驾驶员必须象重启PC一样重启整个系
统。”我在google上搜了搜,下面是我搜集的主要资料:该战机航电系统的硬件主体是休斯通用集成处
理器(Hughes Common Integrated Processor),处理器的核心是Intel i960 CPU。操作系统是什么?
我没有找到相关介绍,不过据说是由150万行Ada代码写就的。我说弟兄们,你们有没有参与过这个项目
的?怎么能允许我们的战斗机在飞行中reboot呢?
哈,这对我们中国的军迷来说不失为一个好消息。不过作为软件开发人员,这事多少有些让人尴尬。Ada号称是最安全健壮的语言,而F-22又是那么重要的一个项目,美国的军事软件开发实力勿庸置疑,居然也会出这种问题,这实在值得咱们软件开发人员深思。
从这个帖子的回复来看,很多都是在开玩笑,比如:
“哈哈,F-22的控制键盘上也有Ctrl-Alt-Del键吗?”
“当然,Ctrl键在右边的控制面板上,Alt在左边,至于Del嘛,自然就是导弹发射按钮喽。”
这个讨论在comp.lang.ada上引起了不小的反响。
Ada语言素以高可靠性著称,在1998年前是美国国防部唯一认可的军用系统开发语言,象F-15/16航电系统,波音-777控制系统,阿里亚娜火箭控制系统等重要军用软件,都是用Ada开发的。1998年之后,美国国防部允许军用系统开发商使用他们认为合适的其它语言进行开发。近年来,C/C+ +和Java等语言逐渐进入军用软件开发领域。其中影响最大的个案,是美英联合研制的JSF战斗轰炸机经招标决定用C++进行主体开发。此事当时曾经引起 Ada社群的巨大反应。除了士气遭到打击之外,他们也做出了一些“恶毒”的预言。这次F-22的“丑闻”中,Ada支持者首先怀疑出问题的部分是用C++ 写的。
“据我所知,新增代码是用C++写的,而用Ada写的部分是稳定可靠的。”
下面有另一个人一唱一和地说:
“ 什么? 我没听错吧?你敢肯定说的不是Novalogic的游戏《F22猛禽》,而是我们的F22军用战斗机?用C++来写航电系统?天啊!重启算是怎么回事?‘请按下开火键,弹射逃生键和自毁键’?简直可笑。C++不合适这种任务,至少有两个原因:一,天生的不稳定,二,C++程序员一般水平很次。C++之所以流行,原因是它已经很流行,而且比较容易找到所谓的高手。这样下去,C++的内存泄露可能会导致核战争,到那个时候屏幕上会显示‘请重启人类文明’。
一位拥有博士头衔的发贴者说:
“这件事值得我们重视。现在任何一个国家,无论它对美国是否友好,都可以从网上下载GNAT,并且可用GNAT开发出高可靠性的软件。而美国国防部却在使用C++和Java。这让我回想起历史上类似的情形。德国军队最有效地运用了Charles de Gaulle将军的坦克战术。Billy Mitchell发明了航空母舰,而证实其战争威力的却是山本五十六的日本帝国海军联合舰队。”
GNAT是ACT公司提供的高性能Ada 95开发环境,以从网上自由下载。这位老兄的联想未免太丰富,不
过也有人给他宽心,下面有一个人回复:
“不用担心。可供公开下载的那个GNAT只适合于学习演示之用,要想打败资本主义的军队,必须用ACT
支持版。”
讨论发展到这里,完全脱离轨道,一群人围绕政治问题开始了调侃,从工人阶级到十月革命,从列宁到社会主义形态,从阿波罗登月计划到航母发展史,可谓什么都说,就是跟软件无关。倒是有一个俄国人,说了几句半开玩笑的话:
“你们还没有真正领会贵国国防部的阴谋。大家想想,美国这么干了,那些潜在的敌国军队一定会仿效领先者,采用相似的技术来开发自己的航电系统软件。而他们又不可能聚集那么多的资源来进行代码评审、验证和测试,所以开发出来的系统肯定比较次,这就是美国所希望的结果。战斗机不要最好,只要更好——比敌人的好。”
莫名其妙地,一个署名似乎是中国人的网民写了一个帖子:
“中国新一代喷气式战斗机超7(以前叫做FC-1)最近在成都试飞成功,这种新型战斗机有很多先进的特征,软件就是其中之一。听说线传飞控等不少控制软件是用Ada写的。”
这样的帖子当然让我们中国程序员感到骄傲, 不过放在这个地方,恐怕并不是很合适。
Richard Riehle是著名的Ada专家,深深地参与到美国的军用软件开发工作中,实践经验丰富,心态也十分开放和公平,他指出:
“1. JSF战机已经决定主要用C++和C 开发,Ada将只用于局部系统。
2. F-22的代码中Ada占了很大比重,但也包含其它语言。
3. Ada的确更适合开发军用和民用航空系统软件,但是开发过程仍然是由易犯错误的人类执行的。良好的工具固然有帮助,但是“A fool with a tool is still a fool”。
4. JSF和F-22的软件系统复杂性远远超过之前的任何系统。在大规模复杂程序的开发中,如果按照“庄严设计”的过程来开发,结果会产生更多的缺陷,原因很大程度归咎于这种重型的设计思想本身。
5. 我相信Ada在这样的项目中较之C++更加适合。但是不可否认,如果开发者是一个经验丰富的C++程序员,能够谦虚谨慎地选择该语言中安全有效的部分,那么仍然可以做出令人满意的系统。不过我对那些开发者的自我约束能力实在没什么信心,因为该语言中‘邪恶的诱惑’实在太大了。
6. 当一个用Ada写成的系统出现问题时,我们一定要坦率地承认它确实是用Ada写的。再好的借口也还是借口。我见过用Ada写的极其出色的系统,也见过一些用Ada写得糟糕透顶的系统,按照一位神秘的陆军上校的说法,‘公羊见了都会呕吐’。
7. 最后,我坚信不移,当其它一切条件相似时,使用Ada的团队比使用C++或其它任何语言的团队都更有可能获得成功。”
Ada社群在军用项目中的地位,正在越来越多地受到C++的挑战,为此他们认为这是无知的管理者脑子里的“悬挂指针”引起的错误。但是事实上,军用系统开发走向多语言并存的大趋势是不可逆转的。2001年,在美军的参与下,Real-Time Java规范已经通过。我相信不久的将来,Ada/C/C++/Java会有机会在同一个舞台上互相比试。
但是Richard Riehle说的对,决定性的因素还是我们开发者自己。我们中国程序员所有单项能力中最薄弱的就是对软件可靠性、稳定性的保证能力。实际上中国程序员的创新精神、钻研精神是非常突出的,我们经常可以看到一些构思精巧、界面美观、功能独到的国产应用程序。但是在系统可靠性这种需要扎实功底、严谨作风的地方,我们的表现相当不令人满意。在国内大部分公司,检查和排除软件质量缺陷的唯一办法就是debug,完全没有规范化程序设计和质量保证体系的观念和实践。
提高我们的质量意识,提高我们软件的可靠性,这已经是一个当务之急。正如我们在这次讨论中看到的,这不仅仅关系到你是否可以尽早地拥有一间自己的房子,还关系到你是否可以在这间房子里安安稳稳地睡觉而不用担心被急促的电话吵醒,还可能关系到你以及其它千千万万人的住房是否能够安全存在,而不会随着一声巨响被蘑菇云从地球上抹去。