跳到正文
行开心的颠倒世界 logo

行开心的颠倒世界

与 AI 共事一年,我从"甩手掌柜"变成了"掌舵人"

与 AI 共事一年,我从"甩手掌柜"变成了"掌舵人"

2026年3月24日
Coding Agent AI编程 工程实践 开发效率

与 AI 共事一年,我从”甩手掌柜”变成了”掌舵人”

illustration-01

去年12月的一个晚上,和几个朋友在视频会议里聊起 AI 编程。小陈兴奋地说他用 Claude Code 三天就写完了一个微服务,语气里带着”以后再也不用自己写代码了”的得意。小李却在另一边苦笑:“我还是只敢让它补全几行,真让它写个完整函数,review 的时间比自己写还长。”

那次聊天让我琢磨了好久。我们明明用着同样的工具,怎么出来的效果差别这么大?后来想明白了:问题不在工具,在用工具的人。

这篇文章不是什么”十步速成”的教程,就是我这快一年来和 Coding Agent 磕磕碰碰、互相试探着建立起来的一些想法。有些做法现在回头看觉得挺笨的,有些却是意外的好用。


交朋友,不是请保姆

刚开始用 Agent 那阵子,我犯过一个很蠢的错误:把它当外包团队使唤。

去年9月接了一个紧急需求,要在三天内给用户系统加个权限管理模块。我心想这不正好试试 AI 的能耐吗?于是写了份详细的需求文档扔给 Claude Code,等它”交作业”。

两天后它真的交了——1200 行代码,结构清晰,注释完整。我大喜过望,随便扫了几眼就提交了 PR。结果上线当晚就出了事:有个边缘情况没处理好,权限判断逻辑在特定条件下会返回错误结果。凌晨两点被报警叫醒时,我看着那堆自己都不完全理解的代码,突然意识到:哦,原来 AI 不会在凌晨三点接 oncall 电话。

那是我第一次明白,责任这东西是没法外包的。不管代码是谁写的,最后兜底的都是你。

后来慢慢想通了:与其说是外包,不如说 Agent 更像是刚入职的实习生。它有很强的执行能力,但对业务上下文、历史包袱、那些”约定俗成”的潜规则一无所知。你得带着它,而不是扔给它。

这个认知转变之后,整个协作方式都变了。不再是”帮我写完这段代码”,而是”我们一起把这个问题解决好”。听起来只是措辞不同,但参与深度天差地别。


别当甩手掌柜

我见过太多人(包括我自己早期)把 Agent 用成了这样:打开编辑器,粘贴需求,等它输出,复制粘贴,提交。整个过程快则几分钟,慢则十几分钟,一气呵成。

但这不是协作,这是甩手掌柜。

真正的协作是什么样子的?让我说几个具体的场景。

上个月重构用户模块时,我花了一个下午先在白板上画出了大概的架构图,然后才去找 Agent。我说:“这是我想的架构,但这里有个性能瓶颈我拿不准,你觉得怎么优化比较好?” Agent 给了三个方案,我们来回讨论了半小时,最后选了一个折中的。那个下午我学到的关于数据分片的知识,比看两天教程还多。

还有一次,Agent 实现了一个缓存模块,用了我不熟悉的装饰器模式。我没直接接受,而是问它:“为什么要用装饰器?简单的函数包装不行吗?” 它解释了半天,最后我发现自己其实在问一个更本质的问题:这种场景下该用结构型模式还是行为型模式?那次对话之后,我对设计模式的理解深了一层。

协作的另一个关键是知道什么时候叫停。Agent 有时候会钻牛角尖,在一个不太重要的细节上纠缠不休。这时候你得果断说:“停,这个方向不对,我们回到主线上来。” 这种干预能力,是委派时不会用到的。

说到习惯,我现在养成了一个”先聊再写”的流程。不急着要代码,而是像跟同事 pair programming 一样,先把问题边界、约束条件、可能的方案都聊透。这个前置的探索过程,看着浪费时间,实际上避免了很多后续的”生成—废弃—重来”循环。

