族谱网 头条 人物百科

没有银弹

2020-10-16
出处:族谱网
作者:阿族小谱
浏览:264
转发:0
评论:0
摘要所有软件创作都包括了本质性工作(essentialtask)和附属性工作(accidentaltask)。前者是去创造出一种由抽象的软件实体所组成的复杂概念结构,后者则是用编程语言来表现这些抽象的实体,并在某些空间和速度的限制之下,将程序对应至机器语言。现在,若跟本质性的工作相比,软件工程人员所做的事,还有多少算是花在附属性的工作上呢?除非附属性工作要耗费的心力超过全部工作的9/10,否则就算是将所有的附属性工作降至零,也无法将整个开发工作的轻松程度提升一个数量级。以往,软件生产力的重要进展绝大部分是来自于人为障碍的排除,像是严苛的硬件限制、难用的编程语言、上机时间(machinetime)的不足等等,这些都是造成附属性工作益发困难的原因。问题之所在-银弹与软件项目佛瑞德·布鲁克斯在〈没有银弹〉中提到:〈没有银弹〉主张并断言在未来的十年之内(从1986年文章发表后开始计算),不会有任何...

摘要

所有软件创作都包括了本质性工作(essential task)和附属性工作(accidental task)。前者是去创造出一种由抽象的软件实体所组成的复杂概念结构,后者则是用编程语言来表现这些抽象的实体,并在某些空间和速度的限制之下,将程序对应至机器语言。

现在,若跟本质性的工作相比,软件工程人员所做的事,还有多少算是花在附属性的工作上呢?除非附属性工作要耗费的心力超过全部工作的9/10,否则就算是将所有的附属性工作降至零,也无法将整个开发工作的轻松程度提升一个数量级。以往,软件生产力的重要进展绝大部分是来自于人为障碍的排除,像是严苛的硬件限制、难用的编程语言、上机时间(machine time)的不足等等,这些都是造成附属性工作益发困难的原因。

问题之所在-银弹与软件项目

佛瑞德·布鲁克斯在〈没有银弹〉中提到:

〈没有银弹〉主张并断言在未来的十年之内(从1986年文章发表后开始计算),不会有任何单一的软件工程上的突破,能够让程序设计的生产力得到一个数量级的提升。不过,作者认为这个假设现在已不再成立。

假设软件开发的总工作量为10,其中,本质性工作占掉1,附属性工作占掉9,那么改善附属性工作,将之消除,就可以把软件工作量减轻到1(因为附属性工作变成0),此时我们可以说,软件工作开发的轻松程度提升了一个数量级(因为由10进步到1,差10倍)。

软件开发的困难

布鲁克斯将软件开发的困难分为两类,这篇经典论文的核心论述通常被解释为复杂的软件工程问题无法靠简单的答案来解决。布鲁克斯相信软件开发真正的困难,是在于这种概念构造的规格制定、设计和测试,而并非在孜孜矻矻于它的呈现方式,以及测试该呈现方式的精确程度。

本质性(essence):软件本身在概念(conceptual)建构上存先天的困难;亦即如何从抽象性问题,发展出具体概念上的解决方案。

附属性(accident):将概念上的构思施行于电脑上,所遭遇到的困难。

布鲁克斯提到,有某些地方已经被附属性(accident)和附属的(accidental)这些字眼给混淆了,这个字眼是出自于亚里斯多德的古老用法。就英语:accidental的这个字眼而言,他所指的并不是偶然发生的意思,也不是意外不幸的意思,而是比较接近伴随的或次要的意思。

造成本质性困难的原因

布鲁克斯认为,附加性的困难会随着工具的改善而逐渐淡化,反而是本质性的困难最难以解决,因为大部分的活动是发生在人们的脑海里,缺乏有效的辅助工具。依照布鲁克斯的说法有下列几项:

复杂性(complexity):软件要解决的问题,通常牵扯到计算步骤,这是一种人为、抽象化的智能活动,多半是复杂的。

隐匿性(invisibility):尚未完成的软件是看不见的,即使利用图标说明,也常无法充分呈现其结构,使得人们在沟通上面临极大的困难。

