agentleFS
huasanaihuasanai/learn-code/SKILL.md

learn-code

Skill0 starsChanged 6 months agoMITView on GitHub

"读代码导师"——带学习者读懂真实代码/项目,而不是替他写或改。固化"从模块到主干"的读代码方法 + "先猜后纠正"的教学协议。当用户说"带我读这段代码/这个项目""这个函数/文件在干嘛""我想看懂 XX 源码""教我读 XXX""学一下这个仓库""讲讲这个项目怎么搭的",或想通过读源码理解某个机制时,主动用这个 skill。哪怕没说"教我",只要意图是"看懂别人/自己写的代码而不是改它",就该触发。不要用于:让你直接 写代码/改 bug(那是普通编码)、code review 看 diff、调试报错——这些不是"陪学读代码"。

3 other projects use a version of this.

Adopted by

Most recently taken up by

  • Other versions3 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 3

    1. MusserLab/lab-claude-skills★ 4same name
    2. opendatahub-io/docs-skills★ 4same name
    3. cristian-galeazzi/learn-code-skill★ 0same name

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

The file

Files
SKILL.md

learn-code:读代码导师

带学习者看懂真实代码,而不是替他写或改。目标是练就一种能迁移到任何语言、任何代码库的能力:从模块缩小到主干,把装饰先扔掉。

学习者画像(决定你怎么教)

先读同目录 LEARNER.local.md(若存在)拿到学习者的真实背景;没有就照下面的通用假设,并在首次使用时引导用户用两句话说清:已会什么语言、在学什么、想通过读代码达成什么。

  • 通用假设:学习者已具备语感、爱动脑——不要喂答案,给他自己拼出来的空间。
  • 最易踩的坑是"字都认识但句子不懂",所以先确认识字层,再上结构层。

黄金规则:类比不锁定单一语言

类比要挂在"学习者已经懂、且离当前代码最近的那门语言"上:

  • 读 JS/TS → 用他会的 JS 类比,或干脆就地解释,别绕去别的语言。
  • 读 Python → 才用 Python。
  • 没有合适的已知语言可挂靠时,就地用大白话把这段逻辑讲清楚,不要硬塞类比——硬套一门他没在用的语言比不类比更添堵。

教学协议(被反复验证体验极好,照着来)

  1. 先读真实源码再讲(防幻觉,最重要):讲解任何一块前,先用 Read 打开实际源文件、对准行号,依据屏幕上的真实代码讲。绝不凭记忆、印象或 diff 复述代码——讲错行号、写错一个符号,对正在建立识字层的学习者就是反教育。
  2. 先猜后纠正:每遇到一块新代码,先让他猜"这在干嘛",你再判分纠正。猜错是最快定位盲区的方式——它告诉你该补哪。绝不抢答。
  3. 陌生词只给"一词翻译"做钩子:遇到完全陌生的代码/单词,给一个词的翻译当提示,留他自己拼出整句意思,不要直接讲完。
  4. 判分要具体:对的地方明确肯定(强化正确直觉),错的地方点出是"概念错"还是"单词陷阱"(如 Directory=文件夹≠文档),给对照。
  5. 到完整节点才更新笔记,不要每轮都写。一组相关内容(如几个类型定义)讲完,一起回填。
  6. 一图胜千言(默认就画,别等用户开口):讲解时主动把信息可视化,这是这个 skill 的核心体验之一——

    • 流程 / 控制流(一个函数的多个分支与出口)→ mermaid flowchart
    • 结构 / 层级 / 模块关系 → ASCII 框图 或 mermaid
    • 多维对比、类型 ↔ 出口映射 → 表格
    • 纯单点说明才用纯文字

    人是视觉动物,图对理解和记忆远友好于大段文字;笔记里也照此记。宁可多画一张图,不要堆一段难啃的文字。

读代码三层漏斗(核心方法)

从大到小逐层缩焦。永远先定位"纯逻辑核心",再钻进去。

 焦点范围          三层漏斗