另一个好习惯是善用”Plan 模式”。让 Agent 先输出执行计划,你在计划阶段就做充分的质疑和修正。这比在代码阶段反复返工高效得多——改计划比改代码便宜太多了。


别让代码变成黑盒子

去年有一次惨痛经历:Agent 帮我写了一个复杂的报表生成模块,800多行代码。我看着它流畅地运行测试用例,心想”稳了”。结果上线后第三天,客户报了个诡异的问题:特定时间段的报表数据会重复计算。

我盯着那 800 行代码,突然发现自己像个外人——我看得懂每一行在做什么,但看不懂它们组合起来为什么会出这个 bug。那种感觉,就像你借别人的车开,结果半路抛锚了,你连引擎盖都不敢打开。

后来我给自己定了个规矩:提交任何代码之前,先做”费曼测试”——假装向一个完全不懂技术的朋友解释这段代码在做什么。如果解释不清,就说明我自己也没真懂。

掌控感这东西,得靠一些具体的工程实践来维持。

先说 PR 管理。Agent 写代码又快又多,很容易一口气产出几千行改动。但大 PR 是 review 的噩梦——reviewer 面对海量代码容易浮于表面,只挑些格式问题。我现在尽量把单个 PR 控制在 600 行以内。实在拆不开时,我会附上一份简短的设计说明,不用代码级别的 spec,就是站在高处说清楚”这次改动做了什么、为什么这样做”。有趣的是,这个习惯逼着我在写代码之前就得想清楚设计,反而提升了代码质量。

还有个看似矛盾但很好用的做法:用 AI 写代码,再用 AI 来 review。这两个阶段的 prompt 目标完全不同。写代码时,Agent 在”生成”;review 时,我让它扮演”挑剔的 reviewer”,专门找逻辑漏洞、边界情况、安全隐患、过度复杂的设计。这种前置自查能过滤掉很多低级问题。不过说实话,这个方法也有局限性——AI 很难发现那些需要业务上下文才能识别的问题。

测试覆盖是另一个底线。AI 生成的代码如果没有测试,就是在裸奔。代码 review 发现不了运行时才会触发的 bug。我现在会明确要求 Agent 在实现功能的同时生成测试用例,形成”验证→修复→验证”的闭环。上周有个函数,Agent 写了三个测试用例都通过了,但我在手动补充测试时发现了一个边界情况,它漏了。这提醒我:AI 的测试也不能全信。

另外,我发现 Agent 有个习惯:喜欢自己造轮子。去年它给一个简单的日期格式化功能写了个 80 行的实现,我看了直摇头——这明明用 dayjs 两行代码就能搞定。后来我学乖了:遇到常见问题,先问自己”有没有现成的库?” 这个判断 Agent 做不了,得你来。

几个让我少走弯路的小习惯

聊完了大的思路,说几个具体的操作习惯。这些习惯都是踩过坑之后才养成的。

第一个习惯是”分步骤验证”。别把复杂任务一股脑塞给 Agent。我吃过亏:有一次让 Agent 一口气实现一个完整的用户注册流程,结果它在密码加密环节用了一个不安全的算法,我到很晚才发现。现在我会把任务拆成小步骤,每步验证通过再继续。比如上周重构用户模块,我拆成了数据库迁移、API 接口更新、前端适配三步,每步单独验证。这样做虽然慢一点,但心里踏实。

第二个习惯是”保持怀疑”。Agent 给的答案往往是”最有可能成立”的,但不一定”最适合你”。我现在会主动问它:“这个方案有什么潜在缺点?有没有更简单的替代方案?如果将来要扩展功能,会不会有问题?” 这种反问常常能暴露出意想不到的权衡。有次 Agent 建议用 Redux 管理局部状态,我问它 Context 会不会更轻量,最终我们选了一个简单得多的方案。

