2026 年 7 月 13 日,Armin Ronacher 在个人博客上发表了一篇短文「The Tower Keeps Rising」。文章不到一千词,却像一块石头扔进了 Hacker News 的池塘——480 分、226 条评论,一天之内成为社区最热门的讨论。
Armin Ronacher 这个名字在 Python 世界几乎不需要介绍。他是 Flask 的作者,Jinja2 的创造者,Click、Rye 和许多其他工具背后的那个人——网名 mitsuhiko。他不是一个喜欢大声说话的人,但每次开口,往往意味着有事发生。
这篇文章讨论的既非某个 API 的弃用,也非某个框架的更新。它指向一个更大、也更让人不安的观察:AI 编程助手正在悄然改变软件项目最底层的东西——人跟人之间的共同理解。
巴别塔的另一个读法
Ronacher 的切入点很独特。他没有从技术指标出发,而是从老彼得·勃鲁盖尔那幅名画「巴别塔」讲起。
传统的解读是:人类骄傲到想造一座通天塔,于是上帝混乱了他们的语言,让他们彼此无法沟通,工程就此停摆。但 Ronacher 注意到一个细节:上帝并没有拿走砖头,也没有夺走烧砖的技术。他只拿走了一样东西——协调的能力。
然后他笔锋一转,将这个故事拉到了当下。AI 编程助手——特别是所谓的 vibe coding——正在重演巴别塔,但结局不同。
摩擦的价值
Ronacher 的核心论点是:在传统软件开发中,摩擦扮演着隐形但关键的角色。
当你要修改别人的存储层时,你得读代码、提问、跟依赖你接口的团队协调。这件事很慢,有些部分是浪费。但不全是。它也是你的理解变成对方理解的过程,是团队不断同步对系统认知的过程。「这种摩擦让人的认知同步,」他写道。
AI 助手消除了这种摩擦。你可以让 agent 加 OAuth,他可以让 agent 加缓存,另一个人可以要求 agent 从零重建数据库并把 UI 刷成粉色。每个改动单独看都不离谱。代码能编译,测试能通过,解释也可以按需生成。没有人需要跟别人说话,甚至没有人需要去学习那些改动本该强迫他们了解的部分。
Ronacher 这句话值得全文引用:
「Agent 不会感到痛苦,只有人会。Agent 让我们能在之前需要其他人才能行动的系统部分里自由操作,在之前人员会反复流转的代码库里随意改动。」
结果是什么?代码库变成了巴别塔:没人需要沟通了。每个开发者都有一个不知疲倦的翻译器,可以解释塔楼的任意角落,并执行他们要求的任何局部修改。改动持续落地,而本该让人类共同推理系统架构的语言,正在消失。
塔没有倒
但故事的关键转折来了。Ronacher 说,这跟圣经不一样。在巴别塔,语言混乱导致的是停工。而在 AI 辅助工程里,施工可以在共同理解崩溃之后继续。
这就是这篇文章最让人不安的那句话:
「塔没有倒,所以我们注意不到失去了什么。它只是越盖越高。」
没有失败,没有 crash,没有红灯。代码照常运行,功能照常上线,PR 照常合并。一切看起来都很好——只是,没有人真正理解这栋大楼是怎么立起来的了。
一个做工具的人
如果你知道 Ronacher 的履历,就会明白他不是在做一个轻松的比喻。他本人就是那种不断在复杂性上面盖楼的人。
Flask 诞生于 2010 年,作为对 Django 「太重」的回应。十六年后,Python Web 开发的栈比 Django 时代复杂了不止一个数量级:ASGI、类型注解、Pydantic、FastAPI、htmx、HTMX 之前还有 SPA……
Python 打包更是重灾区。从 distutils 到 setuptools 到 pip 到 poetry 到 pipenv 到 pdm 到 Rye 到 uv——Ronacher 自己就在这个链条上添过砖。Rye 是他的尝试,试图用一个统一工具解决 Python 项目管理中长期以来的碎片化。后来又主动将用户导向 uv,因为「碎片化正在伤害开发者体验」。
他在 Rust 生态里也看到同样的模式。从 rustc 到 cargo 到 rustup 到 clippy 到 rustfmt 到 cargo-edit 到各种子命令——每一样都有存在的理由,但加起来就是一座塔。
这些经历让他有一个多数人没有的视角:复杂性是累积的必然。每一层抽象、每一个工具、每一个中间件,都对应着某个真实问题的答案。问题在于:当所有真实问题的答案被堆叠在一起时,新来者面对的是一座没有地图的塔楼。
HN 上的人在吵什么
HN 讨论区里,最受关注的几条评论碰撞出了这个故事的不同切面。
用户 Animats 将 vibe coding 跟 Brooks 在「人月神话」中描述的扩展性问题类比:复杂度的上限过去受限于人脑的处理能力,vibe coding 突破了这个限制。但它突破的方式并非更精巧的设计,而是一种「不追求简洁抽象」的暴力生成。多个相似实现会在项目的不同角落重复出现——这是 vibe coding 已知的问题之一。
用户 ssivark 则指出,Ronacher 的核心论点让人想起「Lisp 诅咒」:Lisp 太强大,让个人可以迅速实现自己的想法,结果反而是没有人愿意聚在一起协作构建通用的、高质量的工件。AI 编程助手可能有类似的效应——把个人生产力提升到如此程度,以至于团队协作的动力被稀释。
有人搬出了 Linus Torvalds 的类比:把 AI 称为代码的「作者」,就像说编译器写了你的代码。AI 是生产力工具的一层抽象,就像从汇编到 C 到更高层语言的演进。这个类比暗示事情没那么可怕——历史上的每一次抽象升级都带来过类似的担忧。
但也有人直接质疑 Ronacher 的前提。用户 HiPhish 反问:**巴别塔的教训是语言混乱导致停工,而 Ronacher 说 AI 让我们在失去共同语言之后还能继续盖——那前者不是更糟糕吗?**塔倒了才发现语言混乱的问题,和塔继续盖但你不知道自己盖的是什么东西——哪个更可怕?
用户 fancyfredbot 的评论尖刻但击中要害:「vibe coding 之所以禁止阅读生成的代码,是因为你无法忘记潜伏在 Python 文件里的恐怖。代码会做你大致要求的事情,但在如何达成目标的所有选择上,它做出的决定是不一致的。」
用户 zemo 用一个星战梗做了总结——Anakin 说「有了 agent,开发者改变代码库的能力将大幅提升」,Padmé 问「是往好的方向,对吧?」,Anakin 沉默。
不可逆的阶梯
Ronacher 没有给出解决方案。这本身就是一个信号。
他不是那种会喊「回到朴素时代」的人。他自己的职业生涯就是一路往前盖楼的——从 Werkzeug 到 Flask 到 Sentry 到 Rye,每一步都是在前一层复杂度之上,而不是推倒重来。
文章结尾的那种平静——「塔没有倒,我们注意不到失去了什么」——读起来不像警告,更像承认。他已经看到了,也接受了,只是想让你也看到。
但这不意味着什么都做不了。HN 用户 noisy_boy 分享了一条实用的经验:「当我注意到有什么东西不是错的但也不完全对——尤其是那些让我发痒的小问题——我会放下 agent,自己动手改。不要让 agent 替你挠那个痒。那是你的程序员本能正在发出信号。」
用户 jeffreyrogers 提出了一个更结构化的观察:**agentic 编程更像是管理而不是编程。**管理者通常只对下面的人在做什么有一个模糊的概念,往往也没有时间、精力或能力去理解每一个细节。当越来越多的代码由 agent 生成时,软件开发者正在成为管理者——而管理一群 AI agent 需要的技能,跟亲手写代码完全不同。
Ronacher 的 Rye 本身也提供了一个启示:面对 Python 打包的巴别塔,他没有试图推倒重来(那已经被尝试过无数次了),而是在已有的复杂度之上盖了一个更友好的入口。它不消除复杂性,但让进入的路径更短。
也许这就是面对一座不断升高的塔时,比较务实的姿态:接受不可逆,但不放弃在每一层上做得更清楚一点。
本文的素材来自公开信息和社区讨论。如果你对这个话题有更深入的一手经验,欢迎指出文中的不足。
参考链接
- Armin Ronacher: The Tower Keeps Rising
- Hacker News 讨论