“等等,我这是在‘氛围编程’吗?”
这是我看到 Andrej Karpathy 关于他新“氛围编程”工作流程的爆红帖子后的第一反应。2 月 2 日,这位计算机科学家,OpenAI 的创始成员,将这种编程风格定义为软件工程师“顺应感觉,拥抱指数级增长,并忘记代码本身”的编程方式。
我理解他的意思,因为我已经实践过这种方式。在 2024 年秋季,我决定亲身体验大型语言模型的能力,并用它们来改造我的个人网站。从那时起,我便使用 AI 来编写几个个人项目,包括在我的 Windows 笔记本电脑上为 AI 语音转文字转录创建图形用户界面 (GUI),以及一个用于跟踪桌面游戏中的行动的 JavaScript 应用程序。
虽然我在过去接触过 HTML 和 Python,但我对编程的了解有限,无法详细解释这些程序中 AI 生成的代码是如何工作的。但它们确实有效,而我创建它们的便捷性对软件工程具有重要意义。
什么是“氛围编程”?
Prasad Naik,一位持证专业机械工程师,正在感受这种“氛围”。
Naik 在 Gripple 工作,该公司制造用于固定各种基础设施的金属丝连接和张紧系统,例如商业建筑中的管道和燃气管道。Naik 不是软件工程师,但他最近为内部使用开发了两个软件工具。这些工具帮助工程以外的团队,例如销售团队,了解哪种产品适合特定用例。
他首先重新审视了十多年前为公司开发的 iPad 应用程序。他用 C 语言编写了它,用于 iPad,但 Naik 想将其转换为现代 JavaScript 网页应用程序。这是一个令人生畏的项目,因为他以前从未使用过 JavaScript。
“我记得 [原始应用程序] 花了我将近一个月的时间,因为我必须学习很多我不理解的东西,”Naik 说。“令我惊讶的是,我仅用两个小时就 [将其转换为 JavaScript],使用了 ChatGPT 的逐步说明。”Naik 没有完全使用生成的代码,但他估计他使用的代码中超过 90% 是由 ChatGPT 生成的。
在取得成功后,Naik 创建了一个更复杂的应用程序,该应用程序连接到服务器。该应用程序访问包含硬件产品信息的电子表格数据库,例如用于将管道悬挂在建筑物天花板上的支架和支撑系统。整个开发过程,包括部署,大约花费了一个半星期,但 Naik 怀疑如果没有 AI 工具,他无法完成它。
“这太神奇了。我从未想过自己会最终开发出如此复杂的应用程序,”Naik 说。
“氛围编程”用于概念验证
Jason Touleyrou,一位目前在 Corewell Health 工作的数据工程主管,使用 AI 辅助编码来快速测试新想法。“快速构思至关重要,”他说。“如果我有一个想法,而我的团队不同意,我是否可以创建一个简陋的项目来证明其价值,而不会浪费任何人的时间?”
Touleyrou 使用 AI 来构建他几乎没有或根本没有使用过的工具和编程语言。这反过来帮助他尝试以前需要太多时间才能探索的想法。
例如,他提到了他为个人网站构建的咖啡跟踪工具。该工具使用了几项 Google Cloud 服务,例如 BigQuery 和 Pub/Sub,而他在职业生涯中从未接触过这些服务。
Touleyrou 说,“氛围编程”的关键在于工作流程。他认为项目应该从明确定义的想法开始,然后才能要求 AI 工具生成代码。代码生成后,AI 可以进入咨询角色,帮助解决错误。开发人员还应该继续使用确保代码质量的工具,例如可以识别明显错误的代码风格检查工具。
“这不是对了解基础知识的替代。但我无法回头,因为我知道我可以在 30 分钟内构建我的初始概念验证,然后在 4 个小时内再进行 4 次迭代。它们甚至可能添加新功能,”Touleyrou 说。
“氛围”的局限性
Naik 和 Touleyrou 使用 AI 比以前更快、更容易地迭代软件。但他们真的在“氛围编程”吗?
Taher Vohra,一位拥有 25 年软件工程经验的软件工程师,认为他们没有。
“我认真对待‘氛围编程’的定义,即我不会看代码,”他说。对他来说,坚持“氛围编程”的字面解释很快指出了这种想法的缺陷。“当我深入研究时,我发现指定我要 AI 做什么比我自己做更难。”
但这并不意味着 Vohra 反对使用 AI 进行编程。相反,他使用多个 AI 助手,例如 Cursor,在他工作时提供建议。但他强调,开发人员编写生产就绪代码需要关注代码,以确保他们正确理解代码的功能,并能够识别 AI 助手可能错过的细微问题。
虽然 Vohra 对“氛围编程”的看法比 Naik 和 Touleyrou 的看法更批判,但他们并不完全意见不一致。他们都同意一个观点: “氛围编程”可以帮助工程师学习他们还不了解的编程语言和技术栈。
“我对初级工程师的建议是,不要仅仅将‘氛围编程’视为提高你已经掌握的技能的速度。把它看作是学习新技能的加速器,”Vohra 说。“如果你是一名前端工程师,想成为一名全栈工程师,这是一个很好的方法,可以在几个月内成为一名全栈工程师,而不是两年。”