Concise Summary简洁概述
Jacob Harris rejects vibe coding not on capability grounds but on temperament: he'd rather sit with the friction of unfamiliar code than pay per token to think.
Borrowing Fred Brooks' distinction, he argues AI agents only chip away at accidental complexity (the syntax and scaffolding), while essential complexity — good abstraction design — still demands human taste and hard-earned judgment.
Jacob Harris 拒绝"凭感觉编程",理由不是它不管用,而是性格不合——他宁愿在陌生代码里死磕摩擦,也不想按 Token 为思考付费。
借用弗雷德·布鲁克斯的框架,他指出 AI 智能体只能削减"偶然复杂性"(语法与脚手架),而"本质复杂性"——设计出优雅的抽象——依然需要人类的品味与经验。
Infographic信息图
The Frugal Reflex
抠门反射
A token-metered coding assistant turns "thinking" into a billable event. Harris's family history of miserliness is a joke, but the underlying point is real: subscription gating makes him notice, and resent, every moment AI turns cognition into a transaction — so he uninstalls the IDE and goes back to Emacs.
按量计费的 AI 编程助手,把"思考"变成了一次次付费事件。祖传抠门的段子是玩笑,但背后的论点很认真:订阅门槛让他清楚感受到,每一次让 AI 代劳都在把认知过程变成交易——于是他卸载 IDE,重新用回 Emacs。
Two Kinds of Complexity
两种复杂性
Fred Brooks' "No Silver Bullet" separates accidental complexity (clunky syntax, boilerplate, tooling friction) from essential complexity (designing a system that's actually correct and maintainable). Compilers, libraries, and frameworks have steadily eaten the former for decades; AI agents are just the newest layer — but they don't touch the latter.
布鲁克斯在《没有银弹》中区分了"偶然复杂性"(笨拙的语法、样板代码、工具摩擦)与"本质复杂性"(设计出真正正确、可维护的系统)。几十年来,编译器、库和框架不断蚕食前者,AI 智能体只是最新一层——但它根本碰不到后者。
The Abstraction That Hides
会遮蔽的抽象
Every model of reality — a database schema, a gender field, a "fraud" flag — simplifies by discarding information. Citing James Scott and Robin Sloan, Harris argues LLMs can never step back and ask what their own training data left out, because for them the model simply is reality — a blind spot he ties directly to DOGE's literal misreading of SSA records.
每一种现实模型——数据库字段、性别选项、"欺诈"标记——都在简化的同时丢弃信息。作者引用詹姆斯·斯科特与 Robin Sloan 指出,LLM 永远无法退后一步质疑自己的训练数据遗漏了什么,因为对它而言模型本身就是现实——这一盲区被他直接类比到 DOGE 对社保数据的字面误读。
Friction as Diagnostic
摩擦即诊断
Struggling to write code is information: it flags a bad architecture and a need to step back, take a walk, or write an Architectural Decision Record before continuing. Vibe coding's promise to erase all friction also erases the human roles — reviewers, designers, PMs — whose actual job is to be that friction.
写代码写得艰难本身就是一种信息:它提示当前架构走偏了,该停下来散步或先写一份架构决策记录(ADR)再继续。而"凭感觉编程"承诺消除一切摩擦,也顺带消除了那些工作本质就是制造摩擦的人类角色——代码评审者、设计师、项目经理。
Detailed Summary详细解读
The essay's framing move is important: Harris isn't arguing vibe coding fails on technical merit, but that it's temperamentally wrong for him — and he uses that admission strategically. The token-metering anecdote isn't really about money; it's evidence that paid-per-use AI assistance turns "thinking" into a transaction, which primes the reader for his later, more serious claim that friction itself has value. Starting from a self-deprecating, almost comic register lets him earn a harder argument later without sounding preachy.
The intellectual spine is Brooks' 1986 distinction, and Harris uses it to reframe AI hype as continuity rather than rupture. Assembly gave way to high-level languages, hand-rolled quicksorts gave way to standard libraries, scaffolding gave way to frameworks, manual renames gave way to IDE refactors — each step ate more accidental complexity. AI agents are simply the next rung, and framed that way, the "revolutionary" claim shrinks: the real question was never whether AI can write code faster, but whether it can replace the judgment that decides what the code should be.
Harris's detour through James Scott's Seeing Like a State is the essay's most ambitious move: he generalizes "abstraction" from a programming technique into a political technology. States turn forests into "timber for masts," census forms turn identity into checkboxes, and — his sharpest example — autism diagnosis rates "rising 300%" over twenty years almost certainly reflects changed criteria and screening, not a real epidemic. Every abstraction is simultaneously an occlusion, and a good practitioner, especially one trained as a data journalist, learns to interrogate what a model leaves out.
The pivot to LLMs hinges on Robin Sloan's claim that models operate on decontextualized subword tokens, so unlike a human reader they have no way to notice a headline, an author bio, or a suspicious source — the model *is* the world, full stop. Harris's DOGE/SSA anecdote functions as a human-scale parable of the same failure: officials took literal database quirks as proof of mass fraud, refused correction from career staff, and clung to the simplest explanation because it flattered their priors — exactly the credulity that makes LLM output dangerous when nobody checks it.
Harris then converts friction from an obstacle into a diagnostic instrument with two concrete practices: deep-reading unfamiliar codebases line by line until he understands not just what a developer did but why, and forcing himself to write an Architectural Decision Record before any new feature — a document that has caught his own overconfident instincts more than once. Vibe coding's pitch to remove all friction, he argues, doesn't just remove tedium; it removes the exact mechanism that catches bad designs before they calcify into code nobody can reconstruct.
The essay lands on accountability, which Harris treats as the real stakes behind the productivity rhetoric. An LLM can simulate contrition but can't actually be blamed, so when a vibe-coded system fails, responsibility quietly reverts to "you should have prompted better" — a dynamic he compares to Tesla's PR playbook of blaming drivers for Autopilot failures. Layered onto his history in data journalism and civic tech, where bugs carry real human cost, and his closing description of coding as therapeutic, creative meaning, the essay's real claim is that removing friction and responsibility from programming also removes the reasons the work is worth doing.
文章策略值得注意:作者并非论证"凭感觉编程"技术上不行,而是坦承纯属性格不合——这份坦承是刻意铺垫。按 Token 计费的段子表面讲钱,实则证明付费式 AI 协助把"思考"变成了交易,为后文"摩擦有价值"埋下伏笔。用祖传抠门、为捡奶酪送命的自嘲式笑话开场,让他之后提出更严肃的论点时,不至于显得说教。
全文的理论支柱是布鲁克斯 1986 年提出的区分,作者借此把 AI 热潮重新定位为"延续"而非"断裂"。汇编让位于高级语言,手写快速排序让位于标准库,脚手架让位于框架,手动重命名让位于 IDE 自动重构——每一步都在蚕食偶然复杂性。AI 智能体不过是这条链上最新一环,如此一框定,"革命性"的说法就缩水了:真正的问题从来不是 AI 能否更快写代码,而是它能否替代决定"代码该长什么样"的那份判断力。
作者绕道詹姆斯·斯科特的《国家的视角》是全文最有野心的一步:他把"抽象"从一种编程技巧,扩展成一种政治技术。国家把森林抽象成"造船桅的木材",普查表把身份抽象成勾选框——他举的最尖锐例子是:二十年间自闭症诊断率"暴涨 300%",几乎可以肯定反映的是诊断标准与筛查力度的变化,而非真实的流行病激增。每一次抽象同时也是一次遮蔽,而一个好的从业者,尤其是受过数据记者训练的人,会习惯性质疑模型漏掉了什么。
转向 LLM 的关键论据来自 Robin Sloan:模型处理的是被剥离上下文的子词标记,不像人类读者能看到标题、作者简介或来源背景——对模型而言,那个简化的世界本身就是全部现实。DOGE 与社保局的例子,是这种失灵在人类身上的翻版:官员把数据库里的字面异常当成大规模欺诈的铁证,拒绝一线专家的纠正,死抱最简单的解释不放,只因它迎合了自己的预设——这正是无人核查时 LLM 输出会变得危险的同一种轻信。
接着,作者用两个具体习惯把摩擦从障碍转化为诊断工具:逐行死磕陌生代码库,直到不仅知道开发者做了什么、还知道为什么这么做;以及在写任何新功能前强迫自己先写一份架构决策记录(ADR)——这份文档不止一次拦住了他自己过度自信的直觉。他认为,"凭感觉编程"承诺消除一切摩擦,消除的不只是繁琐,还有暂停、复盘、解释选择这套恰恰能在烂设计固化成没人看得懂的代码之前拦下它的机制。
全文最终落在责任问题上,作者认为这才是"生产力叙事"背后真正的利害所在。LLM 可以模拟愧疚,却无法真正被追责,于是"凭感觉编程"出错时,责任总会悄悄落回"是你提示词没写好"——这与特斯拉在 Autopilot 事故后甩锅司机的公关套路如出一辙。叠加上他在数据新闻和公共科技领域"Bug 会造成真实人间代价"的从业经历,以及结尾把编程描述为治愈性的创作意义来源,文章真正的论点是:把摩擦和责任从编程中抽走,也就抽走了这份工作值得去做的理由。
FAQ常见问答
Is Harris arguing that AI coding tools don't work?作者是在说 AI 编程工具不管用吗?
No — he explicitly says AI is fine for well-defined, tedious tasks like scripting ImageMagick calls. His objection is to trusting it with essential-complexity decisions and to a workflow that erases friction, cost, and accountability along the way.
不是。他明确说 AI 处理定义清晰、繁琐的小任务(比如批量调 ImageMagick)完全没问题。他反对的是把架构判断这类"本质复杂性"交给 AI,以及这种工作流顺带抹掉摩擦、成本与责任的方式。
What does the "accidental vs. essential complexity" distinction do in the argument?"偶然复杂性 vs 本质复杂性"这组概念在论证里起什么作用?
It's the structural core: Brooks separated tedious mechanics (syntax, boilerplate) from the hard part (designing correct systems). Harris uses it to argue AI is just the latest tool chipping at the former, not a breakthrough on the latter.
它是论证的结构支柱:布鲁克斯把繁琐的机械劳动(语法、样板代码)与真正难的部分(设计出正确的系统)分开。作者借此说明 AI 只是又一个削减前者的工具,并未在后者上取得突破。
Why does the DOGE/SSA anecdote appear in an essay about coding style?一篇讨论编程风格的文章,为什么会插入 DOGE 与社保局的案例?
It's a non-AI parable for the same failure mode Harris ascribes to LLMs: mistaking a simplified data model for reality itself and refusing correction from outside that model — a human illustration meant to make the abstract critique concrete.
它是一个"非 AI 版本"的同类失灵案例:把简化的数据模型误当成现实本身,并拒绝模型之外的任何纠正——作者用这个真实事件,把对 LLM 的抽象批评落到具体可感的地面上。
Isn't "I love the mess too much to give it up" a subjective, unfalsifiable reason?"我太爱这份混乱,不想放手"——这算不算一个主观到无法反驳的理由?
Yes, and Harris frames it that way deliberately — his least defensible, most honest reason, placed last. It doesn't need to generalize; it explains his personal choice after the structural arguments have already been made.
确实如此,作者也刻意把它摆在最后、当作最不"讲道理"却最诚实的理由。它不需要具有普适性,只是在结构性论证讲完之后,解释他个人为何做出这个选择。
Does the essay say vibe coding never works for anyone?文章是否认为"凭感觉编程"对谁都不管用?
No — Harris concedes it works when the developer is already a domain expert steering the AI, or when the project's stakes are low enough that failure is harmless. His concern is high-stakes systems built by people who can't judge the output.
没有。作者承认,当开发者本身已是该领域专家、能驾驭 AI,或项目本身出错也无伤大雅时,"凭感觉编程"是可行的。他真正担心的是中间地带:高风险系统,却由无法判断产出质量的人来做决定。
In-depth Analysis · Pros & Cons深入解读 · 优缺点
Jacob Harris's essay is a first-person refusal of vibe coding built from seven overlapping arguments — cost, experience, abstraction, data literacy, friction, accountability, and creative joy — rather than a single knockdown case. It's most useful as a map of what, specifically, AI-assisted coding removes from software work, so readers can decide which removals they actually want.
Jacob Harris 这篇文章从成本、经验、抽象、数据素养、摩擦、责任和创作乐趣七个相互交织的角度,第一人称地阐述了自己为何拒绝"凭感觉编程",而不是给出单一的致命论证。它的价值在于清晰列出 AI 辅助编程具体拿走了工作中的哪些东西,让读者自己判断哪些"拿走"是自己真正想要的。
- Structural framework, not just vibes有理论骨架,不止是吐槽Anchoring the essay in Brooks' well-established accidental/essential complexity distinction gives an otherwise personal rant real analytical leverage, letting readers separate "AI writes code faster" from "AI can design good systems."把全文锚定在布鲁克斯那套成熟的"偶然/本质复杂性"框架上,让一篇本可能只是个人牢骚的文章获得了真正的分析力度,帮读者把"AI 写代码更快"和"AI 能设计好系统"这两个不同命题分开来看。
- Concrete, checkable case study有具体可查的案例The DOGE/SSA example isn't a hypothetical — it's a documented, reported incident that makes the abstract claim about LLMs' inability to self-correct tangible, giving skeptical readers something to verify rather than take on faith.DOGE 与社保局的例子不是假设情形,而是有报道可查的真实事件,把"LLM 无法自我纠正"这类抽象论断落到了可验证的地面上,而不是要求读者单纯信任作者的判断。
- Honest about its own limits of authority坦承自己论证的边界Harris repeatedly flags that this is a temperament essay, not a universal technical verdict, and explicitly concedes vibe coding works for experts and low-stakes projects — a rare move that strengthens credibility instead of weakening the argument.作者反复标明这是一篇关于性格取向的文章,而非普适的技术定论,也明确承认"凭感觉编程"对专家或低风险项目管用——这种坦承反而增强了论证的可信度,而非削弱它。
- Widens the lens beyond code把视角拉出代码本身By tying software abstraction to James Scott's political theory of legibility, the essay connects a coding-workflow debate to a much older argument about what gets lost whenever complex reality is simplified for administrative convenience.借助詹姆斯·斯科特关于"可辨识性"的政治理论,把软件抽象和一场更古老的争论联系起来——每当复杂现实被简化以便于治理和管理时,究竟丢掉了什么。
- Anecdote-heavy, not evidence-heavy论据以轶事为主,缺乏系统证据Beyond the single DOGE/SSA case and a self-report of workflow habits, the essay offers no data on how often vibe coding actually produces the disasters it warns about, leaving the central risk claim more asserted than demonstrated.除了 DOGE/社保局这一个案例和作者自述的工作习惯外,文章没有提供任何数据说明"凭感觉编程"实际导致灾难的频率有多高,核心风险论断更多是断言,而非有力证明。
- Conflates current tools with the whole category把当前工具与整个技术类别混为一谈Written in mid-2026 against a specific generation of token-metered assistants, the essay's economic and capability objections may age quickly as pricing models and agentic tooling change, something it acknowledges only briefly at the end.文章写于 2026 年年中,针对的是当下这一代按 Token 计费的助手,其中关于成本和能力的批评很可能随定价模式和智能体工具演进而迅速过时,文末虽有提及,但只是一笔带过。
- The "expert exception" undercuts the general claim"专家例外"削弱了普遍性论断Conceding that vibe coding works fine for domain experts who can already judge good architecture quietly narrows the essay's scope to non-experts and high-stakes systems, a much smaller and less newsworthy claim than the title implies.作者承认"凭感觉编程"对已经具备判断力的领域专家管用,这其实悄悄把文章的适用范围收窄到"非专家 + 高风险系统",比标题给人的印象要小得多,也没那么耸动。
- Some threads are asserted, not argued部分论点只是断言,未充分展开The closing sections on AI chatbot tone, the ethics of the technology, and 996 work culture are gestured at rather than developed, reading as appended grievances that dilute the otherwise tightly built earlier argument.结尾关于 AI 聊天机器人语气、技术伦理以及 996 工作文化的段落只是点到为止,并未展开论证,读起来更像是附加吐槽,稀释了前面结构严谨的论证。
Read this if you want a well-argued, specific account of what vibe coding trades away — not a hit piece on AI capability, but a map of the friction, judgment, and accountability that get erased along with the tedium. Treat the risk claims as one experienced practitioner's reasoned intuition rather than measured evidence, and weigh the "expert exception" carefully before generalizing it to your own team.
如果你想看一篇论证扎实、具体列出"凭感觉编程"到底拿走了什么的文章,而不是一篇泛泛而谈的 AI 唱衰文,这篇值得一读——它讲的是摩擦、判断力和责任如何随着繁琐劳动一起被抹掉。但请把其中的风险论断当作一位资深从业者的经验直觉,而非量化证据,并在套用到自己团队之前,认真掂量作者自己给出的"专家例外"。
Excerpt原文节选
This is a short excerpt, not the full piece — the complete essay belongs to its original author; please read it in full at the link above.
以下仅为节选,并非全文——完整文章版权归原作者所有,请点击上方链接阅读全文。
March 05, 2026
A "brief" accounting of various reasons why vibe coding has just never clicked for me personally as a developer.
There has been a lot of discussion online lately about vibe coding and and how Large Language Models (LLMs) will revolutionize the field of software development. Every new model will launch us into realms of pure productivity, shipping software at the speed of thought and removing all the friction and overhead of product development. Or something like that.
Maybe. I’ll have to take your word for it. I don’t vibe code.
If it’s working for you, great! I’m not really here to argue the merits or flaws of LLMs at depth here in this piece, but it’s just never clicked for me personally. This page is a “brief” accounting of various reasons why.
I’m a Cheapskate
I’m not a purist. I’ve tried using LLMs that are integrated into an IDE.
[…the source continues — read the rest at the link above]
[……原文更长,完整内容请点击上方链接阅读]
I don’t pretend to know the future. Maybe the technology will advance to such a point I will regret my lack of experience and familiarity.
为什么我不“凭感觉编程”
作者:Jacob Harris 标题: Why I Don’t Vibe Code
最近网上关于“凭感觉编程”(Vibe Coding)以及大语言模型(LLM)将如何颠覆软件开发的讨论铺天盖地。据说,每一个新模型的发布都会把我们带入纯粹生产力的天堂,让我们能以光速发布软件,彻底消除产品开发中的所有摩擦和内耗。
或许吧,我姑且信之。但我自己,是不“凭感觉编程”的。
如果你觉得这套好用,那太棒了!我写这篇文章并不是为了探讨 LLM 的优劣,只是这玩意儿对我个人来说,从来没对过胃口。这篇文章,算是我简单盘点一下其中的种种原因。
我是个守财奴
我不是个原教旨主义者。我试过用集成在 IDE 里的 LLM。对于那些描述起来很简单、但自己动手又嫌烦的任务,它们确实挺好用的,比如把网格里的一堆方形图片缩小。我本可以去查查图像处理软件 ImageMagick 的命令行参数,但这种事交给 AI 去干再合适不过了。接着,我又试着用某个 AI 工具分析了我项目里的一段代码,还做了几件小事,然后一切戛然而止。系统通知我:额度用光了。如果想继续,请绑定信用卡购买更多 Token。
你得知道,我祖上两边都是出了名的铁公鸡。几个世纪以来,无论是在大西洋的这头还是那头,我们家族一直精打细算、锱铢必较。举个极端的例子:我的一位远房祖先在 17 世纪的菲利普国王之战中丧生,原因竟然是他在撤离房子时落下了点奶酪,非要跑出安全的堡垒去捡。
所以你一定要相信我:当我发现为了让自己能“思考”,居然还要无休止地给一个服务交钱时,我浑身不自在,以至于连信用卡的影子都不想给他们看。我合上笔记本电脑,卸载了那个 IDE,甚至乖乖用回了极其硬核的纯文本编辑器 Emacs。然后我发现,我压根儿就没觉得少了 AI 有什么不习惯的。
我年纪大了
年纪大确实有点帮助。我写代码已经很多年了,尤其是在这个把只有 5 年经验的开发者就称为“高级工程师”的行业里。有时候,经验是缓解焦虑的一剂良药(前提是,你焦虑的不是在这个 5 年就能称“高级”的行业里遇到的年龄歧视)。
[…the source continues — read the rest at the link above]
[……原文更长,完整内容请点击上方链接阅读]
我不会假装自己能预知未来。也许这项技术真的会发展到不可思议的地步,以至于我会后悔当初没有积累足够的经验去熟悉它。又或者,它也许会陷入停滞,整个建立在炒作之上的金融纸牌屋轰然倒塌。如果那一天真的到来,我希望我们能把软件开发重新建设成一种充满人性关怀的实践。