`
ruilin215
  • 浏览: 1148356 次
  • 性别: Icon_minigender_2
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

杀不死的人狼——我读《人月神话》(四)

阅读更多

=====
四、没有银弹,或人狼杀不死
=====
人狼这个动物很奇怪,皮肉坚实还是自疗系的,所以要么砍它不动,要么杀它不死。这种动物如同习得(传说中的)金钟罩功夫,刀枪不入,水火不怕。也如同金钟罩有罩门一样,人狼对银没有免疫,因此如果做一颗银弹就能穿透它,进而杀了它。
所以人们总是说一物克一物,大象怕老鼠,总有对付它的法子。但如果你设定了一个自圆已说的悖论,那除了否定悖论本身没有意义,也就没有解它的法子了。同样的道理用在“没有银弹”这个观点上,也是成立的。
也就是说,如果我们讨论“有或者没有银弹”,那么应该先反过来看看“人狼”的本质。因为本质是人狼对银不免疫,所以我们才能找到银弹并杀了它。如果人狼根本就杀不死,那么不要说金弹银弹,就是核弹也没用——因为它杀不死。
我们来看看Brooks所谓的人狼,也就是“软件活动的根本任务”。首先,Brooks认为我们并没有足够的精力来放到“软件活动的根本任务”这一目标之上。他的论证过程是:
  • 根本任务的目标:抽象软件构成的复杂概念结构;
  • 次要任务的目标:表达抽象实体,在一定范围内映射成计算机的执行逻辑;
  • 我们大多时候在关注次要目标,例如写程序和开发“写程序用的”程序;
  • 我们写再多的程序与再强的“写程序用的”程序都不会触及到根本任务。
进一步的分析来说,是我们探索目标的方法,分散了达到目标的力量。我们在通向目标的路线上越是努力,那么我们的力量就被分解得越快。次要目标是达到主要目标所必须的,但次要目标上花费越多的精力,就越无法接近主要目标。既然要经过A才能达到B,而经过了A也就没有力量达到B。那么结论自然是:达不到B(主要目标)。
这个悖论说的是手法问题。你当然可以超越某种手段,可以从纯理论上来推论出:没有了A就成了,我们可以由C达到B。由于永远存在C*(任意)的途径,那么当然存在CB的途径。由于手段无以穷尽,所以Brooks当然不能从这上面说服大众。于是,Brooks立即又论述了这个人狼的四个具体特性:复杂度、一致性、可变性和不可见性。
一是要面对极端的复杂性。尽管我们可以用模件复用来缓解复杂性,但是软件实体的扩展必须是不同元素实体的添加,这些元素“以非线性递增的方式交互,因此整个软件的复杂度以更大的非线性级数增长”。所以你创建一个新软件就必然面临更多的(非线性级数增长的)旧软件中不能被复用的元素。所以在复杂性方面,人狼是自疗系的:越做越复杂,不可能变简单。
二是要背上不可丢弃的历史包袱。由于Brooks强调新的软件需要保证跟旧的软件兼容(有点象MS Vista兼容MS DOS),你创生了一个软件也就创生了下一个软件的需求,所有的创生活动产生了需求的自增集合,尽管这种“变体不是必需的”,但它一个不可丢弃的历史包袱。所以在保证一致性这一方面,人狼是自增长的。
三是要接受需求的持续变更。软件要保证设计一致性才能成功,但从这个软件被设计的那一刻开始,你就必须接受来自它人的、自身的、市场的、自然及社会规律的,以及不同的文化和思想习惯的差异的需求(这意味着每个人的想法都可能被作用在一个软件实体上)。需求是无度和不可控的,所以人狼本身又是变形系的。
四是不可见。你找不到足够的抽象方法描述软件的不同侧面,也就不能将它们表达为抽象概念上的图形。如果你找到了这样的方法,那么这个“软件”本身就不足够复杂,因此也就不是原本含义上的“根本任务”。所以,它是隐形的——你如果看见了它,要么是看见了诸多复杂的方面中的一面,要么根本就是看错了。
从游戏术语来说,我们要面对的是“自增+自疗+变形+隐身”的终极大BOSS,而Brooks还要求:HI,小子,你得拿个足够简洁(例如小刀?)的武器去单挑(独立的解决方案?)。
如果有游戏策划写出这样的脚本,那么他得被玩家活活骂死。但Brooks描绘了这样一只“杀不死的人狼”,并开心的说“你们没有银弹”。然而,他不但没有被骂死,还得到了一致的认可,并且整个工程界欢欣雀跃,一致以找出那枚银弹为已任。
这样来戏谑大师的预言实在是有些不敬。那么大师是否就是在那么严谨地对待自己的观点呢?他说:必须声明的是,构建独立小型程序的数据不适用于编程系统产品。
大师的意思是:因为不能通过“做更多的小型程序”来得到做大型系统的经验/数据,所以无论何时,只要面对大型工程,你的经验值就立即归零(或者极低)。显然,(连白痴都知道)毫无经验值地直接面对终极大BOSS,结果一定是失败。又由于所有面对这些大BOSS的都(无可置疑地)失败,因此我们也就不可能有成功。
显然这是一个法宝:如果你违背这个逻辑而又获得了成功,那么这种成功可以立即被归结于:你在做一个小型程序。
放心吧,没有人能杀得死Brooks的人狼的,也不可能找得到这样的银弹。因为Brooks的人狼原本就是杀不死的,他甚至连“给睡熟的人狼胸口一刀”这样偶然性的机会也没给你留下。任何时候,你杀死了一头看起来有点象是人狼的怪物,Brooks都可以轻描淡写的说:OH,小子,你看错了,那并不是人狼。
分享到:
评论

相关推荐

    《人月神话》布鲁克斯.扫描版.pdf

    人月神话(THE MYTHICAL MAN-MONTH)...........................................................................6 乐观主义....................................................................................

    人月神话 pdf

    人月神话(THE MYTHICAL MAN-MONTH)...........................................................................6 乐观主义....................................................................................

    变形金刚人物图片档案集——博派.exe

    变形金刚人物图片档案集——博派.exe <br>擎天柱 火车模式 爵士 爵士pretender 千斤顶 铁皮 救护车 警车 蓝霹雳 探长 开路先锋 幻影 飞毛腿 横炮 红色警报 轮胎 烟幕 消防车 吊车 滑车 刹车 飞过山 ...

    人狼羊菜过河程序JAVA

    "人狼羊菜过河"问题是一个经典的逻辑谜题,源于中国的民间故事,也被称为"智渡黄河"或"三子过河"。在编程领域,这个谜题常被用作设计算法和解决约束满足问题的实例。在这个Java程序中,我们将深入探讨如何通过编程来...

    用python编写的一款小游戏,实现人狼羊菜过河

    在这个游戏中,玩家需要帮助人、狼、羊和菜安全地过河,同时要确保在任何时候,狼不会与羊单独在一起(否则狼会吃掉羊),菜也不能与人单独在一起(防止人离开时菜被狼吃掉)。这个游戏体现了经典的逻辑问题,通过...

    人狼羊菜过河问题(编程求得最优算法)

    一个摆渡人F希望用一条小船把一只狼 W,一头羊 G 和一篮白菜 C 从一条河的左岸渡到右岸去,而船小只能容纳 F、W、G、C 中的两个,决不能在无人看守的情况下,留下狼和羊在一起,羊和白菜在一起,应怎样渡河才能将狼...

    人狼羊菜渡河问题(含Matlab程序).doc

    人狼羊菜渡河问题是一种经典的计算机科学问题,它描述了一个人带着一条狼、一只羊、一筐白菜过河的过程,并且确保狼和羊、羊和白菜不能单独留在同岸,否则羊或白菜会被吃掉。该问题可以使用图论中的最短路算法进行...

    最新人教版七年级生物下册第一次月考试题及答案.docx

    - “从青春期开始的年龄看,男孩一般比女孩早”——不正确,事实上,女孩通常比男孩更早进入青春期。 - “孕妇喝酒、吸烟对胎儿的生长发育没有影响”——不正确,孕妇饮酒和吸烟对胎儿有害。 - “生长激素有调节...

    人狼大战 java源代码

    【人狼大战】游戏是一种策略性极强的社交推理游戏,玩家分为村民、狼人和其他特殊角色,通过夜间杀戮和白天投票来决定胜负。在这个Java源代码项目中,开发者可能实现了游戏的核心逻辑,包括角色设定、游戏流程控制、...

    人狼羊菜渡河问题(含Matlab程序).pdf

    "人狼羊菜渡河问题"是一个经典的逻辑谜题,涉及到状态空间的探索和路径优化。问题的核心是设计一种策略,使得人、狼、羊和菜能够安全地通过一条小河,每次只能运输一个物体,并确保在任何时刻,狼不能与羊独处,羊也...

    【老生谈算法】matlab实现人狼羊菜渡河问题(含Matlab程序).doc

    人每次只能带一件物品过河,而狼不能与羊单独相处,羊也不能与菜单独相处,否则会发生不利的情况。因此,必须确保在任何时候,狼和羊、羊和菜都不能在同一岸。 2. **状态表示**:用四维向量v=(m, n, p, q)表示当前...

    人狼羊问题

    农夫需要把狼、羊、菜和自己运到河对岸去,只有农夫能够划船,而且船比较小,除农夫之外每次只能运一种东西,还有一个棘手问题,就是如果没有农夫看着,羊会偷吃菜,狼会吃羊。请考虑一种方法,让农夫能够安全地安排...

    软件的涅槃

    - **银弹理论**:Brooks比喻软件项目的不可预测性类似于民间传说中的人狼——表面熟悉但实质上充满未知与危险。他指出,就像需要用银弹才能杀死人狼一样,软件开发中的问题也需要根本性的解决方案。然而,他认为并不...

    16角色狼人杀游戏规则.docx

    1. **狼人** (LR): 是游戏的主要对立面,每晚可以杀死一名玩家,目标是消灭所有非狼人角色。 2. **村民** (CM): 没有任何特殊能力,通常依赖于推理和观察来参与游戏。 3. **先知** (XZ): 每晚能验证一名玩家的身份,...

    j2me游戏飞机射击各种运动

    本文将深入探讨一个使用Java 2 Micro Edition (J2ME) 开发平台创作的飞机射击游戏——“人狼战”,这款游戏以其丰富的运动模式和动态效果,在众多游戏中脱颖而出。 J2ME作为Java的一个轻量级平台,专为移动设备设计...

    JinroJ-heartScriptMEmu:MEmu版人狼Jスクリプト

    在IT领域,特别是游戏开发与模拟器技术中,人狼游戏(也称为狼人杀)是一种广受欢迎的社交推理游戏。而JinroJ-heartScriptMEmu则是一个专为MEmu模拟器设计的、用于运行人狼Jスクリプト的程序。这个项目旨在为玩家...

    c++语言程序设计 ()详细的讲解了C++)

    布鲁克斯用形象的譬喻来论述软件工程中存在的“陷阱”——“在所有恐怖民间传说的妖怪中,最可怕的是人狼,因为它们可以完全出乎意料地从熟悉的面孔变成可怕的怪物”,而“大家熟悉的软件项目具有一些人狼的特性...

    人狼日记「人狼日記 ブックマーク」-crx插件

    把人狼日记的参加者专用的页自动标记。 支持语言:日本語

    农夫,狼,羊, 菜,过河经典问题

    在这个问题中,农夫需要将狼、羊和菜全部安全地从一岸运送到对岸,同时要确保任何情况下,都不能让狼单独与羊或菜在一起,以免发生危险。为了解决这个问题,我们可以利用有限状态机(Finite State Machine, FSM)的...

    狼羊过河问题_数学建模

    在这个问题中,有四个人物:一个人、一只狼、一只羊和一棵菜。它们需要从河流的一侧到达另一侧,但它们之间存在着一些约束条件。人是唯一能够驾驶船进行过河的主体,而船的容量仅限于带一个其他元素一起过河。狼不能...

Global site tag (gtag.js) - Google Analytics