快不是问题,失去节奏才是问题
人工写一个 C++ 小项目,常见节奏其实很土:
先写 main.cpp,让它能编。再加一小段业务逻辑,让它能跑。接着才考虑日志、配置、目录拆分和测试。每一步都不优雅,但每一步都知道自己换来了什么。
AI 容易破坏这个节奏。
它看到“写一个日志扫描工具”,可能顺手就给你:
src/、include/、tests/;fmt、spdlog、toml++;- 配置类、日志类、扫描类;
- 错误处理、帮助信息、输出格式;
- 甚至还会补一个 README。
这些东西单看都不坏。真正的问题是,你的认知没有跟上项目展开速度。一个三方库引进来以后,安装方式、编译目标、异常模型、线程安全、平台差异,都可能变成后面的约束。你不理解这些约束,Demo 越完整,返工范围越大。
所以 AI 编程里最该练的能力,不是让模型一次生成更多,而是让它每次只跨过一个你能验收的检查点。
一个够用的小练习
我觉得可以拿一个很小的 C++ 工具练手:logscan。
它只做一件事:扫描一个目录里的日志文件,统计 error 和 warn 的数量,然后打印结果。
题目不复杂,但刚好能覆盖小项目常见的几块:
- 命令行入口;
- 输出格式化;
- 日志;
- 配置文件;
- 简单业务模块。
关键是,不要让 AI 一口气做完。把它切成四轮。
第一轮只接 fmt
第一轮只做输出。
目标很小:根目录有一个 CMakeLists.txt,有一个 main.cpp,能用 fmt 打印扫描目录和统计结果。业务扫描可以先是假数据。
这一步的 prompt 可以写得很死:
当前只完成一个检查点:项目能编译,main.cpp 能用 fmt 打印目录和统计结果。
不要新增日志模块、配置模块、测试框架或复杂目录结构。
先说明修改哪些文件,再给代码。
完成后给出构建命令和预期输出。
这里不是不让 AI 发挥,而是先确认一件事:依赖怎么接进来,项目怎么编译,输出是否符合预期。
fmt 有清楚的 CMake 用法,CMake 的 FetchContent 也适合小项目起步。你可以让 AI 按其中一种方式做,但不要让它一轮里同时尝试 find_package、手拷源码、add_subdirectory 和包管理器。
第一轮的目标不是“架构好看”,而是把构建链路钉住。
第二轮再加日志
等第一轮能稳定编译,再上 spdlog。
这一步也要压住范围。不要一开始就让 AI 做滚动日志、按天切分、全局 logger 工厂和配置驱动。先只做控制台日志,最多再加一个简单文件日志。
这一轮真正要确认的是:
- 日志初始化放在哪里;
- 业务逻辑怎么拿 logger;
- 正常输出和调试日志怎么分工;
- 失败时日志里能看到什么。
spdlog 能做很多事,但练习的重点不是把它所有能力都接上。重点是确认你的项目真的需要哪些能力。
AI 很容易把“库支持”误写成“项目需要”。这一步要拦住它。
第三轮才读配置
配置文件最容易膨胀。
一个小工具本来只需要三个配置:
- 扫描目录;
- 关键字列表;
- 是否输出到文件。
AI 可能会顺手写成配置中心、热更新、环境变量覆盖、默认值合并、校验层、错误码体系。不是这些东西没用,而是你还没证明现在需要它们。
如果用 toml++,这一轮只读一个 config.toml,解析成一个很薄的 AppConfig 结构体就够了。
不要让配置层先于业务长大。配置只是服务当前工具,不是给未来所有想象中的版本做平台。
第四轮再拆模块
等输出、日志、配置都跑过,再拆业务模块。
这时候可以收成几个文件:
main.cpp
app_config.h / app_config.cpp
logger.h / logger.cpp
log_scanner.h / log_scanner.cpp
注意顺序:是先跑通,再拆。
第一步就把目录排得很漂亮,不一定让项目更清楚。很多时候只是视觉上完整,问题来源反而更难追。等每个依赖和职责都实际跑过一轮,再让 AI 帮你整理,返工成本会低很多。
我现在只留三条规则
网上 AI 编程规范很多,复杂到最后很难执行。我自己现在只保留三条。
第一,每次引库前,先写一张“引库卡”:
- 这个库解决什么问题;
- 这次只用哪一两个能力;
- 它会给构建、部署或运行带来什么约束;
- 如果不用它,最小替代方案是什么。
第二,每轮只过一个检查点:
- 能编译;
- 能运行;
- 能看到预期输出;
- 能通过当前测试。
不要在同一轮里同时“顺手重构”“顺手补配置”“顺手引日志”。C++ 里最怕顺手,因为顺手会把问题来源弄脏。
第三,每轮都要能回滚:
- 这一步改了哪些文件;
- 错了以后删哪里;
- 回到上一步项目还能不能编。
这三条看起来不像什么新方法,甚至有点笨。但笨办法抗返工。AI 已经足够快了,人要补上的不是更快,而是把它的快切成能验收的小段。
参考资料
- Anthropic, Claude Code Common Workflows
- Anthropic, Claude Code Overview
- GitHub Docs, Best practices for using GitHub Copilot to work on tasks
- CMake Docs, FetchContent
- {fmt} Get Started
- gabime/spdlog README
- gabime/spdlog Wiki: Sinks
- marzer/tomlplusplus README
写作附记
原始提示词
提示词:人工写项目,针对 C++ 这种不用手脚架的语言,第一个弄个 框架,从 main 开始拓展逻辑,逐步增加模块,比如配置文件、日志模块、迭代业务模块。我的习惯是每次都能确保编译,逐步重构,可能一开始不是最优解。AI 编程,现在很多时候,跳过了步骤,前期思考的太少,特别是引入新的三方库,AI 是能快速出个 Demo,但是由于我不清楚新引入三方库的细节,支持哪些功能,相关逻辑的返工率明显高于人工开发。有没有好的实战案例,让我学下,我知道网上有很多复杂的 AI 编程规范,我想要简单一些的,能快速落地的。
写作思路摘要
- 保留原始提示词里的 C++ 小项目、逐步编译、逐步重构和三方库返工问题。
- 把旧稿的步骤教程压成一个练习路径,重点放在“每轮只过一个检查点”。
- 删除泛泛的 AI 编程规范感,保留能立刻执行的三条规则。
评论区将在滚动到此处后加载。