IT

プログラミングの学習でなぜ挫折してしまうのか→挫折しない方法は一つだけ

「プログラミングの勉強始めてみたけど全然面白くない」
「難しすぎて何が何だかわからない」
「全然続けられる気がしない」

皆様ごきげんよう。

なんだかんだ高校のころからプログラミングに手を染めて、そのまま大学でもプログラミングの勉強をしていた私からご説明申し上げます。

挫折してしまうのは、あなたがプログラミングの勉強の神髄を誤解しているからです。

世にプログラミングの学習に関する情報や教材は非常にたくさんあります。

  • ウェブサイト
  • オンラインスクール
  • 学校

これらのうち、独学でできるものに関しては、自分で調べて身につけていく必要があります。言うまでもないことですが。もしあなたが一度挫折を経験したのなら、骨の髄まで身に染みていることと思います。

結論だけ先に申し上げますと、プログラミングが上達するために必要な学習というのは、

  • どうしたら動くプログラムを組むことができるか

ではなく、

  • どうしたら動かないプログラムを組むことができるか

を知ることにあります。

この記事では、プログラミングの本質と、本質を身につけるための挫折しない勉強法を紹介します。特定の言語に関するものではないので、どんな言語を勉強している人にも役に立つことを約束します。

プログラミングの本質=デバッグ

プログラミングにおいて最も時間を使うのは、デバッグです。

デバッグはご存知ですね? プログラムを実行してうまく動かなかった部分を、エラーメッセージを参照したり、実際の動作を確認しながら修正していく作業のことです。

デバッグには、プログラミングに関する知識と経験が必要になるのですが、そこで要求される能力は、プログラムをうまく組むことができる能力ではありません。

今説明したとおり、うまく動かなかった部分を修正する必要があるため、うまく動かすための知識だけではデバッグを効率的に行うことができません。

デバッグが効率的に行えないということは、いつまでたってまともに動くプログラムを完成させることができないということでもあります。

つまり、プログラミングの能力を鍛えるということは、デバッグする能力を鍛えることとほぼ等価です。デバッグこそがプログラミングの本質であると言っても過言ではありません。

もしあなたがプログラミングの天才で、たった一度コードを書けば完璧に動作するプログラムを書くことができるのであれば話は別ですが、誰しも初めはプログラミングの初心者であって、完璧なコードを初見でいきなりかける人などいません。人類は例外なく、デバッグから逃れることはできません。

実践的な唯一の勉強法→動かないプログラムを作る

では一体どのようにしてプログラミングを勉強していくのがいいのでしょうか。私からの提案はたった一つです。

まず、あなたが参考にしている本かウェブサイトを開き、一番最初に書いてあるプログラムを作成します。大体は”Hello, World!”を表示するプログラムだと思います。

作成できたでしょうか。正しく動作しましたか。……動作したようですね。結構です。

そうしたら、今作成したプログラムを、まともに動作しないように書き換えてください。

ああ、もちろん、コードを全部消す、とかはしてはいけません。動かないことが自明な状態にしても意味はありません。

完成したプログラムに最小限の手を加えて、まともに動作しないようにしてください。まともに動作しない、というのは、別にエラーにする必要はありません。本来意図した動作をしない、程度で結構です。

重要なのは「最小限」ということです。

最小限加工してプログラムが動かなくなった、ということは、その加工こそがプログラムを動作させない要因となっている、ということです。

まともに動作しなくなったら、なぜ動作しなくなったかを考えて、メモ帳か何かにメモしておきましょう。そして、また動作するところまで元に戻してください。

これを10回繰り返しましょう。10通りの方法で、動作しなくなるように書き換え、その原因をメモしておきましょう。

プログラミングの教材にはいくつも例題が載っていると思います。各例題に対して、この追加課題をこなしていけば、なぜプログラムが動作しなくなったのかの理由を考えることができます。

そして、その知識を蓄積していけば、新たなプログラムを作成したときに、なぜ動作しなくなったのかを比較的容易に判別することができるようになります。

挫折する原因は何なのか→正しいプログラムを作っているから

あなたは、プログラミングの勉強をしているときに、どんなことを目的としているでしょうか。正しいプログラムが作れるようになることでしょうか。

正しいプログラムを作れるようになることが最終目的であることは確かですが、それを目指して勉強していると、うまく動かない時に心を消耗します。考え方を変えてください。

「自分は、うまく動かないプログラムを作るために勉強している」

優れたプログラマーほどうまく動かないプログラムを量産してきています。そうでなければ、うまく動くプログラムを作ることができません。

プログラミングの作業時間のほとんどはデバッグです。プログラマーの技量のほとんどは、デバッグの技量です。デバッグの技量を高めるために勉強しているのだと考えてください。

むしろ、一発でうまく動くプログラムができたのであれば、先に述べたようにうまく動かないように手を加えてください。

「よし、うまく動いた。次へ進もう」

これではいつまでたっても成長しません。

プログラミングの経験値は、成功では得られません。
失敗でのみ得ることができます。

今度うまく動かなくなったときに、どうしてうまく動かないのかが分かりません。せめて、どうしてうまく動いているのかを考え、理解してから先に進みましょう。

挫折しない考え方→「×失敗は成功の母」「○失敗こそが成功」

プログラミングの学習において、成功することは失敗にも等しく、失敗は成功に等しい。

短期的な成功のために楽そうな道を行こうとしていませんか。

できるだけ早く身につけようと、時間を惜しんでいませんか。

プログラミングにおいては、失敗を積み重ねることでしか、成功を得ることはできません。なぜ動かないかがわからないなら、まだあなたはその段階にないということです。

前の例題に帰って、動かなくなる原因をさらに10個積み重ねてください。そうすれば、失敗の原因が見えるようになるはずです。

失敗するために勉強しているのだということを、ゆめゆめお忘れなきよう。

素敵なプログラミングライフを。