老张的深夜代码铺(Claude Code)

32 阅读7分钟

老张的深夜代码铺(Claude Code)

老张是我们组里写代码最稳的,十年了,键盘敲得像在弹琴。上个月他工位上多了个新伙伴——Claude Code。起初他是不信的,说这玩意儿能帮上什么忙。后来有一天改 bug 改到凌晨两点,实在扛不住了,试着跟它说了两句,没想到还真管用。

说人话,别整那些虚的

老张说,用这东西,得先学会说人话。

以前他写需求,恨不得把产品文档整个贴进去。后来发现不对。AI 跟人一样,你一下子甩一堆东西过来,它也懵。得一点一点说,像是给新来的实习生讲活儿。

# 不太好
请帮我实现一个用户登录功能,需要支持邮箱手机号,还要有验证码

# 这样更好
我想给网站加个登录页面,先从最简单的开始

说白了就是把大任务拆小了。老张说他现在跟 AI 说话,就像教徒弟——先干啥,再干啥,一步一步来。心急吃不了热豆腐。

写个便条,好记性不如烂笔头

老张有个习惯,好记性不如烂笔头。他用 Claude Code 也是这样。

项目根目录下有个 CLAUDE.md 文件,老张管它叫"便条"。项目的技术栈、目录结构、编码规范,都往里头写。不像正式文档那么严肃,就是给自己和 AI 看的备忘录。

# 这是一个便条

技术栈:Vue 3 + TypeScript
组件放 src/components 里
写注释,但别写废话

老张说这便条有个好处——AI 每次来帮忙,先看便条,就知道规矩了。省得每次都要重新交代一遍。就像以前老师傅带徒弟,先把规矩说在前头。

让它动手,别光说不练

老张发现,让 AI 干活儿,得让它动手。

一开始他老是问"这个怎么写",AI 给了一堆建议,他再自己敲。后来发现不对——AI 自己就能改代码。让它读文件、改文件、跑命令,这比光说要实在得多。

# 老张现在习惯这样说
帮我把 src/utils 目录下的重复代码整理一下

然后 AI 就会自己去看文件,自己动手改。老张在旁边看着,偶尔插句话。这感觉像是有了个小工,力气活儿它干,关键的地方自己把关。

但老张也说,不能啥都让它干。重要的逻辑,还是得自己过一遍眼。毕竟出了问题,锅还是自己背。

别急着否定,也别全信

老张说这东西有时候挺倔。你让它往东,它偏往西。一开始他老跟它急,后来想开了——谁还没个犯错的时候呢。

有一次改一个正则表达式,AI 给的方案愣是跑不通。老张也没骂它,就说了句:"你试试看能不能跑?"它自己跑了一遍,发现不行,又改了一版。这回对了。

// AI 第一次给的,跑不通
const regex = /pattern/g;

// 它自己改对的
const regex = /^pattern$/g;

老张说这事儿让他想明白一个道理:AI 也是在学。你跟它较劲,不如带它走两步。它错了,让它自己发现;它对了,你也就省心了。

但也不能啥都信它。老张有回让它写个排序,它写了个冒泡排序。老张笑了,说数据量大这玩意儿可顶不住,还是得自己心里有数。

深夜里的默契

现在老张加班少了。不是活儿少了,是干活儿快了。

那天晚上十一点,老张还在公司改一个老项目的 bug。这项目五年前的,文档早就没了。老张让 AI 帮着看代码,一行一行解释。看到一半,老张恍然大悟——原来是五年前的一个临时方案,后来忘了改回来。

# 老张只说了一句话
帮我看看这个函数为什么每次都返回 null

AI 十秒钟就找到问题了。老张说以前这种活儿,得花一晚上翻代码、查日志、打印调试。现在好了,有个伙计陪着,不累。

老张收拾东西准备下班,回头看了眼屏幕上的对话记录。AI 发了最后一句话:问题解决了,早点休息。

他笑了笑,合上电脑。

夜深了,写字楼的灯一盏一盏熄下去。老张走在回家的路上,想着明天还有个需求要跟 AI 说说。这日子,倒也没那么难熬了。

子代理:派个小工去干活

老张有个老项目,代码十几万行。有天他想理清里头的 API 接口,让 AI 帮忙。结果 AI 说上下文太长了,看不完。

