间隔重复是什么:如何应用于课程与代码学习
间隔重复是一种长期记忆的方法:材料不是一口气反复看,而是以逐渐拉长的时间间隔来复习,比如隔一天、几天后、一周后。每次复习都要凭记忆完成,在知识刚开始模糊的时候进行,这样它比一个晚上反复重读更牢固。
用简单的话说间隔重复
间隔重复是一种技巧:你以逐渐拉长的时间间隔回到学过的内容。不是一个晚上复习五遍,而是今天一次,隔一两天再一次,过几天又一次,一两周后再来一次。间隔之所以越来越长,是因为每成功复习一次,知识就能保持得更久。
第二个重要特征是复习要主动。你不是重读笔记,也不是重看视频,而是努力回忆:回答问题,凭记忆写代码,用自己的话解释思路。正是回忆的努力让复习变得有用。所以,当有人问“间隔重复是什么”,准确的回答是:它是按日历安排的主动回忆。
遗忘曲线:为什么不复习就什么都会忘
这个方法的基础,是赫尔曼·艾宾浩斯在19世纪末描述过的一个观察:遗忘并不是匀速进行的。刚学完时,我们会很快忘掉材料,之后速度逐渐变慢。如果把记忆中剩余的比例随时间画出来,会得到一条曲线:开头几小时和几天急剧下降,然后趋于平缓。这就是遗忘曲线。
由此得出两个实际结论。第一:最危险的时间是课后的头一两天。如果这段时间什么都不做,大部分细节都会消失。第二:每次复习都会“重启”曲线,但下降会更平缓。经过几次成功的复习,知识可以保持数周甚至数月。
为什么“看过并且懂了”不等于“记住了”
看完一节好的视频课,会有一种一切都清楚的感觉。这种感觉靠不住:大脑把识别当成了理解。看到屏幕上熟悉的代码,你能认出它,但这并不意味着你自己能写出来。这就像研究路线图而不是真的去旅行:你以为认得路,到了路口才发现并非如此。
被动观看几乎不会给大脑“这很重要”的信号,信息就停留在短期记忆里。间隔重复同时解决了两个问题:它要求你回忆(这是对真实知识的检验,而不是对熟悉感的检验),而且是在记忆刚开始变弱的时候进行的。
为什么分散复习比连续复习更好
考前一晚突击,大家都熟悉。一个晚上确实能装进很多内容,第二天也确实能用。但一周之后,剩下的就很少了。连续的复习之所以无效,是因为它们发生在材料还很新鲜的时候:几乎不需要回忆,也就没有巩固。
当两次复习之间有一段间隔时,部分材料会开始淡忘。回忆变得困难,而这种有益的困难会促使大脑重建并加固联系。所以隔三天复习一次,比同一晚复习三次效果更好。唯一要注意的是别等太久:如果材料已经完全忘掉,就只能重新学一遍。
| 连续复习 | 间隔重复 | |
|---|---|---|
| 什么时候复习 | 同一天,多次 | 间隔逐渐拉长 |
| 怎么复习 | 重读、重看 | 凭记忆回忆,解题 |
| 感受 | 轻松,觉得什么都会 | 比较吃力,能看出忘了什么 |
| 一个月后的结果 | 只剩零散的片段 | 知识保留下来,并能应用 |
间隔重复的基本安排
并不存在唯一“正确”的间隔:它取决于材料的难度,以及你上次回忆起来有多容易。但作为起点,一个逐渐拉长的简单安排就够用了。时间从你学习该主题的那天开始计算。
| 第几次 | 什么时候 | 做什么 |
|---|---|---|
| 1 | 当天或第二天 | 不看笔记,回忆要点,回答自己的问题 |
| 2 | 2–3天后 | 解决一道相关的题,改动示例 |
| 3 | 一周后 | 把这个主题用到一个新任务中 |
| 4 | 2–3周后 | 快速检验:讲解,凭记忆写出来 |
| 5 | 1–2个月后 | 在项目中使用,或做一次测验 |
灵活性的基本规则是:如果回忆得很轻松,下一个间隔可以加长;如果很吃力或者想不起来,就缩短间隔,更早地回到这个主题。应用程序也是这样工作的,只不过它们自动计算间隔。
面向程序员的间隔重复
编程是一种技能,而不是一堆事实。所以只背“定义—答案”的卡片是不够的,你需要通过动手来复习。针对每个新主题,可以采用下面三个阶段:
- 第1天:凭记忆重现。 课后合上视频,自己把讲过的代码写出来。可以偷看,但每次偷看都要做标记,那些地方就是需要再复习的。
- 第3天:修改。 拿同一段代码来改:改变条件、改变数据,或增加一项检查。这检验的是理解,而不是机械记忆。
- 一周后:新任务。 解决一道需要用到该主题、但没有直接点明的题。这样你会学会判断什么时候该用这个方法。
示例:冒泡排序
假设课上讲了冒泡排序。第1天:你学习算法并看了实现。第2天:不看提示,自己从零写出来。
def bubble_sort(items):
n = len(items)
for i in range(n - 1):
for j in range(n - 1 - i):
if items[j] > items[j + 1]:
items[j], items[j + 1] = items[j + 1], items[j]
return items
第5天:修改函数,使其按降序排序,并加入提前退出:如果某一轮没有发生任何交换,就直接结束。第12天:把同样的成对比较原理用到一个新任务中,比如按字段对字典列表排序。每一步都比上一步难一点,到第二周末,这个主题就不再是“看过的”,而是你自己的了。
哪些内容需要复习,哪些不需要
应该复习你将会用到的内容:语言的语法、关键结构、每天都要用的命令,以及集合或数据库查询等原理。不必把所有内容都做成卡片,比如很少用的函数参数,查文档就行。一个好的筛选标准是:“我是否希望不查资料也能做到?”
如何把间隔重复应用到视频课程
看视频课程时,就可以顺便把复习体系建立起来。每个语义单元之后暂停,记下三件事:核心想法(用自己的话)、课上的一个例子、以及你自己的问题。这些记录就是之后复习的材料。
- 把问题写成不看提示也能回答的形式,例如:“列表和元组有什么区别”“如何撤销最后一次提交,又不丢失修改”。
- 对于代码,不要记代码本身,而要记任务:“写一个函数,删除重复项,并保持原有顺序”。
- 课后的测试和自测题是现成的复习材料:过几天再做一遍,不要打开那节课。
如果某个主题完全想不起来,只重看相关的那一段,而不是整节课。复习要短:每次10–20分钟,覆盖几个主题。
间隔重复应用程序
最有名的工具是 Anki:一个免费的卡片应用,会自动计算什么时候显示每张卡片。你评价自己回忆答案的难易程度,应用据此加长或缩短间隔。还有其他基于同一原理的程序,比如 SuperMemo,间隔重复算法很大程度上就是从它开始的。
给程序员制作卡片的建议:
- 一张卡片只包含一个概念。“
git stash做什么”比“所有 git 命令”好。 - 问应用的场景:“如何取列表的最后3个元素”,而不是“什么是切片”。
- 加入任务型卡片:“编写一个函数……”,答案通过运行代码来验证。
- 不要一次积累几百张卡片:每天的复习队列应能控制在15–20分钟内,否则你会放弃。
手动日历:用日历代替应用
如果不喜欢卡片,普通日历就够用了。对开发者来说,一个很好的类比是:间隔重复就像知识的 commit,日历就是版本控制系统,而定期的复习时段则相当于把新知识合并进主分支。没有复习,学过的东西只是未保存的修改,很容易丢失。
手动安排的做法:
- 学完一个主题,立即在日历中创建3–4个事件:一天后、三天后、一周后、两三周后。
- 在事件中写具体任务,而不是“复习 Python”。例如:“做两道递归题”,这样结果可以衡量。
- 把主题按标签分组(
#python_basics、#git、#sql),把相关的主题放在一起复习,它们之间会形成联系。 - 复习时使用番茄工作法:25分钟学习,5分钟回顾:哪些做到了,哪些没做到,什么时候再回来。
如果某次复习没有完成,就把它挪到最近的一天,而不是取消。错过一次复习不要紧,怕的是断了整条链。
常见错误
- 重读而不回忆。 读笔记会产生和看视频一样的识别感。先尝试自己回答,再去对照。
- 所有内容复习的频率都一样。 简单的主题可以放到较长的间隔,把时间花在困难的主题上。
- 只复习不练习。 对代码来说,复习就是写代码。只记住语法而没有做题,不会变成技能。
- 队列太大。 如果每天的复习要花一个小时,系统就坚持不下去。宁可少一些主题,但要有规律。
- 一边复习一边玩手机。 干扰会破坏专注,回忆就变成了走过场。
总结
间隔重复就是以逐渐拉长的时间间隔进行的主动回忆。它以遗忘曲线为基础:材料在最初几天忘得最快,而每一次凭记忆的复习都会减慢遗忘。对程序员来说,最好的形式是用代码复习:凭记忆写出来,修改,再用在新的任务中。工具可以是 Anki,也可以是带有具体任务的普通日历。至于如何把复习融入视频课程的学习,在《如何高效学习视频课程》的课程中有实际的讲解。
常见问题
要复习多少次,才能让材料长期记住?
通常在一到两个月内,用逐渐拉长的间隔复习四到五次就够了。具体次数取决于主题的难度:如果回忆起来很轻松,间隔可以更快地拉长。
不用应用程序,也能做间隔重复吗?
可以。只要日历就够了:学完一个主题后,安排一天后、三天后、一周后和两三周后的复习,每个事件都写上具体任务。
错过了一次复习怎么办?
在最近的空闲日补上。如果这个主题回忆得很吃力,就缩短下一个间隔。不需要从头开始。
间隔重复适合学习编程语言吗?
适合,但要通过动手来复习:凭记忆写代码,修改它,解决新的题目。卡片适合记语法和命令,但真正的技能要靠练习。
间隔重复每天要花多少时间?
合理的负荷是每天15–20分钟。如果复习队列增长得比你的节奏快,就慢一点再加入新主题。