文章摘要
Vibe coding是一种由AI辅助的编程方式,开发者几乎忘记代码的存在。然而,这种代码往往难以理解,类似于“遗留代码”,增加了技术债务。虽然vibe coding适用于原型和一次性项目,但若需维护,这些代码将迅速成为负担。编程本质上是理论构建,而非单纯生成代码。
文章总结
标题:Vibe代码即遗留代码
尽管存在广泛的混淆,Andrej Karpathy提出了“vibe coding”这一概念,指的是一种在AI辅助下进行的编程方式,开发者几乎“忘记了代码的存在”。
遗留代码
我们通常将无人理解的代码称为“遗留代码”。遗留代码普遍令人厌恶,原因在于它增加了技术债务。理解不熟悉的代码需要大量时间,更不用说在引入新功能时不引入错误。
编程本质上是理论构建,而非单纯地编写代码。这就是为什么我们嘲笑那些试图通过代码行数来衡量开发者生产力的商业人士。
当你进行vibe coding时,你正在以LLM(大型语言模型)生成代码的速度积累技术债务。因此,vibe coding非常适合原型和一次性项目:只有当你需要维护代码时,它才会成为遗留代码。
原型与一次性代码
我曾愉快地使用vibe coding开发了一些应用,例如计算每周增长率、评价《纽约时报》的“Connections”游戏,以及向我的未婚妻求婚。由于这些应用不需要继续开发,因此我不理解它们的代码并不是问题。这些应用非常小,即使需要阅读代码,也不会积累太多技术债务。使用vibe coding开发这些应用的速度远快于传统方式,而且非常有趣。
vibe coding的频谱
vibe coding的理解程度是一个频谱。你理解得越多,vibe的成分就越少。例如,作为一名工程师,要求一个带有持久数据库的Web应用,你已经比一个不理解Web应用与原生应用区别的非程序员vibe得少。
给孩子的信用卡
最糟糕的情况是让一个非程序员vibe coding一个他们打算维护的大型项目。这就像给一个孩子一张信用卡,而不先解释债务的概念。起初,他们可能会非常兴奋,但最终会面临账单问题。对于vibe coder来说,代码出现问题后,他们可能会陷入困境,唯一的解决办法是再次求助AI,这就像用另一张信用卡偿还债务。
2025年的严肃编程
如果你打算在2025年维护一个严肃的项目,Andrej的建议是:保持对AI的严格控制,强调缓慢、防御性、谨慎和偏执,始终抓住学习机会,而不是委托给AI。
我们如何构建AI
在Val Town,我们以多种方式将AI集成到产品中。Townie是我们的AI助手,能够自主阅读和编写代码,运行它,查看日志,并不断迭代直到完成。Townie是vibe coding的绝佳工具,我强烈推荐给理解这些权衡的人。有时我会用它进行vibe coding,有时我会严格控制它,对项目进行精细编辑。两者都很有趣且有用。
AI编程的未来
AI编程正在迅速变化,很难预测未来会带来什么,但我相信理论构建仍将是构建复杂软件的核心。我们的技术专长仍然重要!我乐观地认为,AI将继续以令人惊讶的方式改善编程。
但如果你认识任何非程序员正在花费数千美元vibe coding他们的十亿美元应用创意,请将这篇文章发给他们。vibe coding不会带他们到达目的地。他们需要学会用人类的双眼阅读代码,并明白有时从头开始构建一个编写良好的代码库比修复一个无人理解的遗留代码更容易。
这篇文章是我上个月演讲《人脑在编程中的作用》的提炼。感谢我的未婚妻Emily几个月来听我谈论这些话题,并拍摄了我的演讲。感谢Malte和Rippling主办了这次演讲。
感谢Geoffrey Litt、Jimmy Koppel、Max McDonnell、Tom MacWright、Charmaine Lee、Brent Jackson和Dan Shipper对这篇文章的反馈。感谢Simon Willison和Andrej Karpathy在AI炒作和质疑中保持理性声音。
评论总结
评论内容主要围绕AI辅助编程(如“vibe coding”)的优缺点展开,观点多样且争议较大。以下是总结:
支持AI辅助编程的观点:
提高效率:AI工具可以大幅提升开发速度,尤其是在复杂项目中,AI能在短时间内生成大量代码,节省开发时间。
- 引用:“生成原本需要几年时间才能完成的代码,现在只需几个月,这简直是无价的。”(bobjordan)
- 引用:“AI生成的代码虽然需要审查,但它能写出更‘标准’的代码,减少架构上的创造性错误。”(cpursley)
降低开发门槛:非技术人员也能通过AI工具快速构建原型或产品,验证商业模式的可行性。
- 引用:“他通过vibe coding在几个月内验证了一个可行的商业模式,尽管代码质量差,但商业价值已经证明。”(CharlieDigital)
反对AI辅助编程的观点:
代码质量与维护问题:AI生成的代码往往难以维护,缺乏可读性和结构性,导致技术债务累积。
- 引用:“vibe coding生成的代码模块进入生产环境后,专业开发者会拒绝维护,因为它们是不可维护的。”(MrGilbert)
- 引用:“AI生成的代码库通常存在安全漏洞,且架构混乱,难以理解。”(henriquegodoy)
缺乏深度理解:AI无法完全理解业务需求,生成的代码可能不符合实际需求,且开发者可能错过深入学习的机会。
- 引用:“AI生成的代码虽然快速,但开发者会错过深入学习的机会,最终还是要自己动手。”(khaledh)
中立或反思性观点:
代码的“遗产”性质:所有代码最终都会成为“遗产代码”,AI生成的代码也不例外,关键在于如何管理和维护。
- 引用:“所有代码一旦写出来就是遗产代码,但至少人类编写的代码可以与人讨论。”(zabzonk)
- 引用:“遗产代码是有商业价值的代码,否则早就被删除了。”(jes5199)
AI工具的局限性:AI工具在生成代码时存在上下文理解不足的问题,容易导致重复造轮子或使用过时的库。
- 引用:“AI生成的代码库中,AI可能会用五种不同的方式重新发明轮子,使用过时的库,并做出奇怪的架构决策。”(henriquegodoy)
未来展望:
编程语言的抽象化:未来编程语言可能会进一步抽象化,代码的可读性和维护性可能不再重要。
- 引用:“未来的编程语言可能不再需要人类可读,AI生成的代码直接运行即可。”(mr_donk)
开发者角色的转变:随着AI工具的普及,开发者的角色可能从编写代码转向修复和维护AI生成的代码。
- 引用:“开发者的工作不会消失,而是从‘构建新功能’转向‘修复PM上周末尝试发布的代码’。”(henriquegodoy)
总结:AI辅助编程在提高效率和降低开发门槛方面具有显著优势,但也带来了代码质量、维护和安全性等问题。未来,开发者的角色可能会从编写代码转向管理和修复AI生成的代码,而编程语言本身也可能进一步抽象化。