老张犯了难。我说,这事儿有个招,叫子代理。

子代理是什么?打个比方,你是包工头,手底下有个大工程。一个人干不完,你派几个小工去,有的专门负责测量,有的专门负责搬砖。干完了回来跟你汇报。

Claude Code 里头,这叫 Subagent。

用 Explore agent 帮我找出这个项目里所有的 API 接口。

Explore agent 是个只读的小工,跑得快,专门负责探索代码库。它跑了一圈,给老张列了个清单:一共 87 个接口,分布在 23 个文件里。

老张说,这比自己 grep 强多了。它不仅找到接口,还知道哪些是关联的,哪些是废弃的。

还有个 Plan agent,专门负责规划。

帮我想想重构这个模块的方案,先列个计划。

Plan agent 不改代码,只出主意。它看了代码,列了五条建议,每条都写得清清楚楚。老张看了看,觉得可行,再让主代理去执行。

老张后来说,这子代理就像徒弟。大徒弟负责规划,小徒弟负责探索,师傅——也就是老张自己——负责拍板。

斜杠命令:一句话的功夫

老张发现,有些事儿经常干,每次都要说一遍,烦。

比如提交代码。以前他要打一堆字:

帮我检查一下改了什么文件,然后提交,提交信息写"修复登录bug"

后来他知道了,有个东西叫斜杠命令。

/commit

一个词儿,AI 就知道你要干嘛。它会自己检查改了什么,帮你写好提交信息,再问你确不确定。

老张乐了,说这就像饭馆里的"老样子"。常客不用点菜,老板知道你要什么。

还有几个常用的:

/review  让 AI 帮你 review 代码
/clear   清空对话,重新开始
/help    看看有什么命令可用

老张说,这斜杠命令,就是给 AI 的"快捷键"。

自定义命令

后来老张觉得,有些命令没现成的,想自己造。

他在项目里建了个 .claude/commands 目录,写了个 deploy.md

# 部署命令

1. 跑测试,确保全过
2. 构建 production 版本
3. 上传到服务器
4. 发消息通知团队

以后他只要说 /deploy,AI 就知道按这个流程走。

老张说,这就像给徒弟写了个操作手册。下次来活儿,照着干就行。

技能:教 AI 新本事

老张他们团队,有个代码规范检查的习惯。每次提交前,要检查变量命名、注释完整性、是否有 console.log 没删。

这活儿枯燥,老张想,能不能让 AI 学会?

这就要说到 Skills——技能。

技能是什么?就是给 AI 写个"教程",让它学会一项新本事。

老张在 .claude/skills 目录下写了个 code-check.md

# 代码检查技能

检查以下内容:
1. 变量命名是否符合驼峰规范
2. 函数是否有注释
3. 是否有 console.log 残留
4. 是否有未使用的变量

以后他说:

/skill code-check

AI 就按这个技能来检查代码,列出问题,还能帮你改。

老张说,这技能就像教徒弟。你教他一遍,他就会了。下次不用再说。

团队共享技能

老张把技能文件提交到 git 仓库,团队里其他人 clone 下来,就都能用。

新来的实习生小王,第一次提交代码就过了规范检查。老张问他怎么做到的,小王说,我用了你的 code-check 技能。

老张笑了。教徒弟这事儿,以前是一对一,现在是一对多。

钩子:自动化的手

老张有个毛病,改完代码经常忘了格式化。代码提交上去,CI 就报错。

我说,这事儿可以让钩子来帮忙。

钩子是什么?就是 AI 干完一件事,自动触发另一件事。就像你进屋,灯自动亮。

老张在 settings.json 里配置了一个:

{
  "hooks": {
    "PostToolUse": [{
      "matcher": "Edit|Write",
      "hooks": [{
        "type": "command",
        "command": "npx prettier --write $FILE_PATH"
      }]
    }]
  }
}

意思是:AI 用 Edit 或 Write 工具改完文件后,自动运行 prettier 格式化。

老张说,这钩子就像师傅在你身后盯着,干完活儿顺手帮你收拾干净。

还有个常用的钩子,是在提交代码前自动跑测试:

{
  "hooks": {
    "PreCommit": [{
      "type": "command",
      "command": "npm test"
    }]
  }
}

