从《人月神话》看AIGC是否是软件开发的银弹
大家好,我是Edison。
最近阅读了钟敬老师的特别策划系列文章《AI时代程序员生存之道》,里面从《人月神话》的视角来讨论AIGC对于辅助软件开发的能力边界 和 程序员的生存之道,特别有意思,我将其核心内容整理了一下分享与你!
《人月神话》中银弹到底是什么意思?

作为一个软件开发从业者,我想大多数都应该听说过《人月神话》(作者:Brooks)这本书,里面的“没有银弹”的观点更是深入人心。不过,这里我们还是再温习一下“没有银弹”是什么意思。“没有银弹”在原书中指“无论在技术还是管理方法上,都看不出任何突破性的进步,能够独自保证在十年内大幅度地提高软件生产率、可靠性和简洁性”。
Brooks在这儿说的大幅度是相对于硬件发展来说的。换句话说,是像摩尔定律那样的硬件能力的指数级增长,而这种发展在软件开发中并没有发生。Brooks用“银弹”来比喻软件开发,是来源于欧洲狼人的传说,它指的是软件开发有时候具有狼人的特点。例如,一个软件项目,看起来需求已经被充分理解了,进度也满足预期,但是可能忽然间变得错误百出,Bug越改越多,进而大大超出工期和成本,就好像一个看起来正常的人,突然就变成了狼一样。
这种现象也造成了当时业界所谓的“软件危机”,而这也是软件工程产生的背景或原因。在狼人的传说中,只有银质的子弹才能打死狼人。
因此,Brooks才将突破性的软件开发技术比喻为“银弹”。
软件开发的本质困难和非本质困难
Brooks将软件开发面临的困难划分为了 本质困难(Essence)和 非本质困难(Accident)。那么,本质 和 非本质 到底是什么意思?
Brooks说这一对术语来源于亚里士多德的哲学,用通俗易懂的话来举个例子吧,例如,人类是胎生的,是有智慧的,这些就是人的本质属性,它们是必然存在的,如果没有这些属性,人类就不是人类了。另一方面,人的年龄、体重、健康状况等则是会发生改变的,比如说疾病,是可以消除的,因此它们是非本质属性。
基于对本质属性和非本质属性的理解,Brooks认为:
(1)即使技术进步了,也不能消除的困难 就是 本质困难,这是软件开发的本质所决定的。
软件开发的本质困难被总结为了5点:复杂性、一致性、可变性、不可见性 以及 社会性。
所谓复杂性,指软件几乎是最复杂的人类产品。一方面是业务需求本身的复杂性,另一方面则是技术实现的复杂性,最终软件系统的复杂性则是两者的叠加。
所谓一致性,指为了软件正常运行,软件开发人员必须和各种人为的不一致性做斗争,这些不一致的产生仅仅是因为不同的人、不同时间、基于不同的理解所造成的。一方面是保持业务概念的一致性,另一方面则是技术实现的一致性。
所谓可变性,指软件常常会面临频繁的需求变化。这一点和建筑盖楼完全不同,盖楼是永恒是主题,而软件是变化是主题。
所谓不可见性,指尽管可以通过一些技术将部分设计内容可视化,但软件内部在本质上是不可见的。也就是说,即使你把电脑拆了,也不可能看到软件的结构。
综述,Brooks认为无论技术怎样发展,这4点困难在软件开发中是不可能完全消除的,因此属于本质困难。
除了以上4点,钟敬老师补充了一个 社会性。
所谓社会性,是指软件开发实际上是一个社会工程,是一种群体行为,涉及到人的组织、沟通、协作 以及 心理问题。过去,这种群体行为还只局限在开发人员和业务人员,而随着数字化转型的发展,IT逐渐变成企业的核心竞争力,这种群体行为就扩展到了整个企业甚至企业之外。然而,这种社会性,并没有随着技术的发展而消失,它也算是一个软件开发的本质困难。
(2)可以通过技术的进步而消除的困难 就是 非本质困难。
软件开发的非本质困难主要是关于开发语言、开发工具、基础设施等方面的困难。
比如,计算机语言从机器语言到汇编语言到高级语言,再到目前流行起来的低代码,它们都是计算机语言的进展,在形式和深度上有所不同,但解决的仍然是非本质困难。又如,云计算的进展,将应用放到云上,开发和运维人员在维护机房、申请设备等繁琐工作上的投入就会大大减轻甚至消失,因此解决的也是非本质困难。但是,虽然这些技术不能解决本质困难,但也不是一无是处,它们在推动着软件生产率平缓地逐年增高,因此Brooks将这些技术称为“铜质子弹”或“铜弹”。
画外音> 从某个角度来看,软件开发的历史,就是代码越来越“低”的历史。C语言比汇编语言“低”,Java/C#比C语言“低”,现在的低代码如Mendix, PowerPlatform 又比 Java/C# “低”。而ChatGPT写程序,则是从另一个层面,使得软件开发的难度更低。
在《人月神话》中Brooks发现:当时软件开发技术的进步,主要解决的都是非本质困难。他说“除非非本质任务占了所有工作的9/10,否则即使全部非本质任务的时间缩减到0,也不会带来生产率数量级上的提高。”
那么,你可能会问,现在都2025年了,AIGC/LLM已经发展的很成熟了,AIGC是否已经可以说是软件开发的“银弹”了?别急,下面我们来看看。
AIGC是软件开发的“银弹”吗?
要论证这个问题,我们需要结合之前的软件开发的本质困难来看。
(1)复杂性从需求的角度来看,目前AI还无法降低需求本身的复杂度。相反,AI软件本身所依赖的技术如机器学习、神经网络等,还增加了技术上的复杂性。因此,AI还无法降低软件的复杂性。
(2)一致性相对于技术上的不一致性,真正难解决的是软件中包含的业务概念的不一致性。这种不一致,要么引起隐含的逻辑错误,要么导致程序复杂,难以维护。目前,我们还看不到AI在这方面的作用。
(3)可变性AI辅助软件开发并不会减少业务需求本身的频繁变化。变化是软件的主题,永恒是建筑的主题。
(4)不可见性其实AI本身就有一个固有问题,那就是AI的“不可解释性”。当ChatGPT或Copilot回答问题时,我们无法找到这种意义上的确凿的因果关系,因此无法对AI的行为作出准确的解释。当 AI 广泛应用于软件后,这种不可解释性会加剧软件的不可见性。
(5)社会性目前AI还是无法代替人与人之间的沟通,因此无法消除社会性。
(6)结果正确性除了以上针对软件开发本质困难的分析以外,AI自身还有一个固有的局限性,即AI产生的内容,既不能保证是正确的,也不能保证是最优的,有时候常常“一本正经的胡说八道”。综上所述,目前的AI还不大可能是“银弹”,但是不代表AI没用,事实上已经在下面多个方面帮助我们更加高效地开发软件了,可以称得上是一枚“铜弹”!
- 帮助开发人员完成重复性和套路性的工作
- 帮助开发人员完成那些了解原理但是忘记了技术细节的代码
- 帮助开发人员提高学习新知识(比如某个JavaScript框架)的速度
- 帮助开发人员快速获取他人的经验(毕竟AI学习了大量他人的代码)
如何对抗软件开发的本质困难?
在软件开发业界的发展历程中,已经有了两个重要的对抗软件开发本质困难的方法论,它们是:敏捷软件开发 和 领域驱动设计。
(1)敏捷软件开发
敏捷软件开发针对的主要是本质困难中的复杂性、可变性和社会性。一方面,通过迭代的方式,让软件能够演进式地“生长”,将软件的复杂性和可变性带来的困难和风险分散在整个软件生命周期中。另一方面,通过强调软件开发过程中“人”的方面,提供一系列方法和技术提高沟通效率,改善人员组织,还强调培养卓越技术的开发人员。
(2)领域驱动设计
领域驱动设计,俗称DDD,它是面向对象方法论的一种优化,针对的主要是本质困难中的复杂性、一致性 和 不可见性。一方面,通过建立领域模型,准确、深刻地反映业务概念。另一方面,围绕领域模型图,业务专家和开发人员逐渐建立统一语言,然后再进行开发,还提供了一系列的概念和方法辅助更加贴近业务概念的开发。
AIGC时代,程序员应该如何发展?
在AIGC时代,程序员应该如何发展,保住自己的饭碗,提升自己的核心竞争力,这是一个值得思考的话题。
要回答这个问题,需要总结下目前AI能做什么 以及 还做不好什么。

