我的 AI 编程工作流,是如何从「写代码」演化到「工程治理」的
过去一年多 AI 编程工作流的演变:从写代码、设计系统让 AI 执行,到工程设施验证,再到重新设计人与机器的职责边界。
过去一年多,我使用 AI 编程工具的方式发生了一个明显变化。
一开始,我最关注的是:
AI 能不能帮我把代码写得更快?
后来我逐渐发现,这其实不是最重要的问题。
当代码生成速度越来越快以后,新的瓶颈开始出现:
- AI 是否理解了我的真实需求?
- 架构方向有没有偏?
- 多个 Agent 同时工作时,谁负责协调?
- AI 修改完代码以后,谁证明它是正确的?
- 一个改动能够通过测试,并不意味着它在线上一定安全。
- 当代码生成成本接近于零以后,真正昂贵的东西开始变成“决策”和“验证”。
我的工作方式因此逐渐从:
亲自写代码
转向:
设计系统,让 AI 执行,再通过工程设施验证结果。
这篇文章记录一下这个过程。
第一阶段:AI 首先解决的是代码生成速度
2025 年,我开始高频使用 AI 编程工具。
这个阶段对我最直接的帮助就是:
写代码明显变快了。
以前开发一个功能,需要自己:
- 查框架文档。
- 找类似实现。
- 写 CRUD。
- 写参数校验。
- 调接口。
- 修一些机械性错误。
AI 能够把其中大量工作压缩掉。
特别是在技术方案比较确定的时候,例如:
- Go 后端接口开发;
- React 前端页面;
- 数据库 CRUD;
- 框架样板代码;
- 常规重构。
只要我能把要求描述清楚,AI 的实现速度通常远远高于自己手写。
这个阶段很容易产生一个错觉:
AI Coding 的核心问题,就是寻找更强的模型。
但随着使用越来越多,我发现并不是这样。
模型再强,也无法替代一个事实:
如果我自己不知道系统应该长什么样,AI 很容易把错误方向实现得非常完整。
于是第一个瓶颈出现了。
第二阶段:瓶颈从编码能力转移到了架构能力
当实现速度大幅提高以后,我越来越少卡在:
这段代码应该怎么写?
更多时候卡在:
这个系统到底应该怎么设计?
例如设计一个业务模块时,需要决定:
- 数据应该存在哪里;
- 哪个服务拥有数据所有权;
- 状态如何流转;
- 接口之间如何划分职责;
- 哪些操作必须保证幂等;
- 哪些失败需要补偿;
- 哪些数据必须可追溯;
- 历史系统如何兼容。
这些问题如果没有提前想清楚,AI 会非常高效地制造技术债。
这也是我逐渐形成的一种工作方式:
我负责建立 Problem Model,AI 负责 Implementation。
也就是说,我至少需要明确:
- 当前问题是什么;
- 核心数据是什么;
- 系统边界在哪里;
- 哪些约束不能违反;
- 什么结果才算完成。
在这些东西清楚以后,AI 的代码实现反而变成了成本比较低的一部分。
这时我开始意识到:
AI 并没有让架构能力变得不重要,反而放大了架构能力的杠杆。
以前一个错误设计,可能因为开发速度慢,只造成几百行错误代码。
现在一个错误设计,可以让 Agent 在半小时内生成几千行错误代码。
方向错误的代价反而更大。
第三阶段:从「让 AI 写代码」变成「让 AI 完成任务」
后来,我开始进一步减少自己亲自执行的工作。
一个任务不再只是:
帮我实现这个函数。
而开始变成:
阅读这个模块,理解当前实现,按照约束修改代码,补测试,运行测试,并汇报风险。
任务粒度越来越大。
我开始使用:
- Skills;
- MCP;
- 子 Agent;
- Relay;
- Workflow;
- Kanban;
- Agent 任务队列。
这个变化本质上不是“工具更多了”。
而是我开始把 AI 当成一个:
可以接受任务、执行任务、返回结果的计算单元。
于是问题再次发生变化。
以前的问题是:
AI 能不能写代码?
现在的问题是:
我如何同时管理三个甚至四个正在工作的 Agent?
如果每个 Agent 都需要我不断盯着:
- 有没有跑完;
- 有没有报错;
- 下一步是什么;
- 哪个任务优先;
- 哪些结果需要我决策;
那么虽然 AI 在执行,我的大脑实际上仍然被大量上下文切换占用。
这时候新的瓶颈变成了:
调度。
我开始倾向于建立一个简单的任务中心:
Backlog
↓
Ready
↓
Agent Working
↓
Need Human Decision
↓
Verification
↓
Done
Agent 自己领取任务,执行后更新状态。
只有遇到真正需要人工判断的决策点,才通知我。
这让我意识到,多 Agent 的价值并不是:
同时打开很多终端。
而是:
降低人类参与每个任务生命周期的频率。
否则 Agent 数量越多,人反而越忙。
第四阶段:代码生成越强,验证能力越重要
真正让我改变最大的,是生产级项目。
在个人 Demo 里,AI 写出来的代码:
能跑。
很多时候已经够了。
但生产系统不一样。
例如一个会员系统,看起来只是:
- 创建会员;
- 更新会员;
- 扣减额度;
- 处理续费。
实际上会涉及:
- 重复请求;
- 异步事件;
- 数据迁移;
- 历史兼容;
- 重试;
- 网络失败;
- 状态不一致;
- 定时同步;
- 第三方 Webhook;
- 多服务同时读写。
AI 可以非常快地实现 Happy Path。
但生产事故通常发生在:
Happy Path 之外。
于是我的注意力开始从“生成代码”转向“证明代码”。
我开始越来越重视:
- Hurl;
- Testcontainers;
- 集成测试;
- E2E;
- 日志;
- Metrics;
- Trace;
- Error Tracking;
- 数据库只读排查;
- 发布前检查;
- 数据一致性验证。
我逐渐形成了一个判断:
AI Coding 的核心竞争力,最终不会只是 Generation,而是 Verification。
如果 AI 一小时可以生成过去一天才能写完的代码,那么人类不应该再花一天继续生成代码。
真正应该投资的是:
如何在十分钟内知道这批代码到底能不能上线。
第五阶段:程序员正在从 Builder 变成 Controller
现在回头看,我过去一年使用 AI 的变化大概是:
Phase 1
我写代码,AI 辅助
↓
Phase 2
我设计,AI 实现
↓
Phase 3
我拆任务,Agent 执行
↓
Phase 4
系统自动调度 Agent
↓
Phase 5
我只处理关键决策和异常
这和传统软件工程里的自动化演进其实很相似。
程序员逐渐从:
操作机器的人
变成:
设计自动化系统的人。
未来我的目标不是让自己:
一天写更多代码。
而是让自己:
一天做更少但更重要的决策,同时让更多正确的工作自动完成。
这两者完全不同。
我现在采用的基本分工
目前我比较认可的人机边界是:
人负责
- Problem Definition;
- Architecture;
- Constraints;
- Priority;
- Trade-off;
- Acceptance Criteria;
- Production Risk。
AI 负责
- 搜索代码;
- 阅读上下文;
- 常规实现;
- 重构;
- 测试生成;
- 文档整理;
- 重复性排查;
- 机械操作。
工程系统负责
- CI;
- Tests;
- Observability;
- Static Analysis;
- Deployment Guard;
- Runtime Feedback。
这三层组合以后,AI 才真正成为工程生产力。
否则只是:
一个写代码特别快的助手。
最后的判断
过去我比较关注:
哪个 AI 模型代码能力更强?
现在我越来越不关心这个问题。
因为模型能力会不断变化。
真正能长期复利的是另外几个问题:
- 我能不能快速理解一个系统?
- 我能不能给 AI 建立清晰约束?
- 我能不能把任务拆成可以独立执行的单元?
- 我能不能建立自动验证系统?
- 我能不能只把真正重要的决策留给自己?
模型会变。
工具会变。
Agent 框架也会变。
但这些工程约束不会快速消失。
所以现在我更愿意把 AI Coding 理解成:
不是“用 AI 写代码”,而是重新设计软件工程里人与机器的职责边界。