测试不过,代码就提交不上去。老张说,这叫"自己给自己把关"。

几个小技巧

老张总结了几条,我记下来了:

技巧一:先让 AI 读代码,再让它改。

先读一下 src/utils/format.js,告诉我这个文件是干什么的。

AI 读完了,说清楚了。老张再让它改,改出来的东西就靠谱。

技巧二:改完让 AI 解释。

你刚才改了什么?为什么这么改?

AI 解释一遍,老张就放心了。有时候 AI 说"我改了 X 因为 Y",老张一看,Y 这个理由不对,就让它重改。

技巧三:让 AI 写测试。

给这个函数写单元测试,覆盖正常情况和边界情况。

老张说,AI 写测试比自己写得好,因为它想得全面。

技巧四:遇到卡住,换个说法。

有时候 AI 理解错了,老张就换个说法。

不对,我的意思是……

或者:

换个思路,用另一种方式实现。

AI 就会换一个方向尝试。

技巧五:善用"继续"。

AI 干到一半停了,老张就说:

继续

AI 就接着干。有时候上下文太长,AI 会自动总结前面的内容,然后继续。

团队里的知识共享

老张他们团队,五个人。每个人用 AI 的方式都不一样。

小王喜欢让 AI 写测试,小李喜欢让 AI 写文档,老张喜欢让 AI 找 Bug。

老张在项目里建了个 .claude 目录,把技能、命令、配置都放里头:

.claude/
├── settings.json      # 钩子配置
├── commands/          # 团队的命令
│   ├── deploy.md
│   └── review.md
├── skills/            # 团队的技能
│   ├── code-check.md
│   └── api-doc.md
└── agents/            # 自定义代理
    └── tester.md

老张说,这叫"团队规矩"。以前新人来了,得教半天怎么配环境、怎么检查代码。现在新人 clone 下来,AI 就知道团队的规矩了。

从怀疑到信任

老张一开始,对 AI 是怀疑的。他说,这东西能写代码,还要我们程序员干嘛?

用了半年,他改口了。他说,AI 是个好帮手,但不是好主人。

什么意思呢?

AI 能帮你写代码,但不能帮你做决定。架构怎么设计、技术选什么方案、代码质量怎么把控,这些还得人来定。

老张现在的工作方式是这样的:

  1. 自己想清楚要做什么
  2. 让 AI 帮他实现
  3. 自己检查 AI 的代码
  4. 让 AI 帮他写测试
  5. 自己做最终确认

他说,这就像带徒弟。徒弟干活,师傅把关。徒弟干得不好,师傅得指出来。徒弟干得好,师傅也得知道好在哪儿。

AI 时代的程序员

老张前两天跟我喝茶,说了句话,我记到现在。

他说:"以前写代码,是一个人闷头干。现在写代码,是带着一个团队干,只不过这个团队里,有几个是 AI。"

我说,那你是团队长了。

老张笑了,说,差不多吧。以前是"码农",现在是"码农队长"。

他又说,AI 不会取代程序员,会用 AI 的程序员会取代不会用 AI 的程序员。

我说,这话有点绕。

老张说,意思就是,工具在变,手艺人的心不能变。代码写得干净、逻辑理得清楚、问题想得透彻,这些本事,AI 帮不了你。但那些重复的、繁琐的、费时间的事,AI 能帮你省下大把精力。

"省下来的精力干嘛?" 我问。

老张喝了口茶,说:"想更重要的问题。"


老张现在用 Claude Code 用得顺手了。他说,这东西就像一把好刀,得磨,得用,得知道什么时候切菜,什么时候切肉。

我问他,有什么建议给刚开始用的人?

他想了想,说:

"别急。先让它干小事,干好了再干大事。"

"别懒。它写的代码,你得看,得懂,得负责。"

"别怕。它犯错,你纠正,它学习,你也学习。"

说完,老张收拾东西下班了。窗外的天已经黑了,路灯亮起来。

我看着他的背影,想起他刚用 AI 时的样子。那时候他皱着眉,说这东西不靠谱。现在他走得轻快,说今天又省了两个小时。

工具好不好,得看用的人。人好不好,得看心。

老张的心,是好的。


#技术生活 #编程感悟 #AI工具 #Claude