你代码库中的定时炸弹(我的也一样)
I’m happy to translate the article for you, but I’ll need the full text you’d like translated. Could you please paste the content (excluding the source link you’ve already provided) so I can convert it into Simplified Chinese while preserving the formatting?
解释一切的数字
你的大脑一次性在工作记忆中只能容纳 4 到 7 个块 的信息。这对我、对你、对你曾合作过的最出色的高级开发者都是一样的。这是生物学上的限制,而不是技能问题。
现在想想:你维护的代码库有多少隐式交互?5 万行?20 万行?还是五十万行?
你正试图用只能运行 7 条线程的处理器去监控一个拥有成千上万不可见依赖的系统。这根本行不通。
我见过无数次的循环
我已经从事软件工作 22 年了。模式总是一样的:
- 第 1 个月 — 架构师把一切设计得清晰明了。决策合情合理。所有人都保持一致。
- 第 6 个月 — 架构师仍在,但已经不记得为什么把超时设为 30 秒而不是 5 秒了。“一定有什么原因。”
- 第 12 个月 — 三位最初的工程师中有两位离职。超时的原因?也跟着走了。剩下的只有一行注释
// don't change this,却没有任何解释。 - 第 18 个月 — 新来的开发者能力很强,他把超时改成 5 秒,因为“30 秒太荒唐了”。结果凌晨 3 点生产环境崩溃。没有人知道为什么。
问题从来不是新来的开发者。问题在于 上下文无法随时间存活。
夜里让我辗转反侧的失败
二十年后,我把这些故事收集起来:
天真的钩子
一个 usePopup() 为 DOM 添加了全局监听器。代码简洁、经过测试、代码审查通过。可是它被用了 100 个组件里。于是页面上每一次点击都会触发 100 个监听器。没有任何一次单独的代码审查能发现这个问题——因为每次审查只看到它自己的那一次使用。
function usePopup() {
document.addEventListener('click', handleClick);
}
幽灵缓存
一次合法的重构改变了对象的构造方式。功能上完全相同,但引用不同。依赖 === 的缓存因此再也失效。测试通过,应用也没有崩溃。只是它悄悄变慢,一周又一周,直到三个月后有人提交工单才被发现。
// Before
const obj = getConfig(); // cached by reference
// After
const obj = { ...getConfig() }; // new reference, cache miss
优雅的 N+1
一个使用 ORM 的循环生成了易读的代码,却执行了 50 条独立的 SQL 查询。开发者看到的是优雅,数据库看到的却是轰炸。
for user in users:
print(user.profile.email) # triggers a separate query per user
这种模式总是相同的:问题在你所工作的抽象层面上是不可见的。 你需要同时看到多个层次——而你的 4 到 7 个记忆块根本做不到。
AI 真正改变游戏的地方
我知道有很多炒作。我知道关于 AI 在软件领域的承诺有一半是营销。但 AI 有一件事在结构上与以往任何工具都不同:
巨大的上下文窗口
当你修改一行代码时,AI 能看到调用该函数的 47 个模块,检查它们是否依赖引用相等性,并检测你的“简单修复”是否会在代码库的另一端悄悄导致破坏。这不是因为它更聪明,而是因为它拥有更大的工作记忆。
不知疲倦的警惕
周五下午 5 PM,部署计划在周一,代码审查变得更表面化。第 100 个 PR 的关注度低于第一个。AI 对 PR #1 和 PR #100 进行同等审查。没有“这次不同”,也没有“这只是个热修复”。
机构记忆
“为什么这个服务有 30 s 超时?”——新开发者不知道,2 年旧的 Slack 线程也搜不到。拥有历史访问权限的 AI 会记得:“INC‑4521,2024 年 3 月,抢占实例冷启动最长 25 s”。
但等等——人类仍然不可替代
在任何人认为我在说 AI 将取代开发者之前:它不会。
AI 在遵循模式和检测违规方面非常出色。但它不会发明新范式。它不知道你因为市场窗口在三周后关闭而接受技术债务。它不知道“不要在星期一部署,因为支付团队在星期二部署”。它不知道上一次黑色星期五发生了什么。
判断力、创造力、业务背景、部落知识——这些仍然是我们的。
真正的合作伙伴
未来不是“开发者 vs. AI”。而是:
- AI 负责一致性和规模 — 检测违规、维护记忆、检查级联影响、无疲劳地监控
- 人类专注于判断和创造力 — 决定构建什么、进行战略权衡、发明新事物、应对组织政治
因骄傲而抵制这种方式的团队(“我可以自己审查所有内容”)会更快积累熵。并不是因为他们是更差的开发者——而是因为他们是认知能力固定、面对日益增长的复杂性的普通人。
时钟在滴答
如果你的代码库已经超过 18 个月,熵已经存在。问题不在于它是否存在——而在于你是否拥有一个能够持续化解它的系统。
或者你是否指望靠 4‑7 片段的人类记忆来监控数十万行代码。
我在这里写了一个包含图表、图示以及详细技术示例的扩展版本:stickybit.com.br/codebase-timebomb/
如果你维护着遗留代码库(谁没有呢?),值得一读。