【每日一学 20261104】《程序员生存手册》——AI是传说中的“银弹”吗

2026-11-04 15:07:00
蓉蓉
原创
7

自有“software”(软件)这个概念以来,无数的先贤“大牛”孜孜不倦地寻求能够一劳永逸解决编程难题的方案,也就是传说中的“银弹”。


AI凭借其强大的自然语言理解能力和生成能力,能否成为程序员梦寐以求的“银弹”呢?


在回答这个问题之前,我们先来了解一下软件研发领域的著名大师布鲁克斯(Brooks)先生提出的论点。他在1986年提出了一个著名论断:在未来十年内,无论是在技术上还是管理方法上,都不会有任何突破性的进步能够保证在十年内大幅度地提高软件的生产率、可靠性和简洁性。这便是软件领域的“没有银弹”论点。


在西方传说中,“银弹”是少数可以杀死狼人的武器之一,代表着能够迅速、彻底地解决问题的神奇方法。也就是说,布鲁克斯认为不存在一种能够像“银弹”一样迅速、彻底地解决软件开发中所有问题的技术或方法。


布鲁克斯认为软件研发中存在两种困难:根本困难和次要困难。根本困难包括复杂度、一致性、可变性和不可见性。


先说复杂度的问题。布鲁克斯列举了一些影响复杂度的因素。

  • 组件交互和状态数量的增长速度远快于代码行。
  • 软件没有两个部分是相同的。
  • 状态大量产生。复杂度随规模增长呈指数增长。
  • 缺少对整个领域、流程或系统的掌握。
  • 由于复杂度是软件的根本特性,软件无法像其他学科那样进行抽象。
  • 复杂度会引入技术和管理问题,进而会导致更多不可靠的情况出现。

复杂度会在技术和管理方面产生两个后果。技术上,复杂度会使团队成员的沟通变得非常困难,理解程序也会异常艰难。管理上,复杂度也会带来诸多挑战,如人员的不断调整、知识的传承问题。功能复杂还会影响软件的可用性和可维护性。


一致性问题产生的原因在于新软件必须与现存系统进行对接。改变是件很困难的事情,也不可能因为新开发一个软件就将原来的所有系统都推翻。但保证一个新软件的接口适配系统的其他部分肯定更加容易,所以只能让新软件遵循过去的做法。此外,还需要和操作系统、硬件环境进行适配。

再来看软件开发的一致性问题。可变性是指软件要适应不断变化的现实世界、新增的功能及硬件。在实际的研发过程中,有很多因素都会引起变化,如新的应用程序、用户、机器、标准、法律等,因此软件必须具备可变性,能够根据这些变化进行调整和更新。不过这种可变性又会带来负面后果,即增加软件的复杂度。


第三个根本困难是可变性。和硬件相比,虽然软件变更看上去更容易,但这也使用户对软件的可变性抱有不切合实际的期望。也就是说,人们严重低估了软件变更的难度。因为软件易于变更,所以经常被改动,久而久之会偏离最初的设计。


软件的不可见性主要指软件作为一种逻辑实体,没有物理形态,难以直接观察和感知。既然如此,那AI的价值又在哪里?


第四个根本困难是软件的不可见性。AI无法解决软件开发的根本困难,但它确实减轻了软件开发过程中一部分次要困难,如需求描述的整理、片段性代码的生成、测试用例的生成等。在特定场景下,通过精心维护的提示语,我们就可以快速得到一些结果。


不过,我们也需要警惕:引入AI工具的同时也会引入新的复杂度和不可控因素。例如,如何写出精确的提示语,如何借助AI工具应对需求变动带来的代码的动荡,如何驾驭AI生成的代码等。毕竟,AI背后的大模型还出现了一些其他的缺陷。


来源:《程序员生存手册》
发表评论
通过审核后显示您的意见