构建经得起时间考验的软件
Building software that lasts
构建经得起时间考验的软件
原文:*Building software that lasts*
作者:Sara Du (@saradu)
发布时间:2026-07-21
互动数据:💬 16 🔁 26 ❤️ 471 🔖 716 👀 163884
---

旧金山又开始为住房焦虑了。
Nob Hill 的房租比去年这个时候涨了 57%。月租 5 万美元的房子一夜之间就被抢光。最近有条推文请愿立一块广告牌,上面写着"如果我们在旧金山盖市场价住房,你的房租本可以只有 500 美元/月",收获了几千个赞。
旧金山以前也经历过这样的狂热,但这一波的热度前所未有。

这次的不同之处,不只是房租和估值的规模——而是速度的规模。繁荣期从来都会压缩时间;紧迫感会加快人们对"什么是可能的"的认知。但 AI 把时间压缩得更狠了。营收曲线以前还有个斜率,现在直接垂直起飞。
周日我在一个世界杯派对上,和几位 Cursor 的工程师聊了聊。他们才入职八九个月,但每个人都说感觉像过了三年。他们从没体验过时间以这种方式流逝。
繁荣期的产出很容易看见。新的天际线(可惜这年头少见了)、新的创业公司、新的产品。如今软件的生产量之大,已经难以想象。
但繁荣留下的不只是看得见的成果,还有看不见的地基。在城市里,那是建筑之下的土地。在软件里,那是未来的工程师和 agent(智能体)必须理解和推理的架构。在创业公司和大型组织里,那是决定未来什么东西会被构建和维护的习惯与激励机制——更重要的是,什么东西被允许扔掉。下一代人先建造、后继承这些地基,无论它们是否依然牢固。
一座建在垃圾填埋场上的城市
1848 年,旧金山大约有 1000 名居民。到 1849 年底,已经有约 25000 人。
这很难想象,因为城市通常不会长这么快。做个换算:今天的旧金山有 80 万居民,25 倍的增长意味着明年夏天湾区会有 2000 万人口——相当于一个孟买或北京几乎一夜之间凭空出现。
没有任何城市能为这种规模的增长做好准备。当时的旧金山还只是个渔村。第一位测量员刚刚在山丘上画完整齐的矩形街道网格,淘金热就来了。
没有时间思考,旧金山只能向外扩张。Yerba Buena 湾被各种能快速造地的东西填满:沙子、碎石、垃圾、废弃的船只,统统扔进去,造出了如今金融区(FiDi)和 Rincon Hill 脚下的地基。我们至今仍然住在那堆垃圾之上。

很多代码就是填埋垃圾
AI 编程让人上瘾得离谱,因为它让你感觉光靠提示词就能把百万美元的生意变出来。而且需求是真实的:传统经济渴望 AI,程度不亚于旧金山居民渴望构建 AI。那些从没暴露过 API 的老旧软件,终于可以用 computer use(计算机操作)撬开了。曾经看起来不可能自动化的行业,一夜之间都成了可以下手的目标。
而且前沿还在不断向外推进。文本和语音 agent 才刚刚开始触及经济的长尾。当有这么多待开垦的市场等着占领时,克制显得很不理性。
从历史上看,技术债的累积速度大致等于团队敲键盘的速度。今天,它以模型推理的速度增长。这两种速度相差好几个数量级,而且差距还在复利式扩大:每一层生成的代码,都会成为下一层代码生成的地基。
不过这并不是在说模型写的代码烂。它们产出的代码大部分都相当不错,有些甚至比负责审查的工程师自己写的还好。
问题在于,代码变便宜了,耐心却变贵了——尤其是当客户在等、竞争对手在发版的时候。

