AI 帮你交差之后:实习生的真正战场在「交差之外的 30 分钟」
利益声明:本文作者参与了 wescode 的开发。文中涉及 wescode 的技术描述基于内部测试数据;涉及其他工具的描述基于各家公开文档和社区反馈。
一位实习生的原话:
"公司交付模式:任务多以整块 CRUD、完整业务模块作为开发单元;考核只看最终输出,只要符合业务需求即可,不关心我内部实现过程。开发体验浮光掠影,只是拿到结果,缺少深度思考的过程。"
这段话精准描述了 2026 年很多初级工程师的困境。
AI 帮你 2 小时搞定了以前 2 天的活。你交了差。KPI 达标。但你回头看——你什么都没学到。
这不是你的问题。这是整个行业在 AI 冲击下还没想清楚的事。
你慌的不是 AI 太强,而是你发现自己在做 AI 最擅长的事
重新读一遍上面的交付模式:
- 任务以"整块 CRUD"为单元
- 考核只看最终输出
- 不关心实现过程
翻译成大白话:公司需要你把需求翻译成代码。
这恰好是 AI 最擅长的事——它本质上就是一个"需求 → 代码"的翻译器。
以前你用脑子翻译,现在你用 Cursor / Trae 翻译。效率高了 5 倍。但你的角色没变——还是翻译员。
你的慌,不是 AI 太强了,而是你意识到自己的工作被精确地放在了"AI 替代区"里:

一个有经验的工程师每天的时间分布:
| 工作 | 占比 | AI 能替代多少 |
|---|---|---|
| 理解需求、和 PM/设计对齐 | 30% | 几乎不能 |
| 找到该改哪里、看影响面 | 20% | 需要项目级理解 |
| 审查代码质量(自己的+别人的) | 20% | 部分能帮 |
| 写代码 | 15% | AI 几乎能完全替代 |
| 联调、排查、处理线上问题 | 15% | 部分能帮 |
实习岗位分配给你的全是"写代码"那 15%。AI 帮你做完了,你觉得自己什么都没学到——因为 AI 替代的恰好是你被分配到的那一块。
问题不是 AI,是实习岗位只让你接触了冰山尖尖。
30 分钟规则:每个任务交差之后多花 30 分钟
这是本文的核心方法。
AI 帮你 2 小时搞定一个 CRUD 模块。不要把省下来的时间全部还给公司。拿 30 分钟做 AI 不会帮你做的事——这 30 分钟是你整段实习里真正在学东西的时间。
第一个 5 分钟:读 AI 生成的代码
不是扫一眼"能跑就行"——是逐函数读,问自己三个问题:
Q1:这段代码为什么这么写?
// AI 生成的用户列表查询
async getUsers(page: number, size: number) {
const [users, total] = await this.userRepo.findAndCount({
skip: (page - 1) * size,
take: size,
order: { createdAt: 'DESC' },
where: { deletedAt: IsNull() },
})
return { users, total, page, size }
}
问自己:
- 为什么用
findAndCount而不是分两次查?(一次查询拿数据+总数,减少数据库往返) skip和take是什么分页模式?项目用的是 offset 分页还是 cursor 分页?大表会不会有性能问题?deletedAt: IsNull()说明项目用的是软删除。这个约定写在哪了?
Q2:和项目其他模块的写法一致吗?
打开项目里另一个类似的模块(比如 OrderService),对比一下。你可能发现:
- 项目里其他地方的错误处理用的是自定义
BizException,AI 用了原生throw new Error() - 项目里的返回格式是
{ code: 0, data: {...}, msg: 'ok' },AI 直接返回了原始对象 - 项目里的分页参数叫
pageNum/pageSize,AI 用了page/size
这些不一致才是你学东西的地方。 每一个不一致的背后,都有一个项目约定需要你去发现。AI 写的代码能跑,但和你们项目的写法完全不像——这才是值得花时间去理解的差距。
Q3:这段代码少了什么?
AI 生成的代码通常只包含"正常路径"。问自己:
- 入参没传怎么办?有没有参数校验?
- 数据库挂了怎么办?有没有降级策略?
- 并发操作怎么办?有没有加锁或幂等处理?
你在做的事:训练工程判断力。从"能跑"到"可靠"之间的差距,就藏在这些问题里。
第二个 10 分钟:找影响面
你写了一个 UserService。问自己:
这个 Service 被谁调用了?
UserController.getUsers() → 调用你的 UserService.getUsers()
OrderService.createOrder() → 调用你的 UserService.findById()
AuthMiddleware.validateToken() → 调用你的 UserService.findById()
CronJob.dailyReport() → 调用你的 UserService.countActive()
如果你改了 findById 的返回格式,上面有 3 个调用方需要跟着改。你知道吗?
大部分实习生不知道。因为任务只交代了"写 UserService",没人让你看谁在调用你。
但三年经验的老工程师改任何一个函数之前,脑子里都有这张调用关系图。这张图不是靠写代码攒出来的——是靠主动去看攒出来的。
wescode 的 CKG(代码知识图谱)能自动生成这张图——改一个函数,CKG 告诉你三层调用链上还有哪 8 个地方要跟着改。但即使你不用 wescode,手动搜一遍
Find References也能做到类似的事。关键是你得知道要做这件事。不看调用方就动手改,"改一处漏三处"几乎是必然的。
第三个 15 分钟:写技术笔记
这是 30 分钟里价值最高的部分。
不是代码。是一段回答"为什么"的文字。
## 用户管理模块实现笔记 2026-12-04
### 设计决策
1. 分页用 offset 模式,不用 cursor 模式。
原因:后台管理页面,数据量不大,offset 够用。
如果用户量上万,应该改 cursor 分页。
2. 软删除用 deletedAt 字段标记。
项目约定,没有写在文档里。
我是看 OrderEntity 才发现的。
### AI 生成后我改了什么
1. 把 throw new Error 改成 throw new BizException。
原因:项目统一错误处理中间件只认 BizException。
2. 返回格式从原始对象改成 { code, data, msg }。
原因:前端统一从 data 里取值。
3. 分页参数从 page/size 改成 pageNum/pageSize。
原因:和其他接口保持一致。
### 我不确定的地方
1. findById 查不到用户时应该返回 null 还是抛异常?
项目里两种写法都有。需要问 mentor。
2. 批量删除应该用事务吗?
AI 没有加事务。但如果删到一半失败了,数据会不一致。
这段笔记为什么值钱?
- 它是你的面试素材——"讲一个你在实习中遇到的技术取舍",这段笔记就是现成的答案
- 它是你的隐性知识显性化——"软删除用 deletedAt"这种约定,不写下来三个月后你自己都忘了
- 它是你区别于 AI 的证据——AI 能生成代码,但它写不出"为什么改了、为什么不确定"
你积累的到底是什么
半年实习,每个任务 30 分钟额外投入。你会积累出什么?

