找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3901

积分

0

好友

537

主题
发表于 昨天 02:32 | 查看: 5| 回复: 0

有一本书,流传甚广,常被引用,却鲜少被认真阅读,更少被真正遵循。

这本书便是问世已五十余年,被尊为软件工程“圣经”的——《人月神话》。

《人月神话》书籍封面

这本书的作者弗雷德里克·布鲁克斯,在撰写此书之前,是 IBM System/360 操作系统项目的开发经理。

《人月神话》作者弗雷德里克·布鲁克斯

System/360 是 IBM 的一场惊天豪赌,总投资高达 50亿美元(相当于今天的约400亿美元),几乎押上了全部身家。如果这次失败,IBM 很可能就此一蹶不振。

System/360 的目标在今天听来仍颇具野心:用同一套架构覆盖从小型机到大型机的全系列产品,所有机器都运行同一套软件,构建同一套操作系统 OS/360。

IBM System/360计算机机房

项目始于1961年,IBM 动用了数万名员工参与设计、制造、测试与支持。在那个“软件工程”概念尚不明确的年代,两千多名程序员硬是写下了上百万行代码。

不出所料,项目陷入了严重混乱,复杂度被严重低估,需求频繁变更,进度一拖再拖。布鲁克斯后来用一个生动的比喻描述了这种困境:软件开发就像“焦油坑”,表面平静,但一旦陷入,越是挣扎,陷得越深,难以脱身。

描绘史前生物陷入泥潭的黑白插图

这段经历直接催生了后来闻名遐迩的 布鲁克斯定律

向已经延误的软件项目增加人手,只会使项目更加延误。
—— Brooks’s Law

项目结束后,布鲁克斯深刻地认识到:软件开发的失败,往往不是因为程序员不够努力。真正的问题根植于管理方式、沟通结构和复杂系统设计的深层矛盾。于是,他将IBM踩过的坑、总结的经验,浓缩成了这本影响深远的著作《人月神话》,这无疑是软件工程领域一份宝贵的财富。

半世纪前的洞见,如何预见今天的AI编程?

那么,这本写于半个世纪前的《人月神话》,与今天火热的AI编程究竟有何关联?

它的核心贡献之一,是提出了两个区分软件开发复杂性的关键概念:本质复杂性偶然复杂性

1. 本质复杂性
这是与问题本身固有属性直接相关的复杂性,无法通过更换工具或方法彻底消除。它设定了软件系统在特定领域的“难度下限”。

例如,设计一个操作系统内核,你需要管理内存、调度进程、驱动设备,这些子问题相互纠缠、彼此制约。又比如航空航天控制系统,它必须处理极高的实时性要求、融合多路传感器数据、并严格遵循复杂的安全约束。这些挑战是问题本身带来的,是必须直面的核心。

2. 偶然复杂性
这种复杂性并非来自问题本身,而是源于工具、方法或开发环境自身的局限和不便。幸运的是,它可以通过更好的工具、更优的语言、更高效的框架或更合理的方法来大幅减轻甚至消除。

回想早期用汇编语言编程的时代,开发者需要手动管理寄存器、内存地址,开发过程极其繁琐且效率低下。当 Fortran、COBOL 等高级编程语言出现后,开发效率便实现了质的飞跃。高级语言所做的,正是消除了大量的“偶然复杂性”。

简而言之:

本质复杂性 = 你必须解决的真正问题
偶然复杂性 = 你可以通过改进方法而绕开的麻烦

那么,AI编程扮演了什么角色?显然,它正在以前所未有的力度,帮助开发者消除那些枯燥、重复、但又不得不做的“偶然复杂性”。无论是理解现有代码库、生成新代码、编写测试用例还是进行调试,AI 工具都展现了强大的辅助能力。

但一个更根本的问题随之而来:大模型能解决“本质复杂性”吗?

答案是:至少目前还不能。那些最顶尖的人类工程师都深感棘手的根本性架构难题,AI 仅凭自己还远远无法攻克。最近一些尝试让 AI 直接编写浏览器或编译器的项目频繁“翻车”,就是明证。再先进的 AI,也无法让一个本质复杂的问题本身变得简单。在复杂的、需要深度领域知识和创造性决策的场景中,脱离了人类的指导,AI 常常会“迷失方向”。

然而,AI 的价值恰恰在于:它能极大地减轻人类在处理本质复杂性时,所承受的那些繁琐、低层次的认知负担,从而让人能将更多精力聚焦于核心决策。

例如,当你要设计一个“分布式数据库的一致性协议”时,AI 可以帮你快速生成多种算法实现的示意图、代码草稿,并辅助检查潜在的死锁风险。最终的设计方案仍需你来拍板,但过程中大量的低级推演和文档工作已被分担。

再比如,面对一个庞大而复杂的遗留系统重构任务,其中涉及的业务逻辑、部门依赖、数据迁移风险都是“本质复杂性”。AI 虽然不能替你做出重构决策,但它可以自动梳理出代码依赖图谱、高亮风险模块,并为你生成配套的回归测试用例,极大地提升了你的分析效率和决策质量。

复杂性永不消亡,只会转移和升级

AI 编程固然强大,但它很可能正沿着前辈们(如高级编程语言、集成开发环境、各种自动化工具)走过的同一条路径演进:

工具变强 → 偶然复杂性被削弱 → 软件系统变得更大更复杂 → 本质复杂性更强

描绘软件开发复杂性演变的流程图

原因很简单:当实现成本大幅下降,人类不会满足于停留在原有的复杂度水平上。产品经理会要求更多功能,市场会寻求更精细的差异化,客户会提出更个性化的定制需求,企业则会尝试更广泛的系统整合……

这一切,都将推动软件系统的功能数量、模块耦合度、交互路径和状态空间呈指数级增长,从而导致系统整体的“本质复杂性”迅猛攀升。

几十年前,一个程序员用汇编语言可能只能写出一个简单的控制程序。今天,使用 Java 或 Python,一个团队可以轻松构建起复杂的微服务架构。

用汇编编写的 OS/360,百万行代码已是当时的巅峰。而如今,Linux 内核代码量超过3000万行,Windows 10 超过5000万行,Chrome 浏览器也在3000万行级别。现代云计算平台的代码总量,更是达到了数亿行,构成了一个真正的“代码宇宙”。

现在,AI 编程来了,代码的生成成本正被压缩至近乎于零。我们不禁要问,当编程的生产力再次被极大解放后,未来的软件系统将会演化成怎样难以想象的庞然大物和复杂形态?这既是机遇,也是摆在每一位AI编程实践者面前的全新挑战。




上一篇:苏格兰程序员用x86汇编写《过山车大亨》,独立开发赚取3000万美元
下一篇:MoonBit在日本开发者社区走红:高性能与Wasm应用实践解析
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-7 05:09 , Processed in 0.473480 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表