乐于分享
好东西不私藏

如何快速阅读源码

如何快速阅读源码
学习B站视频(UP:ZiyuGameDev,《如何拆解学习开源项目》)"从大到小、逐层递进"用 AI 拆任何开源仓库,主打工具组合DeepWiki + Claude Code

核心思路

不要一上来硬啃源码。先建立全局认知 → 再下沉到模块 → 最后抠具体函数/调用链,配合 AI 当"一对一导师"无限追问。

两步法拆解流程

宏观概览:DeepWiki 一键出说明书

  • 把 GitHub 地址的 github.com 换成 deepwiki.com,例如
  • github.com/WispSnow/TinyFarm → deepwiki.com/WispSnow/TinyFarm
  • 自动生成:项目定位、目录结构、模块关系、核心数据流、关键文件行号引用。
  • 英文看不懂就装沉浸式翻译插件 https://www.immersivetranslate.net/ (pro版需要付费)做中英对照。
  • 没被索引的仓库填邮箱申请,约 10 分钟跑完。

微观深入:Claude Code 当私教(其他工具也可行)

本地 git clone 项目,在目录里启动 Claude Code(终端形态),让它干这些事:

这里老师提供了一个学习教程的范例:模块化编程与幽灵逃生 | C++游戏开发教程 https://cppgamedev.top/courses/modular-ghost-escape

这是一个开源游戏仓库,我非常想深入学习,请给我提供学习建议。

分析当前项目的代码仓库结构,绘制一张清晰的架构图。要求用 Mermaid 语法输出,让完全不懂代码的人也能一眼看明白各模块的关系。

视频里明确说:每次进项目都口头铺垫「你现在是 C++ 老师…」既费 token 又容易漏,正确做法是把角色设定固化到项目根目录的CLAUDE.md,Claude Code 启动自动读。他给的范例大意是这样(不是逐字字幕,但措辞贴近视频口述):

#CLAUDE.md

你制作的所有教程文件,都保存到Tutorial文件夹中

视频顺带提了一句关键点:CLAUDE.md 只放「事实 + 角色约束」,别塞流程性 SOP,否则长对话里指令遵循度会掉。

视频示范顺序是:clone 完先不急着问 main() 干嘛,而是先发一条「造课」指令,把仓库交给它排课。他口述的 prompt 样例(可直接抄):

你已经读了这个仓库。请基于真实存在的文件和目录,给我生成一份循序渐进的学习大纲,假设我是会一点 C++ 但没碰过游戏引擎的新手。要求:

  1. 按 6~15 节课排,每节课只解决一个核心疑问
  2. 每节课列出「要读的文件(带路径)」和「要搞懂的概念」
  3. 第 1 课必须是「程序从哪里启动、主循环怎么转」
  4. 不要编造文件,读不到的就明说

视频里强调:这步的价值是把「无限源码」切成「有顺序的课时」,你拿到大纲后再一节一节往下啃,比随机跳转强十倍。

开始写第一课的详细内容 @CLAUDE.md

我不太理解 setUpInitialState 这个函数究竟是怎么工作的,请详细说明

这是视频里最实在的一段。他特意对比了「烂问法」和「好问法」:

❌ 烂问法(视频原话大意:「这样问 Claude 会瞎编路径或者泛泛而谈」)

  • 「帮我讲讲渲染系统怎么实现的」
  • 「这个 ECS 架构是什么意思」

✅ 好问法(视频里他当场打的,带锚点):

src/render/Renderer.cpp 的 Renderer::DrawFrame() 里,第 88 行那个 glDrawElements 调用前面为什么先 bindVertexArray 再 useProgram?这两步换顺序会怎样?结合 Mesh::UploadToGPU() 讲。

我在 src/ecs/SystemManager.cpp 看到 registry.view<Transform, Sprite>(),EnTT 的 view 和 get 区别是什么?为什么主循环里用 view 而不是手写 for 遍历所有 entity?

视频总结的追问纪律(原话要点):

  • 永远给文件:行号,不给路径就让 Claude 先「列出相关文件让我确认」再问
  • 一次只问一个机制,别把「渲染+音频+存档」揉成一大坨
  • 让它对比「这样写 vs 换种写法」,比单纯「解释这段代码」更能逼出设计意图
  • 不懂就继续嵌套问,但每轮都把上文结论贴回去(或靠 /compact 保留摘要)

把上面四块拼起来,就是视频「Claude Code 当私教」的完整骨架:

CLAUDE.md 定角色 → 第一条指令产出学习大纲 → 按大纲每节用「文件:行号 + 单一机制 + 对比式」追问 → 切模块前 /compact。不是把 Claude 当搜索引擎,而是当成一个「读得完整个仓库、记得住你进度、讲得清行号」的助教。

实战操作

刚好那DeepSeek刚开源的项目实战下(分别使用trae、codebuddy):https://github.com/deepseek-ai/deepseek-harness

生成架构图

codebuddy会提醒我保存,两者生成结果差别很大,后续慢慢看,看谁输出的好。

分析当前项目的代码仓库结构,绘制一张清晰的架构图。要求用 Mermaid 语法输出,让完全不懂代码的人也能一眼看明白各模块的关系。

生成教程

你已经读了这个仓库。请基于真实存在的文件和目录,给我生成一份循序渐进的学习大纲,假设我是编程老手,不要基础知识点,简单明了即可。要求:

  1. 按 6~15 节课排,每节课只解决一个核心疑问
  2. 每节课列出「要读的文件(带路径)」和「要搞懂的概念」
  3. 第 1 课必须是「程序从哪里启动、主循环怎么转」
  4. 不要编造文件,读不到的就明说