如果你是程序员但还没听说过 vibe coding,那你已经落伍了。
这个词是上个月 Andrej Karpathy 在一篇半自嘲的推文里创造的,现在已经成了标准用语。没有人能精确定义它,但所有熟悉 AI 辅助编程体验的人都多少知道它大概在说什么。一些人对此嗤之以鼻,一些人认为这就是未来,还有更多人勉强让自己适应它。
Vibe coding 创造了一种模糊的实践。用 Andrej Karpathy 自己的话说:「对 AI 的建议我总是接受,不再审阅差异。当我收到错误消息时,我只是复制粘贴它们而不加评论,通常这样就可以解决问题。代码超出了我通常的理解范围。有时它无法修复错误,所以我只是绕过它或要求随机更改,直到它自行消失。」一方面它犹如神助,让你有一种第一次挥舞魔杖的幻觉。另一方面它写了新的忘了旧的,不断重构又原地打转,好像永远在解决问题但永远创造出更多新的问题,并且面对 bug 采取一种振振有词地姿态对你 gaslighting。你面对着层出不穷的工具甚至不知道自己该认真考虑哪个,心知肚明可能下个月就又有了新的「最佳实践」,养成任何肌肉记忆都是一种浪费,而所谓新的最佳实践只不过是用更快的速度产出更隐蔽的 bug 而已。
从技术上来说你可能觉得困难主要在于今天的大语言模型的上下文窗口还不够大,分层长期记忆机制还不够健全,或者别的什么理论上会在未来半年到一年里得到解决的瓶颈。但实际上,vibe coding 打破的是你作为一个程序员的自我认知:你一开始以为自己只是在为了效率做妥协,渐渐地你发现自已陷入在一重又一重建立在浮沙之上的迷宫里精疲力尽,最后你已经忘了效率是什么。
从某种意义上说,今天的 vibe coding 有点像一两年前的 AI 绘画,第一眼很对,放大后细节都是错的,到处是六根手指的手。问题在于,绘画远比编程更宽容——毕竟真的存在印象派这种绘画风格——编程难道不理应是非黑即白的吗?
但并不是,正是在这一点上现实开始扭曲起来。你很快就注意到 vibe coding 的「正确性」就像薛定谔的猫一样无法精确观察,你可能每天抱怨 LLM 的注意力窗口太小,而事实是你自己的注意力窗口更小,面对它不费吹灰之力生成的海量代码的冲刷很快就头晕目眩,放弃了审查和控制的执念。你试图借助类似于 .cursorrules 这样的规范来指导 AI,但这就像是野马辔头上的一根想象中的缰绳,你既不确定这些规则是否完备,也无从知道它们是否会被真的遵守。你以为这些原则相当于法律,其实它们只是孔子家语,而社会的运转既依赖于它们的尊崇神圣,也依赖于它们的晦涩模糊。你渐渐不再 care 你的代码是否正确,反正随时在改。Dario Amodei 说未来 3 到 6 个月内,90% 的代码将由 AI 编写,12 个月内几乎所有代码都可能由 AI 生成。在这个即将到来的世界里,六根手指的手应接不暇地出现,然后消失,你开始接受暂时 work 就是一切,变动不居才是事物的恒常。
某种意义上说这是这个时代的本质。当国际新闻和洋葱新闻开始无法分辨,当你发现所有号称追求真实的人最终追求的只不过是逃避认知失调,你所创造(或者你自以为你所创造)的一切也不会摆脱同样的命运。八年前我写过这样一段话:
「躲在一个气泡里的个体可以假定岁月静好,一切宛如昨日幻乐,但这往往是悲剧的起源。他看到的只是一个复杂屈折的世界在更低维度上的投影,一个对狂飙突进的历史湍流的简笔画般的描摹,一个更容易被媒体所采纳和记忆的粗糙叙事,一座层移倒悬重重折射下的海市蜃楼。而真实——如果真实仍然有意义的话——则掉落在幽暗深邃的维度的缝隙里。在那里,一幅粗粝斑驳扭曲异质的图景,会让一个在不经意的一瞥之间扭过头去的观察者惊骇和战栗不已。」
那时我以为世界刚刚开始崩塌。后来我理解了崩塌的不是世界,而是我自己的天真想象。 Vibe 不是真实的某种投射,而是它的实质。一开始你以为世界是一张完美的幕布,然后你在幕布上发现了一两条恼人的裂痕,接着你发现裂痕越来越多,无处不在,直到最后你意识到不断蔓延和生长的裂痕才是你真正生活的地方。It’s not just vibe coding, it’s vibe living.