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

 

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

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值