每一行进入代码库的代码,都会成为未来的人类和 agent 必须理解的环境的一部分。打好地基需要耐心阅读代码、翻查提交历史、质疑抽象设计,偶尔还得下决心:正确答案其实是删掉一大片架构。所有这些事,都比写全新的代码慢。
这种取舍在繁荣期尤其艰难。可以演示的功能和 X 上的发布是看得见的产出,而花一个周末读旧代码不是。但最重要的决策往往是看不见的:到底要不要做这个东西,以及如何重塑已有的东西。这些决策决定了其他一切所依赖的地基。
删东西很难
如果创造这么便宜,删除不是应该变得更有价值吗?
删除会吓到人,尤其是 agent 来删的时候。上周 GPT-5.6 Sol 开始删东西时,舆论立刻炸了锅(当然那是个极端且糟糕的例子)。删代码的感知风险是无上限的,而加代码几乎从不让人觉得性命攸关。功能做错了,可以重写;有 bug,可以打补丁。
于是组织在演化中形成了远比奖励删除更看重奖励创造的机制。他们衡量速度、庆祝上线的功能、赞美产出。几乎没有人为"让系统更简单"定义一个奖励信号。
软件生态也在强化这个逻辑。没有哪个 AI 代码审查平台会打广告说"合并的 PR 更少了"。他们宣传的都是写得更多、合并得更快,一切都围绕更高的吞吐量。这些厂商的案例研究通常把整个问题框定为"代码审查是吞吐量瓶颈":你能生成一百万行代码,但如果审查只能消化一千行,那你最终就只能交付一千行。那一百万行被视为等待解锁的潜在价值,而不是需要修剪的负债。
连厂商自己也察觉到了这个陷阱:在一篇已被删除的博客文章里,CodeRabbit 承认 AI 让团队很容易"生成超出自己能够从容理解范围的工作量",但产品卖的依然是更快的合并。
Agent 继承了这些激励机制,并且在依然受制于人类审查者和系统的情况下,把它们继续传播下去。
填埋地会塌
1989 年 Loma Prieta 地震期间,旧金山建在填埋地上的区域发生了土壤液化。承载了几十年重量的地面,突然不再像地面那样工作,Marina 区大片区域坍塌了。

软件的崩溃方式与此类似。仓促写就的代码成为更多仓促代码的地基。每一层所依赖的假设,理解的人比下一层更少。系统可能好好运转很多年,但某一天,一次迁移、一次故障、一起安全事件同时给多个层级施加压力,看似坚固的东西便开始瓦解。
写到这里,本可以用一条简单的规则收尾:想让东西长久,就慢慢建。但繁荣期很少允许这种奢侈。拖延的代价显而易见;仓促却往往看起来是免费的。
可这笔代价并不会凭空消失。你只是在改变买单的时间。你可以提前支付——认真理解地基和其上的每一层;也可以事后支付——删掉并重建那些廉价而脆弱的东西。真正的错误,是以为仓促执行的代价可以完全不用付。
结构性的无常
东京很特别,它被摧毁又重建了好几次。大火、地震、美军的燃烧弹轰炸,锻造出这座城市与"永恒"之间独特的关系。
如今,市场也在强化这种预期。一栋日本住宅在 20 年后几乎会失去全部价值。土地才是资产,建筑只是临时的。东京建筑的平均寿命是 30 年,而在美国,这个数字是它的两倍多。
东京和旧金山一样,也曾被繁荣与狂热的经济发展塑造。虽然这座城市已成为全球最大的都市圈,但住房依然可负担,明显比纽约、伦敦、香港或旧金山便宜。这不是因为租金管制或补贴。东京没有让供给萎缩,而是疯狂地建造:国家层面的分区法律(zoning law)严格限制了地方政府阻挠开发的权力,所以单栋建筑经常被拆掉,换成更密集、更有用的建筑。
但东京也不是所有东西都造来即弃。这座城市的大规模扩张,靠的是东京地铁(Tokyo Metro)这条脊梁——它每年净利润 5 亿美元(而 BART 和 Muni 靠补贴运营,本就不指望盈利)。建筑来来去去,但正是这套交通系统,让持续重建和低房租成为可能。
东京给我们的启示是:永恒应当是挣来的,而不是默认的。只在你确定的地方浇筑混凝土。其他一切,都按临时、便宜可替换、易于重建的标准来造。
要么慢慢建,要么就别指望它长久
繁荣的年代令人兴奋。一切都感觉触手可及,一切都发生得更快。时间本身仿佛被加速了,好像未来可以凭意志力被硬拽到眼前。
在当下,慢慢来显得很叛逆。连我们的语言都在反映这一点:最厉害的工程师都在"狂撕 token"(rip tokens),拥抱加速的建造者永远在"maxxing"(拉满)什么东西。
而市场也常常奖励急性子。营收不在乎架构是否完美或可持续,有时候发现正确系统的唯一方式就是先把它建出来。但代码库的地基不会因为当初打得仓促,就变得更便宜好改。
这种取舍早于 LLM(大语言模型)就存在,但 agent 放大了我们选择的后果。我们越来越擅长教 agent 如何生产软件,却远不擅长教它们什么时候不该生产,或者判断已有的工作何时已经过时。也许缺失的那一块是激励设计:让 agent 团队随着代码库的成熟,越来越愿意去重新审视、简化和删除。
在那之前,未来的瓶颈不会是我们建得有多快,而是我们选择地基时有多耐心,以及我们抹掉其他一切时有多狠心。