还有人记得怎么写代码吗?

今天在 X 上有个热门的帖子:
does anyone remember how to code
还有人记得怎么写代码吗?
这个帖子来自于Nikita Bier,获得了上万次点赞,也引发了大量开发者讨论。

我觉得这句话有意思的地方在于,它用一句玩笑指出了 AI Coding 发展过程中一个真实的矛盾:
我们正在获得前所未有的软件生产能力,同时也可能逐渐失去对软件生产过程的直接掌控。
1. AI Coding 正在改变程序员的能力结构
过去,一个程序员的能力很大程度上体现在能否将需求转换成代码。
现在,随着 Coding Agent 的能力提升,越来越多工作可以交给 AI 完成,包括设计数据结构、实现接口、编写测试、排查错误,甚至完成跨模块的重构。
这意味着程序员日常练习的能力正在发生迁移。
以前你可能每天都要手写大量 Java 代码。现在你可能花更多时间描述需求、检查方案、审查 Diff、执行测试。
这里有一个值得警惕的现象:一项技能即使没有完全消失,也会因为使用频率下降而退化。
例如,一个长期依赖 AI 生成 SQL 的开发者,可能仍然理解 SQL 的基本原理,却逐渐失去快速手写复杂查询的熟练度。
但我认为这种技能退化本身还不足以说明 AI Coding 是坏事。我们早就不再要求大多数开发者手写汇编,软件工程也没有因此倒退。
真正需要讨论的是:哪些能力可以交给工具,哪些能力必须由人保留?
2. 我更担心的是理解能力的退化
我认为这里存在三个不同层次的能力。
| 能力 | AI 时代的变化 |
|---|---|
| 代码编写能力 | 正在被大量自动化 |
| 代码理解能力 | 仍然重要,但可能受到依赖 AI 的影响 |
| 系统判断能力 | 重要性进一步上升 |
举个例子。
假设你让 Coding Agent 在 Spring Boot 项目里实现一个高并发消息消费模块。
它能够很快生成 Pulsar Consumer、线程池、异常处理以及重试逻辑。
但你仍然需要判断:
- Shared 订阅模式下并发是否合理?
- 消息确认与数据库事务如何协调?
- 重试是否可能造成重复处理?
- 下游数据库出现延迟时会发生什么?
- 发生消费堆积时,系统能否恢复?
AI 可以回答这些问题,甚至给出一套看上去很完整的设计。
但假如开发者已经无法独立判断这些答案是否可靠,那么系统质量就越来越依赖模型的正确率。
这才是我认为最危险的地方。
3. 但我也不赞同把手写代码神圣化
这条帖子引起共鸣,很大程度上源于程序员对职业身份变化的不适应。
过去,能够熟练编写复杂代码是一种值得骄傲的专业技能。
现在,一个缺乏多年编程经验的人,也可能通过 AI 快速完成过去需要资深工程师实现的功能。
这种变化很容易让人产生一种感觉:多年积累的技能正在贬值。
但从软件工程的历史来看,抽象层不断提升本来就是常态。
从汇编到高级语言,从手工管理内存到垃圾回收,从直接操作服务器到云平台,每一次进步都减少了开发者需要亲自完成的工作。
因此,我不认为程序员必须坚持手写代码才能保持竞争力。
我甚至认为,如果 AI 能够可靠地完成某项编码工作,坚持人工完成它,未必还有经济意义。
问题在于,当前 AI 的可靠程度还远没有达到可以无条件信任的水平。
4. 最值得关注的是未来程序员如何成长
这是我对整个话题最担心的一点。
资深工程师之所以能够判断一个技术方案是否合理,往往来自过去大量亲自实现、调试、踩坑的经验。
如果未来的初级程序员从入行第一天开始,就主要通过 Agent 完成任务,他们将如何积累这些经验?
这可能产生一个长期问题:
当一代程序员不再需要亲自经历复杂系统的构建过程,我们如何培养下一代能够理解复杂系统的人?
当然,AI 也可能成为极好的教学工具,帮助新人理解原本需要多年才能接触的知识。关键取决于工作方式。
如果新人只是不断接受 AI 生成的结果,学习效果可能很差。
如果他们持续验证结果、研究失败原因、理解设计取舍,AI 反而可能加速经验积累。
5. 我认为未来会出现两种差距
第一种是人与人之间的差距。
擅长使用 Agent,同时具备扎实工程判断能力的开发者,可能获得远超以往的生产力。
第二种更值得警惕,是开发者所能生产的软件复杂度,与其能够理解的软件复杂度之间的差距。
AI 可以让一个人维护过去需要十个人开发的系统。但如果这个人只能理解其中很小一部分,那么随着系统复杂度不断提高,风险也会累积。
这可能成为 AI 原生软件工程的重要挑战。
我的结论
我并不担心未来程序员忘记某些 API 的写法、语言语法,甚至无法在没有 AI 的情况下快速完成一个 CRUD 模块。
我更关心的是,当一个 Agent 提交数千行代码时,开发者是否仍然知道它为什么这么写、哪里可能出错,以及出现问题之后应该如何定位。
未来优秀程序员的核心竞争力,可能越来越体现在能够理解、验证和控制 AI 所生产的复杂系统。
不过我也有一个尚未确定的判断:随着 Coding Agent 进一步发展,今天我们强调的代码审查和人工判断,可能也会在很大程度上自动化。届时,程序员究竟需要理解多少实现细节,仍然是一个开放问题。
所以,我觉得 Nikita Bier 的那句话可以进一步改写成:
Does anyone still understand the code?
还有人真正理解这些代码吗?
这可能比“还有人记得怎么写代码吗”更值得讨论。