配合性(conformity):在大型软件环境中,各子系统的接口必须协同一致。由于时间和环境的演变,要维持这样的一致性通常十分困难。

易变性(changeability):软件所应用的环境常是由人群、法规、硬件设备、应用领域等,各因素所汇集而成,而这些因素皆会快速变化。

过去的突破解决了附属性的困难

高级语言

高级语言达成了什么样的使命呢?它使程序不再陷入许多原来附属在程序里的复杂性。一支抽象的程序所包含的是一些概念的构造:函数、数据类型、先后顺序的关系,以及消息传递的方式,然而实际上,与机器码攸关的其实是比特、寄存器、条件、分支、通道、磁盘等等。高级语言可以将抽象程序里所必要的构造予以具体化,并且避免掉所有更低级的东西,在这种情形下,它把跟程序内涵一点关系都没有的那一整层复杂性给去除了。

分时技术

分时(time-sharing)技术所挑战的是另一个截然不同的难题,因为分时,确保了即时性,使我们得以持续保住脑子里对复杂的概观。分时技术所能贡献的底限也可以直接推算出来,由于其主要的效用就是缩短系统的反应时间,当这项时间趋近于零,并在某一点上跨越了人类所能够察觉到有系统反应时间存在的临界点,大约是十分之一秒,低于这个值,就不会再有任何效益了。

统一的开发环境

Unix和Interlisp是第一个得到广泛使用的集成软件开发环境,并且也被公认已将生产力提升了好几倍。这方面所挑战的附属性难题,就是借由完整的程序库、统一的文件格式、管道(pipe)和过滤器(英语:Filter (Unix))(filter),以促成软件的共用,于是,任何概念的构造在理论上都可以调用、传递和运用在另一个对象,而实务上,这点也很容易就可以办得到。这方面的突破随后也带动了整个工具软件的发展,因为每一个新工具只要用的是标准规格,就可以适用于任何程序。

查找银弹

Ada和其他高级语言的进展

编程语言Ada是1980年代的一个通用型高级语言。事实上,Ada不只是反映了在语言概念上的演进,同时也具体实现了一些助长现代设计与模块化概念的特征;也许,Ada的理念才是比Ada语言本身更先进的地方,这理念就是:模块化(modularity)、抽象数据类型(abstract data type)、层次结构式结构(hierarchical structure)。

面向对象程序设计

相对于当今流行的各种技术,面向对象程序设计(object-oriented programming)已被许多软件工程的学生寄予了更多的希望,Dartmouth的Mark Sherman指出,有两个不同的概念我们必须小心地加以分辨,从名称]上就可以看出这两个概念的不同:抽象数据类型和层次结构式类型。后者也被称为类别(class)。所谓抽象数据类型,其概念就是一个对象的类型应该由一个名称、一组适当的值和一组适当的操作方式来定义,而不是以它存储的结构来定义,这部分应该是要被隐藏起来的,例如Ada的包裹(package,使用私有类型)或Modula的模块(module)。

人工智能

专家系统

自动化程序设计

可视化或图形化程序设计

软件的验证

环境与工具

工作站

评价反响

虽然《人月神话》引发了许多论述,但争议很少,倒是〈没有银弹〉引发了不少持相反意见的文章,包括寄给期刊主编的一些信件,以及到今天都还在持续出现的一些书函和短评,这其中有大部分是对‘不会有任何特效药的主张’提出反驳。

在1990年,Brad Cox发表一篇〈银弹存在(There Is a Silver Bullet)〉,Cox指出采取可再利用(reusable)、可替换组件的方式来对付属于概念本质性部分的问题。Glass、Vessey和Conger在他们1992年的一篇论文中就指出,有充分的证据显示,对银弹这种没有意义的研究仍尚未停止。

Harel的分析

David Harel在1992年的一篇文献〈紧咬银弹(Biting the Silver Bullet)〉中,对已经发表的〈没有银弹〉进行非常仔细的分析。Harel认为〈没有银弹〉和1984年Parnas〈战略防御系统软件面面观〉这两篇都写得太过于绝望了,于是他就针对这一点来阐述较为光明的一面,他的文章还用了个副标题是“让系统开发走向一个光明的未来”。

