自信的汤
Source: Dev.to
现在是凌晨 2:14。生产环境出现降级。你在寻找火焰的边缘,却根本没有边缘。已经过去四十分钟。代码能够编译,测试全绿,部署毫无瑕疵,但系统在负载下仍然崩溃。你盯着一个文件,想找出支付逻辑结束的地方和用户逻辑开始的地方,却发现一切都相互交织。认证模块深入计费服务,计费服务又修改了它本不该触碰的关注点。没有边界,没有接口,没有系统交接后各自离开的安静空间——只有一堵完美缩进、完全纠缠的语法墙。代码库自信满满。代码库无处不在。你在其中溺水。
好的工程
好的工程不是敲键盘的速度,而是知道先放弃哪些战斗。在你构建功能之前,你要先勾勒出可能的失败模式。你先写接口再写实现,刻意保持其松耦合——这不是因为你不知道它应该做什么,而是因为你预见到可能的转向、负载激增或数据库锁。通过将边界解耦,系统在出现故障时会以可预测的方式失效:支付服务宕机,认证服务仍然运行,火焰在接缝处被阻止,因为你在火焰出现之前已经构建了接缝。
设计以应对失败
这是一种有意的损失。你计划一次小规模、受控的失败,以便让更大的系统能够在真正的压力下存活。你有意留下未完成的部分,因为这种早期的损失是收集足够信息、构建真正持久产品的方式。你保持宽松,因为你不知道用户会如何与解决方案交互。人们在使用你的界面时会带来你从未建模的上下文;他们会找到你未设计的路径并不断尝试,直至出现故障。一个不能灵活应变的系统必然会断裂。接缝并不是代码整洁的度量;它是一个有计划的撤退点——同样是对你自身假设的退让。
Amateur vs. Strategic Fighting
去社交媒体上观看业余选手的比赛。没有刺拳。没有假动作。没有阅读对手。两个人从第一铃声起就使出他们能打出的最重、最快的拳。看起来像是侵略,像是自信。到了第二回合,两位选手都已经气喘吁吁,手臂下垂,吃下本可以躲开的拳,因为他们已经把所有能量都耗尽。业余选手并不是为了获取信息而出拳;他们出拳是为了结束比赛。每一次挥拳都是重拳,每一记重拳都是对未来的投票——对第三回合的投票,对转折点的投票,对比赛改变的那一刻的投票,而你需要保留一些后备力量。
LLM 的作战方式就像业余选手——不是因为它愚蠢,而是因为它没有保存体力的余地。模型没有第三回合;只有票据、响应,以及在上下文窗口关闭前用语法填满每一个空白的需求。它不能出刺拳,不能有意模糊接口,不能抵制关闭缝隙。对模型而言,不完整感就像失败,所以它会立即完成——且充满绝对的自信。这不是 bug;而是工具的本质。
AI 对工程的影响
Dave Farley 研究了 150 位开发者,发现 AI 使他们的工作速度提升约 55 %。数据是真实的,但我们误读了提升的内容。它是完成速度提升了 55 %。机器在接触时就把整个特性结晶化——令牌排列成代码的样子,就像照片捕捉到光线排列成面孔的形状,却不理解其下的颅骨。没有钢筋。没有承重逻辑。在低饱和度的解决方案中,分子可以自由移动;你可以分离、改变、加工它们。Vibe 编码是超饱和的——一旦按下 Enter,所有东西瞬间相互结合。没有为枢轴留下的接缝,没有预先设计的失效模式,也没有为你忘记建模的用户留出空间。
Farley 并没有证明 AI 擅长工程;他证明了 AI 擅长赢得第一场战斗。需要保持松散的工作——计划的撤退点、架构边界——被以 55 % 更快的速度跳过。
结论
仍然是凌晨 2:14。你仍在追寻火焰的边缘。架构从未被设计;它只是被输出。机器出了重拳,PR 获批,冲刺速度图向上向右指。领导得到了快感,工程师陷入了黑暗。
几小时后有站会。你不知道该说什么,因为你仍不清楚自己面对的是什么。汤遍布四处。某处内部,有东西在燃烧。某处,六个月前,一个提示获胜。现在,在黑暗中,你正在失利。
Source: We Studied 150 Developers Using AI (Here’s What’s Really Happening) — Dave Farley
翻译: 我们研究了150名使用 AI 的开发者(真实情况是怎样的)——Dave Farley