我是一梵,分享使用 AI 编程的一手经验。用 AI 打败 AI。多说一些使用 AI 编程的痛点以及真实情况,让大家少一点焦虑。
现在软件开发工作基本上全都是由 AI 来完成,很少自己写代码了。可以说是「动嘴」编程了。
但是,不知道你有没有发现,AI 编程也是有很多痛点的。相信大家平常的开发工作,大部分应该是基于存量项目的开发与维护。
那么,你一定经常遇到的一个问题是大模型的上下文经常被撑爆。
存量项目通常是指已经存在、正在运行或维护中的项目。
大部分存量项目经过若干年的开发与维护,代码量比较大,十万行以上的很常见。
今天这篇文章只讲一个问题,怎么更好更快更省地用 AI 开发与维护存量项目?
我最近在维护与开发一个大概 30 万行代码量的存量项目。总结了一些我的个人经验,与大家分享。
出于隐私,就不贴图和介绍项目的大概功能了。此外,下面的经验涉及到开发工具 Claude Code 的使用。不过,你用其它工具也是一样的,道理是相通的。
下面直接上干货。
1. 在每个模块下创建 CLAUDE.md 文件。
因为 CC 在每次启动的时候,都会自动加载 CLAUDE.md 文件,通过这个文件它能了解项目的核心功能、技术架构等这些信息。
由于大型项目代码量太多,最好不要只使用一个根目录的 CLAUDE.md 文件,而是在每个模块下使用 CLAUDE.md。
这样做的好处是,当你单独修改某个模块的时候,CC 会自动读取该模块下的 CLAUDE.md 文件,更容易理解你在说什么。
当然了,大可不必从头开始写 CLAUDE.md 文件,可以运行多个 CC,然后在不同的模块下生成 CLAUDE.md。
2. 想了解某个模块的功能,可以让 AI 去阅读整个模块的代码,然后生成文档。
最好是针对每个文件夹单独创建一个与模块对应的文件夹,然后,修改某个模块功能的时候,先让 AI 去阅读相关的文档,这样能够提升 AI 写代码的准确度。
3. 在某个模块上新增功能时,务必具体到某个源代码文件。如果某个文件代码量超过万行了,必须具体到函数。
存量项目的一个特点是维护时间长,期间经过了很多人的修改,大多数程序员基本都是在写业务代码,很少有时间会去重构代码。久而久之,一个文件的代码行数少则几千行,多则上万行。
如果你什么都不管就让 AI 去阅读代码,上下文很容易被撑爆。所以,你必须自己先去阅读代码,找到相关的函数,然后再丢给 AI。
4. 一次会话只解决一个问题。
这样做的好处是能够尽量避免上下文污染,提高 AI 回答的质量以及节省 token。
举一个极端情况的例子:新增功能和修复 bug 放到一个提示词当中完成。
这种情况就会造成,如果需要回滚,两个功能都得回滚,非常浪费时间。
5. 对于涉及到多个模块的新增功能,先自己思考,罗列执行步骤,然后再让 AI 执行,每次执行 1-3 个步骤。
由于在存量项目上新增功能,一般涉及到的文件比较多,如果新增的功能又很复杂,很容易导致 AI 刚阅读完核心代码,修改了一部分代码,结果上下文超限,剩下未完成的代码就被强行截断了。
这个时候你的选择只有一个,那就是回滚到代码修改前的状态。
所以呢,对于复杂的功能,最好是我们自己先梳理清楚步骤,每个步骤需要修改什么文件,写在文档当中,然后让 AI 再一步步执行。
这样的话,即使做错了,你只需要回滚一个小步骤,返工比较少。
6. 优先让 AI 通过新增函数或暴露旧有接口的方式新增功能。
AI 修改代码时,往往只会考虑实现功能,不会考虑修改后的可扩展性。
AI 也不会理会到底是新增了函数,还是在原有代码基础上进行了修改。
修改原有代码最让人头疼的是牵一发动全身。例如,函数参数列表被修改了,调用这个函数的所有函数都要修改,改起来就会非常麻烦。
7. 使用 AI 将本地仓库还原到 git 仓库时,不要让 AI 自动执行 git 命令。
因为一旦你的提示词没有描述清楚,AI 生成的 git 可能并不能实现你的目的。AI 自动提交的情况下可能造成你的修改丢失。
所以,一定要审核一下 AI 想要执行的 git 命令。
小结
AI 编程门槛的极大降低,很多人都在鼓吹 AI 会让很多程序员失业。
但实际上,让人失业的从来不是某种技术,而是掌握了这种技术的人,干掉了那些低效、工作质量低的人。
放长远来看,AI 一定会把那些可以自动化的工作给慢慢蚕食掉。当这天来临的时候,不是你要失业了,而是大家都要失业了。
所以,别焦虑,多去用 AI 编程,才知道这东西到底发展到了什么程度。
你在维护老项目时遇到过哪些痛点?欢迎在评论区留言。
我是一梵 AI 编程,分享使用 AI 编程的一手经验。用 AI 打败 AI。