把Claude Code当员工用!它不是个工具!
作为CTO的你,买了Claude Code Max给你的员工,鼓励他们使用AI写代码,你在业内已经很先进了。
但是,如果只把Claude Code(以下简称cc)当做一个比Cursor更厉害的IDE,有点对不起你两百美金一个月的订阅费。
我的建议是,把cc当做一个懂得所有编程语言,极为耐操,天资中等偏上,一天工作16小时,春节不休假,学习能力超强的985毕业生。换句话说,本来去华为的应届生跑到你公司来了,并且只需要 1500 人民币一个月的工资,并且一次来了一百个。
针对这一百个新员工,你的团队架构必须重构。你需要构建一个流程以这一百个985毕业生为中心,把他们当做主力,其他人都是助攻手。
接上篇文章,这一百个员工并不天然生产高质量的代码,实际上,他们的代码很烂(就像任何一个在校生一样)。有人因此吐槽 AI,说 AI coding是个骗局云云。
不客气的说,这是一种很幼稚的吐槽。这些人把 AI 当做阿拉丁神灯,希望对着神灯念一句咒语就实现自己的愿望。
而有过软件工程经验的人都知道,包括 Linus 在内的所有开发者,第一版的代码也很烂。
从很烂的代码,到生产可用的代码,只有一条途径: 快速的迭代!
所以问题转换为: 怎么让你 100 个 AI 员工学会快速迭代?
我的建议是: 测试驱动开发。下面以我今天的实操为例展示一下。
场景很普通,一个本来运行的系统,加上扩展功能后,运行结果就是不如预期。具体的说,系统生成的负载均衡本来只支持wildcard的tls cert比如*·magong.se,为了合规,让它支持api.magong.se。然后发现它两个都不支持了。
这是一个infra as code项目,主要代码是terraform,因此它没有本地运行环境,更不会有单元测试。而由于公司的权限管理,我甚至不能从本地触发terraform plan,只能推送代码到Github通过GHA事件触发一次集成测试。代码看不出问题,而terraform也不提供什么 debug 工具。
有过类似经验的开发者已经开始哀嚎了:”你这就是大坑。只能一点点的猜测,然后一次次的触发terraform plan/apply,根据结果分而治之。技术上不难,但是两天时间又没了。”
这个思路完全没错。我就是这么做的,不过没用两天,只用了两个小时,因为我让AI员工去干这个迭代了。
具体的说,我指示Claude Code 不能只编码,它应该:
1. 查看错误信息
2. 思考可能的错误原因
3. 修改代码
4. 运行terraform validate,
4. Git commit代码,并且 push 到 GitHub
5. 上个动作会触发一个集成测试,Claude code应该自行观察运行结果。如果失败,则跳到步骤1,否则跳到下一步
6.如果成功,则commit 所有的commit,并且提交一个干净的PR。
这些指示是不是很像一个资深程序员对一个应届生的指导?区别就是我把这些指示写在了Claude.md里,如下图所示:
当然,我则给了Claude Code 需要的命令行权限。它可以调用gh,terraform和aws cli。考虑到安全原因,我在aws iam里把角色的权限设置为只读,避免它一个失误炸掉我整个环境,就像我防备应届生一样。
就这么简单的配置,Claude Code就自行迭代起来了。
见图
它提交代码后,自己检查测试结果,发现测试还是失败。
然后它就主动进入下一轮迭代,继续猜测,编码,提交代码,触发测试。
它在不停的迭代,而我在刷手机。直到它突然说它找到了根因。大意就是我的terraform init的时候会assume一个aws role X,而在provider里则配置assume role Y。由于aws terraform provider的一个限制, external data source运行aws cli的时候,不会继承Y的权限而是继承X的权限,使得aws cli返回一个空结果。
这是一个terraform文档也没有明确说明的限制。整个互联网只有一个 issue 粗略的提到这个现象,有兴趣的朋友可以追踪 https://github.com/hashicorp/terraform-provider-aws/issues/8242
没兴趣追究这些细节的读者,你只要知道,这是一个挺麻烦的bug,基本上不太可能通过人或者AI阅读代码来debug,只能通过不停的迭代来缩短问题scope最终定位。
既然Claude Code自行定位到了,我简单的参与了一下讨论,定了一个方案,就让它去修改了。然后不出所料,测试通过了。!
实际上,迭代次数比我上面记录的更多。
这么多次迭代,我基本就是在打酱油,只在它发现Root cause的时候参与了一下方案的讨论。
可以说,Claude Code已经可以独立工作了。
下一步,我打算把Claude Code接入 Linear,让它从ticket开始工作。到时候,我再来分享经验。
和基于AI的软件工程系列文章一样,本文没有严谨的论证,更多的是基于我用 AI 开发软件过程中的探索经验和一些大胆的猜想。有不同意见的读者,请在留言区留言,或者扫描文末的二维码加微信群,大家一起讨论。