いかに効率良く学習を進めていくか
図1
解決したい課題目的を明確にする
まず学習を始める前に今自分が何を解決したいのか、または、どういう成果を目的としているのかを明確にします。
例えば、「Web開発をしてみたい」という目的を聞いてどんな印象を持たれるでしょうか?
ひとくちにWeb開発というのは概念の幅は広すぎで、目的としての解像度が低く、これでは学ぶべきスコープが広くなりすぎてしまい途中で断念する可能性が高くなります。
だから、「Web開発がしたい」からもう少し踏み込んで、「自分が投稿した記事を沢山の人に見てもらうためのブログシステムを作りたい」など、目的の輪郭をはっきりさせる必要があります。
薄く広くアンテナを張り巡らし新しい知見の存在を知る
図1で示した学習パイプラインで、常に起点となるのはイシューゾーンの「課題」や「目的」ですが、これらの価値を高めるために必要な事が、アンテナゾーンの「興味」や「違和感」をトリガーに広く浅く知見を増やす工程になります。
人間は認知したことしか課題として気付きにくいので、アンテナゾーンでは興味や違和感の趣くままに読書をしたりインターネット記事をリサーチしたりします。
この時大切なことは、多少わからないことがあっても読み飛ばすくらいの気持ちでスピード重視で行うこと。
リサーチした内容が、現在解決すべき課題とマッチした場合に以下の学習回転ゾーンで深く学びます。
例えば前節の「自分が投稿した記事を沢山の人に見てもらうためのブログシステムを作りたい」という目的がすでにある場合、このアンテナゾーンでは「LaravelやRuby on RailsといったWebフレームワークがあるようだ」とか「WordPressというものがあるようだ」程度の浅く広い知見にとどめます。
解決したい問題に合致する新しい知見を学習回転ゾーンで回す
いよいよ「目的」や「課題」が実現する価値が高いと自分で判断でき実行に移すことになったら、今までアンテナゾーンで培ってきた広く浅い知見から、その目的達成の為に最適であろう項目について深く学びます。
例であげた「自分が投稿した記事を沢山の人に見てもらうためのブログシステムを作りたい」という目的を達成する場合を考えたとき、今回は練習も兼ねてLaravelで実装することを選択するとします。
この時学ばなければならないのは最低限以下の要素になるはずです。
- 投稿者の認証機能
- 投稿者の記事登録機能
- 投稿者の記事更新機能
- 投稿者の記事削除機能
- 公開側の記事一覧ページ
- 公開側の記事詳細ページ
Laravel全体を学ぼうとすれば時間がいくらあっても足りませんので、まずは目的を達成するために学ぶべき箇所だけを学ぶようにします。
体系的に学ぶのは「全体のうちここだけは知っている」という箇所をつくってからのほうが理解する難易度がぐんと下がります。
深く学んだ内容をアウトプットする
学んだ内容をなるべく早い段階でアウトプットします。
- コーディングをしてみる
- 記事にまとめる
- 人に説明する
- 試験を受ける
など、アウトプットをしてみることで自分の知識の粗に気がつくことができ、その粗こそが次に学習すべきポイントとなります。
アウトプットの際にでた粗を埋めるために学習回転ゾーンに戻る
分かったつもりになっていて理解が乏しい箇所にはアウトプットしてみないと気が付けない事が多いです。
アウトプットによって顕在化した粗い箇所に絞ってさらに深く学習していきます。
このサイクルを何度か回していくうちにアウトプットの質が高まり、結果として理解度が高まります。
理解の回転ゾーンと学習回転ゾーンを行き来してアウトプットを太くする
ここで重要なポイントは、理解するからアウトプットができるのではなく、アウトプットの質を高める為のサイクルを回すことで理解が高まるという点です。
そして、アウトプットによって高まった理解によって、アウトプットそのものの出力が大きくなります。
あくまでも、理解のサイクルの起点は「アウトプット」であり、いわゆる鶏卵問題ではないという事です。
Discussion