手写代码的时代,彻底结束了

HN Claude Code Adoption 2026-10-04T11:45:19.979962

我手写了 18 年代码,每天如此。然后几乎是一夜之间,我停下了。

去年,AI 一点点渗进了我的日常工作。把代码粘到网页对话框里,听听第二种意见;用大白话描述一个查询;想要正则表达式就直接问,不必再死记语法。都是些顺手好用的小技巧。

后来,Claude Code 里的 Opus 4.5 对我来说跨过了一道坎:把想要的东西讲清楚,比自己动手写还快。就这样,一个坚持了近 20 年的日常习惯没了。几个月过去,我越来越不想亲手碰代码。回不去了。

我理解这种不安。你在某件事上苦练多年,如今眼睁睁看着机器替你干,心里确实不好受。但我反复体会到的情绪是解脱。以前很多被我搁置的改进,现在都能从一句提示词开始。能把自己想象出的东西真正做出来,这种感觉让人心潮澎湃。

1986 年报纸剪报,标题为“数学老师抗议使用计算器”。一位老师举着写着“高年级以前禁用”的牌子。

老师们抗议小学低年级过早使用计算器。《The Daily Item》,1986 年 4 月 5 日,美联社照片,来自 Reddit。

交付更多,安全底线不变

在 Filestage,我们每月合并的 PR 从大约 200 个涨到 300 个,而 bug 报告并没有变多。也就是说,产出多了约 50%,代价只是每位开发者每月 20 美元的 AI 订阅费。工具由每个人自己挑:有人用 Codex,有人用 Claude Code,有人用 Cursor。PR 数量只是故事的一部分——我们还在用更短的时间、更高的把握,推进产品层面更大的改动。

2024 至 2026 年每月合并 PR 数,平滑趋势线从早期约 150–200 上升到末期约 300。

团队每月合并的 PR 数。

同期每月新增 bug 数在 PR 合并量上升的过程中上下波动,并未持续增长。

同期收到的 bug 报告。

智能体(Agent)还在不断变强,我们在 CI 防护栏上的投入也开始回本:代码检查(lint)、类型检查、重复代码检测、100% 测试覆盖率,以及端到端测试。每次智能体改动代码,这些反馈都会立刻到位。

看到这一切,我就想:我们还能不能更快? 现在模型的水平已经高到我认为「不用 AI 做代码审查就合并」是一种失职。那么,只要通过了我们的各项检查、又拿到 AI 审查的通过结论,最终是不是就足以合并一个 PR 了?这个问题我还没有定论,但听起来已经不再离谱。

吞吐量的提升,也把我们 CI 里的瓶颈暴露了出来。端到端测试实例需要接收第三方发来的 webhook,结果我们撞上了 Cloudflare 免费隧道的额度上限,工程师们的 CI 开始频繁失败。我们还不得不给共享开发数据库加资源,以承接这些连接。

借助我们的基础设施即代码(Infrastructure as Code)配置和开源的 FRP 隧道,我很快用「氛围编程」撸了个方案出来。那些制造额外负载的工具,反倒帮着把瓶颈清掉了。同事用 AI 生成了一张梗图,把我逗笑了:

一张工程师梗图,把我的脸贴在灭霸身上,配文:行吧,我自己来。

当隧道额度打爆 CI,你只能自己动手。

抽象层依然重要

DHH 在 Rails World 的主题演讲里说「手写代码的时代结束了」,这一点我很认同。但他预测智能体会从 Rust、C++ 一路下沉到汇编,最终直抵微码,这在我看来就过头了。

DHH 认为 Rust 和 C++ 只是临时的 prompt 编译目标,并预测智能体最终会直接生成汇编和微码。

DHH 谈编程智能体究竟能下沉到栈的哪一层。

让智能体用一种我自己不会选的编程语言写出更快的实现,这种吸引力我懂。但高层抽象对智能体同样有用。就当下大语言模型(LLM)生成代码的方式来看,我认为保留抽象层有几个理由:

我们已经有 Clang 这样的工具,可以把源代码变成原生机器代码。为什么还要花概率推理去重现一个确定性编译器已经高效完成的常规翻译?针对性的汇编优化或许值得做,但我不会把它当作整个系统的默认表示形式。

我的判断依然是:LLM → 高层表示 → 确定性编译器 → 机器代码。表示形式可能会变。随着 agent 接手更大的系统,我认为有用的抽象会变得更有价值。

文本文件之后是什么?

我一直对软件的构建方式感到不满。Bret Victor 的《编程的未来》精彩地捕捉到了这种感觉:看看几十年前探索过的可能性,再看看我们最终满足于什么。

经年累月地匹配括号和引号。争论用制表符还是空格。搜索数百个文件来还原某个东西是怎么工作的。格式化和检查工具确实帮了忙,但我仍然得在盯着零散片段的同时,把整个系统装进脑子里。

如果 agent 能处理代码,我们能不能终于直接操作想要的逻辑、接口和数据模型?UML 和实体关系图能不能成为与一个活的系统交互的日常界面,在我们修改它时保持同步?

我希望看到某个使用场景,需要时还能一路深入它的逻辑,直到代码层。看到数据在其中如何流动。再把生产环境的真实情况带进这个视图:用户实际走的是哪些路径、请求卡在什么地方、哪些分支从来没有被执行过。

我不知道这样的环境最终会是什么样子。但这么多年里,我第一次觉得它触手可及。

查看原文