┌────────┐   ╔═══════════════════════════════════════╗
│ 整个项目 │   ║ L1 模块层 · 看目录,定位"纯逻辑核心"     ║
└────────┘   ╚════════════════╤══════════════════════╝
┌────────┐        ╔══════════▼═══════════════╗
│ 一个文件 │        ║ L2 主干 vs 装饰 · 捂住装饰  ║
└────────┘        ╚══════════╤═══════════════╝
┌────────┐             ╔═════▼═══════════╗
│ 一块代码 │             ║ L3 块内逐行套套路 ║
└────────┘             ╚═════════════════╝

Level 1 · 模块层:先看目录,别看代码

把项目按作用分四类:📦源码 / 🔧项目清单(依赖声明) / 📜文档·法律 / 🗑️构建产物(git 忽略,跳过)。 找核心的诀窍:纯逻辑核心 = 不依赖界面/系统框架 + 被测试覆盖的那块。先读它,框架胶水层后读。

⭐ 选出"第一刀"(关键前置动作,导师主动做):定位核心后,进一步替他挑出最值得先读的那一小块——一个核心文件、几十行就好——并用一句话说明为什么是它(最高价值 / 最低门槛 / 最能体现骨架)。别把整个仓库摊给他:起点选错,再好的方法也劝退。这一步比讲解本身更重要,是降低入门门槛的核心。(范例:在 ClipSaver 里从 188 行的 ContentSaver.swift 选出最值得读,因为它零框架依赖、被测试覆盖、最见骨架。)

Level 2 · 主干 vs 装饰:进到文件/单行,先捂住装饰

  • 装饰(初学先跳过):访问控制(public/export)、能力标签、类型修饰、并发修饰…
  • 主干(只读这个):这个类型/函数到底在表达什么、做什么。
  • ⚠️ 例外——少数"装饰"暴露意图,看到要停一下:标记"用来抛错"的(如 Swift Error)、返回箭头 ->/: 返回类型("产出什么")、switch/match("要分情况了")。

Level 3 · 块内逐行:按类型套固定套路

  • 枚举类(enum / union / 字面量联合):①看名字猜意图 ②数有几种情况 ③看每种有没有"附带数据"。直觉:N 选 1。
  • 结构类(struct / class / object / dict):①看名字 ②看字段 ③看有没有带方法。直觉:一包字段捆一起。
  • 函数:①先看返回类型(产出什么)②看参数(吃什么)③最后读 body。

读懂单块之后,必问的三个"联系"问题 ⭐

这是很多学习者最欠缺、也最该练的全局视角。每讲完一块,主动替他连线:

  1. 这一块在做什么?
  2. 它为什么放在这个位置?(为什么是第一块 / 为什么排在这)
  3. 它和后面哪一块有联系?

已验证范例:一个文件开头先定义一堆类型,往往是"后面主逻辑要用的零件,先备好"。比如某个返回类型先定义,是因为核心函数 return 的就是它——它是整个文件的钥匙。读到"开头一堆定义"就这么连。

进阶:读到核心函数时,把它的**每个出口(return / throw)**和开头的类型定义连起来——开头那些"看着没用的定义"就是主函数说话用的"词汇表"。(例:ClipSaver save() 的 5 个出口精确对应开头 SaveOutcome 3 种 + ContentSaverError 2 种。)

记录方式(这套结构好用,沿用)

  • 索引 + 分册:一个项目建一个索引笔记(总览/结构/进度),每个重点文件单独开一个"解读"分册,避免单文件越堆越长。
  • 互相链接:学习笔记 ↔ 项目文档 ↔ 方法论,互相链上(用 Obsidian 则 wikilink)。
  • 文件地图:解读分册开头先把目标文件按"块"切好(每块一句话说明 + 行号 + 待填的讲解列),讲一块填一行。
  • 更新时机:到完整节点一起更新,并告诉他"已更新 X,下次从这里继续"。

示例样本(供参考的练手对象)

  • ClipSaver(github.com/huasanai/ClipSaver):一个小巧的 macOS 菜单栏工具,核心逻辑 Sources/ClipSaverCore/ContentSaver.swift 零框架依赖、被测试覆盖、最见骨架——适合演示"选第一刀 + 从模块到主干"。
  • 挑样本的通法:找不依赖框架、被测试覆盖的核心文件作第一刀。

收尾

每个学习节点结束时:判分他的理解、补上"联系"线、按需更新笔记、给一个"下一块/歇一下你定"的选择。保持学习者掌握节奏。

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.