IT 论文精读 · PAPER 48

No Silver Bullet(没有银弹)

Fred Brooks · IFIP 1986 / IEEE Computer 1987

EN →

这篇文章说了什么?

1986 年,写过软件工程名著《人月神话》的 Fred Brooks(弗雷德·布鲁克斯)发表了一篇著名短文,题目叫《没有银弹》。他的判断只有一句:未来十年里,不会有任何单一的技术或管理方法,能让软件开发的效率、可靠性或简洁性一下提高十倍。——别指望一颗神奇子弹。四十年过去,这句话基本被应验,也一直被争论。

先打个比方

Brooks 说,软件项目就像民间传说里的狼人:平时看着人畜无害,一到月圆之夜(临近交付)就变成吃掉预算、拖垮工期、做出一堆毛病的怪物。人们于是拼命寻找那颗能一枪毙命的银弹——某种新语言、新工具、新方法,一用就万事大吉。Brooks 的答案是:银弹不存在,因为狼人不是被工具变出来的,是软件这东西「天生」如此。

关键的区分:本质 vs 偶然

Brooks 把软件开发的困难劈成两半。一半叫「偶然困难」——不是问题本身要命,而是我们用的工具太笨造成的麻烦(比如早年要用二进制、手工管内存)。另一半叫「本质困难」——就藏在「软件到底是什么」里头,换什么工具都躲不掉。他说:过去那些真正管用的进步,砍的全是「偶然」那一半。

为什么换工具救不了?

想象砍难度像砍一堵墙。高级语言、分时系统这些大发明,已经把「偶然」那半堵墙砍得差不多了。于是就算你把剩下的偶然困难全部清零,省下的也不到十分之九——离「提高十倍」还差得远,因为另半堵「本质」的墙纹丝没动。而这堵墙为什么砍不动?Brooks 给了四条软件的天性:它天生复杂(每个零件都不一样,不像盖楼能重复摞砖)、必须迁就别人(得去将就一堆早已存在、乱七八糟的接口和规矩)、永远在变(软件太软,谁都想再改一点)、还看不见摸不着(它不在空间里,画不出一张能一眼看懂的图)。这四样,不是哪个工具没做好,是软件本身就长这样。

那还有救吗?

Brooks 没说躺平。他指了几条真正冲着「本质」去的慢路:能买现成的就别自己写(最便宜的代码是你根本不用写的那行);先做个原型跟客户反复确认「到底要造什么」(因为最难的从来不是写代码,是想清楚要写什么);让系统一点点长大而不是一次盖完;以及最要紧的一条——好好培养顶尖的设计者,因为顶尖程序员和普通程序员之间,效率能差整整一个数量级。诚实说一句:这些都是苦功、是慢功,没有一条是那颗一劳永逸的银弹。

一句话记住

软件之难,一半是工具笨造成的「偶然困难」,一半是软件天生复杂、善变、看不见、还得迁就别人造成的「本质困难」。过去的银弹只砍得动前一半,而前一半快砍完了——所以别再等一颗神奇子弹,真正的活是啃那半块啃不动的本质:买现成、做原型想清楚需求、让系统慢慢长、把顶尖设计者当宝。

想看「本质 vs 偶然」的量化图、四大本质困难、以及各路「候选银弹」为何失手? → 切到精读版