目录

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

https://leafw-blog-pic.oss-cn-hangzhou.aliyuncs.com/remember-how-to-code-cover.png

今天在 X 上有个热门的帖子:

does anyone remember how to code

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

这个帖子来自于Nikita Bier,获得了上万次点赞,也引发了大量开发者讨论。

https://leafw-blog-pic.oss-cn-hangzhou.aliyuncs.com/screenshot_1793890642.png

我觉得这句话有意思的地方在于,它用一句玩笑指出了 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?

还有人真正理解这些代码吗?

这可能比“还有人记得怎么写代码吗”更值得讨论。

参考资料