学习计划失败的常见原因不是"不够努力",而是三个设计缺陷:地图画错(学的东西不在依赖链上)、反馈断了(没有东西能告诉你错了)、节奏崩了(靠一阵密集输入顶上,两周后只剩名词)。下面按设计顺序拆:约束 → 地图 → 依赖 → 练习 → 反馈 → 度量 → 卡点 → 节奏。
1. 三个约束
| 约束 | 真实表现 | 设计上的应对 | 硬顶的后果 |
|---|---|---|---|
| 时间有限 | 整块时间通常只有一两小时(按个人作息核对) | 整块只做需要推演的事,碎片只做复习 | 碎片读硬内容,读完不留痕 |
| 遗忘必然 | 一次接触的留存随时间衰减,间隔越长掉得越快 | 主动安排复习触发点 | 反复重学前三章 |
| 动机波动 | 有新鲜感时产出高,卡住几天后骤降 | 任务拆到"当天有可验证产出" | 状态一差整条路径停摆 |
三者不并列:时间决定复习队列上限,动机决定任务粒度,遗忘决定复习间隔。
2. 知识地图的两种组织方式
| 组织方式 | 起点 | 长处 | 典型失效 |
|---|---|---|---|
| 自顶向下 | 目标能力 | 目标导向,不学用不上的 | 中间层是空的:知道要会"索引设计",不知道它依赖什么 |
| 自底向上 | 基础概念,逐层往上 | 地基稳,互相支撑 | 无限下沉:一直在补前置,没做过完整的事 |
实际画法是双向夹逼:先写一句目标能力的验收标准,再倒推它直接依赖的三到五项,只对"当前任务真用到"的继续下沉,其余记为"已知缺口,暂不展开"。
目标:能定位并修复一条慢查询
验收 = EXPLAIN 输出 + 改动前后耗时对比 + 一句归因
├── 直接依赖(展开)
│ ├── 执行计划读法
│ ├── 索引结构与选择规则
│ └── 慢日志与现场采样
└── 已知缺口:存储引擎内部页结构(暂不展开)
无效地图的共性:每层都是名词、没有验收口径——写"数据库:MySQL、索引、事务",说不出"会"到什么程度。
3. 前置依赖的判断法
判据只有一条:去掉 A,B 的输出是否还能产生并被验证?
| 依赖类型 | 判据 | 例子 | 处置 |
|---|---|---|---|
| 真依赖 | 不会 A,输出根本产生不了 | 不会读执行计划,判断不了索引是否生效 | 先补,只补到够用 |
| 伪依赖 | 会 A 只是更舒服 | 不懂 B+ 树细节也能做对比实验 | 边做边补,不提前封路 |
| 反向依赖 | 做完 B 更懂 A | 修过慢查询后,B+ 树那节一遍就通 | 直接做 B,回头补 A |
对每项前置 A 依次问:
1. 没有 A,我能写出可运行的最小例子吗?
2. 这个例子的输出,我能自己判断对错吗?
3. 判断不了时,缺的是 A 本身,还是缺观测手段?
第 3 问最常见的答案是"缺观测手段"——先补工具,不是先补理论。
4. 练习设计的四要素
| 要素 | 含义 | 缺失时的症状 |
|---|---|---|
| 可验证的输出 | 产物能被外部标准判定对错 | 不知道自己对了没有 |
| 即时反馈 | 错误在几分钟内暴露 | 错误被固化,之后拆两遍 |
| 略高于当前水平 | 七成能独立做,三成需查资料 | 太简无增益,太难放弃 |
| 重复间隔 | 同类任务隔一段时间再现 | 短期很熟,两周归零 |
"看懂了"是最贵的假象:
| 假象信号 | 真实的检验 |
|---|---|
| 读文档时每一步都顺 | 合上文档,能否写出这步的输入输出 |
| 看别人代码觉得"就该这么写" | 从空文件开始能否写出骨架并跑通 |
5. 反馈回路的三个来源
| 来源 | 成本 | 覆盖什么 | 盲区 |
|---|---|---|---|
| 自测(复述、手推) | 极低,随时可做 | 概念边界、推导链条 | 发现不了"自己不知道自己不知道" |
| 代码/程序运行 | 低到中,需环境 | 逻辑正确性、边界条件 | 发现不了设计层面的错 |
| 他人评审 | 高,需要人和时间 | 命名、抽象、取舍、隐性约定 | 依赖对方水平,可能引入错误 |
成本排序决定节奏:自测每天做,运行每次做,评审按周做。只做自测会在设计层面长期带病前进。
反馈记录(每次练习后 2 分钟)
- 产物:产出了什么可运行或可判分的东西
- 卡点:卡在哪一步,卡了多久
- 归因:知识缺 / 工具缺 / 注意力缺(三选一)
- 下次:同类任务要改的一个具体动作
6. 遗忘曲线的实际用法
| 适合间隔重复 | 不适合间隔重复 |
|---|---|
| 离散事实:参数名、命令选项、协议字段 | 推理能力:调试思路、架构取舍 |
| 高频接口签名与固定写法 | 长链条推导(拆成卡片后失去意义) |
队列要有上限,否则复习会吃掉全部学习时间:
| 队列规模 | 单日复习耗时(典型量级) | 是否可持续 |
|---|---|---|
| 二十项以内 | 十分钟以内 | 可持续 |
| 二十到五十项 | 二十到四十分钟 | 容易挤掉练习 |
| 五十项以上 | 超过一小时 | 通常两周内放弃 |
维护规则:新增一条,必须有一条毕业或删除。卡片要写成能被判分的形式:
差:Kafka 的位移提交机制是什么?
好:消费者崩溃后重启,从哪条消息开始消费?取决于哪个配置?
7. 输入与输出的比例
只看不写的衰退快过预期,可用的经验配比是输入 : 输出 ≈ 1 : 2(按章节粒度核对)。
| 输入占比 | 一周后的状态 | 判断信号 |
|---|---|---|
| 九成以上 | 只剩名词,说不清流程 | "我记得有个概念叫……" |
| 一半左右 | 能复述主干,细节模糊 | 讲得出步骤,写不出配置 |
| 三成左右 | 能实现,细节需回查 | 能跑通,偶尔翻文档 |
"输出"不限于代码:手画流程图、写一段能跑的配置、把一节改写成三段话都算。
8. 项目驱动与系统学习的取舍
| 方式 | 补的能力 | 补不了什么 | 适合的时机 |
|---|---|---|---|
| 项目驱动 | 联调、定位、脏数据下的判断 | 体系性边界知识(为什么这么设计) | 有基本语法,缺真实场景 |
| 系统学习 | 边界、历史原因、替代方案比较 | 多组件协同与现场取舍 | 反复在同类问题上卡住 |
| 两者交替 | 项目暴露缺口,再针对性系统补 | —— | 时间跨度以月计最有效 |
错配的典型:卡在排错上的人去读原理书,卡在原理上的人去做项目。看卡点形态——"报错看不懂"缺系统知识,"不知道怎么选"缺项目经验。
9. 学习的四级度量
| 级别 | 表现 | 检验方式 | 常见自评偏差 |
|---|---|---|---|
| 能复述 | 说出定义、步骤、术语 | 合上材料讲一遍 | 严重高估(看完即算会) |
| 能实现 | 从空文件写出可运行版本 | 限时从零写 | 中高估(照抄熟代码算会) |
| 能排错 | 面对异常缩小范围并定位 | 在改过的代码里找问题 | 常低估(做过没总结) |
| 能权衡 | 说清两种方案的取舍与代价 | 换个约束,说明选择是否翻转 | 普遍低估 |
校正方法:每级配一个外部可判定的动作,如把"能实现"定为"半小时内从空目录写出能跑的最小版本"。
10. 卡住时的四种处置
| 处置 | 适用信号 | 具体动作 | 不适用时 |
|---|---|---|---|
| 换材料 | 材料写法不适合自己(跳跃、缺图) | 换同主题另一份,只读卡住那节 | 材料没问题,换了白换 |
| 降维度 | 层级太高,看不到具体形态 | 缩到最小可运行例子,去掉旁支 | 复杂度就是问题本身 |
| 手推一遍 | 逻辑链接不上,读多遍仍断 | 按实际数据逐步执行,写下中间值 | 配置/环境问题,推不出来 |
| 找人讲 | 前三种都试过且超时 | 带着"试过什么、卡在哪"去问 | 没有具体卡点,只能得泛泛建议 |
顺序不能颠倒:前三种自己先做,找人讲是最后一格,反过来会形成依赖且问不出有效问题。
11. 时间预算与节奏
| 节奏 | 优点 | 缺点 | 适用 |
|---|---|---|---|
| 每天固定块(四十五到九十分钟) | 复习触发密集,遗忘损失小 | 单次深度有限 | 概念与工具类 |
| 周末突击(半天到一天) | 能进入深度状态 | 周中遗忘,周初重新热身 | 需要连续推演的内容 |
每周模板
周一至周五(每天 60 分钟)
15 min 复习队列
35 min 新内容 + 立刻写一段输出
10 min 记录卡点与归因
周六(约 3 小时)
只做一件事:把本周输出串成能跑或能演示的东西
周日 只复习,不引入新内容
真正的约束是连续可用的整块长度,不是总时长:三段二十分钟拼不出一次需要推演的任务。
12. 排错:路径跑不动的五种情况
| 现象 | 原因 | 处理 |
|---|---|---|
| 学了三个月还停在入门章 | 地图自底向上无限下沉 | 反向写验收标准,倒推三项依赖 |
| 每章都读懂,做不出东西 | 缺可验证输出,练习退化成阅读 | 每节产出一个能跑或能判分的小产物 |
| 复习耗时越来越长 | 队列无上限,卡片写成开放题 | 设上限,卡片改成可判分形式 |
| 一停就全忘 | 只有输入,无跨周再现 | 输入输出比压到 1:2,隔周再现 |
| 换了很多材料还是卡 | 卡点不在材料,在缺观测手段 | 先补工具(日志、调试器),再看材料 |
13. 边界:几种不算学习的行为
| 行为 | 为什么不是学习 | 替代动作 |
|---|---|---|
| 重复学已经会的东西 | 有产出无增益,制造勤奋感 | 进到下一级度量(复述→实现) |
| 把读书本身当学习 | 输入不产生可验证产物 | 读一节写一小段输出,或画张图 |
| 只收集资料不产出 | 收藏夹增长≠能力增长 | 收集即处理:每收一份当天做最小复现 |
| 追新工具与新版本 | 词汇量增加,判断力不变 | 只在旧方案真卡住时再换 |
判断标准只有一条:这次投入是否产出了能被外部标准判定对错的东西。没有,就不算学习,只算消费。
自测
- 三个约束里,哪一个直接决定了复习队列的上限?
- "自底向上"的地图在哪一步会变成无限下沉?
- 判断前置依赖是真依赖还是伪依赖,只需要问哪一个问题?
- 练习的四要素里,缺了哪一项会让错误被固化?
- 反馈的三种来源按成本排序是什么?为什么不能只留最便宜的那个?
- "能实现"这一级,为什么必须配一个外部可判定的动作定义?