瑞典马工

把Claude Code当员工用!它不是个工具!

作为CTO的你,买了Claude Code Max给你的员工,鼓励他们使用AI写代码,你在业内已经很先进了。

但是,如果只把Claude Code(以下简称cc)当做一个比Cursor更厉害的IDE,有点对不起你两百美金一个月的订阅费。

我的建议是,把cc当做一个懂得所有编程语言,极为耐操,天资中等偏上,一天工作16小时,春节不休假,学习能力超强的985毕业生。换句话说,本来去华为的应届生跑到你公司来了,并且只需要 1500 人民币一个月的工资,并且一次来了一百个。

针对这一百个新员工,你的团队架构必须重构。你需要构建一个流程以这一百个985毕业生为中心,把他们当做主力,其他人都是助攻手。

接上篇文章,这一百个员工并不天然生产高质量的代码,实际上,他们的代码很烂(就像任何一个在校生一样)。有人因此吐槽 AI,说 AI coding是个骗局云云。

Image

不客气的说,这是一种很幼稚的吐槽。这些人把 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里,如下图所示:

Image

当然,我则给了Claude Code 需要的命令行权限。它可以调用gh,terraform和aws cli。考虑到安全原因,我在aws iam里把角色的权限设置为只读,避免它一个失误炸掉我整个环境,就像我防备应届生一样。

就这么简单的配置,Claude Code就自行迭代起来了。

见图

Image

它提交代码后,自己检查测试结果,发现测试还是失败。

Image

然后它就主动进入下一轮迭代,继续猜测,编码,提交代码,触发测试。

Image

它在不停的迭代,而我在刷手机。直到它突然说它找到了根因。大意就是我的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自行定位到了,我简单的参与了一下讨论,定了一个方案,就让它去修改了。然后不出所料,测试通过了。!

Image

实际上,迭代次数比我上面记录的更多。

Image

这么多次迭代,我基本就是在打酱油,只在它发现Root cause的时候参与了一下方案的讨论。

可以说,Claude Code已经可以独立工作了。

下一步,我打算把Claude Code接入 Linear,让它从ticket开始工作。到时候,我再来分享经验。

和基于AI的软件工程系列文章一样,本文没有严谨的论证,更多的是基于我用 AI 开发软件过程中的探索经验和一些大胆的猜想。有不同意见的读者,请在留言区留言,或者扫描文末的二维码加微信群,大家一起讨论。

Image
Image