就Harvel的认知,他认为造成〈没有银弹〉悲观的原因有三点:

本质性和附属性的二分法。

对每一个可能的银弹采取个别单独评论的方式。

只预测10年,这对“预期任何重大的突破”而言,并没有足够长的时间。

Harvel更提出了一项假想实验,他假定〈没有银弹〉的主张不变,只是发表的时间换做是在1952年,而非1986年。他这时用的是归谬法(reducto ad absurdum),用来反驳自附属性中切分出本质性的作法。

Jones的观点

Caper Jones曾提出一个敏锐的见解,这个见解最初是写在一连串非正式的纪录中,后来出现在书上,几个与布鲁克斯通信的朋友也提到过。〈没有银弹〉就如同大部分的论文一般,都把焦点集中在生产力,也就是软件每单位的输入成本能得到多少输出效果。Jones则表示:“把重点放在质量上,生产力将随之而来。”他认为,只要是成本过高和时程落后的项目,都耗费了非常多的额外时间和工作在查找并修正规格、设计、实现中的错误。Jones并提出数据佐证,缺乏有系统的质量控制与发生时程落后的灾难,这两者之间有强烈的相关性。

Caper Jones相信,两份同等的Cobol程序分别花10年编写,但其中一份使用结构化的方法,另一份则否,那么所得到的效果将相差3倍。

 


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

——— 没有了 ———
编辑:阿族小谱
发表评论
写好了,提交
{{item.label}}
{{commentTotal}}条评论
{{item.userName}}
发布时间:{{item.time}}
{{item.content}}
回复
举报
点击加载更多
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回

更多文章

更多精彩文章
打赏
私信

推荐阅读

