有没有银弹?——阅读思考

No Silver Bullet — Essence and Accidents of Software Engineering》是IBM大型机之父Frederick P. Brooks在1986年发表的一篇关于软件工程的经典论文。银弹(Silver Bullet)是外国传说中可以杀死狼人等怪物的神器,而后引申出的含义类似于大杀招、王牌。而Brooks在这篇论文中强调,由于软件本质的复杂性,真正的“银弹”并不存在;也断言在十年内,没有任何一项技术或方法可使软件工程的生产力提高一个数量级。

Brooks将软件开发的困难分为两类:本质性(essence)和伴随性(accident)。本质性困难是指软件“先天性”的困难,即如何从抽象性问题得到具体概念上的解决方案。就像数据库中的实体是对现实世界的抽象,但怎么设计这些抽象是难点,也是最重要的,将会影响整个开发的过程。伴随性困难是指将概念构思施行到代码编写等上遇到的困难。当然对伴随性困难感受最深的就是开发环境的配置安装……顺便略吐槽一下当年安SQLSEVER时因为先装了VS2010竟然导致不能安装最后重装系统的悲惨经历。

Brooks认为,伴随性困难会随着工具的改善而淡化,但本质性困难是难以解决的,因为它大部分发生在我们的头脑中,而没有什么工具可以有效地帮助我们。这一点我并不完全赞同。

Brooks例举的本质性困难比如软件的复杂性Complexity(计算是人为抽象的)、一致性Conformity(接口统一)、易变性Changeability(需求、硬件等变化)、不可见性Invisibility(未完成的的软件难以充分展现其结构,带来沟通困难)。

过去的突破比如高级语言High-level languages.、分时技术Time-sharing、统一的开发环境Unified programming environments,解决了一些伴随性困难。

而后Brooks也对一些兴起的技术或方法做了讨论和分析(感觉不乐观的分析占多数),例如Ada和其他高级语言的进展、面向对象的程序设计、人工智能、专家系统、自动化程序设计等等……以及比较有前景的对本质性问题有效果的法子,如购买部分软件取代开发、使用优秀的设计人员。

Brooks的这篇《没有银弹》引起的反响是很大的,争议与反对的声音也很多。1990年,Brad Cox发表了一篇名为《There Is a Silver Bullet》的文章,在其中指出采取可再利用(reusable)、可替换组件的方式来对付属于概念本质性部分的问题。(后来他还写了《No Silver Bullet Revisted》)

没有银弹,这种说法在我看来过于悲观。前面提到我不赞同头脑的思考难以借助工具那一点,我认为,软件开发者累积的经验与其自身归纳总结的能力即是头脑的“工具”。这一点确实不具有普适性,并且差异性很大。但随着软件工程的发展,我认为未来的软件工程师会得到更好的培训,正如这门课就是一种尝试。我们都没有牛顿的头脑,但我们每个人都会计算万有引力,此所谓“站在巨人的肩膀上”。对于总体来说,经验性的进步是显著的,并会因为某些契机可能得到大幅度提升,比如互联网的全球化。经验转化为更优质的培训后,开发人员的水平提升,软件开发总体的质量或时间将得到有效的提高。

一点拙见,还请指教。

时间: 2024-11-06 01:26:21

有没有银弹?——阅读思考的相关文章

阅读思考——被误用的敏捷和阻碍程序员成长的坏习惯

极限编程创始人Ron Jeffries建议开发者放弃敏捷 确实现在很多公司都在误用敏捷,盲目的推进项目的进度,拍脑袋定个乐观的项目进度,然后让开发在指定时间点交东西,最后开发被迫加班.然后项目出问题,市场推卸责任给产品方案,产品方案再推给开发.于是开发不仅要被迫的加班,还要成为背锅侠. 这种敏捷持续下去,优秀的开发会立刻,进而公司也必定受损. 当公司开始采用敏捷时,通常意味着他们正在努力改进工作方式.借助各种不同风格的指导和培训,他们可以提高问题的可见度,有助于高层管理人员和整个公司做出更明智的

阅读——思考

程序员小飞原计划三天完成某个任务,现在是第三天的下午,他马上就可以做完. 但是在实现功能的过程中,他越来越意识到自己原来设计中的弱点,他应该采取另一个 办法,才能避免后面集成阶段的额外工作.但是他如果现在就改弦更张,那势必要影响 自己原来估计得准确性,并且会花费额外的时间,这样他的老板,同时会因此看不起他. 如果他按部就班,最后整个团队还要花更多的时间在后续集成上,但那就不是他个人的 问题了. 怎么办? 思考:个人的问题要尽早解决,而且在开始写代码之前要注意后续集成等方面的事情,等到编程快要完成