第三个习惯有点反直觉:别被 Agent 带跑偏。它的输出太流畅、太有说服力了,有时候你会不知不觉顺着它的思路走,忘了自己最初的判断。我现在养成了一个前置思考的习惯:开始任何任务前,先花十五分钟自己想清楚大致方向,再去问 Agent。有了自己的预期后,对 Agent 方案的鉴别力会明显提升。

最后一个习惯是”好奇心驱动”。遇到 Agent 用了你不熟悉的库、模式或写法,别直接跳过。打破砂锅问到底:这个模式叫什么名字?什么场景下适合用它?有什么副作用?每一次这样的追问,都是一次真实的学习。我去年通过这种方式学会了至少五个设计模式,比刷教程印象深刻得多。


当 AI 能写代码了,我们还能做什么?

最近我常想一个问题:当 Agent 能承担越来越多的”写代码”工作,我们这些工程师的价值还剩下什么?

想了很久,我觉得答案可能是三个词:设计、判断、和掌舵

Agent 很擅长在明确的框架下做具体的实现。给它一个函数签名和需求描述,它能写出漂亮的代码。但它不擅长回答这些问题:“这个系统该用什么架构?""这两个方案哪个更符合我们项目的长期利益?""这个设计会不会在用户量翻十倍时崩溃?”

这些问题需要的是对领域的深度理解、对项目历史的熟悉、对那些”非功能性需求”的敏感——安全、可维护性、并发安全、扩展性。这些东西,Agent 在默认状态下很容易忽视。

有趣的是,AI 时代反而让一些”老派”做法变得更重要了。比如读官方文档。Agent 的知识有截止日期,存在幻觉问题。去年我想深入学 GraphQL,让 Agent 给我讲,它讲得头头是道,但我总觉得心里没底。后来还是硬着头皮把官方文档啃了一遍,才发现 Agent 漏掉了好几个关键细节。那种”慢下来读文档”的踏实感,是 AI 给不了的。

设计模式、架构知识这些也需要主动补充。不是说要成为架构师,而是当你脑子里有了这些概念,和 Agent 协作时会顺畅很多。你能更清楚地描述你想要的结构,也更能判断 Agent 的设计是否合理。上个月设计一个消息队列模块,我脑子里有”发布-订阅模式”的概念,和 Agent 讨论时效率高了很多。

还有一点我最近才想明白:做正确的事,比做快更重要。Agent 能在错误的道路上极速狂奔,你让它优化一个不该存在的功能,它能给你优化得极其漂亮。但方向错了,速度越快,离目标越远。在 AI 时代,“我们要解决的真正问题是什么”这个问题,价值被放大了十倍。

不过说实话,这个问题我还没完全想清楚。有时候看到 Agent 流畅地写出我可能需要半天才能实现的代码,我也会焦虑:我的技能会不会过时?但转念一想,工具进步了,我们的角色也在进化。就像汽车取代了马车,马车夫消失了,但司机、机械师、设计师这些新角色出现了。


写到这里,突然想起去年刚开始用 Agent 时,我总想找到一个”完美的工作流”。现在明白了,没有什么完美的工作流,只有不断调整的协作方式。

和 Coding Agent 一起工作,有点像学骑自行车——刚开始歪歪扭扭,怕摔倒,后来慢慢找到平衡,再后来就能单手骑了。但不管骑得多熟练,你都得保持专注,因为随时可能遇到坑洼。

我最想说的是:别退缩成一个”需求传话人”。你在代码这件事上的参与深度,决定了你能从这套工作流里拿走多少。Agent 是拓展你能力边界的工具,而不是替代你判断力的系统。

这些只是我个人的一些摸索,肯定不全面,也可能不适合你的场景。如果你有不同的实践或看法,或者发现了更好的协作方式,我很想听听。说到底,我们都在摸索怎么用好这把新工具,互相交流或许能走得更快些。

illustration-02

版权声明

作者
XingKaiXin
标题
与 AI 共事一年,我从"甩手掌柜"变成了"掌舵人"
发布时间
2026年3月24日

本作品采用 CC BY-NC-ND 4.0 DEED 许可。

XingKaiXin