从上面的表格中我们可以知道,那些只会完成基础功能,但结构混乱,难以理解和维护代码的初级程序员可能会没有多少生存空间了。
作为想要保住饭碗又持续精进的程序员,需要加强以下的能力:
(1)加强业务需求理解的能力
比如使用DDD方法论,贴近业务,建立领域模型表达业务,和业务用户建立统一语言,然后基于模型驱动开发。
画外音>DDD是技术,也是艺术!DDD解决的就是软件开发的本质问题,通过可视化、抽象化、严格化的方法构建领域模型的艺术,现在还没有被AI所取代。But,未来AI能够掌握这项“艺术”吗?我们都不确定,或许将来某天它能掌握,不过那时候可能失业的就不只是开发人员了!
(2)熟练使用AI工具高效工作 和 快速学习
比如持续实践提示词工程,提高AIGC答案的贴合度。又如善用AI加快自己学习新框架或新技术的效率,完成项目任务。
(3)加强评审和验证AI生成代码的能力
AI生成的代码不一定是正确的,也不一定是最优的,这还是需要开发人员具备评审能力,以及进一步优化代码的能力。而这些能力,其实还是开发人员的手艺活儿,比如面向对象、设计模式、整洁代码、重构等等。
(4)夯实开发技术的基本原理(而不是技术细节)
比如你已经了解了某个JavaScript框架(如VueJS)的基本原理,只是忘记了具体的语法细节,那么就非常适合在AI辅助下开发VueJS的应用程序。但是,如果你一点都不了解其原理,甚至JavaScript也不会,那么即使有AI的帮助,也难以达成目的,容易写出难以理解和维护的“屎山”。
画外音>这也提示我们,将来学习一门新技术的时候,可以将重点放在对原理的理解,而不是花较多时间记忆技术细节。
综上所述,开发人员要有紧迫感,但也不必过于紧张,这里借用毛主席的一句话“战略上藐视敌人,战术上重视敌人”。
一方面不用太紧张,我们需要看到AI的影响是渐进的,我们有时间去掌握。另一方面我们需要现在就开始行动,主动关注AI技术的发展,最好尽快进行尝试,动起来,在路上!
参考内容
钟敬,《AI是银弹么?》
钟敬,《AI时代程序员生存之道》
钟敬,《DDD,是技术也是艺术》
推荐学习
欢迎和我一起学习《手把手教你落地DDD》!



最近阅读了钟敬老师的特别策划系列文章《AI时代程序员生存之道》,里面从《人月神话》的视角来讨论AIGC对于辅助软件开发的能力边界 和 程序员的生存之道,特别有意思,我将其核心内容整理了一下分享与你!

浙公网安备 33010602011771号