Jacob Harris 最近写了一篇长文《Why I Don't Vibe Code》,在 AI 编程狂热中显得格格不入。他不是技术保守派,也不是质疑 LLM 的能力——他只是从个人经验出发,认为这套工具从未"对过他的胃口"。
成本:守财奴的本能
Harris 坦承自己极度节俭。当他发现为了"思考"还要持续给服务交钱时,立刻卸载了 IDE 里的 AI 插件,乖乖用回了 Emacs。结果发现:没有 AI,他压根没觉得少了什么。
经验:布鲁克斯的幽灵
作为有多年经验的开发者,Harris 引用了 Fred Brooks 的经典论文《没有银弹》。Brooks 区分了两种复杂性:
- 偶然复杂性:写代码本身的繁琐、笨重
- 本质复杂性:设计出正确、优雅、清晰且易于维护的抽象架构
现代编程语言、标准库、框架已经大幅削弱了偶然复杂性。AI 似乎是这一进程的最新迭代——但它解决的仍然是"写代码"这个层面,而不是"设计系统"这个层面。
Harris 的核心质疑是:LLM 那种"高级自动补全",面对怪异、罕见且混乱的本质复杂性时,到底能发挥多大作用?
认知:每一次抽象都是一次遮蔽
Harris 援引 James Scott 的《国家的视角》,说明抽象如何简化现实的同时也在遮蔽现实。程序员必须对现实进行削足适履的强制妥协——决定系统反映现实的哪些方面,丢弃哪些方面。
他举了 DOGE(政府效率部)在社保局的拙劣表演:发现 900 万条记录的出生日期在 120 多年前,马斯克立刻断言是欺诈。DOGE 本可以质疑数据质量、查证实际打款情况、咨询专家——但他们没有,他们直接照单全收了字面数据。
Harris 认为,LLM 正在重演同款逻辑:它们无法跳出自身审视局限性,就像问金鱼水温怎么样一样对牛弹琴。
摩擦:上天的恩赐
这是文章最锋利的部分。
Harris 说他需要摩擦。当写代码变得困难时,这说明在当前的架构下他正走向歧路——这是一个重新设计的重要信号。他会出去散步,或者强制自己写架构决策记录(ADR),逼着自己记录下想法、假设和可能的后果。
而 LLM 驱动开发对待摩擦的态度是:不管三七二十一,闭着眼睛直接写过去。LLM 会极其配合,大概率能写出能跑通的代码,测试也能通过——但它根本不知道自己为什么选择了那条路,感受不到摩擦,也无法解释一种架构方案是否比另一种更清晰优雅。
更尖锐的是,Harris 指出 LLM 营销中的潜台词:当"摩擦"被视为眼中钉时,实际上被暗示为摩擦的不只是编译错误,还有人本身——其他工程师、产品经理、测试人员、合规审查员、设计师。这些角色现在也被视为了"摩擦"。
责任感:不可外包的道德
Harris 曾在数据新闻和公共科技领域工作,深知代码里的一个 Bug 可能导致极其难堪的报纸更正,或者灭顶之灾般的诉讼。他有强烈的个人责任感,因为他在乎这份工作的使命。
而 LLM 是不可能"在乎"的。它不会因为犯错而感到懊恼,也不会努力试图改进。它永远无法被追责,因此,Harris 永远也不能把他的道德责任外包给它。
其他理由
文章还提到了几个"可笑的理由":极度反感 AI 聊天机器人默认的油腔滑调语气;享受头脑风暴和学习新知识的过程,而不是每个想法都必须变成产品;以及对 LLM 供应商在安全测试缺失的情况下推送新功能、却让用户承担风险的担忧——这让他想起了特斯拉的套路。
未来路在何方?
Harris 不假装能预知未来。也许这项技术真的会发展到不可思议的地步,他会后悔没有积累经验;也许它会陷入停滞,整个金融纸牌屋轰然倒塌。
如果那一天到来,他希望软件开发能重新建设成一种"充满人性关怀的实践"。