プログラミング学習、いきなり分厚い本から読み始めてない?
プログラミングを始めるとき、まず何をするだろうか?
多くの人は「まずは基礎を固めないと」って思って、入門書を買うんよね。オライリーの分厚い本とか、評判のいい技術書とか。ワイも最初はそうやった
やけど、正直に言うと、これって遠回りなんよな
読んでるときは「なるほどな」って思うけど、いざ実装しようとすると全然覚えてない。「あれ、この章読んだはずやのに」って何度もページを戻る。そんな経験ない?
X や技術系のコミュニティでは「本派 vs 実践派」の論争がよく起こるんやけど、これって実は学習フェーズの違いを混同してるだけなんよね
この記事では、脳科学と学習理論の観点から「なぜ最初に本を読むより手を動かすべきなのか」を説明していく
X でも投稿してる
結論:脳の仕組み的に「実践 → 理解」の順番が正しい
先に結論を言っちゃうと、人間の脳は抽象概念よりも体験を通じた学習(経験学習)のほうが定着しやすいらしいのよ
これは単なる個人の感想やなくて、教育心理学や神経科学の研究で裏付けられてる話なんよね
デービッド・コルブっていう教育理論家が提唱した「経験学習モデル(Kolb's Experiential Learning Cycle)」では、学習は次の 4 段階を循環するとされてる
- 具体的経験(手を動かす)
- 省察(なぜ動かない?と考える)
- 抽象化(理論や原則を理解する)
- 実践(理解した原則を試す)
この順番が大事なんよ
「最初に本を読む」派は ③ の抽象化から入ろうとする。やけど、経験がない段階では抽象的な理論を結びつける参照体験がないから、理解が表面的になりやすい
よく分からんものを読んでも感動しないし、覚えない。「あーそう」みたいな感じで流れていくだけ
経験学習モデルをもうちょっと深掘りしてみる
コルブの経験学習モデルは、1984 年に発表されて以来、企業研修や教育現場で広く使われてる理論なんよ
このモデルの面白いところは、学習を一方通行のプロセスとして捉えるんやなくて、循環するサイクルとして捉えてる点なんよね
具体的経験(Concrete Experience)
まず最初のステップは「具体的経験」。これは実際に手を動かして何かをやってみることやな
プログラミングで言えば、とりあえずコードを書いてみる、サンプルを動かしてみる、エラーを出してみる。この段階では完璧に理解してなくてもいい
重要なのは「生の体験」を得ることなんよ
省察(Reflective Observation)
次に来るのが「省察」。これは自分の体験を振り返って観察することやな
「なんでこのコードは動かないんやろ?」「この警告メッセージはどういう意味やろ?」「このライブラリはどういう仕組みで動いてるんやろ?」
こういう疑問が湧いてくる段階なんよね。この疑問こそが学習のエネルギー源になる
抽象化(Abstract Conceptualization)
ここでやっと理論や原則の理解が入ってくる
省察で出てきた疑問に対して、ドキュメントを読んだり、記事を調べたり、本を参照したりする。「あー、これはこういう理屈で動いてたんか」って腹落ちする瞬間やな
この段階になって初めて、本の内容が「意味のある情報」として脳に入ってくるんよ
実践(Active Experimentation)
最後は、理解した原則を使って新しい実験をしてみること
「じゃあこのパターンは別のケースでも使えるんちゃう?」って応用してみる。これでまた新しい具体的経験が生まれて、サイクルが回り始める
このサイクルを何周も回すことで、知識が深く定着していくんよ
神経科学が教えてくれる「詰まること」の価値
経験学習モデルは理論やけど、これって脳科学的にも裏付けられてるんよね
ポイントは「エラーシグナル」っていう概念なんよ
エラーシグナルが学習を強化する仕組み
脳が「予測と現実のズレ(エラー)」を感じたとき、ドーパミンが放出されるらしい
ドーパミンって聞くと快楽物質ってイメージやけど、実は「学習シグナル」としての役割もあるんよ。予測と現実にズレがあると、脳は「お、これは新しい情報やな。覚えとかなあかん」って判断して、その情報を強化するために神経回路(シナプス結合)を太くする
つまり、「詰まる → 調べる → わかる」という流れが、最も脳科学的に報酬の出る学習なんよね
この「わかった瞬間の快感」こそが、脳がもう一度学びたくなる仕組みなんよ。ゲームでいう「レベルアップの音」みたいなもんやな
最初に本を読む勉強法の問題点
最初に本を読む勉強法は、この「詰まり」を避けてしまう
本は基本的に、すでに整理された知識を順序立てて説明してくれる。だから読んでるときは「なるほど」って思うけど、脳にとっては「予測と現実のズレ」が発生してないから、エラーシグナルが出ない
結果として、報酬系が動かず、記憶定着やモチベーション維持が弱くなる
実際、心理学の研究でも「desirable difficulty(望ましい困難)」っていう概念があって、適度な困難さがある学習のほうが長期記憶に残りやすいってことが分かってるんよね
ワイの実体験:オライリー本を何周しても理解できなかった話
ここでワイの失敗談を話させてもらうわ
何年か前、新しいフレームワークを学ぼうと思って、評判のいいオライリー系の本を買ったんよ。めっちゃ分厚い本で、レビューも高評価やったから「これを読めば完璧やろ」って思ってた
で、真面目に何周も読んだんよ。マーカー引いたり、メモ取ったりして
読んでるときは「理解した」って思う。「このパターンはこういうときに使うんやな」とか「この API の設計思想はこうなんやな」とか
やけど、いざ実装する段階になって愕然としたんよ
全然覚えてない
「あれ、これどうやって書くんやったっけ?」「このメソッドの引数の順番どっちやったっけ?」「このエラーハンドリングってどう書くんやったっけ?」
結局、本をパラパラめくりながら実装することになって、「この時間、最初から手を動かしとけばよかったやん」って後悔したんよね
それ以降、ワイは学習方法を変えたんよ。まず最小限のチュートリアルをやって、とにかく動くものを作る。詰まったら調べる。わからんことをリスト化する。そのリストを埋めるために本やドキュメントを読む
この順番にしてから、学習効率がめっちゃ上がったんよ
詰まることは恥ずかしいことやない、学習のゴールデンタイムや
プログラミングを始めたばかりの人は、エラーが出ることを恥ずかしいとか、自分の能力が低いって思いがちや
やけど、これは完全に逆なんよ
エラーが出るってことは、今まさに学習が起こってるサインや
詰まるときに脳で何が起こってるか
あなたがコードを書いて、エラーが出たとする
最初は意味わからんよね。「セミコロン?どこに?」ってなる
でもこのとき、脳の中では次のことが起こってるんよ
- 予測と現実のズレを検出(「動くと思ってたのに動かん」)
- エラーシグナルが発火
- ドーパミンが放出
- 注意が集中する
- 問題解決モードに入る
この状態が、最も学習効率の高い状態なんよ
エラーメッセージを調べて、「あー、この行の最後にセミコロンつけ忘れてたんか」って気づいた瞬間、脳はその情報を「重要な情報」として記憶に刻み込む
次に同じエラーが出たとき、すぐに原因が分かるようになる。これが学習ってことや
詰まらない学習は学習やない
逆に、本を読むだけの学習は詰まらない
著者が親切に全部説明してくれるから、「あー、そういうことね」で終わる。脳にとっては「新情報やけど、別に困ってないし」ってなって、記憶の優先度が低くなるんよ
これは「認知的負荷理論」とも関連してる話で、適度な認知的負荷がかかってる状態が最も学習効果が高い
簡単すぎても、難しすぎてもあかん。「ちょっと頑張れば解決できそう」っていう絶妙なラインが理想や
さらに理解を深める方法:学んだことを記事にする
ここまでで「実践 → 理解」の流れが大事やってことは伝わったと思うけど、さらにもう一段階上げる方法があるんよ
それが「アウトプット」、特に「記事化」なんよね
なぜ記事に書くと理解が深まるのか
詰まって、調べて、解決した。ここまででも十分学習は起こってる
やけど、それを記事にしようとすると、さらに深い理解が必要になるんよ
なぜなら、記事を書くときには次のことをしないといけないから
- 自分が理解した内容を整理する
- 他人に説明できるレベルまで咀嚼する
- 本当に合ってるか何度も確認する
- 参考資料を探して裏付けを取る
- 具体例を用意する
この過程で、「あれ、ここって本当にこういう理由なん?」って疑問が出てくるんよ。で、また調べる。より深い理解に到達する
これは「ファインマン・テクニック」って呼ばれる学習法とも関連してる。ノーベル物理学賞を取ったリチャード・ファインマンが推奨してた方法で、「何かを本当に理解したければ、それを誰かに説明できるようになれ」っていう考え方やな
記事化のもう一つの効果:反復学習
記事を書くと、何度も同じ内容を見返すことになるんよ
- 書いてるとき
- 見直してるとき
- 公開後に読み返すとき
- 誰かからコメントもらったとき
この反復が、記憶の定着をさらに強化する
心理学でいう「間隔反復(Spaced Repetition)」の効果もあるし、「生成効果(Generation Effect)」っていう、自分で情報を生成することで記憶が強化される現象も起こるんよ
ワイも、記事に書いた内容はほぼ忘れんようになったわ。逆に、記事にしてない知識は案外すぐに忘れる
実践学習の具体的なやり方
「実践が大事なのは分かったけど、具体的にどうやればいいん?」って思うよね
ここでは、ワイが実際にやってる方法を紹介するわ
ステップ 1:最小限のチュートリアルから始める
いきなり何もない状態から始めるのはハードル高すぎるから、公式のチュートリアルとか、「10 分でできる ○○」みたいなやつから始めるんよ
ただし、ここで大事なのは「理解してから進む」んやなくて、「とりあえず動かす」こと
コピペでもいい。まず動くものを目の前に出現させることが大事
ステップ 2:自分なりに改変してみる
チュートリアルが動いたら、次は自分なりに改変してみるん
- ボタンの色を変えてみる
- テキストを変えてみる
- 機能を一つ追加してみる
小さな変更でいい。この段階で、「あれ、これ変えたら動かんくなった」っていう詰まりが発生する。それが学びのチャンスや
ステップ 3:詰まったことをリスト化する
エラーが出たり、「これってどういう意味やろ?」って疑問が出たりしたら、それをリスト化するんよ
例えば
- 「useState の第二引数は何?」
- 「useEffect の依存配列って何のためにあるん?」
- 「この Warning メッセージはどういう意味?」
このリストが、あなたの「学ぶべきことリスト」になる
ステップ 4:リストの項目を一つずつ潰していく
リストができたら、一つずつ調べて潰していくんよ
このとき初めて、公式ドキュメントとか本とか記事を読む
やけど、この段階で読む情報は、さっきまでの「なんとなく読む」とは質が違うんよ。あなたには明確な疑問があって、その答えを探してるから、情報がめっちゃ頭に入ってくる
ステップ 5:理解したことを使って何か作る
リストの項目が潰れたら、その知識を使って何か作ってみるんよ
To-Do リストでもいいし、簡単な計算機でもいい。「学んだことを組み合わせたら何ができるか」を試す
これでコルブの経験学習サイクルが一周回る
学習には「探索フェーズ」と「体系化フェーズ」がある
ここまで「実践が先」って話をしてきたけど、これは学習の全フェーズに当てはまるわけやない
学習には大きく分けて二つのフェーズがあるんよ
探索フェーズ:疑問を増やす時期
学習の初期段階は「探索フェーズ」や
この時期の目的は、知識を完璧に習得することやなくて、「疑問を増やすこと」なんよ
- 「これってどういう仕組み?」
- 「なんでこう書かないといけないん?」
- 「他のやり方はないん?」
こういう疑問がたくさん出てくる状態が理想や
このフェーズでは、本を読んでも効率悪いんよ。なぜなら、本は「疑問に答える」ために書かれてるから。疑問がない状態で読んでも、何が重要な情報なのか判断できない
体系化フェーズ:点を線にする時期
ある程度実践を積んで、知識の断片がたくさん集まってきたら、今度は「体系化フェーズ」に入るんよ
この時期の目的は、バラバラに覚えた知識を「体系」として整理することや
- 「あの機能とこの機能って、実は同じ原理で動いてたんやな」
- 「このデザインパターンって、こういう思想で作られてるんやな」
- 「この言語の特徴って、こういう哲学があったんやな」
こういう「点と点が線になる」瞬間が訪れるんよ
この段階で初めて、本の価値が最大化する
なぜなら、本は「体系的に整理された知識」を提供してくれるから。あなたの頭の中にある断片的な知識を、綺麗な体系として再構築してくれるんよ
本の役割は「出発点」やなくて「補強」
つまり、本の役割は『出発点』ではなく、『経験を理論で補強する段階』なんよね
ワイは今、新しい技術を学ぶときは次の順番でやってるわ
- 探索フェーズ:チュートリアルを動かす → 改変する → 詰まる → 調べる(1〜2 週間)
- 体系化フェーズ:本を読んで体系的に理解する(数日〜1 週間)
- 応用フェーズ:学んだことを使って自分のプロジェクトを作る(継続的)
このサイクルを回すようになってから、学習効率がめっちゃ上がったわ
この 2 段階を自覚できてる人は強い
学習効率が高い人って、この「探索フェーズ」と「体系化フェーズ」の違いを自覚的に使い分けてるんよね
フェーズを混同すると非効率になる
逆に、学習が進まない人は、このフェーズを混同してることが多い
例えば
- 探索フェーズなのに、完璧に理解しようとして先に進めない
- 体系化フェーズなのに、まだ手を動かし続けて理論を学ばない
どっちも非効率や
探索フェーズでは「とりあえず動かす」「分からんことはリスト化して後回し」っていう割り切りが大事
体系化フェーズでは「手を止めて、じっくり理論を学ぶ」っていう時間の使い方が必要
学習速度が指数関数的に上がる仕組み
この 2 段階を自覚的に使い分けられるようになると、学習速度が指数関数的に上がるんよ
なぜなら、探索フェーズで得た疑問が、体系化フェーズでの学習を加速させるから
本を読んでても、「あ、これ前に詰まったやつや」「この理論、前に実装したときに感じたやつや」って、実体験と結びつくんよね
結びつくと、記憶の定着が段違いに強くなる
さらに、体系化で得た理論を、応用フェーズで試すことで、また新しい疑問が生まれる。その疑問が次の探索フェーズにつながる
実践 → 理論 → 応用 → 実践 → 理論 → 応用...
このループを回せる人ほど、成長速度が指数関数的に上がる
よくある反論に答えていく
ここまで読んで、「でも...」って思うこともあると思うから、よくある反論に答えていくわ
反論 1:「基礎を固めないと応用できないやろ?」
これはよく聞く反論や。「基礎をしっかり学んでから実践すべき」っていう考え方
でも、この「基礎」って何を指してるん?
例えば、React を学ぶときに、JavaScript の基礎を完璧にしてから React に進むべき?それとも HTML/CSS も完璧にすべき?いやいや、コンピュータサイエンスの基礎から?
基礎の範囲を厳密に定義すると、キリがない
むしろ、実践を通じて「これは基礎として知っとかなあかんな」って気づくほうが効率的や
React を触ってて、「あれ、JavaScript の this の挙動がよく分からん」ってなったら、そのとき JavaScript の this を学べばいい。必要性を感じてから学ぶから、頭にも入りやすいんよ
反論 2:「本を読まないと間違った理解をするやろ?」
これも確かにあるんよね。独学で変な癖がついたり、間違った理解をしたまま進んだり
やけど、これは「本を読めば防げる」ってもんでもない
本を読んでても、実践してないと、間違った理解をしてることに気づかんのよ。「理解したつもり」が一番怖い
むしろ、実践 → 詰まる → 調べる → 理解 → また実践、っていうサイクルを回すほうが、間違いに気づきやすいんよ
なぜなら、間違ってたらコードが動かんから。即座にフィードバックが得られる
反論 3:「時間がかかるやろ?本を読むほうが早いやろ?」
短期的には本を読むほうが早く感じるかもしれん
やけど、長期的に見ると、実践から入るほうが圧倒的に早い
なぜなら、本を読んでから実践する人は、実践段階でまた詰まって、結局調べ直すから。つまり、二度手間になるんよ
それやったら、最初から実践して、必要なことだけを調べるほうが効率的や
さらに、実践から入った人のほうが、記憶の定着が強いから、長期的に見ると復習の時間も減るんよ
「本派 vs 実践派」論争の本質
SNS でよく見る「本派 vs 実践派」の論争やけど、これって実はどっちも正しい
なぜなら、彼らは違う学習フェーズの話をしてるから
本派の主張を翻訳すると
「本を読むべき」って主張してる人は、多くの場合、すでに探索フェーズを終えた人なんよ
彼らはすでに実践を積んでて、断片的な知識がたくさんある。だから本を読むと、「あーそういうことか」ってスッと理解できる
彼らにとっての「本を読む」は、体系化フェーズの話をしてるんよ
実践派の主張を翻訳すると
「手を動かすべき」って主張してる人は、初学者の気持ちを覚えてる人か、今まさに新しい技術を学んでる最中の人や
彼らは「本を読んでも頭に入らん」っていう体験をしてる。だから「まず手を動かせ」って言うんよ
彼らにとっての「手を動かす」は、探索フェーズの話をしてる
どちらが正しいかではなく、どの段階にいるか
つまり、「本を読むべきか、実践すべきか」という問いには、唯一の正解がない
正解は「あなたが今どの学習段階にいるか」で変わるんよ
- 学習初期(探索フェーズ):実践が先、本は後
- 学習中期(体系化フェーズ):本を読んで体系化
- 学習後期(応用フェーズ):実践しながら本で補強
この流れを理解してる人は、無駄な論争に時間を使わずに、自分の学習を進められるんよね
まとめ:脳を味方につけた学習をしよう
長くなったからまとめるわ
プログラミング学習で「最初に本を読むより手を動かすべき」理由は、脳の仕組みと学習理論の両面から説明できるんよ
-
経験学習モデル:人間の学習は「具体的経験 → 省察 → 抽象化 → 実践」のサイクルで進む。抽象化(本を読む)から入っても、参照する体験がないから定着しない
-
神経科学的根拠:詰まることでエラーシグナルが発火し、ドーパミンが放出されて記憶が強化される。本を読むだけではこの仕組みが働かない
-
学習フェーズの違い:学習初期は「探索フェーズ」で疑問を増やすことが目的。本の価値が最大化するのは「体系化フェーズ」になってから
-
アウトプットの効果:学んだことを記事化することで、さらに理解が深まり、記憶が定着する
ワイ自身、最初は本を何周も読んでから実践するタイプやったけど、全然身につかんかった。実践から入るスタイルに変えてから、学習効率がめっちゃ上がったんよ
「本派 vs 実践派」の論争は、学習フェーズの違いを混同してるだけ。どちらが正しいかではなく、「今のあなたにはどちらが必要か」を考えることが大事や
これからプログラミングを学ぶ人、今学習中の人は、ぜひ「実践 → 理論 → 応用」のサイクルを意識してみてほしいわ。きっと学習速度が変わるはず