即使有 AI 工具,编程仍然很难!

发布时间:2026/6/1 21:40:36

即使有 AI 工具,编程仍然很难! 上周我漫谈了一点软件工程的历史得出的结论是自时间伊始人们一直在拼命寻找某种东西、任何东西以允许普通人来开发软件希望能够借此解决软件开发危机。到目前为止这些努力都失败了。实际发生的是该领域的其他改进使得软件工程师的生产力更高。然而尽管软件工程师比以往任何时候都更具生产力而且软件工程师的数量也比以往任何时候都多软件开发仍然很昂贵。为什么简单来说因为我们也需要比以往任何时候更多的软件而且因为尽管有所有的改进软件开发仍然很困难信息技术领域是一个从非常小的原点向外扩展的圆盘大约在 60 多年前发生了大爆炸。我的第一份工作是在一家银行那时圆盘还很小我们使用三台大型机来进行核心账户处理其中大部分以夜间批处理作业的方式运行。问为什么是夜间 答因为人们白天会创建交易 。然后到了傍晚这些交易通过柴油网传输到我们的数据中心一支车队在下午晚些时候开车去银行的所有分支机构收集打在穿孔卡片、软盘等各种介质上的交易。在数据中心我们将这些交易读入大型机并启动批处理作业。批处理运行结束后我们打印对账单然后柴油网将这些对账单分发到全国各地。客户将这些打印的对账单装订成小册子作为账户变动和余额的凭证。如果这听起来很繁琐欢迎来到互联网之前的世界 随着时间的推移经过多次圆盘扩展我们现在生活在这样一个世界每个消费者口袋里都有一台便携式电脑比我在第一份工作中使用的大型机更强大。这些电脑还持续连接着地球上所有其他电脑所以不再需要柴油网和打印对账单因为你口袋里电脑上的银行软件可以让你随时随地输入交易、查看账户和检查余额。事实上据我所知如果你现在确实想要一份打印的对账单你要么运气不好要么需要为此付出高昂的代价。不断扩展的信息技术圆盘代表着更多的计算机落入更多人手中以及这些计算机进行通信和呈现信息的新方式。所有这些都需要软件而且因为圆盘的表面积以二次方增长需要创建和维护的新软件量也是如此。在我的职业生涯中圆盘扩展到了包括小型机、个人电脑、互联网以及最终的移动设备、可穿戴设备和物联网。为了编写和维护这些新软件我们总是需要更多的软件工程师尽管有各种改进他们仍然跟不上不断增长的需求。因此软件危机持续存在……软件开发仍然昂贵的另一个原因是尽管过去几十年有各种改进软件开发仍然很困难。几年前我写了一篇题为为什么编程很难的文章试图通过概述软件开发的认识和机械两个方面来解释这个事实。认知方面涉及这样一个事实几乎不可能事先知道要构建什么以及如何最好地构建它。机械方面描述了编程语言和库的内在复杂性。这些共同解释了为什么构建一段可工作的代码很困难因此需要深厚的专业知识。而通常来说深厚的专业知识是昂贵的。顺便说一句我在这个故事中省略的一件事是与此同时被认为可用软件的标准也在提高。AI 编程工具登场。现在我们可能都知道了使用 AI 编程工具编程是惊人的。就我自己而言在 2026 年迄今为止我没有手写过五行代码。考虑到现在已经是将近六月了这也许有点令人担忧。如果我忘了怎么写怎么办但这大概是留给另一篇周三智慧文章的话题了。我想由于我在一个 AI 前沿实验室工作我处于发展的前沿但我在科技公司的同行们告诉我他们有很大的压力去使用 AI 编程工具。显然有些公司甚至在部署指标系统以查明他们雇佣的软件工程师是否在偷偷手写代码从而在偷股东的钱大概是这样我真的不太理解这种想法的逻辑。所有人都在期待 AI 编程工具带来奇迹这种期待是有道理的但我觉得他们可能把注意力放错了奇迹上因为 AI 编程工具会提高软件开发的速度但不会使软件开发整体变得更容易。即使有 AI 编程工具编程仍然很难要理解这一点我们首先需要认识到软件开发不是制造过程。制造过程的本质是开始时需要大量的脑力但随后复杂设备的生产被简化使其可以由机器人和技能和知识不如原始设计者的人来执行。软件开发不是这样的。每一段软件都是独特的、定制的、独一无二的东西是为它所解决的确切问题量身定制的。当然我们有库和可复用的基础设施组件而且幸运的是确实如此否则我们完全没机会。但建立在其上的实际应用程序是一次性的。这意味着对于每一段软件在设计和实现方面我们都需要或多或少地从零开始。就好像航空公司为他们机队中的每架飞机都为预期的乘客、航线和机场进行定制设计和建造包括发动机和航空电子设备。这可能使飞行更加舒适但成本将是天文数字而且绝对会更不安全。软件开发的大问题是确切知道需要构建什么需求以及它需要如何运作架构/设计。一旦你脑海中有了所有这些细节的清晰画面输入语句就相对来说容易了。由于各种原因输入语句非常耗时因为需要输入大量语句而且在输入过程中你会犯很多错误但总体来说并不困难。然而由于编程的晦涩特性以及因为正如我们后面将看到的当我们输入语句时我们实际上仍在脑中设计软件非工程师通常认为项目中的编码部分是有问题的部分。软件工程师知道得更清楚。如果编码部分实际上困难和繁琐那通常表明你还不太清楚你要解决什么问题或如何解决它。输入语句正是AI 编程工具大放异彩的地方。当你给 AI 编程工具一个指令时它从不会对需要产生什么产生疑问而且它通常很快就能弄清楚需要哪些语句。然后它以极快的速度输入这些语句。换句话说AI 编程工具在最不是问题的地方运作得最好当你知道需要做什么时编写代码这绝不是试图贬低 AI 编程工具的天才之处。我仍然惊叹于 AI 编程工具生成复杂代码的速度这些代码将算法、数据结构、库和 API 组合在一起以实现复杂服务。但它们本质上并不比我做得更好只是更快。但 AI 编程工具还不能做的是弄清楚什么需要被构建以及哪些功能和非功能需求是重要的关注点。这里有一个例子在过去的六个月里我一直在为一个将操作系统镜像部署到 OpenAI GPU 机器集群的解决方案而工作。这是一个不平凡的问题因为集群的规模、多样性和复杂性以及我们还希望在继续服务 ChatGPT 和其他产品的同时进行部署。显然我们使用的云提供商在处理虚拟机方面有不同的原语以及在分组虚拟机和模板化配置方面有不同的数据模型这使得创建一个在所有数据中心合作伙伴中都能良好运行的通用解决方案变得相当困难。除此之外NVIDIA 的 GPU 系列也有其独特性。例如GB200 和 GB300即Blackwell域中的所有机器必须运行相同版本的 NVIDIA 驱动程序这使得升级更加困难。在这之上部署还有速度要求因为我们的漏洞管理计划规定特定严重程度的已知漏洞需要在一定天数内得到解决。对于这种形状的问题几乎不可能在大多数情况下也不可取事先弄清所有需求做出详细设计然后让 Codex 工作来输入语句。因此正如现在的标准做法一样我们正在迭代地开发这个软件。我们的第一个解决方案忽略了 Blackwell 的要求只针对 Azure 中的机器。我们让 Codex 根据我们所知道的来开发这个版本运行它产生的任何东西然后了解现实的种种特殊性。所以我们迭代了运行 Codex 给我们的最新版本观察发生了什么从中学习然后用增强的指令让 Codex 工作告诉它我们真正想要什么以及根据我们现在所知道和理解的我们真正希望事情如何运作。一旦 Codex 准备好我们重复这个循环。在这个项目中Codex 在软件开发的所有阶段都非常有帮助。在设计阶段它通过告诉我们 Azure 规模集实际如何工作来帮助我们在编码阶段它输入了所有语句在调试阶段它分析日志并推理可能发生了什么修复 bug 并适应我们不断变化的需求。使用 AI 编程工具的软件开发归根结底就是与工具进行持续对话逐步明确真正需要构建什么并尝试各种解决方案路径。问好的我明白了但这为什么仍然很难 答因为 AI 工具可以编写代码但它们不承担后果。AI 可以输入语句但你必须决定什么重要并适当地引导工具。如果我告诉 Codex“嘿给我写一个工具用新操作系统重新镜像这个 GPU 集群中的所有节点”它很有可能会给我写一个同时对所有机器执行此操作的工具这显然不是我想要的。Codex 不知道我们关于金丝雀发布、增量部署、故障检测等方面的要求所以我需要告诉它事情需要如何实现然后我需要检查在所有 57 种方式中它选择了适合我们环境的一种。这需要知识、经验和判断力。这些都不体现在模型中或者即使体现了如果没有适当的指令也不一定会被激活。大多数真实的系统有不完全可见的上下文比如未记录的不变量、奇怪的遗留假设、部署约束、部分迁移的 API、人们现在依赖的旧 bug以及性能要求。这些大多没有写下来因此超出了模型的范围。AI 编程工具在局部上下文中的代码生成方面非常出色但在理解完整系统方面要弱得多。这些整体上下文的片段往往是模糊的、表达不清楚的、不一定被广泛认同的或者可能只是半成熟的。这是软件工程中困难的部分而这是 AI 编程工具还做不到的所以这就是你上场的地方。除此之外AI 工具在品味方面也不行。它们不一定知道什么时候该抽象什么时候不该抽象什么时候应该保持无聊的简单什么时候一个解决方案过于聪明或者什么时候需要给任何人类审查者添加注释假设人类代码审查仍然必要。AI 提供一个解决方案但人类工程师仍然需要根据他们对整个上下文的了解来决定它是否是一个好的解决方案。当然模型和工具一直在变得更好所以明天的 AI 编程工具是否会在这些方面好得多从而真正使整个软件开发过程变得更容易这是一个开放的问题。但我不这么认为原因如下使软件开发变得困难的东西恰恰是初级和资深工程师之间的差异所在。在过去的二十年左右里我一直说把我与初级工程师区分开的不是我能更好地编写代码。恰恰相反一个刚毕业的 L3 或 L4 在算法方面可能比我更好毕竟我已经有很多年没有上过算法课了。当我在谷歌面试时我被问到快速排序的运行时间而那时我已经大概 20 年没有想过这个问题了尽管我一直用大多数编程语言附带的方便库函数来排序很多东西。将资深工程师与初级工程师区分开来的是我在这篇文章后半部分一直在谈论的东西上下文知识、更深层次地理解需求、品味和经验。这些是困难的部分而这些是 AI 还做不到的部分。所有这些让我思考这对初级工程师的就业机会会产生什么影响。如果这也让你思考了那你运气不错因为那将是下周三智慧的主题…… 原文链接即使有 AI 工具编程仍然很难 - 汇智网

相关新闻