阅读思考

程序员小飞处理这个事件的出发点是个人还是群体,他把个人的和集体的问题分开来看,我觉得他应该把个人和集体的连起来,一承认自己的失误,将自己的错误摆出,要和团队成员讨论后续的应该更改内容,自己的失误已经出了,不要想那些如何抹除,因为你开发的是一个程序的一个小部分,如果你出错不更改的话,会影响整个程序运行,同时要相信自己的能力可以帮助你的同伴,甚至是整个团队.做错不可怕,怕的是损人不利己.一个团队就要有集体意识,不要把自己隔离在集体之外,这样不利于你也不利于团体.

快速阅读《构建之法——现代软件工程》

2017年4月1日,我借阅了<构建之法--现代软件工程>一书,2017年4月13日上午终于快速读完了一遍.书中包含的内容丰富,其中大量的网上链接没有阅读.在我看来,读这本书应该先通览全篇,不能被大量的链接在第一次阅读的时候就打断.网上的链接一个接一个,这样会导致我忘记了最初的阅读目的.也许,这就是万维网的一个弊端吧. 速读<构建之法--现代软件工程>记录日程如下: 星期日 星期一 星期二 星期三 星期四 星期五 星期六             1开始阅读 2 3第二章第三章 4 5

Eric Raymond对于几大程序开发语言的评价

Eric Raymond是开源运动的领袖人物,对于UNIX开发有很深的造诣,主持开发了fetchmail.他的<大教堂与集市>被奉为开源运动的经典之作.下面对几大开发语言的评价非常中肯,是我近年来看到的比较出色的评论.特别是他评价中抱有的那种"简单就是好"的思想,很值得我们深思.我特别选译出一些段落,供大家阅读思考.Raymond此文不是在泛泛地去谈语言的优劣,而是要回答一个问题:在UNIX下开发开源项目,如何选择开发工具?我翻译的很零散,建议大家去看原文. 参考:http

转 Eric Raymond对于几大开发语言的评价

原文见:http://blog.jobbole.com/79421/ [译注]:Eric Raymond是开源运动的领袖人物,对于UNIX开发有很深的造诣,主持开发了fetchmail.他的<大教堂与集市>被奉为开源运动的经典之作.下面对几大开发语言的评价非常中肯,是我近年来看到的比较出色的评论.特别是他评价中抱有的那种“简单就是好”的思想,很值得我们深思.我特别选译出一些段落,供大家阅读思考. Raymond 此文不是在泛泛地去谈语言的优劣,而是要回答一个问题:在UNIX下开发开源项目,如何

IT知识收藏.2015年1月、2月

--个人收藏的近两个月的最新网文,经过整理IT类知识网址100个左右,今天共享一下希望大家喜欢-- 按来源分组 程序员杂志 你为什么不是史蒂夫·乔布斯 http://www.csdn.net/article/2015-01-29/2823765 造成IT项目失败的五个原因 http://www.csdn.net/article/2015-01-30/2823781 Esri ArcGIS 10.3 惊艳登场,打造新一代Web GIS最强"芯" http://blog.csdn.net/

近来的java小总结(2.1):类的知识的查漏补缺

首先,我是一名新手,所以,要带着批判的眼光来看下面的文章   这篇文章说了些什么? 这文章是我近来8.6号来在编程思想上打的代码,从0~200页的源码接近到在这里,下文正是总结这0~200页的的知识,涉及到接口,内部类.初始化,数值计算的一些细节.此文章不会一下子写完,可能隔一天可能再补下来.因为代码确实有点多.. 注意 1 我的注释不一定正确(不过各小标题和代码一定是正确的,因为是书本上的原话,但是注释不一定正确),如果你确信我的内容的话,你可能会损失很大,因为我只是个菜鸟,我只是来补救一些知

近来的java小总结(2.2):类的知识的查漏补缺

1 首先,我是一名新手,所以,要带着批判的眼光来看下面的文章   这篇文章说了些什么? 这文章是我近来8.6号来在编程思想上打的代码,从0~200页的源码接近到在这里,下文正是总结这0~200页的的知识,涉及到接口,内部类.初始化,数值计算的一些细节.此文章不会一下子写完,可能隔一天可能再补下来.因为代码确实有点多.. 注意 1 我的注释不一定正确(不过各小标题和代码一定是正确的,因为是书本上的原话,但是注释不一定正确),如果你确信我的内容的话,你可能会损失很大,因为我只是个菜鸟,我只是来补救一