プログラミング学習の学び方を学ぶ技術について調べてみた
学び方を学ぶ技術:効率的な学習とアウトプットを求めて
こんにちは、古閑です。
最近、Zennにて技術ブログを書き始めてみました。改めて「学ぶ」ことの難しさと面白さを感じています。今回は、その学びの質をどう高めていくか、プログラミング学習の自習論について手元にある(積読していた)「SOFT SKILLS]と「達人プログラマ」という本から学んだことを共有します。
1. 学びの本質は「やってみて、教える」にある
『SOFT SKILLS』という本に、アインシュタインの「教育とは、学校で学んだことを忘れたあとで、まだ残っているもののことである」という言葉があります。この言葉が示すように、知識をただ暗記するのではなく、身につけることこそが重要だと感じました。「独学は学校で教えてくれるスキルではない。個人ではなく、グループを相手にするために設計されたシステムでは全く逆のことが教えられていると言ってもいいくらいだ。」と述べ、既存の教育システムが独学を阻害する可能性に言及しています。
この本が提唱するのは、**「実際にやってみて、さらに教えると良く学べる」**という能動的な学習方法です。
-
遊び(実践)の重要性
- まずは深く考えず、手を動かして試してみることが大切です。「何をしているのかわからなくても気にしなくていい。ただ楽しもう。」という言葉に勇気づけられました。この遊びの中から自然と湧いてくる疑問こそが、本当に知りたいことなのです。
-
教える(アウトプット)の重要性
- 遊びの中で生まれた疑問を解決したら、その学びを誰かに教えることで、知識は定着します。ブログに書く、友人に話すといった簡単なアウトプットでも、「自分の言葉で言い直し、頭の外のどこかに思考を組織する」ことが、深い理解に繋がるのです。
この「やってみて、教える」というサイクルを回し続けることが、学習効率を高める鍵だと確信しました。以下具体的な学習プロセスについて紹介します。
独学のための10ステッププロセス(SOFT SKILLS)
「SOFT SKILLS」で提示される10ステッププロセスは、新しいテクノロジーを効率的に身につけるための実践的なフレームワークです。このプロセスは、学習を「遊び、実験、学んだことを他人に教える」という根本的な指導原理に基づいています。
1-1. システムの背景となるアイデア
知るべき3つのこと: 効果的にテクノロジーを利用するために、著者は以下の3つの情報を特定することが重要であると述べています。
どうすれば始められるか: 学び始めるための基本的な知識。
テーマの幅: 学ぼうとしているものの規模と可能性の概要。
基礎: 基本的なユースケースと、日常用途の80%をカバーする20%の知識。
このアプローチにより、「最初にすべてを学ぼうとしていたときには、本当に重要な部分とその他の小さな細部がミックスされてしまい、時間を無駄にしていた」という問題を回避し、重要な部分に焦点を当てることができます。
1-2. 10ステップシステム
10ステップは大きく「1度限りのステップ(調査フェーズ)」と「繰り返すステップ(実践フェーズ)」に分かれます。
1度限りのステップ(ステップ1〜6:予備的な調査と計画) これらのステップは、学習の目標を明確にし、計画を立てるための準備作業です。
ステップ1:全体像をつかむ: テーマの基本的な調査を行い、その「どのようなものなのか、どれくらい大きいのか」を把握します。深入りせず、大まかな理解に留めることが重要です。
ステップ2:スコープを決める: 広範なテーマを、限られた時間で「管理しやすい範囲」に絞り込みます。例えば、「デジタル写真のすべて」ではなく「ポートレート写真を撮影するためのデジタル写真術」のように具体的に設定します。「人は何か特定の理由のために何かを学ぼうとするものなので、その理由を示すとスコープを定義しやすくなる。」
ステップ3:成功の基準を決める: 学習が「どうなれば成功なのか」を明確で具体的な文で定義します。「達成したことについて曖昧に述べる文を作らないようにしよう。そうではなくて、目標に達したらできるようになっているはずのことや具体的な成果をリストにまとめよう。」
ステップ4:参考資料を見つける: 幅広い種類の参考資料(本、ブログ、ビデオ、専門家、ポッドキャスト、サンプルコードなど)をできる限り多く集めます。この段階では質は問わず、ブレインストーミングのように行います。
ステップ5:学習プランを作る: 他の人がそのテーマをどのように教えているかを参考にしながら、学習の「独自の経路」(本の目次のような)を作成します。
ステップ6:リソースをフィルターにかける: ステップ4で集めた参考資料の中から、自分の学習プランと目標達成に最も役立つ「少数の目標達成に役立つ最も優れたものだけ」に絞り込みます。
繰り返すステップ(ステップ7〜10:学習・実践サイクル) これらのステップは、学習プランの各モジュールごとに繰り返し適用される「学習‐実践-学習-教え」(LDLT)方式です。
ステップ7:使い始められるようにする方法を学ぶ: 「次のステップで遊べるようにする」ために必要な最小限の情報を学びます。深入りせず、「自分がしているのは何かがおおよそわかる程度の情報を集める」ことに集中します。
ステップ8:遊びまわる: ステップ7で得た知識をもとに、実際に試行錯誤し、実験します。「何をしているのかわからなくても気にしなくていい。ただ楽しもう。」この段階で、「脳は自然に疑問を生み出していく。」
ステップ9:役に立つことができるところまで学ぶ: ステップ8で生まれた疑問に対する答えを見つけるために、集めた参考資料を用いて深く学習します。「読んで実験、見て実践を通じてテーマの理解を完全なものにするために必要なだけ時間を使おう。」
ステップ10:教える: 学んだことを他人に教えることで、知識を定着させ、理解を深めます。「自分が何かを学んだということを確かに知るための方法はそれ以外にない。」ブログ、YouTube動画、友人との対話など、様々な方法が提案されています。教えることで、「学んだことの中に含まれている隙間を埋めるための手段として非常に優れている。」
2. 長期的な視点で取り組む「知識ポートフォリオ」
もう一冊、『達人プログラマ』という本からは、長期的なキャリアを見据えた学習法を学びました。
知識を株や債券のように**「知識ポートフォリオ」**として捉え、戦略的に管理するという考え方です。
- 定期的な投資と多角化: 自分が今取り組んでいる技術(リモートセンシングやGIS)だけでなく、毎年新しい言語を学ぶなど、知識の幅を広げることが、変化に強いエンジニアになるための秘訣だと分かりました。
- 批判的な思考: ベンダーやメディアの誇大広告に惑わされず、読んだり聞いたりした情報を常に批判的に分析することが、知識の正確性を保証します。
-
WISDOM :効果的な伝達の要素(WISDOMの合言葉)
W (What): 聞き手に何を知って欲しいのか。
I (Interest): 聞き手の興味を引く要素は何か。
S (Sophisticate): 伝達内容はどれくらい洗練されているか。
D (Detail): 聞き手はどの程度の詳細を求めているか。
O (Own): 誰にその情報を知ってもらいたいのか。
M (Motivate): 聞き手を聞き入れさせるにはどうするか。
これらの要素を考慮することで、聞き手のニーズ、興味、能力に合わせた効果的なコミュニケーションが可能になります。
3. 今後の行動指針
これらの自習論を、現在続けているZennでの活動にどう活かしていくか。
- 10ステップ学習法: 『SOFT SKILLS』で紹介されている「10ステッププロセス」を参考に、学習目標を明確にし、計画的に実践とアウトプットを繰り返していきます。
- 「とりあえず学んで動かしてみる」: このモットーを胸に、まずはコードを書き、手を動かすことを最優先にします。
- アウトプットの継続: Zennブログを、学んだことを誰かに教えるための「教えの場」として活用し、90日以上続けることを目標に、知識の定着を図ります。
私の学習記録が、同じように自習に取り組む誰かの役に立つことを願っています。
Discussion