· 天没有地大
天是盘古王开的,地是扁古王开的。他俩在开工前订了个条约,说谁先开完谁是大哥,后完应当弟弟。扁古动工了,盘古以为自己比扁古能干,一定比扁古先完工,大哥是当定了的,就干一会儿睡一会儿。扁古人老实,晓得盘古看不起自己,心想这回一定要争口气,就拚命干,没几天快完工了。盘古王看到扁古王快完工了,就生了个坏主意,等扁古王睡着了,就请来一个叫“赶出篙”的人,叫他把扁古王开的地赶成和天一样大。“赶出篙”拿把山竹竿赶了几下,把扁古王开得平展展的地堆成几座大山,地和天大小一样了。扁古王第二天起来,看到他的地和天一样大小了,知道是盘古王整了他。天黑了,扁古王请来一个叫“铁竹竿”的人,叫他把盘古王开的天撑高十丈,天被撑高了,就比地小了。可是从哪个地方撑天呢?想来想去,只能从天的中间撑。于是“铁竹竿”就在天下之中用竹竿把天撑高。但天太沉了,铁竹竿下端插到地下十丈。扁古王说,这里就叫“ru”地吧,后来天之中就叫成了“...
· 没有画的画册
前记说起来也真奇怪!当我感觉得最温暖和最愉快的时候,我的双手和舌头就好像有了束缚,使我不能表达和说出我内心所起的思想。然而我却是一个画家呢。我的眼睛这样告诉我;看到过我的速写和画的人也都这样承认。我是一个穷苦的孩子。我的住处是在最狭的一条巷子里,但我并不是看不到阳光,因为我住在顶高的一层楼上,可以望见所有的屋顶。在我初来到城里的几天,我感到非常郁闷和寂寞。我在这儿看不到树林和青山,我看到的只是一起灰色的烟囱。我在这儿没有一个朋友,没有一个熟识的面孔和我打招呼。有一天晚上我悲哀地站在窗子面前;我把窗扉打开,朝外边眺望。啊,我多么高兴啊!我总算是看到了一个很熟识的面孔——一个圆圆的、和蔼的面孔,一个我在故乡所熟识的朋友:这就是月亮,亲爱的老月亮。他一点也没有改变,完全跟他从前透过沼泽地上的柳树叶子来窥望我时的神情一样。我用手向他飞吻,他直接照进我的房间里来。他答应,在他每次出来的时候,他一定探...
· 天没有地大
天是盘古王开的,地是扁古王开的。他俩在开工前订了个条约,说谁先开完谁是大哥,后完应当弟弟。扁古动工了,盘古以为自己比扁古能干,一定比扁古先完工,大哥是当定了的,就干一会儿睡一会儿。扁古人老实,晓得盘古看不起自己,心想这回一定要争口气,就拚命干,没几天快完工了。盘古王看到扁古王快完工了,就生了个坏主意,等扁古王睡着了,就请来一个叫“赶出篙”的人,叫他把扁古王开的地赶成和天一样大。“赶出篙”拿把山竹竿赶了几下,把扁古王开得平展展的地堆成几座大山,地和天大小一样了。扁古王第二天起来,看到他的地和天一样大小了,知道是盘古王整了他。天黑了,扁古王请来一个叫“铁竹竿”的人,叫他把盘古王开的天撑高十丈,天被撑高了,就比地小了。可是从哪个地方撑天呢?想来想去,只能从天的中间撑。于是“铁竹竿”就在天下之中用竹竿把天撑高。但天太沉了,铁竹竿下端插到地下十丈。扁古王说,这里就叫“ru”地吧,后来天之中就叫成了“...
· 古代山上为什么没有树?
翻阅一些清朝时候的照片可以看出,很多的山上都是光秃秃的,例如清朝拍摄的老照片武则天和李治的乾陵,旁边都是光秃秃的。还有南京,杭州等地的老照片,都会发现一个现象,古代的树非常的少,这个是怎么回事?1、自然因素气候是一个重要的因素。古代气候与现今差别是非常大的,古代的冬天比现在更冷,在特定的小冰河期,导致山上的树木稀少。2、人为农业开发:古代是农耕时代,人们会焚林造田地,例如丽水畲族就有这种刀耕火种的习俗。而且古代是没有环境保护的说法的,对森林的破坏很大。木材需求:古代人们建房、造桥、造船、制作家具等,并不像现在的材料选择那么多,需要用到的木材的地方很多。因此,山上的树木是重要的资源,会被砍伐。人口密集的地区,山上的树木更是被砍伐一空。自然灾难:森林火灾会烧毁大片树木,古代人热衷于土葬,上坟烧纸会造成山烧着。3、历史背景人口增长:例如清朝摊丁入亩,人口达到了4亿,人口多对木材、燃料的需求页变多...
· 刑天为什么没有头?刑天没有头怎么作战?
刑天为什么没有头?刑天没有头怎么作战?神话传说中总是有各种各样的人物出现,这些人物也总是有着很奇特的地方,或许是外型,也或许是性格。而在上古的传说中,有这样一个“战神”级别的“怪人”,他没有脑袋,但是依旧能够拿起武器不断战斗。这的确是很神奇了,而这个没有头却依然能够作战的人就是刑天。他的形象经常出现在各种游戏作品当中,那么,刑天的脑袋又是被谁砍下来的呢?1.刑天的头去哪了刑天的头,是被黄帝砍掉的,而刑天本人是炎帝大将。这听起来有点奇怪,炎帝黄帝难道不是合作伙伴吗?为什么黄帝还要对刑天下手?《山海经》中说的是“刑天与帝至此争神”,说的比较简单,实际上,在刑天是炎帝的手下这个前提下,与黄帝争斗有两种可能,一种是受到指示,另一种是为主报仇。炎帝和黄帝之间的确曾经有过一次战役,那就是阪泉之战。这一场战役以炎帝的失败告终,但是炎帝的儿子和手下却不服,等到黄帝将蚩尤杀死之后,刑天更是按捺不住,偷偷地跑...

关于我们

关注族谱网 微信公众号,每日及时查看相关推荐,订阅互动等。

APP下载

下载族谱APP 微信公众号,每日及时查看
扫一扫添加客服微信