永恒的承诺:消灭程序员的尝试史
Hacker News 摘要原标题:The Eternal Promise: A History of Attempts to Eliminate Programmers
回顾软件开发的历史,可以发现一个非常稳定的模式:人们不断承诺要简化软件创建过程,降低成本,并最终消除对程序员的需求。这种雄心壮志自20世纪60年代以来一直是行业的驱动力。尽管每一代人都认为自己正在经历前所未有的变革,但实际上这只是一个重复了六十多年的循环。
初始的原罪:COBOL 与业务用户的梦想
在20世纪50年代后期,编程是一项极其晦涩的工作。程序员使用汇编语言或机器码,直接操作寄存器和内存地址。1959年,葛丽丝·霍普和相关委员会创建了 COBOL 语言。
• 革命性目标:创造一种接近英语的编程语言,让业务经理能够阅读、理解并最终亲自编写程序。
• 语法设计:故意使用冗长的词汇,如 MOVE、ADD、MULTIPLY 和 PERFORM,使程序读起来像一份备忘录。
• 营销承诺:消除专业程序员造成的瓶颈,让业务分析师自行编写程序。
• 实际结果:COBOL 在商业领域取得了巨大成功,成为了银行和保险系统的核心。但它并没有消除程序员,反而创造了一个全新的职业——COBOL 程序员。编写正确且高效的 COBOL 代码仍然需要深厚的系统知识和多年经验。
第一次 AI 寒冬:专家系统与70年代的炒作
20世纪60年代和70年代初,人们对 AI 的乐观情绪远超现在。1965年,AI 研究奠基人之一赫伯特·西蒙预测,二十年内机器将能完成人能做的任何工作。
• 愿景:通过自然语言描述需求,计算机就能自动编程。
• 失败原因:1973年的《莱特希尔报告》暴露了 AI 承诺与成就之间的巨大差距。在简单模型中有效的系统在处理现实世界的复杂性时宣告失败。
• 后果:资金枯竭,研究计划取消,迎来了第一次 AI 寒冬。这证明了将人类意图转化为有效软件是一个根本性的挑战,而不仅仅是技术问题。
第四代语言:80年代的承诺
20世纪80年代初,出现了第四代语言(4GL),如 FOCUS、PowerBuilder 和微软 Access。
• 核心理念:用户不再编写过程化代码,而是通过高层声明和图形界面定义数据结构、业务规则和屏幕。
• 结果:4GL 在报表生成和简单数据库应用方面取得了成功,但面对复杂的业务逻辑、性能要求和系统集成时,其局限性暴露无遗。最资深的使用者依然是理解底层原理的专业开发人员。
CASE 工具与教堂建筑师
20世纪80年代末到90年代初,计算机辅助软件工程(CASE)工具兴起。
• 愿景:通过图表和规范对整个系统建模,工具会自动生成完整的应用程序。
• 现实:生成的代码往往臃肿且效率低下。随着需求变化,维护模型变得异常困难。事实证明,把规范写对的难度一点不比直接写代码小。
第二次 AI 浪潮与日本的五代机
80年代还出现了以专家系统为核心的第二波 AI 热潮。
• 尝试:日本的“第五代计算机计划”投入巨资,旨在创建能用逻辑编程进行推理的机器。
• 失败:专家系统非常脆弱,一旦超出其狭窄的专业领域就会失效。维护庞大的规则库变得越来越难,第二次 AI 寒冬在90年代初到来。
互联网时代:网页开发与民主化梦想
90年代中期,HTML 被认为非常简单,任何人都能构建网页。但随着 JavaScript、CSS、服务器端编程、数据库和安全性要求的加入,网页开发变得空前复杂。Dreamweaver、WordPress 和 Wix 等工具虽然降低了门槛,但专业网页开发却分化出了更多需要特殊技能的岗位。
模型驱动架构与 UML 梦想
2000年代初,模型驱动架构(MDA)提出通过自动化工具将独立于平台的模型转化为具体实现。统一建模语言(UML)成为标准符号。
• 结果:由于模型与代码之间的同步非常困难,且模型本身变得极其复杂,这种方法在主流实践中逐渐淡出。
无代码与低代码的复兴
2015年左右开始,Bubble、Zapier 和微软 Power Platform 等平台再次承诺让“全民开发者”构建应用。
• 现状:这些工具在简单任务和工作流自动化方面非常成功。但当需求超出平台能力时,用户依然会遇到瓶颈。无代码并没有减少对传统开发者的需求,反而因为数字应用数量的爆炸式增长,增加了对程序员的需求。
大语言模型:当前的浪潮
GPT-4、Claude、Gemini 以及 GitHub Copilot 能够根据自然语言生成功能代码。现在的预测依然很大胆:编程工作将被消除,软件开发将实现彻底的民主化。
为什么承诺总是落空?
软件简化工具之所以无法完全兑现承诺,是由软件开发的本质决定的:
1. 软件是精确的行为规范:当你说想要一个简单的电商应用时,隐含了数以千计关于身份验证、支付处理、错误恢复、性能和安全性的决策。这些细节在高级描述中是不可见的。
2. 复杂性的转移:自动代码生成只是把复杂性从代码转移到了规范说明中。弄清楚软件究竟应该做什么,并确保它在所有情况下都能正常运行,这才是最难的部分。
3. 权衡与判断:性能与可维护性、安全性与可用性之间的权衡需要人类的判断。
历史的教训与启示
• 极端预测通常是错误的:宣称编程将在几年内消失的说法低估了挑战的复杂性。
• 真正的进步确实存在:每一波工具都降低了简单任务的门槛,增加了软件的总量,从而催生了对更复杂软件和更高级开发者的需求。
• 编程工作的演变:未来的开发者可能直接编写的代码更少,但在理解需求、设计系统架构、调试意外行为和与利益相关者沟通方面的能力将变得更加重要。
• 理解力的价值:软件是“结晶化的思维”。没有任何工具能替代清晰的思考。
历史表明,关于“编程已死”的报道在过去六十年里被多次夸大。未来的程序员可能会在更高的抽象层级工作,但将人类意图转化为可靠软件的核心工作依然需要人类的技能、判断和理解。
原文:https://www.ivanturkovic.com/2026/01/22/history-software-simplification-cobol-ai-hype/