間隔反復とは:授業やコードの学習にどう使うか
間隔反復とは、教材を続けて何度も見るのではなく、1日後、数日後、1週間後のように少しずつ間隔を広げて復習する長期記憶の方法です。復習のたびに記憶を頼りに思い出すことで、知識が薄れかけた時点で定着が強まり、一晩に何度も読み返すよりも確かに残ります。
間隔反復を分かりやすく言うと
間隔反復は、学んだ内容に少しずつ間隔を広げながら戻っていく技法です。一晩に五回ではなく、今日一回、一〜二日後にもう一回、数日後にさらに一回、一〜二週間後にまた一回。間隔が広がるのは、思い出すたびに知識がより長く保たれるからです。
二つ目の重要な特徴は、復習が能動的であることです。ノートを読み返したり、動画を見直したりするのではなく、思い出そうとします。質問に答える、記憶を頼りにコードを書く、考えを自分の言葉で説明する。この思い出す努力こそが、復習を役立つものにします。「間隔反復とは何か」と聞かれたら、正確に答えると、それは「カレンダーに沿って並べた能動的な想起」です。
忘却曲線:復習しなければすべて消える理由
この方法の基礎は、19世紀末にヘルマン・エビングハウスが記述した観察です。忘れることは一定の速度では進みません。学んだ直後は急速に忘れ、その後は徐々に遅くなります。記憶に残っている割合を時間に沿って描くと、最初の数時間と数日で急に落ち、その後ゆるやかになる曲線になります。これを忘却曲線と呼びます。
ここから二つの実践的な結論が出ます。第一に、最も危険なのは授業後の最初の一、二日です。この間に何もしなければ、細部の大半が消えてしまいます。第二に、復習のたびに曲線は「リセット」されますが、その後の下降はより緩やかになります。何度か成功した復習の後には、知識は数週間から数か月も保たれるようになります。
「見て分かった」は「覚えた」とは違う
よい動画授業を見ると、すべてが分かったような感覚になります。しかし、この感覚は当てになりません。脳は認識を理解と取り違えます。画面に見覚えのあるコードがあれば認識できますが、それを自分で書けるということではありません。地図を眺めて旅をしたつもりになるのと同じで、道を知っていると思っていても、交差点で違うと気づきます。
受動的な視聴は、脳に「これは重要だ」という信号をほとんど与えないので、情報は短期記憶にとどまります。間隔反復は二つの問題を同時に解決します。思い出すことを求めるので、それは本当の知識の確認になります。そして、記憶が弱まり始めたタイミングで行われます。
連続して復習するより、間隔を置くほうがよい理由
試験前夜の詰め込みは、誰にとってもおなじみです。一晩である程度は詰め込めますし、翌日には使えます。しかし一週間後には、ほとんど残っていません。連続した復習は、材料がまだ新しいうちに行われるため、ほとんど思い出す必要がなく、定着もしません。
復習の間に間隔があると、一部の内容は少し忘れかけます。思い出すのが難しくなり、その有益な難しさによって、脳は結びつきを作り直し、強めます。だから、三日後に一回復習するほうが、同じ夜に三回復習するよりも効果があります。ただし、待ちすぎないことが重要です。内容を完全に忘れてしまえば、もう一度一から学び直すことになります。
| 連続した復習 | 間隔反復 | |
|---|---|---|
| いつ復習するか | 同じ日に、何度も | 少しずつ広がる間隔で |
| どう復習するか | 読み返す、見直す | 記憶を頼りに思い出す、課題を解く |
| 感覚 | 楽で、何でも分かっている気がする | やや大変で、何を忘れたかが見える |
| 一か月後の結果 | 断片しか残らない | 知識が保たれ、使える |
間隔反復の基本スケジュール
「正しい」間隔は決まっていません。教材の難しさや、前回どれくらい楽に思い出せたかによって変わります。しかし出発点としては、少しずつ広がる単純なスケジュールで十分です。数える起点は、そのテーマを学んだ日です。
| 回数 | いつ | 何をするか |
|---|---|---|
| 1 | 同じ日か翌日 | ノートを見ずに要点を思い出し、自分の疑問に答える |
| 2 | 2〜3日後 | テーマに関連する課題を解き、例を変えてみる |
| 3 | 1週間後 | テーマを新しい課題に応用する |
| 4 | 2〜3週間後 | 素早く確認する:説明する、記憶から書く |
| 5 | 1〜2か月後 | プロジェクトで使う、またはテストを受ける |
柔軟性の基本ルールは、楽に思い出せたら次の間隔を広げ、苦労したり思い出せなかったりしたら間隔を縮めて、より早くそのテーマに戻ることです。アプリもこの仕組みで動いていますが、間隔を自動で計算してくれるという違いがあります。
プログラマーのための間隔反復
プログラミングは事実の暗記ではなく技能です。ですから「定義と答え」のカードだけでは足りず、行動によって復習する必要があります。新しいテーマごとに、次の三段階が役立ちます。
- 1日目:記憶を頼りに再現する。 授業後に動画を閉じ、扱われたコードを自分で書きます。見てもよいですが、ヒントを見るたびに印を付けてください。その場所が、もう一度復習すべき箇所です。
- 3日目:変更する。 同じコードを、条件、データ、追加のチェックなどを変えて修正します。これは機械的な暗記ではなく、理解を検証します。
- 1週間後:新しい課題。 そのテーマが必要だが、直接名前が挙がっていない課題を解きます。どんなときにその手法が使えるかを見極められるようになります。
例:バブルソート
授業でバブルソートを扱ったとします。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件の予定を入れます。1日後、3日後、1週間後、2〜3週間後。
- 予定には「Pythonを復習」ではなく、具体的な作業を書きます。たとえば「再帰の問題を2問解く」。そうすれば結果を測れます。
- テーマをタグ付きのまとまり(
#python_basics、#git、#sql)に分け、関連するテーマをまとめて復習します。そうすると、テーマ同士の結びつきが生まれます。 - 復習にはポモドーロ・テクニックを使います。25分の作業と5分の振り返り。何ができて何ができなかったか、いつ戻るかを確認します。
復習がうまくいかなかったら、取り消すのではなく、近い日に移してください。一度の復習を飛ばすことは怖くありませんが、連鎖を途切れさせることは避けたいものです。
よくある間違い
- 思い出す代わりに読み返す。 ノートを読むと、動画と同じく見覚えの感覚が生まれます。まず自分で答えようとしてから、確認してください。
- すべてを同じ頻度で復習する。 簡単なテーマは長い間隔にしてよく、時間は難しいテーマに使いましょう。
- 練習なしで復習する。 コードについての復習とは、コードを書くことです。構文を覚えても、課題を解かなければ技能にはなりません。
- キューが多すぎる。 毎日の復習に一時間かかるなら、そのシステムは続きません。テーマを減らしてでも、規則正しく続けてください。
- スマートフォンを手にしたまま復習する。 気が散れば集中は壊れ、思い出す作業は形式的なものになってしまいます。
まとめ
間隔反復とは、少しずつ間隔を広げながら行う能動的な想起です。忘却曲線が基礎にあり、教材は最初の数日で最も速く忘れられ、記憶を頼りにした復習のたびに忘却が遅くなります。プログラマーにとっての最良の形式は、コードで復習すること、つまり記憶を頼りに書き、変更し、新しい課題で使うことです。道具はAnkiでも、具体的な作業を書いた普通のカレンダーでもかまいません。動画講座の視聴に復習をどう組み込むかは、動画講座の効果的な学び方を扱う入門講義で実践的に解説しています。
よくある質問
知識を長く定着させるには、何回復習すればよいですか?
通常は1〜2か月の間に、間隔を広げながら4〜5回復習すれば十分です。テーマの難しさによって異なり、楽に思い出せるなら、間隔をより早く広げられます。
アプリを使わずに間隔反復はできますか?
できます。カレンダーで十分です。テーマを学んだら、1日後、3日後、1週間後、2〜3週間後に復習を予定し、それぞれに具体的な課題を書いてください。
復習を飛ばしてしまったら、どうすればよいですか?
近い空いた日に行ってください。そのテーマが思い出しにくかったなら、次の間隔を縮めます。連鎖を最初からやり直す必要はありません。
間隔反復はプログラミング言語の学習に向いていますか?
向いています。ただし、行動によって復習する必要があります。記憶を頼りにコードを書き、修正し、新しい課題を解いてください。カードは構文やコマンドには役立ちますが、技能は練習によって身につきます。
間隔反復は1日にどれくらいの時間がかかりますか?
無理のない量は1日15〜20分です。復習のキューが新しいテーマを上回るほど増えてきたら、新しいテーマの追加を減らしてください。