Vibecoding isn't as fun as writing code by hand
Vibecoding isn’t as fun as writing code by hand
“Vibecoding”(氛围编程)远不如手写代码有趣
I like building things: it makes me happy. Learning and discovering things is a close second, but building is more satisfactory. Since I’m not that good at actually, you know, building things, the thrill of “building”, in my case, has mostly come from writing software. Software is one of the easiest ways to create something satisfyingly useful out of nothing. 我喜欢创造事物:这让我感到快乐。学习和探索事物紧随其后,但创造带来的满足感更强。由于我并不擅长真正意义上的“建造”实体,对我而言,“创造”的快感大多来自编写软件。软件是从无到有创造出实用且令人满意的成果的最简单方式之一。
For a long time I’ve known, at some level, how much joy building gives me. But it really sunk in while working on two recent hobby software projects. They were both dumb little Python scrapers that I cobbled together, that did something useful that I’d wanted for a long time. They were pretty basic, but gave me so much irrational pleasure. It was the most fun I’d had programming in years. 长期以来,我在某种程度上一直知道创造能给我带来多少快乐。但直到最近参与两个业余软件项目时,这种感觉才真正深入人心。它们都是我拼凑出来的简单 Python 爬虫,却实现了我渴望已久的功能。虽然它们非常基础,却给了我一种难以言喻的快感。这是我多年来编程体验中最有趣的一次。
Then, [cue Jaws theme song] AI came along. Like pretty much everyone else, I’ve been cautiously experimenting with AI-assisted coding. We are past the point where we can easily dismiss AI as “stupid” (though it is), or “doesn’t actually make me more productive”. So, in classic motte and bailey fashion, I am retreating, while pretending not to: AI coding is less fun. 然后,[播放《大白鲨》主题曲] AI 出现了。和几乎所有人一样,我一直在谨慎地尝试 AI 辅助编程。我们已经过了那种可以轻易将 AI 斥为“愚蠢”(尽管它确实蠢)或“实际上并不能提高生产力”的阶段。因此,我采取了一种经典的“堡垒与平原”(motte and bailey)策略:我正在撤退,却假装没有——AI 编程确实没那么有趣。
This seems counter-intuitive, because vibecoding is absolutely thrilling … AT FIRST. Refactoring vibecoded software? Not thrilling. I’m not going to claim, as some do, that vibecoding doesn’t give the thrill of actually building something. Because it does, partly. I think that one of the things that’s driving the adoption of vibecoding is that it frontloads the fun, at both the project- and career level. 这似乎有悖常理,因为“氛围编程”(vibecoding)起初确实令人兴奋……但仅限于起初。重构由 AI 生成的代码?那可一点也不令人兴奋。我不会像某些人那样声称氛围编程无法带来创造事物的快感,因为它确实能带来一部分。我认为推动氛围编程普及的原因之一,是它在项目和职业层面都将“乐趣”前置了。
The Vibecoding Thrill Curve: If I have an idea, I can usually get a working prototype very quickly, with very little effort. Instant dopamine! Similarly, someone with no coding experience can “code” an app, and it will probably work. Instant dopamine! I have a personal policy against frontloading the fun. So, I don’t like this, just like I don’t like getting paid for work I haven’t done, going into debt, and arrangements where someone else does my work today in trade for me doing their work tomorrow. 氛围编程的快感曲线:如果我有一个想法,通常能以极小的努力迅速得到一个可运行的原型。多巴胺瞬间爆发!同样,一个没有任何编程经验的人也能“写出”一个应用,而且很可能还能运行。多巴胺瞬间爆发!我个人反对这种乐趣前置的做法。所以,我不喜欢这样,就像我不喜欢在没干活的情况下拿工资、不喜欢负债,也不喜欢那种“今天别人替我干活,明天我再替别人干活”的安排。
I posit that there are several distinct sources of thrill/satisfaction when building something: The thrill of the idea; The thrill of making the idea real; The satisfaction of hard-won accomplishment; The satisfaction of a job well done; The thrill of learning; The satisfaction making something that solves a problem you have. Vibecoding, in general, can give you 1, 2, and 6. But 3, 4, and 5 are not natural consequence of vibecoding. 我认为创造事物时,快感/满足感有几个不同的来源:想法的快感;将想法变为现实的快感;来之不易的成就感;工作出色的满足感;学习的快感;解决自身问题的满足感。总的来说,氛围编程能给你提供第 1、2 和 6 点,但第 3、4 和 5 点并不是氛围编程的自然结果。
In tenuous defense of vibecoding: I can, and have, built things with AI that I either never could have, or never would have, built otherwise. Mostly, it’s cases where it would not be worth me spending weeks building it by hand, but if I can build it in minutes or days, it is worth it. 为氛围编程做一点苍白的辩护:我确实利用 AI 构建了一些我原本永远无法或永远不会去构建的东西。大多数情况下,如果需要花几周时间手写代码,那是不值得的;但如果能在几分钟或几天内完成,那就值得了。
I one-shotted a has-this-already-been-submitted-to-hackernews bookmarklet (HN?), based on Taylor Troesh’s Discuss on HN snippet. It gave me significant satisfaction, solved a problem I had, I use it regularly on my Wallabag favourites page. In very little time, I vibecoded “Party Market”, a prediction market simulator party game to go along with a flash lecture on prediction markets, and ran a market on “how long will I drone on for”, live, during my lecture. It turned a dry and boring lecture into grade-A entertainment. The code was garbage and it was full of bugs, but I never could have done it writing it by hand in that amount of time. It wasn’t a choice between doing it with AI and doing it by hand: it was a choice between doing it with AI and not doing it at all. 我曾一次性写出了一个“该链接是否已提交至 Hacker News”的书签工具。它给了我极大的满足感,解决了我的痛点,我经常在 Wallabag 收藏页使用它。在极短的时间内,我通过氛围编程做出了“派对市场”(Party Market),这是一个配合预测市场讲座的模拟游戏,我甚至在讲座现场实时开启了一个关于“我会啰嗦多久”的市场。它将一场枯燥乏味的讲座变成了顶级娱乐。代码虽然是一堆垃圾且充满 Bug,但我绝不可能在那个时间内手写出来。这并非在 AI 编程和手写代码之间做选择,而是在“用 AI 做”和“干脆不做”之间做选择。
When a fire chief I know was going to invest way too much money in an “AI appliance” that didn’t even say which Nvidia card it had, or what model/generation of Xeon it was, I vibecoded with free plan Lumo, in two afternoon sessions, a functional Pyronear based Wildfire Early Warning System that ran in realtime on a live feed on my laptop, and was able to detect the first frame of smoke on the ignition footage I fed it. 当一位我认识的消防队长打算花大价钱购买一台连显卡型号、至强处理器代数都不标明的“AI 设备”时,我利用免费版的 Lumo,在两个下午的时间里,通过氛围编程构建了一个基于 Pyronear 的野火预警系统。它能在我的笔记本电脑上实时运行直播流,并能在我输入的起火视频中检测到第一帧烟雾。
I built a browser-based Kobo database migration assistant, so that people unfamiliar with SQLite can move their books and annotations to a new device. When a singing lesson with my vocal coach fell through, I built the realtime pitch training app I’ve always wanted — and have planned to build for about a decade. In most of these cases, I was immensely pleased with the results, but the process wasn’t fun the way writing my dumb little scrapers was fun. 我构建了一个基于浏览器的 Kobo 数据库迁移助手,让不熟悉 SQLite 的人也能将书籍和标注迁移到新设备。当我和声乐教练的课程取消时,我构建了那个我一直想要、且计划了十年的实时音高训练应用。在大多数情况下,我对结果非常满意,但这个过程并不像编写我那些愚蠢的小爬虫那样有趣。
Of course, handwritten software development isn’t always fun. My first Golang project was, for large sections of time, with a deadline, certified Not Fun™. Fighting the Rust compiler the first time I tried to write, like, twenty lines of Rust code was Not Fun™. But it was, in the long run, Type II fun, because it gave me the sense of accomplishment, and the glorious I did it! feeling (And, next time, it would be easier.) 当然,手写软件开发并不总是充满乐趣。我的第一个 Golang 项目在截止日期的压力下,有很长一段时间被认证为“毫无乐趣”。第一次尝试写二十行 Rust 代码时与编译器搏斗的过程也“毫无乐趣”。但从长远来看,这属于“第二类乐趣”(Type II fun),因为它给了我成就感,以及那种“我做到了!”的辉煌感觉(而且,下一次会更容易)。
I’ve tried everything from local models running in llama-server, to copy-and-pasting from free, no sign-up services (Phind, Lumo, etc) for one-shot scripts, to full on remote server Clod Masterpiece 200™ all-you-can-eat plan with custom-written auto-approval hooks that were worryingly close to –dangerously-skip-permissions, developing algorithmic trading models. It’s all the same: it’s “productive”, but I don’t like the way it makes me feel, and I don’t like the quality of the output. It manages to make me feel dumb and superfluous (and, sometimes, dirty for even using it), without earning my respect. 我尝试过各种方式:从在 llama-server 中运行本地模型,到从无需注册的免费服务(如 Phind、Lumo 等)复制粘贴脚本,再到使用全功能的远程服务器“云端杰作 200™”无限套餐,甚至编写自定义的自动批准钩子(这些钩子危险地接近于“跳过权限”),用来开发算法交易模型。结果都一样:它确实“高效”,但我不喜欢它带给我的感觉,也不喜欢输出的质量。它让我感到自己既愚蠢又多余(有时甚至因为使用它而感到肮脏),却无法赢得我的尊重。
The word “dopamine” made me think: vibecoding is a bit like a series of first dates or one night stands. You don’t develop a relationship with the project: you don’t get the same kind of warm fuzzies, oxytocin, attachment. The problem with a dopamine-only life is that thrills become dull with repetition. Another way to look at it: vibecoding introduces a layer between you and reality. I am the kind of person that thinks, in general, reality is more fun when experienced first-hand. Vibecoding is like being an executive of… “多巴胺”这个词让我想到:氛围编程有点像一系列的初次约会或一夜情。你无法与项目建立深层的关系:你无法获得那种温暖的模糊感、催产素和依恋感。只追求多巴胺的生活的问题在于,快感会随着重复而变得迟钝。换个角度看:氛围编程在你和现实之间引入了一层隔阂。我属于那种认为现实在亲身体验时更有趣的人。氛围编程就像是成为了一名……的执行官。