最近在做数据库优化器的并行查询支持,需要新增好几个算子。
这几个算子的开发,我开始尝试用 Claude Code 辅助完成,两天时间,三个算子基本完整实现,每个涉及 30 多个文件、1500 行以上的代码改动。
使用几天之后有一些真实的感受和经验,这里聊聊,也给想尝试 AI 编程工具的同学一些参考。
先说背景
我们项目中用的优化器叫 ORCA,是一个 C++ 写的独立查询优化器,代码量大概 90 多万行。给这种大型 C++ 项目加功能,最大的挑战不是某个算法有多难,而是流程太长、涉及的模块太多。
加一个算子,需要改十几个文件:算子定义、转换规则、中间表示、序列化、反序列化、代价模型、最终翻译……每一步都有自己的规范和约束,漏掉任何一步都会编译失败或者运行时出问题。
如果纯手写,一个算子少说得两三天起步,还得反复翻已有的代码做参照,并且不断学习新的概念。
这是我想尝试 Claude Code 的原因——看看它能不能在这种"大项目、长流程"的场景里真正帮上忙。
它实际帮了哪些忙
快速理解陌生代码
这个优化器的代码我之前只看过一部分,很多模块并不熟悉。
以前碰到不熟悉的模块,我的做法是 grep 关键词、顺着调用链一个文件一个文件地看,90 万行代码里找上下文,经常花很长时间。
现在我直接问 Claude Code:“这个 Class 是做什么的”、“这个方法的调用链是怎样的”,它能直接读源码、定位到关键代码位置给出解释。
**这是我觉得 Claude Code 最有价值的能力之一,**它不是凭记忆回答(那样大概率会编),而是实时去读你项目的代码,基于实际代码来回答,这一点和在网页端使用 ChatGPT 这种 AI 工具有本质区别。
参照已有模式生成代码
我的功能实现场景有一个好处——已经有一个类似的算子作为参考模式。
所以我告诉 Claude Code"参照这个已有算子的模式,新增一个类似的算子",它能把整条链路的代码都生成出来:新文件、新类、注册逻辑、序列化代码、构建文件修改,一次性覆盖完整流程。
当然不是说生成完就直接能用,新算子和参考算子之间有不少差异,Claude Code 生成的第一版代码,有些差异处理得不完全正确,我需要逐个文件 review 然后修正。
但即便如此,它帮我省掉了大量"脚手架"代码的编写——那些模式固定、但写起来繁琐且容易遗漏的部分。毫不隐瞒地说,如果纯手写这十几个文件,我大概率会在某个环节漏掉什么,然后花半天 debug。
而 Claude Code 至少把完整流程都覆盖到了,我只需要集中精力在核心逻辑的正确性上。
编译报错直接扔给它
C++ 大项目的编译错误有时候信息量很大,一个错误刷出几十行。直接把报错信息扔给 Claude Code,大部分情况它能准确定位问题并修复——类型不匹配、头文件缺失、虚函数没实现等等。
有一次遇到一个运行时断言失败,报错位置和我改的代码完全没关系,我自己看了半天没头绪。把报错信息给 Claude Code,它分析后判断是构建缓存导致的问题,建议 clean rebuild,果然就好了。
更有意思的是,它会记住这种经验。后面我再做类似修改的时候,它主动提醒我"这种改动需要先 clean 再 rebuild",不用我再踩同样的坑。
辅助学习和梳理架构
除了写代码,我还用 Claude Code 来学习和理解系统架构。
它的做法是直接去读源码,然后结合我的问题给出结构化的解释。比如我问某个概念是什么意思,它会去找到对应的基类和几个典型子类的实现,用真实代码来解释,而不是给一段泛泛而谈的定义。
这种**“基于实际代码的学习”**效率非常高,尤其适合那些文档不完善、设计细节都藏在代码里的项目。
我甚至让它帮我生成了一份完整的学习计划,按阶段组织,每个阶段标注对应的源码文件和学习重点。这个对后面新人上手很有帮助。
几个可以复用的使用技巧
用了一段时间之后,我总结了一些自己觉得比较有效的使用方式,供大家参考。
1. 人来设计,AI 来实现
这是我觉得最重要的一条。不要指望 AI 替你做设计决策,而是你想清楚要做什么、核心逻辑是什么,然后让它来写具体代码。
具体来说就是:我自己想清楚新算子的语义、和已有算子的差异点、需要修改哪些模块,然后给 Claude Code 一个明确的指令,指令越清晰,生成的代码质量越高。
反过来,如果你说"帮我实现一个 xxx 功能"但自己都没想清楚要怎么做,生成的代码大概率不能用。
2. 给它一个参照物
如果你的项目里已经有类似的代码,一定要指明参考哪个文件、哪个类。比如"参照 A 类的模式来写 B 类",这比从头描述需求要高效得多。AI 很擅长"照葫芦画瓢",它能精确复制已有代码的风格、命名规范和架构模式。
这也是大型项目用 Claude Code 的天然优势——项目越大,可参照的模式越多,AI 能发挥的空间越大。
3. 逐文件 review,不要一把梭
生成完代码不要直接提交。我的做法是每个文件过一遍,重点看:
- 核心逻辑是否正确(这是 AI 最容易出错的地方)
- 边界条件有没有漏处理
- 和已有代码有没有冲突
模板化的代码(序列化、注册、构建文件等)一般问题不大,重点盯核心逻辑就行。
4. 善用它的记忆能力
Claude Code 有一个持久化的 memory 机制——它会把关键经验、项目约束记录下来,后续对话自动参考。
你也可以主动让它记住一些东西,比如"我们项目用的是 Autotools 构建系统,不是 CMake"、“修改枚举头文件后必须 clean rebuild”。记住一次,后面就不用反复提醒了。
这一点是 Claude Code 相比网页端 ChatGPT/Claude 最大的区别之一——它是有"项目记忆"的,不是每次对话从零开始。
5. 当成代码搜索引擎和学习助手
除了写代码,Claude Code 作为代码阅读工具的价值可能被低估了。
想了解某个模块怎么工作的?直接问它,比自己 grep 来 grep 去快得多。想搞清楚一个复杂的调用链?让它帮你追踪。想快速上手一个不熟悉的代码库?让它帮你梳理架构、生成学习路线。
在大型项目中,这种"随时可问的代码助手"能显著降低认知负担。
6. 复杂任务先让它做计划
对于涉及多个文件、多个步骤的复杂任务,不要上来就让它开始写代码。可以先让它分析需要改哪些文件、每个文件改什么,确认计划没问题后再动手。
这样做的好处是:你能在动手之前就发现遗漏或者方向性错误,避免写了一半发现思路不对。
什么场景下效果最好
用下来的感受是,Claude Code 在以下场景效果最明显:
- 代码量大的项目:上下文越多,人越难全局掌控,AI 的辅助价值越大
- 有模式可循的开发:参照已有代码做变体,这是 AI 最擅长的
- 跨文件、跨模块的改动:一个需求涉及十几个文件,人很容易遗漏,AI 能帮你保证完整性
- 流程化/脚手架代码:序列化、反序列化、注册、配置文件这类机械性代码
相对来说,以下场景它帮助有限:
- 从零设计全新架构:这需要对系统有深入理解和全局思考,AI 目前做不到
- 性能调优:需要 profiling 数据和对硬件特性的理解
- 需要深入理解业务语义的 bug 修复:AI 能帮你定位代码位置,但理解为什么这样做是错的,还是得靠人
写在最后
工具终究是工具,它不会替代你对系统的理解和设计能力。但不得不说,对于大型 C/C++ 项目这种代码量大、模式化程度高的开发场景,Claude Code 确实能帮不少忙。
我之前折腾过不少 AI 编程工具,包括 GitHub Copilot、Cursor 等等。
Claude Code 给我最大的不同感受是——它不只是补全几行代码,而是能理解整个项目的上下文,真正参与到跨文件、跨模块的开发任务中来。加上记忆能力和命令行的工作方式,它更像一个能读懂你项目的"结对编程"搭档,而不只是一个代码补全工具。
当然了,前提是你自己得清楚自己在做什么。AI 最擅长的是加速执行,而不是替你思考。
如果你也在做系统级的开发工作,不妨试试,可能会有惊喜,后续我也会分享更多的 vibe coding 的相关经验。