Vibe coding:通过人工智能对话编程
作者:Advait Sarkar,Ian Drosos
发布时间:2025-06-29
摘要
我们考察了"vibe coding":一种新兴的编程范式,开发者主要通过代码生成大语言模型(LLM)进行交互来编写代码,而非直接手写代码。本文对vibe coding进行了首次实证研究。我们分析了超过8小时的精选视频,这些视频记录了长时间vibe coding过程,并伴有丰富的出声思考(think-aloud)反思。通过框架分析,我们研究了程序员的目标、工作流程、提示(prompting)技术、调试方法以及遇到的挑战。我们发现,vibe coding遵循迭代目标满足周期,开发者在以下活动之间交替进行:向AI提示、通过快速扫描和应用测试评估生成的代码,以及手动编辑。Vibe coding中的提示融合了模糊的高层指令与详细的技术规格。调试仍然是一个混合过程,既借助AI辅助,也结合了手动实践。关键的是,vibe coding并未消除对编程专业知识的需求,而是将其重新分配到上下文管理、快速代码评估以及决定何时在AI驱动与手动操作代码之间切换。在vibe coding过程中,对AI工具的信任是动态且基于上下文的,通过迭代验证而非全盘接受而形成。Vibe coding是AI辅助编程的演进,代表了"物质脱离"(material disengagement)的早期表现形式——从业者通过AI中介来编排代码生成与操作,同时保持选择性的、战略性的监督。
全文
Advait Sarkar
剑桥大学 & 伦敦大学学院
英国
advait.sarkar@cl.cam.ac.uk
Ian Drosos
微软研究院
英国
t-iandrosos@microsoft.com
| 类别 | 相关问题 | 目标 |
|---|---|---|
| 目标 | 哪些类型的应用是通过 vibe coding 编写的?预期的成功程度如何?探索性在多大程度上是一种动机?(第 3.1 节) | |
| 意图 | 实现想法最初是如何形成和细化的?意图是预先定义的,还是通过与 AI 的交互迭代形成的?(第 3.2 节) | |
| 工作流 | Vibe coding 工作流包含哪些阶段?程序员的工作是如何分配的?各种工具和资源是如何组合的?(第 3.3 节) | |
| 提示 | 程序员如何向系统表达他们的意图?使用了哪些设置和提示策略?指令的粒度是怎样的?提示是单目标还是多目标?使用了哪些输入模式?(第 3.4 节) | |
| 调试 | 使用哪些方法来识别和解决 AI 生成代码中的问题?(第 3.5 节) | |
| 挑战 | 在 vibe coding 中,调试之外出现了哪些技术、概念和工作流相关的障碍?使用了哪些策略来克服它们?(第 3.6 节) | |
| 专业知识 | Vibe coding 中运用了哪些形式的知识?实践者何时从指导 AI 过渡到直接手动工作?(第 3.7 节) | |
| 信任 | 用户如何建立对 AI 输出的信心?过度依赖的风险是什么?(第 3.8 节) | |
| 定义与表现 | Vibe coding 相对于其他 AI 辅助编程实践如何理解?视频流等表演性语境如何塑造这一实践及其认知?(第 3.9 节) |
表 1 – 我们从 vibe coding 实践中得出的主要发现类别。 发现来源于对约 8.5 小时视频的深度定性框架分析,这些视频记录了带有丰富出声思考的扩展 vibe coding 会话。
摘要
我们研究了“vibe coding”:一种新兴的编程范式,开发者主要通过交互式代码生成大语言模型来编写代码,而不是直接编写代码。我们首次对 vibe coding 进行了实证研究。我们分析了超过 8 小时精心挑选的视频,这些视频记录了带有丰富出声思考反思的扩展 vibe coding 会话。通过框架分析,我们调查了程序员的目标、工作流、提示技术、调试方法和遇到的挑战。我们发现 vibe coding 遵循迭代目标满足循环,开发者在提示 AI、通过快速扫描和应用测试评估生成代码、以及手动编辑之间交替。Vibe coding 中的提示混合了模糊的高层指令与详细的技术规范。调试仍然是结合 AI 辅助与手动实践的混合过程。关键的是,vibe coding 并没有消除对编程专业知识的需求,而是将其重新分配至上下文管理、快速代码评估以及决定何时在 AI 驱动与手动操作代码之间切换。在 vibe coding 过程中,对 AI 工具的信任是动态且依赖上下文的,通过迭代验证而非全盘接受而建立。Vibe coding 是 AI 辅助编程的一种演变,代表了“物质脱钩”的早期表现,即实践者通过 AI 中介协调代码生产与操作,同时保持选择性和策略性的监督。
1. 引言与背景
2025 年 2 月 2 日,有影响力的计算机科学家 Andrej Karpathy 在 Twitter/X 上发帖,描述了“vibe coding”的概念(Karpathy, 2025):“有一种我称之为‘vibe coding’的新型编程,其中
(注:原文在“其中”处截断,后续内容应在下一部分继续。根据要求,只输出本部分的翻译。)
你 [...] 忘记了代码的存在。 [...] 我几乎不怎么碰键盘。 [...] 我总是“全部接受”,我再也不看差异了。当我遇到错误信息时,我就直接复制粘贴进去,不加任何注释,通常这样就能修复问题。代码增长到超出我通常的理解范围, [...] 但这并不是真正的编码——我只是看到东西、说出东西、运行东西、复制粘贴东西,而且大部分时候它都能工作。”这种对新型编程风格的描述,在此后被称为“卡帕西准则”(Karpathy canon),产生了显著影响。除了引发讨论之外,它还促使了“Vibe coding”这个词的流行,用来描述一种理想化的编程风格,即使用“智能体”¹软件开发工具,如 Cursor、GitHub Copilot Agent 模式、Windsurf、Bolt 等。从以上摘录来看,Vibe coding 的核心理想在于从直接处理代码(编写、编辑、阅读等)中抽离出来,转而信任智能体工具能够基于对 Vibe coder 意图的自然语言(最好是口述)描述,足够可靠地执行这些操作以满足实际使用。
一个有影响力的人物播下一种理想化的编程理念,这在编程实践中是一种常见的套路。之前的例子包括 Knuth(1992)提出的文学编程(literate programming),以及 Weinberg(1971)提出的无我编程(egoless programming)。卡帕西准则最独特之处或许在于其简洁性。文学编程和无我编程都伴随着一本书长度的论述,而卡帕西准则仅是一篇 185 词的推文。
这种理念播下之后,通常会出现程序员社区的集体动员,他们试图理解、调整和采纳(或抵制)这种被提出的工作方式。对一些人来说,卡帕西准则只是为他们已经在进行的实践提供了一个方便的标签。对另一些人来说,这个术语是引入了一种新的工作方式,但伴随着无数未解答的问题,需要根据个人实践在具体情况下一一协商。如果我偶尔手动编辑代码,这还是 Vibe coding 吗?如果我使用键盘而不是口述,这还是 Vibe coding 吗?如果我使用非智能体工具,这还是 Vibe coding 吗?如何有效地进行 Vibe coding?Vibe coding 的精神是什么,它与字面意思有何不同?
一个社区通过反思性实践和讨论来厘清这些问题并阐述 Vibe coding 概念的方式,是一个社会学问题,我们不会在本文中试图解决。我们提出这一点是为了强调,尽管围绕卡帕西准则形成了核心,Vibe coding 仍是一个新兴现象,其特性在撰写本文时仍在不断协商中。
因此,为了将 Vibe coding 孤立出来作为研究对象,我们采用的唯一准则——能够连接程序员在 Vibe coding 或尝试 Vibe coding 过程中从事的所有不同活动——是程序员自己将其活动描述为 Vibe coding。这可能导致假阴性:我们可能会排除那些从事某项活动(在外部观察者看来属于 Vibe coding)但程序员本人并未明确将其标识为 Vibe coding 的程序员。但由于意识到并理解一个编程社区要使一个概念(如 Vibe coding)的边界达成一致所需进行的广泛实验和协商,我们不愿将任何自我标识的 Vibe coding 会话定性为“假阳性”,因为那意味着我们作为研究人员应用了一种关于什么构成 Vibe coding 的规范,而事实上这种规范并不存在。
作为一种新兴的编程实践和社会学现象,Vibe coding 本身值得探索,因为它再次促使我们重新审视编程中的人为因素研究中的长期问题,例如编程中的专业知识作用、程序员的能动性和控制等,就像早期世代的自
¹ 不幸的是,在这个上下文中,“agentic”或“agent”一词的定义没有共识。它主要是一个商业术语而非技术术语。我们使用这个术语是为了明确地与那个商业话语建立联系,并不对“agents”作为一类清晰的 AI 工具做出本体论声明。就我们的目的而言,我们关心的特性是:被描述为“agentic”的工具通常能比软件开发环境中先前实现的 AI 辅助功能,对用户内容执行更广泛的程序化动作(例如读取代码、跨多个文件直接编辑、执行终端命令)。
像GitHub Copilot这样的生成式语言模型工具(Sarkar et al., 2022a; Lee et al., 2024; Barke et al., 2023; Vaithilingam et al., 2022),可以说,编程实践就像煤矿里的金丝雀,预示着生成式AI将如何更广泛地影响知识工作的实践。程序员本身处于为知识工作者开发生成式AI工具的前沿,而现代编程实践的独特起源——从关于编程本质是手艺、科学还是工程的认同危机中锻造而成(Ensmenger, 2012)——可以说赋予了日常编程实践异常高度的反身性。可以说,程序员处于得天独厚的地位,成为第一批发现将生成式AI应用于自身实践新机会的知识工作者,并且也有能力为自己搭建这些前沿工具。本质上,编程走向何方,其余的知识工作便随之而去。
如果按字面意义接受Karpathy的观点,那么vibe coding(氛围编码)是我们第一次看到知识工作流程中出现的物质脱离。我们所说的物质脱离,是指编程的物质基质——即代码——不再由程序员直接处理。程序员有意识地脱离对物质基质的操作,转而通过AI生产者-中介来编排代码的生成与编辑。不难想象,类似的物质脱离倾向或工作流程可以应用于所有知识工作任务,无论是撰写报告、邮件,还是制作电子表格或演示文稿。通过在vibe coding这一高度自然且具有外部效度的表现形式中研究物质脱离如何以及在多大程度上影响编程实践,我们获得了宝贵的机会来预测知识工作结构中可能即将发生的变化。
基于这样的动机,我们对vibe coding这一新兴编程现象进行了首次实证分析——通过对来自YouTube和Twitch的、程序员进行vibe coding时的有声思考视频进行框架分析(第2节)。我们的分析描绘了vibe coding过程中目标和意图是如何形成的、vibe coding的工作流程、提示词设计的本质、调试实践、vibe coding中出现的挑战、运用了哪些程序员的专业知识以及如何运用,以及vibe coding中对AI的信任本质(第3节)。我们讨论了vibe coding似乎如何代表前几代AI辅助编程的演进、“vibe”格式塔、物质脱离的权衡,以及vibe coding程序员如何试图影响社会对使用AI的态度(第4节)。
我们的分析是初步的;我们只详细研究了一小部分视频,而与vibe coding相关的工具和实践格局正在迅速演变。因此,我们的发现应被视为对vibe coding在此特定早期阶段表现出的样貌的一个暂时性快照。这样一篇简述既为未来理解vibe coding现象的研究奠定了基础,也随着实践进一步发展而成为比较的参考点。
2. 方法
2.1. 数据来源
我们通过YouTube和Twitch上的有声思考视频来研究vibe coding的方法,受到了先前工作的启发。Barik等人(2015)证明,在线社区调查可以“为定性研究主题提供洞见,