共计 2866 个字符,预计需要花费 8 分钟才能阅读完成。

当人工智能在编程方面变得极为高效,且其成本仅为人类的千分之一甚至万分之一时,这将对软件行业产生怎样的影响呢?
本文是我最近在 CACM 上发表的文章《编程的终结》的延续。在那篇文章中,我探讨了编程工作被训练出来的 AI 取代后可能发生的变化。而在这里,我将进一步分析 AI 在不久的将来在软件开发中的卓越表现将带来哪些影响。
毫无疑问,生成、调试和重构代码的 AI 在未来的几年中会不断提升其能力。对此我并没有争议的余地。为了更好地支持这一观点,我想提出两点:(1)在合适的上下文和提示下,CoPilot 所生成的新代码已经表现得相当出色;(2)想要将 CoPilot 的性能提升一个数量级,只需更多的数据和更大的模型即可。
在我频繁使用 CoPilot 之前,我曾认为它只能提供一些本科生作业水平的简单解决方案。然而,出乎意料的是,CoPilot 在实际应用中竟能更好地理解我的意图。例如,当我需要撰写单元测试或处理数据结构时,它能够神奇地生成我即将编写的代码,这实在令人惊喜。
那么,当 AI 的代码生成能力提升到目前的 100 倍时,情况将会如何呢?
在极短的时间内将 PRD 转化为代码
我注意到许多人对 AI 编写、审查代码及修复错误的能力持怀疑态度,认为这是一项难以解决的问题,而且目前的 AI 工具表现不佳,未来的改善也不太可能。我认为这是一个典型的例子,反映出人们在以最近的数据点评估问题时的无能。
我的推测是,在不久的将来,或许在三年内,我们将能够指示 AI 解析软件的高级自然语言规范,如 PRD、错误报告或 Slack 消息,并从中生成“优秀”的代码。这里的“优秀”意味着什么呢?首先,我们需要认真思考人类开发团队所生成代码的质量。我曾在谷歌和苹果任职,然而那里的代码质量并不总是理想。即使在谷歌,代码审查被视为一种信仰,风格指南是圣典,各个团队的代码都需要经过审查,甚至会被其他工程师找出问题——必须承认,这样的地方也不乏糟糕的代码。
我们必须摒弃这样一种观念,认为只要人类软件团队投入足够的时间和精力,就能编写出正确且高效的代码。在任何重要的软件项目中,情况并非如此。现实中,我们容忍了人类编写的软件中的诸多疏忽与错误,为什么对人工智能生成的代码却要设定更高的期望呢?
到了 2026 年,我们能否完全信任 AI,让它在没有任何人类干预的情况下生成代码?可能暂时还不行,但我们可以让人类审查 AI 生成的代码,并在此基础上不断迭代(在 AI 的协助下)。即便 AI 生成的代码审查难度增大,但相较于依赖速度较慢的人类编写代码,它仍然在成本和时间上更具优势。
人工智能的成本远低于人类
一个由人工智能驱动的“软件团队”的成本是多少呢?
我们可以参考 GPT-3 davinci 模型目前的定价——每千个 token 收费 0.02 美元——作为一个保守的基准(未来这个价格有可能下降)。假设一名普通人类软件工程师每天能产出大约 100 行新代码或代码修改(未计算未进入主分支的废弃或实验代码)。虽然这个数字是虚构的,但即使我偏离了 10 倍,甚至 100 倍,我的观点依旧成立。通常情况下,一行源代码大约包含 10 个 token,因此相当于每天大约生成 1,000 个 token。
为了更好地说明这一点,我从我们的代码库中提取了一个包含数百行紧凑 Python 代码的典型源文件,并使用 OpenAI 的 Codex tokenizer 进行了 token 分析,结果显示平均每行产生 9.55 个 token。因此,假设每行 10 个 token 是一个合理的估计。
GPT- 3 按输入和输出 token 计费,为了论证,我们假设未来 CoPilot 支持的软件创建代理的输入上下文是最终代码输出大小的 5 倍。这意味着 5,000 个输入 token 加上 1,000 个输出 token,总共 6,000 个 token。换句话说,使用 GPT-3,按目前的价格,生成与人类工程师一天相同数量的代码的成本最高为 0.12 美元。
那么,一个人类软件工程师的日常成本又是多少呢?如果他们的饮料消费与我相当,那已经超过了 12 美分。保守估计年度总成本为 30 万美元(包括薪资、福利、饮料和停车费),一个自然年大约有 250 个工作日,算下来一名典型的软件工程师每天的成本约为 1200 美元,这意味着其成本是 AI 的超过 1 万倍,做的却是相同的工作。
如果 AI 生成的代码水平与人类工程师相当,成本却仅为后者的万分之一,而输出代码的速度快约 10,000 倍——也就是说大约是 1 亿倍的成本效率——那么我未来肯定会选择 AI 来完成工作。这只是取代了一名人类工程师的结果。(抱歉,前端团队的 Rob,你已经被自动化取代了!)一旦 AI 的能力足够强大,再雇佣人类来编写代码岂不是显得非常不合时宜?
编程的艺术将面临怎样的变化?
即使上述说法夸大了十倍,我们也能看出软件工程师正面临濒临灭绝的危机。然而,如果计算机软件的开发艺术和科学完全不再有人的参与,情况将会如何?
任何软件系统在代码的复杂性、通用性、性能和完成时间之间都需要进行权衡。因此,即使我们解雇了所有开发人员,并用 CoPilot 2030 取而代之,我们仍需找到一种方式,让(或许仍是人类?)的项目经理与基于 AI 的开发团队在构建产品时进行有效沟通,作出必要的权衡和选择适当的软件解决方案。
AI 编程的未来:软件开发的变革与挑战
等等……我究竟在表达什么?如果是由 AI 编写代码,那么它的速度又有谁会在意呢?无论你让 AI 完成什么任务,结果几乎都是瞬间呈现。你能够得到完全通用且高效的解决方案,所需的时间与人类手动生成初步原型所需的时间并无二致。因此,代码的复杂性便不再重要,因为它不再需要遵循传统的可维护性标准。如果你在星期二发布的代码在星期三未能有效运作,只需启动 AI,几秒钟内便能生成 1000 个新版本,轻松应对。
关键在于,一旦人类停止编写和维护代码,我们所有围绕人类的的软件工程理念将会荡然无存。作为程序员,我们所做的许多工作——尤其是耗时的部分——都是为了帮助缓慢且容易出错的人类更便捷地进行操作:编写注释、为后续重构准备的代码、以及设计可复用的通用代码等等。然而,如果代码主要由机器生成和维护,那么这些“额外”的努力就完全没有必要了。
显而易见,AI 编程技术要达到这种水平尚需时日,但我认为未来几年 AI 生成代码成为常态并非不切实际。考虑到可能带来的巨大时间和成本节约,正如 Stable Diffusion 对艺术界的冲击一样,类似的变革很可能会迅速影响软件行业。我们需要思考的是,后 AI 时代的软件行业将会是什么样子,以及我们现在可以采取哪些措施来为之做好准备。
原文链接:
https://www.infoq.cn/article/PdeirrcOUj5LVTfA9EBA


如果AI的代码速度提升了10000倍,那人类工程师会不会变成一个辅助角色?