プログラミング初心者は経験者から盗むべし〜心構え編〜
「学ぶって、真似ることから始まるよなぁ」とふと思った。
日本語は面白くて、「学ぶ」と書いて「まねぶ」と読むこともできる。
なんでも「学ぶ」と「真似る」は語源は同じだそうな。
なぜこんなことを思ったのかというと、今幸運なことに実務経験がある先輩エンジニアと一緒に勉強させてもらっていて、まさに背中をみて学んでいるからだ。
たいしくん、いつもありがとう。(以下、師匠と呼ばせていただきます。笑)
私がそうだったのですが、1人でプログラミングを勉強していると、何度も壁にぶつかって心が折れそうになると思います。
そういう時に師匠がいると、たとえ手取り足取り教えてもらわなくても、「こんな風なやり方があったのか!」とか「こんな風に解決していけば良いんだ!」と気づくことがたくさんあります。
そして、こういったヒントは必ずしも参考書に載っているわけではありません。
師匠と一緒に勉強していると、プログラミング初心者の人が知っておいたらよいんじゃないかと思うことがたくさんあるので、今日は私が学んでいることをシェアしたいと思います。
※内容が盛りだくさんになってしまったので、2回に分けてお届けします。今日はまず学習の心構えについて。
学習継続のカギ
私は学生時代「お勉強」が苦手な人でした。
厳密にいうと、中学生までは勉強はそこまで苦手ではなく、成績もそこそこだったのですが、高校入学後、完全に勉強に対するモチベーションを失い、本当に何もしなくなりました。
当然成績は下がり続け、毎年進級が危ういくらいの劣等生になりました。
大人になっても学習し続けている今、このエピソードは研究の価値があるものだなぁと思っています。
「なぜ中学時代は勉強が苦ではなく、高校時代には苦痛になってしまったのか」を考えることによって、
「自分はどういう状況であれば学び続けることができて、どういう状況ではできないのか」がわかる可能性があるからです。
考え続けていた結果、「興味」と「最適な負荷」が鍵になりそうだなぁと思うようになりました。
そして、師匠を見ていると、この予感が確信に変わりつつあります。笑
興味があることをやる
まず一番重要なことが、自分の興味を大事にすることです。
つまり、極力「自分がやってみたいと思うこと」や「自分が楽しいと感じられること」をやりましょうということです。
嫌々やるほど非効率なことはありません。
たとえば、私の師匠はいつも「自分がほしいサービス」を作っています。
サービスを作り上げるというのはとても骨が折れることです。だからこそ、自分自身が考えていて楽しいもの、自分の時間を使うことに意義を感じられるものに取り組むのが良いと思います。
(ちなみに師匠は今、個人開発をしているエンジニアが、より経験のあるエンジニアに質問をできるAskMakersというサービスを作っています!全編英語ですが、よかったらチェックしてみてください!)
最適な負荷でやる
この場合の負荷とは、学習にかかるコスト(心理的な負荷、かかる時間など)のことです。
ちょっとわかりにくいので、自分なりに図にまとめてみました。
横軸「受動的 ↔︎ 能動的」
縦軸「定着率高 ↔︎ 定着率低」
右上にいくほど、学習コストは高くなりますが、定着率も高くなります。
左下にいくほど、学習コストは低くなりますが、定着率も低くなります。
(私の体感を元に図にしたので、人によって感じ方が違うかもしれません。それぞれの方が自分なりに考えてみていただければ嬉しいです。)
たとえば、初心者の場合、最初からあまりに高い負荷をかけしまうと心がポキっと折れてしまします。図でいうと右上の部分ですね。
知識ゼロの状態から自力でアプリをつくれたら、力がつくことは間違いないですが、途中で挫折してしまうのは想像がつきやすいかと思います。
じゃあ、どうするかというと、負荷をぐーんと下げます。図で言うと左下の部分です。
学校の授業なども左下に当てはまるかと思います。授業に出て先生の話を聞くだけなら受け身で楽ですし、新しい知見に触れることもできます。
ただ、それだけで知識が定着するかというとちょっと疑問です。
図の右下部分を見てみましょう。
手を動かすタイプのチュートリアルは、スタートとしては最適な勉強方法だと思います!
・・・が、残念ながらこれだけで十分なわけではありません。
チュートリアルを見ながら手を動かしていても、いざ自分でコードを書こうとすると「あれ?どうやって書くんだっけ?」と手が止まることが頻発します。
知識を自分の血と肉にしていくためには、もうちょっと工夫ができそうです。
じゃあ、どうすりゃいいのよ?と思いますよね。
ここが師匠から学べる部分です。
師匠をみていて素晴らしいなと思うのは、自分の力にするための+αの行動が自然とできていて、しかも、学習負荷のかけ方が絶妙だというところです。
彼も新しい技術を学ぶ時には、チュートリアルを利用することがあります。
先ほど述べたように、チュートリアルは学習負荷がそこまで高くないので導入としては最適な反面、それだけでは知識は定着しません。
そこで、チュートリアルをやったらすぐに、その知識を使ってアウトプットをするのです。
例えば、自分がやったことをブログに書いたり、学んだことを応用して、自分で何か別のアプリを作ってみたりします。
一度学んだことなので、学習負荷が高すぎないのに加え、アウトプットすることで定着率は上がります。
さらに、彼の場合は自分が使えるレベルに昇華させるために、得た知識を応用してゼロからサービスを作ることが多いです。
もちろんこれが必ずしも正しい方法だとは限りません。
大切なのは誰かをそのまま真似るのではなく、自分の現状(図でいうとどのあたりにいるのか)を把握して、最適な手を打つことだと思います。
ただ、少しずつ負荷を上げて知識を自分のものにしていく工程は、とても理にかなっていると思いますし、参考になる点だと思います。
もしチュートリアルを延々とやっているのであれば、わかっている気になっているだけで、実はあまり身についていないかもしれません。
負荷を少しだけ上げて自分の力にするためにはどうすれば良いかを考える必要があるかもしれません。
逆に今やっていることがあまりにもしんどいなら、今の自分にとっては負荷が高すぎることなのかもしれません。負荷を下げると自分の力にならないと思いがちですが、高すぎて心が折れてしまうよりはずっとマシです。
ちょっとだけハードルを下げてみるとよいかもしれません。
それぞれの人が自分にあったやり方を見つけるための一助となればとても嬉しいです。
ちなみに、最後まで触れなかった左上のエリアですが、
「受動的かつ定着率が高い」つまり、「座ってるだけで天才エンジニアになれる!」みたいな方法は無いと思った方が賢明です。
もしあるなら皆やってるはず。そんなものは幻想や。笑
ということで「幻想」エリアとしておきました。笑
「理論→実践」の順番に必ずしもこだわる必要はない
これも長年「なぜ自分が勉強嫌いになってしまったか」という問いを考え続けて辿り着いた仮説なのですが、理論を理解してから実践に移すよりも、実践してから理論を学ぶ(深める)方が向いている人も一定数いるのではないかと思うのです。
学生の頃の授業を思い出すと、「理論」を学んでから「実践」に移ることが圧倒的に多かったように思います。
そのせいか、私には「エンジニアは理論をほぼ完璧に理解してコードを書いている」という思い込みがありました。
当然一概には言えませんが、師匠を見ていると(少なくともプログラミングに関しては)実践しながら理論を理解して行く方が習得が早いように思えます。
私も最初の頃は参考書と向き合ってうーんと唸っていましたが、一向にコードが書けるようにはなりませんでした。
誤解を恐れずにいうと、スポーツのように「手を動かして、身体になじませていく」感覚をもつと、少し楽になるのではないかと思います。
もし勉強の際にあまりにも理論の理解に時間をかけすぎているのだとしたら、一旦切り上げてまずコードを書いてみたらいいかもしれません。
詰まるところがあれば、もう一回理論(公式ドキュメントなど)に戻ります。個人的には必要性がわかった後に学ぶほうが理論の定着率も上がると思います。
繰り返しになりますが、必ずしも理論を完璧に理解してから実践に移らなくてもよいというのが私の意見です。
理論を大まかに理解したら実践してみて、わからなかったらまた理論に戻って・・・という風に理論と実践を行ったり来たりするうちに徐々に理解が深まっていくものなのかなと思います。
人に見られる状態を作る
自分が一生懸命作ったものを人に見せるって結構勇気がいることだと思います。でも、勇気を出してみると結構良いことがあったりします。
思う浮かぶ利点としては2つあって、
・周りからのフィードバックで改善点が明らかになる
・モチベーションの担保になる
フィードバックに関して。
例えば1人で開発を進めていたとして、自分1人だと気づけないことがたくさんあります。人によって観点が違うからです。
サービスを開発しているなら、ユーザーの意見を取り入れた方がよいでしょうし、初学者なら、先輩にレビューしてもらった方がより運用しやすいコードになるかもしれません。
師匠をみていると、自分でサービスを作ってどんどん人に見てもらって改善を重ねています。
おそらく怖いという思いが無いわけでは無いと思うのですが、たとえ経験があっても人から意見をもらいにいくその姿勢が素晴らしいなと思います。
モチベーションに関して。
プログラミングに限った話ではありませんが、何かを習得しようと思ったら一朝一夕にはいきません。長く時間を投資する中でモチベーションが下がってくる時期があるのも当然かと思います。
そういう時に「見てくれてる人がいる」というのは非常に大きなモチベーションになると思います。
「人に見られてると思うとやばいと思って集中できる」と師匠が言っていた気がします。(うろ覚え)
疲れたら休む
基本中の基本ですが、疲れたら休みましょう。
長いこと勉強してたら疲れます。人間ですから。
私は力を抜くのが非常に下手くそで、全力でぶつかっていって玉砕することが過去に幾度もありました。
なので、師匠からは休み方もちょっとずつ学ばせてもらっています。
疲れたと思ったら、仮眠したり、立ち上がって軽くストレッチしたり。
集中できないと思ったら、映画見たり、漫画読んだり。
もう今日は無理!やる気でない!と思ったら、思い切って中断して散歩したり。
あーなるほど。こんな風に力抜いていけばいいんだなぁと学ぶことが多いです。
あとは、脳って同じ作業を続けると飽きてしまうと思うので、
合間に違う作業を入れるとリフレッシュになるかと思います。
(このトピックを考えるとき、学校の時間割って結構よくできていたんだなぁといつも思います。)
開発→疲れたので、ブログ書く→開発に戻る。などなど。
お願いなので、くれぐれも体を壊すほど頑張らないでください!
プログラミングの前にあなた自身が元気でいることが1番です。
まとめ
思いの外長くなってしまいましたが、師匠から学んだ勉強に対する心構えをシェアさせていただきました。
ポイントだけさらっとおさらいしておきます。
・興味があることをやる
・最適な負荷でやる
・「理論→実践」の順番に必ずしもこだわる必要はない
・人に見られる状態を作る
・疲れたら休む
途中にも書きましたが、誰かをそっくりそのまま真似してうまくいくことはないと思います。置かれている環境を含め、全く同じ人間はいないので。
ただ、少し物事を抽象化して、問題の本質が見えてくると自分にもできることがあるのではないかと思います。
1つでも何か役立つことがあれば幸いです。
次回はより実践的なTipsをシェアできればと思っています!
興味があればぜひ読んでみてください。
ここまで読んでくださってありがとうございます!
この記事が誰かのためになることを願って:)
instagram @marie_woq
twitter @MarieWoq