复杂度不会消失,只会搬家 书架

第 03 章 / 共 10 章

第三章 · 银弹为什么没有来

1986 年那篇《没有银弹》,其实是一篇论证极其克制的文章。重读它,你会发现布鲁克斯没有否认技术进步——他列举了当时所有的时髦工具:高级语言、分时系统、统一编程环境,承认它们都带来了可观的进步。他否认的只是:这些进步都是一次性的「偶然困难的局部清缴」,而不是生产力数量级的跃迁。

为了讲清楚为什么本质困难无法被工具触碰,他给出了软件的四条固有属性。这四条今天读来依然锋利:

这四条属性界定了「必要复杂度」的领土:它们是问题自带的,不是工具带来的。布鲁克斯由此断言:任何瞄准本质困难的银弹都不存在,未来的进步只能继续来自偶然困难的削减。

四十年里,人们真的信过无数次「这次是银弹」

布鲁克斯的冷水没能浇灭行业的热情,因为「让不会编程的人也能指挥计算机」这块蛋糕实在太诱人。历史上一串闪亮的名字,今天听来都像银弹宣言:

1959 年,COBOL。这门语言被刻意设计成像英语:ADD TAX TO PRICE。设计者的梦想是让经理们直接写代码。结果 COBOL 确实统治了商业计算半个世纪,但写它的依然是专业程序员——英语式的语法,骗过了外行,骗不过机器:写 ADD TAX TO PRICE 之前,你还是得想清楚变量、类型和控制流,这些才是难点,而这些难点被漂亮地伪装掉了。

1980 年代,第四代语言和 CASE 工具。厂商承诺「画流程图自动生成系统,从此不需要程序员」。大批企业买了单,大批项目死在了交付前。问题不在工具好坏,在于需求本身会生长:图能表达正常流程,表达不了「对账差一分钱时该怎么追溯」这种长在业务褶皱里的规则。

二十一世纪初,Scratch。麻省理工学院的团队 2003 年前后开始研发图形化编程,2007 年正式公开:拖积木代替写语句。这次是真实成功——但请注意它的成功范围:教孩子表达逻辑。它降低的是「键盘语法」这个最浅的偶然困难,而孩子们用它写的,依然是他们自己构思的程序。一旦涉及复杂规则,积木图照样会乱成一团。

注意这三十年潮起潮落的共同模式:每一次,人们都试图用「更友好的表达形式」绕过翻译层,每一次都失败了。失败的原因不是形式不够友好,而是缺了翻译层下游的那个东西——一个能接住模糊意图、自己补齐细节的翻译者。形式再友好,「把需求精确化」这活儿还是得人来干。

大白话:以前的「自然语言编程」,是给了你一支英文笔,作文还得自己写。缺的不是笔,是代笔的人。

所以布鲁克斯是对的,而且比他自己知道的更对:他论证的是「意图到代码的这段路必须有专人翻译」。四十年里这个论证无懈可击——直到翻译这件事本身,被证明可以不由人来做。

下一章,看看 2020 年代到底什么东西变了。

复杂度不会消失,只会搬家 · 竹小竹8167
费曼式写法 · 由多个 AI 代理撰写与互相审校