Keito(@keito_dilige)です。
データ分析の案件をこなす上で、私はよくプログラミングをします。それに伴って、プログラミングの学習は欠かすことが出来ません。先端技術を学ばないことには、技術分野でついていくことは難しいからです。
本稿ではこの体験に基づいて、プログラミング学習を続けるコツをお伝えします。プログラミングでは、無数のコードとの睨めっこの時間が延々と続くので、やはりモチベーションを保つのが大変になります。特に初心者には、どうやったらプログラミング学習を習慣化していくことが出来るのか、この部分をただの考えではなく経験と共にお伝えします。
目次
スポンサーリンク
疲れたら、リラックスして脳を休ませよう
脳が働いているとき、大きく分けて3つのネットワークが稼働しています。
1つ目は、セントラル・エグゼクティブ・ネットワーク(以下、CEN)という、トップダウンで積極的に脳を駆使して意識を集中させている状態です。例えば、PCの画面を注視しているときや人と集中して会話をしている時、それ以外にも何かに集中している時に、このネットワークが働きます。
2つ目は、デフォルトモード・ネットワーク(DMN)という、ある特定の物事に注意を払っていない状態です。何も考えずにぼーっとしている時や、マルチタスクを行う際、人との会話で一瞬外の景色を見るときに、このネットワークが使われています。このネットワークは無意識化でも稼働しているため、その際にも脳はエネルギーを消費していることになります。
3つ目は、上記2つのネットワークを切り替える働きをする、サリエンス・ネットワークです。このネットワークは、2つのネットワークからのシグナルに反応します。例えば、スマホを何となく触っている状態から仕事モードへ移行するときに、このネットワークが働いていることになります。意識的にサリエンス・ネットワークを活用することで、自分の内的な意識に目を向けることが出来ます。それを極めたのがマインドフルネスや瞑想といったものです。
さて、プログラミングの際には、CENを酷使しているように思われます。例えば、プログラミングでは論理的な思考はもちろんのこと、PC画面をずっと注視することが求められます。さらに、プログラマーが最もよく取る行動が「検索」です。コーディングについて調べている際にも、もちろんPCの画面を注視することになります。
この時には、集中的な思考が使われているために、CENが常時働き続けてしまうのです。こうなると、同じネットワークを使用し続けてしまうために脳のバランスが崩れて、強制的にDMNに切り替わる現象が起こります。DMNは無意識的なネットワークであるため、集中していると思っても実際には作業が進まない、という状況に陥ってしまいます。
このような現象を避けるため、一日に何度か休息をとることをお勧めします。ずっとプログラミングを続けていると、結局作業効率が悪かった、という状況になりかねません。また、生活リズムの見直しや、新たな行動をとってみることなども、脳のリラックスに繋がることが分かっています。
スポンサーリンク
プログラミング学習を「習慣化」することが最も重要
ここまでは、プログラミングで疲れてしまった時の対処法でした。脳をリラックスさせることで、短期的には学習を続けることが可能になります。これに対して、長期的に最も重要なのが、学習を習慣化することです。
プログラミング学習を続けられない原因の1つは、「椅子に座るまでが面倒」「やる気が出ない」といった内面的な問題でしょう。受験勉強や資格試験の学習と同じで、やはりモチベーションを保つのが難しいのがプログラミング学習です。
よく言われることですが、学習を習慣化すると、続けることが苦ではなくなります。逆に、「今日はまだプログラミングしてないな。気持ち悪いな。」といった気持ちを抱くまでになります。しかし、この「習慣化」が出来るかどうかが一流のプログラマーになることの境界線になっています。
想像してみると、朝食を取ることや歯を磨くこと、お風呂に入ることは、毎日実行する習慣になっていると思います。これは、幼い頃から同じ時間帯に同じ行動をすることで、習慣化が成功した例です。プログラミングもこれと同じように、大体の時間帯やタイミングを決めて毎日実行する必要があります。
習慣化を行うに当たって、最初はCENを意識的に使う必要があるため、精神的には少し疲れてしまうかもしれません。しかし、それが段々と無意識化で(=DMNを使って)椅子に座ってプログラミング画面を開けるようになれば、習慣化の成功です。最初は意識的に、段々と無意識的に習慣を形成することを目指しましょう。とにかく、諦めないことが重要です。
学びたい内容から学ぶと、モチベーションが持続する
現在では、オンラインツールによって体系的なプログラミングの学習を行うことが容易になりました。しかし、体系的に学べるということは、教科書的な網羅性のある学習が可能になったことを意味しており、これは学習者にとってマイナスかもしれません。
網羅性のある学習では、必ずしも自分が学びたい内容が学べるとは限りません。例えば、機械学習を学びたい人がPythonの基礎的な文法を延々とやらされると、その学習に飽きてしまうはずです。学習を始めた元々の目的と実行している作業がズレているため、内容に不満を覚えてしまうのです。
教科書のような網羅的な学習をしている人は、自分が学びたい内容から学んでみましょう。プログラミングの良いところは、学習中に何度も同じ文法やコーディング作法が登場するところであり、それは基礎的な部分から学んでも、応用的な部分から学んでも変わることはありません。
学びたい内容から学ぶと、多少なりとも応用を含んだ内容が登場しますが、これは全く気にしなくて良いです。応用が難しいと感じても、自分が学びたい内容なら頑張って理解しようとするはずです。逆に、使用頻度が少ないマニアックな文法を学んでいる時間の方が無駄に思えます。
以上のように、プログラミングでは学びたい内容を学ぶのがおすすめです。プログラミング学習を始めたきっかけは、「自分のサイトを作りたい」「アプリを作りたい」「プログラマーになりたい」といった目的だったはずです。この重要な目的を忘れないようにすれば、網羅的な学習から離れることが可能になるはずです。
スポンサーリンク
何か作ってみると技術力が飛躍する
学習には、「演習」が必ず必要です。
中学時代や高校時代に受験勉強をしたとき、必ず問題演習の時間があったはずです。つまり、インプットばかりでは記憶や知識を定着させることは難しく、アウトプットの時間を設ける必要があるということです。これは考えてみれば当然です。
それにも関わらず、受験勉強や資格試験と比べた時に、プログラミング学習では「問題演習」の時間が圧倒的に足りていません。覚えることが多いために、どうしてもインプット寄りの学習になってしまうのです。アウトプットの演習が存在したとしても、やはり他人が作った問題を解くというのは、あまり気が進むものではありません。
これを避けるために、意識的に問題演習の時間を作ります。この「問題」は簡単なものでよく、「Webサイトを作る」とか「洗練されたデザインを描く」とか、「統計分析をしてみる」といった、難しい内容である必要は全くありません。「足し算引き算をするクラスを作る」だとか、「好きな画像を表示して動かしてみる」といった、簡単なもので構いません。
こうした取り組みを行うことで、今までにインプットしてきた知識を総動員してコーディングを行えるため、濃密なアウトプットの時間を取ることが出来るのです。「問題」が思いつかなければ、身の回りにあるソフトや物体からヒントを得てみましょう。例えば、電卓から「メモリー機能付きの計算機」を連想してみたり、スピーカーを見て「クリックしたら音が鳴るプログラム」を想像する、といった具合です。
アウトプットの時間では、インプットの知識だけでは足りない情報を調べる必要があるために、より深い知識を得ることが出来ます。さらに、今まで獲得してきた知識を自在に使いこなせていないことに気が付くはずです。何度も言いますが、知識はインプットしただけでは使い物にならないのです。そういった意味で、エンジニアには実績や経験値が求められます。
「習慣化」と「好奇心」をキーワードに学習を続けよう
本稿では、プログラミング学習のモチベーションを保つための方策を議論しました。
学習をしていて疲れを感じたら、瞑想やマインドフルネスによってDMNを活性化させ、脳のネットワークを切り替えることを意識してみて下さい。休憩中にスマホをいじったりしていると、CENを酷使し続けるために疲労が蓄積されてしまいます。
長期的には、学習を習慣化し、好奇心の赴くままに学習を行います。毎日プログラミングを続けることで、学習をしないと気持ち悪いくらいの状態に持っていければ、モチベーションの維持が容易になります。学習をする際には、網羅的な学習に加えて「自分がやりたい学習」を重視してみて下さい。やりたくない学習を行っていると、モチベーションを保つのは難しくなってしまいます。
Diligent Lifeではプログラミングや統計、機械学習に関する実体験を発信していきますので、気になった方はTwitterフォローをお願いします!