AI 时代的代码焦虑与破局之道

39 阅读6分钟

一、那个确定的年代

做过 Java 后端开发的人大概都有这样的记忆:定义好数据库表结构,配好 MyBatis Generator 或 JPA,一键生成 Entity、DAO、Service、Controller,增删改查代码整整齐齐地躺在项目里。这些代码是公式化的,是确定的——同样的输入,永远产出同样的输出,不会多一行,也不会少一行。

剩下的事情就是写业务逻辑。每一行代码都经过自己的手,每一个 if-else 都在脑子里跑过,改了又改,Review 了又 Review。你对整个系统有一种掌控感——哪个接口做了什么,哪个字段可能为空,哪个边界需要兜底,心里一清二楚。

这种掌控感,就是程序员的安全感。

二、快,但不安

然后 AI 来了。

你描述一段需求,几分钟之后,几百行代码就生成了。功能能跑,逻辑大致正确,甚至还帮你写好了注释。效率提升是肉眼可见的——过去半天的工作量,现在一杯咖啡的时间就完成了。

但伴随这种速度而来的,是一种挥之不去的不安感

这种不安来自三个地方:

第一,你不再是代码的"经历者"。 以前写代码是一个思考的过程:先想数据怎么流转,再想异常怎么处理,最后落笔成代码。每一行代码都是思考的产物。现在你是"需求描述者",代码是别人(AI)写的,你和代码之间隔了一层。你读它,但你没有"经历"它。

第二,你不清楚 AI 的决策依据。 为什么用这个数据结构?为什么这样组织代码?当初自己写的时候,每个选择都有理由。AI 的代码虽然能工作,但背后的"为什么"是模糊的。

第三,也是最实际的问题——边界处理的缺失。 AI 擅长生成"主干逻辑",也就是 Happy Path。但真实的生产环境,90% 的 Bug 藏在那些边界里:空值怎么办?并发怎么办?超时怎么办?数据不一致怎么办?这些 AI 往往不会在第一次生成时就考虑周全,因为你的需求描述里也很少会提到这些。

这就形成了一个悖论:AI 让你写代码更快了,但也让你对代码更不放心了。

三、本质:掌控感的迁移

仔细想想,这种焦虑的本质并不是"AI 写的代码不好",而是掌控感从"写代码"转移到了"审代码"

过去,掌控感来自于:我写的,我清楚。 现在,掌控感需要来自于:我审的,我理解,我确认。

这是一次角色转换。你从"代码的作者"变成了"代码的架构师 + 审查者"。这个角色其实对能力的要求不是降低了,而是提高了——你需要能快速阅读代码、判断质量、发现隐患,而不仅仅是能写出来。

接受这个转变,是用好 AI 写代码的第一步。

四、如何更好地利用 AI 写出可靠的代码

以下是我在实践中总结的几条方法,帮助在效率和掌控感之间找到平衡。

1. 先设计,再让 AI 动手

不要一上来就把整个需求甩给 AI。先自己做好设计:

  • 数据模型是什么?
  • 核心流程是什么?
  • 模块怎么拆分?
  • 接口契约是什么?

把设计结果作为约束条件喂给 AI。AI 在明确约束下生成的代码,质量远高于"你帮我实现一个 XXX 功能"。

你负责"做什么"和"怎么做的骨架",AI 负责"具体实现"。

2. 小步生成,逐段审查

不要让 AI 一次性生成整个模块。把任务拆细:

  • 先生成数据层
  • 再生成业务逻辑
  • 最后生成接口层

每生成一段,就读一遍、跑一遍。发现问题立即修正,不要累积。这样你对每一层代码都有清晰的认知,和自己写的区别就只是"手速更快了"。

3. 主动要求边界处理

AI 不主动考虑边界,那你就主动提。在需求描述中显式列出:

  • 参数为空时如何处理?
  • 数据不存在时返回什么?
  • 并发场景下是否需要加锁?
  • 接口超时的兜底策略是什么?
  • 数据量大时是否需要分页?

把边界条件当作需求的一部分告诉 AI,而不是期待它自己想到。你对业务的理解,才是代码质量的真正护城河。

4. 让 AI 先写测试

一个被低估的用法:让 AI 先根据需求生成测试用例,再去实现代码。

测试用例本身就是对需求的精确描述——输入是什么、输出是什么、异常情况怎么处理。有了测试,你就有了一张"安全网"。后续不管是 AI 重新生成代码还是你手动修改,跑一遍测试就知道有没有问题。

5. 建立自己的 Prompt 模板

好的 Prompt 是可以复用的。针对常见场景,沉淀出自己的模板:

## 需求
[功能描述]

## 技术约束
- 使用的框架/语言版本
- 需要遵循的项目规范
- 依赖的已有模块和接口

## 边界与异常
- [列出需要处理的边界情况]

## 期望输出
- 代码结构要求
- 命名规范
- 是否需要注释

好的模板能让 AI 的输出更稳定、更可预期,减少来回修改的次数。

6. 把 AI 当作"初级开发"来做 Code Review

生成的代码一定要 Review,而且要带着"这是别人写的代码"的心态去审查。重点关注:

  • 有没有遗漏的异常处理?
  • SQL 有没有注入风险?
  • 敏感数据有没有脱敏?
  • 有没有硬编码的魔法值?
  • 资源(连接、流)有没有正确关闭?

AI 是你的"高效初级开发",但它不是高级工程师。审查的责任在你身上。

7. 保持"手感"

不要完全放弃手写代码。核心业务逻辑、关键算法、安全相关的代码,建议亲手写或者至少亲手改。保持对代码的"手感",才能在 Review 时更敏锐地发现问题。

一个完全不写代码的人,很难审好代码。

五、写在最后

AI 不会取代程序员,但会取代不会用 AI 的程序员——这句话说了太多遍,但它隐含了一个容易被忽略的前提:会用 AI,不是指会打字描述需求,而是指能驾驭 AI 产出的代码。

驾驭的前提是理解,理解的前提是能力。

所以在 AI 时代,程序员的核心能力反而回归到了最本质的东西:对业务的深入理解、对系统设计的全局把控、对代码质量的敏锐判断。 这些从来都不是靠工具能替代的。

那种不安感,其实是一个好的信号——它说明你在意代码的质量,在意系统的可靠性,在意自己作为工程师的专业性。

不要消灭这种不安,而是把它转化为更好的工程实践。

用 AI 的速度,配上你的判断力。这才是 AI 时代程序员最好的工作方式。