Vibe Coding

ENGLISH VERSION

如果你是程序员但还没听说过 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.


Vibe Coding

If you’re a programmer and haven’t heard of “vibe coding” yet, you’re already behind the curve.

The term, coined last month by Andrej Karpathy in a tongue-in-cheek tweet, has now entered parlance. No one defines it precisely, but anyone who’s experienced AI-assisted coding intuitively grasps its essence. Some scoff at it, others declare it the future, while many grudgingly adapt.

Vibe coding cultivates a hazy methodology. As Andrej Karpathy himself describes: “I Accept All always, I don’t read the diffs anymore. When I get error messages I just copy paste them in with no comment, usually that fixes it. The code grows beyond my usual comprehension, I’d have to really read through it for a while. Sometimes the LLMs can’t fix a bug so I just work around it or ask for random changes until it goes away.” On one level, it feels revelatory, like channeling a wizard’s first spell. On another, it forgets what it wrote moments ago, endlessly refactoring in circles, solving problems only to spawn new ones, gaslighting you with unearned confidence. You drown in tools, aware that next month’s “best practice” will render today’s habits obsolete — a cycle where “improvements” merely spawn subtler bugs faster. Muscle memory becomes futile.

Technically, you might blame today’s LLMs: their narrow context windows, underdeveloped long-term memory hierarchies, or other bottlenecks theoretically fixable within a year. But the true rupture lies in your identity as a programmer. You begin by compromising efficiency, then find yourself drained in shifting sand mazes, until “efficiency” itself loses meaning.

In a sense, vibe coding today resembles AI art from a year ago — plausible at first glance, but suspicious under scrutiny, riddled with six-fingered hands. Yet art tolerates ambiguity — impressionism is valid — while code is meant to be binary, right?

Wrong. Here, reality warps. Vibe coding’s “correctness” becomes Schrödinger’s cat: unobservable. You lament LLMs’ limited attention spans, yet your own focus dissolves faster under torrents of AI-generated code. You abandon scrutiny. Tools like .cursorrules emerge, but these are imaginary reins on a wild horse — neither comprehensive nor binding. You mistake them for laws, but they’re Confucian Household Sayings: revered yet vague, powerful precisely because they’re obscure. Gradually, you stop caring about correctness. Why bother? Dario Amodei predicts 90% of code will be AI-written within 3–6 months; nearly all within a year. In this looming reality, six-fingered hands flicker in and out of existence. You start accepting that “barely functional code” is the best attainable, where impermanence is the only constant.

This is our epoch’s essence. When real news blends with satire, when “truth-seekers” chase only cognitive comfort, everything you create (or think you create) shares this fate.

Eight years ago, I wrote:

An individual in their bubble assumes serenity, a yesterday’s fantasy — often the seed of tragedy. They perceive a low-dimensional sketch of a twisted world, a crude caricature of history’s chaos, a media-friendly narrative, a mirage refracted through layers. Truth — if it still matters — lurks in dimensional fissures, where a jagged, dissonant mosaic would horrify any glancing observer.

Back then, I thought the world was beginning to collapse. Later, I realized it was my naivety disintegrating. Vibe isn’t a warped reflection of reality; it is reality. First, you see the world as pristine. Then a crack. Then cracks everywhere, until you grasp that you inhabit their ever-expanding web. It’s not just vibe coding, it’s vibe living.