プログラミング習得の法則
もうすぐ6月も終わります。この記事は4月から入社して、新入社員研修で初めてプログラミングを学んだ方へのメッセージです。
はじめに
プログラミングメンター(指導者)の仕事をしていると、プログラミングの習得には3つのステップがあることに気づきます。
- 覚える
- わかる
- できる
ここでは覚える、わかる、できるの違いについて考察します。
ステップ1:覚える
初めてプログラムを学ぶとき、変数や配列、if文やfor文といった様々なルールを覚えないといけません。プログラミング習得の第1歩は「覚える」ところからスタートします。たとえばJavaプログラミングを習得する場合は、次のようなプログラムを書くところから始まります。
public class Main { public static void main(String[] args) { System.out.println("Hello World"); } }
これはHello Worldプログラムという有名なものですが、学び始めの頃は、publicってなんだろう、staticってなんだろう、voidって?という状態です。最初の頃は一つひとつのキーワードを無理して読み解こうとせずに、まずはこのとおり書けば動くということを「覚える」ところが大切です。「ぱぶりっくすたてぃっくぼいどめいん・・・」と何度も読んで(ときには復唱して)覚えます。「覚える」ためには読む、聞くといったインプット作業が中心となります。
ステップ2:わかる
コードの書き方を「覚えた」として、次の段階に進むには「覚える」から「わかる」へステップアップする必要があります。それでは「覚える」と「わかる」の違いはどこにあるのでしょうか。
System.out.println("Hello World");
たとえば上記のコードを見て「標準出力へHello World文字列を出力している」とか「Systemクラスのstatic変数outのprintlnメソッドを呼び出している」とか、自分の言葉でコードを解説できる人は「わかっている」人です。「覚える」と「わかる」の違いは単純で、自分の言葉で説明できるかどうかです。
「覚える」から「わかる」の段階へステップアップするためには、覚えたことを自分の言葉で説明する練習をすれば良いのです。自分の言葉で説明する場合、説明した内容を評価してくれる相手が必要です。相談できるメンターや共に学ぶ仲間の身近にいることはプログラミングの理解を深める大事な要素になるでしょう。
自分の言葉で説明するとは、話すという動作に限定するわけではありません。このブログのように文章にしてみるのも、自分の言葉で説明する練習の一つです。自分の言葉で説明するとは覚えた知識をアウトプットすることなのです。
ステップ3:できる
野球やサッカーのようなスポーツ、ピアノやギターといった楽器もそうですが「わかる」と「できる」は別物です。ギターを例に考えてみましょう。6本の弦を左手で抑えて、右手で弦を弾けば音が鳴る、というのは多くの人がわかります。またCコードやGコードといったコード進行について理解のある方もいるでしょう。しかし、当たり前のことですが、ギターの弾き方はわかったとしても、必ずしも上手にギターが弾けるというわけではありません。
プログラミングの世界においても同じで「わかる」と「できる」は大きく違います。プログラムの「わかる」人はコミュニケーションに参加することはできますが、コンピュータに向き合ってプログラミングできるとは限りません。
「わかる」から「できる」の段階へステップアップするには実践練習しかありません。つまり、コンピュータに向き合って、キーボードをタイプしてプログラミングする時間を作らなければなりません。「できる」ようになるためには疲れやストレスを伴う反復作業が必要なのです。これは楽器やスポーツの習得と同じです。繰り返しますが大事なのは反復練習です。プログラミングの習得の早い人の多くは、学んだことを丁寧に復習する人です。
「僕はスポーツの練習じゃなくて”武井壮を動かす練習”をしている」
武井壮さんの「僕はスポーツの練習じゃなくて”武井壮を動かす練習”をしている」という話があります。
プログラミングも同じで、頭の中でイメージしていることと、実際に体を使って表現することの間には乖離があって、それを埋めるためには質の良い練習をしないといけません。
「1万回のキックを1度だけ練習したものを恐れないが、ひとつのキックを1万回練習したものを恐れる」
ブルース・リーの名言も引用しておきます。
プログラミングの反復練習は丁寧に時間をかけてやりましょう。練習の前にコーヒーを準備しておくくらいの余裕があると良いかもしれません。
ブルームの法則
教育の世界には「ブルーム分類学」というものがあります。
ブルームの6分類法とは、技術を人間が習得するときの、人間の発達段階と、各段階における学習目標を示したものです。レベルの低い方から、記憶、理解、応用、分析、評価、創造、と続きますが、基本的に学習は、この順序で、各段階の目標をクリアしながら進めていかなくてはいけません。
ブルーム分類学では6つのレベルで学習目標を分類しています。
- 記憶
- 理解
- 応用
- 分析
- 評価
- 創造
個人的にはこの分類はよくできている(凄い)と思っています。ただ初見だと、難解に感じるので、6段階の上位3つ(分析、評価、創造)はひとまず置いておいて、最初の3つ(記憶、理解、応用)だけに絞って学習目標を考えるとわかりやすいです。
プログラミング習得の法則
まとめです。プログラミング習得の法則は3つのステップを踏みます。ブルームの分類も添えておきましょう。
- 覚える(=記憶)
- わかる(=理解)
- できる(=応用)
各ステップでの具体的な学習方法を織り交ぜると次のようになります。
- 覚える(記憶)
- 読む、聞くといったインプット作業
- わかる(理解)
- 自分の言葉でアウトプットする練習
- できる(応用)
- 手を動かしてアウトプットする練習
本を読んでいるだけではプログラミングはできるようになりません。学んだことを言葉やコードにしてアウトプットする習慣を身につけましょう。
そのためにはGitHubのようなサービスを上手く使えるようになるといいですよ。