プログラミングの学習過程で、多くの曲がり角に直面しました。一部の曲がり角は短く、入ってすぐに抜け出せるため、経験を積むことができました。一部の曲がり角は難しく、経験豊富なプログラマでも失敗することがあります。しかし、最も恐ろしい曲がり角もあります。前半はまっすぐで、後半に大きな曲がり角があります。あなたは自分が正しい道を歩んでいると思っているかもしれませんが、実際には逆の方向に進んでいることに気づかないかもしれません。
私が知っている「見えない曲がり角」の一つは、学生の思考でプログラミングを学ぶことです。
- ノートを取る vs. 技術チュートリアルを書く
私たちが学生時代に知識を得る方法は、基本的に次の手順に従っています:教科書のチュートリアル例を学び、課後の練習問題を解く。これを繰り返し、試験に合格するまで続けます。
多くの学生は、この学習方法をプログラミングにも適用しようとします。基本的な文法を学び、いくつかの小さなチュートリアルを練習し、それを繰り返してプログラミングをマスターしたと考えます。
プログラミングの学習過程では、ノートを取る習慣がコードのコピーに変わり、変数名や if 文の改行、関数名などが教科書の例とまったく同じになります。
初期段階では、コードをコピーすることは有効な学習方法です。コードを実行するたびに成功することで、プログラミングの自信が大いに高まります。しかし、コードをずっとコピーし続けることは明らかに合理的ではありません。それを技術チュートリアルを書くことに変える必要があります。
技術チュートリアルを自分で書くと、必然的に学習プロセス全体を再確認し、自分で操作を行うことになります。以前の学習過程で見落としていた点に気付くことが容易になり、それを理解するために関連する情報を調べることになります。
また、自分が書いた技術チュートリアルはインターネット上で公開されるため、より多くの人に理解され、認められるようにするため、できるだけ明確に説明する必要があります。説明する過程で、学んだ知識をより多角的に理解することができます。
- 未知を恐れる vs. 未知を受け入れる
学生時代、私たちは常に学ぶことに熱心で、すべての難問を理解しようとします。学生は未知を恐れ、すべての不確定な問題に対して不安になります。問題がどの範囲に属しているのかわからない場合、方向を見失い、焦りに陥ります。
学習内容が制限されているため、プログラミングの学習過程では、本や同級生、教師、インターネットを通じて明確な答えを見つけることができます。理解できない場合でも、その知識が明確な範囲に属していることは明確です。ただし、自分自身の問題が解決できないだけです。
しかし、プログラミングは異なります。多くのプログラミングの問題は解決策がなく、誰も解決方法を知りません。
プログラミングを上達させるためには、一定の未知を受け入れる必要があります。
未知は永遠に存在するものであり、これは客観的な現実の法則であり、人の意志によって変えることはできません。客観的な現実と戦うことは無駄な行為です。
また、一部の未知の問題は解決策が存在しないため、時間とエネルギーを無駄にすることです。一部の未知の問題は、現在の知識が解決するのに十分ではないため、一時的な未知を耐え忍び、後続の内容を学習し続けることで答えを見つけることができます。
- 順を追って進む vs. 繰り返し振り返る
教科書の内容は段階的に進んでいきます。前の A の内容を理解しないと、後の B の内容は理解できません。
未知の存在のため、プログラミングの学習過程では、いくつかの問題が私たちを止めることがあります。私たちがするべきことは、まずそれを記録し、一旦置いておいて前に進み、新しい知識を学び、新しいスキルを練習し、新しい領域に触れ続けることです。経験を積み重ね、成長し続けることで、後で時折振り返り、再評価することができます。すると、新しい知識を学び、新しいスキルを練習し、新しい領域に触れたときに突然明確になることがあります。「ああ、これがそのようなものだったのか」と。