| 时间 | 积累 |
|---|---|
| 第 1 个月 | 20+ 条"项目约定"笔记。你开始知道哪些规矩没写在文档里 |
| 第 2 个月 | 开始能看出 AI 生成的代码哪里不对。你改的不再是"按 mentor 说的改",而是"我知道应该这么改" |
| 第 3 个月 | 你的影响面意识建立了。改一个函数之前,你会先想"谁在调用它"——mentor 注意到了,开始把更复杂的任务交给你 |
| 第 4-6 个月 | 你的技术笔记本积累了 50+ 条设计决策。面试时别人背八股文,你讲真实项目的取舍——面试官一听就知道你做过真项目 |
你不是不用 AI 了——你是从"AI 替代你写代码"进化到了"你指导 AI 写正确的代码"。
什么能力是 AI 替代不了的
你的慌其实在问一个更深的问题:AI 降低了门槛,那普通程序员的"护城河"到底是什么?
| AI 能做 | AI 做不了 |
|---|---|
| 写一个 CRUD 模块 | 判断这个模块应该放在用户服务还是订单服务里 |
| 实现一个排序函数 | 判断这个排序在大数据量下是否合理 |
| 生成单元测试 | 判断该测哪些边界条件(空值?并发?超大输入?) |
| 修一个 bug | 预判修复这个 bug 会不会引出另一个 bug |
| 按 API 文档生成调用代码 | 在三个 API 方案之间做技术选型 |
| 写 SQL 查询 | 判断这个查询在 100 万条数据下还能不能用 |
右边那一列有一个共同特征:需要判断力。
判断力 = 理解 + 经验 + 对项目的全局认识。
它不是从写 CRUD 中积累的——是从"理解为什么这么写、改了会怎样"中积累的。
关于工具选择
你说公司用 Trae、Cursor。这两个工具帮你写代码,但不帮你理解项目结构。
作为参与 wescode 开发的人,客观说几个差异:
| 场景 | Trae / Cursor | wescode |
|---|---|---|
| 写代码 | ✅ 足够 | ✅ 足够 |
| "这个函数被谁调用了" | ❌ 需要手动搜 | ✅ CKG 调用图自动显示 |
| "这段代码违反了项目哪条规矩" | ❌ 你自己发现 | ✅ CSE 自动检测 + 提醒 |
| "改完影响了哪些文件" | ❌ 你自己排查 | ✅ CKG 影响面分析 |
| 月费 | Cursor Pro ¥145/月 / Trae 免费 | BYOK 约 ¥8-15/月 |
但说实话——实习期间工具差异不是核心。核心是上面说的学习方式。
如果你只有 Trae(免费),完全可以实践 30 分钟规则——手动读代码、手动搜调用方、手动写笔记。工具只是让这个过程更快,但过程本身才是你学东西的地方。AI 编程工具已经到了第三代,但选工具之前,先把学习习惯建立起来。
你的慌,恰好是你最大的优势
大部分实习生用 AI 做完任务、交了差、心安理得走了——他们才是真正应该慌的人。
你意识到了"快速交付"和"真正学到"之间的鸿沟。这种自觉在初级工程师里非常稀缺。
不要少用 AI——那会拖团队进度。
在 AI 帮你省下的时间里,做 AI 不会帮你做的事。
30 分钟。每个任务 30 分钟。半年后你会发现:别人在问"AI 会不会取代我",而你已经变成了那个"指导 AI 写正确代码"的人。