プログラミングを効率よく学習するコツ
プログラミング学習で意識するべきことを紹介します。
これから始めようという方、ある程度触っていてもうまいことついていけない方向けです。
私の経験則と知識で書いています。人によって効率の良い方法は変わってくるので、鵜呑みにはしないようにしましょう。
楽しむ
楽しむことは最重要です!
好きこそものの上手なれです。楽しめないとモチベは上がりません。モチベがなくなれば学習は進みません。嫌々やっても頭に入ってきません。楽しみましょう!
とはいえ、最初の頃は頭の中にある理想のアプリと、実際に出来上がるアプリの出来に乖離があり、残念な思いをするのはよくあることです。最初の何も出来ない時期は早々に脱したいですよね。ではどうすれば効率よく学習を進められるのでしょうか。
とにかく暗記とするのはNG
開発をするときには、熟練の開発者でもほぼ必ずやり方などを検索します。技術は日々進歩し、更新されています。そのため、暗記してもものの数年で”古い知識”になります。また、暗記しても他に使い回すことができません。
学習時にするべきは内容を暗記することではなく、利用しようとしている言語やフレームワークには
- どのような機能があり
- どんな組み合わせが相性良くて
- どんな向き不向きがあるか
を知ることです。機能を知っていればあとは調べるだけで済みます。向き不向きを知ることで、設計時点での不備不足に気が付きやすくなります。具体的な書き方を覚えるのは、自然な成り行きで構いません。
ツールなどの知識はそこそこの深さで広く
特に現代の普通の開発では、数多くのツールを利用します。そのため、深い知識よりも様々なツールに対して幅広く知識を持つことが良いと考えています。 (ゲームエンジンの開発など、特殊な領域は別です。)
ツールは日々進歩し、変化しています。ある日突然機能が非推奨になったり、消滅したり、新しい機能が増えたりしています。深く暗記しても、そのツール専用の知識は使えなくなる可能性がありますし、利用するツールの数を考えると、とてもじゃないですが追いつきません。
しかし、ほとんど変化しない共通の知識は深く持っておくと良いでしょう。例えばHTTP通信に関する知識、長く使われているOSのコマンドに関する知識、プログラミングならアーキテクチャやオブジェクト指向、参照に関する知識などです。
言葉を知る
言葉を知ることで、知識は一気に広がります。言葉を知らなければ調べることもできません。
- ノーコード、ローコード
- モノリシック、マイクロサービス
- オンプレミス、VPC、クラウド、サーバレス
- HTTP、gRPC
- REST、GraphQL
- CI/CD、ブルーグリーンデプロイメント
などなど、言葉と意味を知ると、選択肢は広がります。こういった言葉は基本的にプログラミング言語やアーキテクチャに関係なく長く使える知識のため、深い知識を持つと良いです。まずは言葉と要約だけでも知り、そこから知識を深めていきましょう!
数をこなす
このようなものは昔のノリで、プログラミングは知識第一ではないか思うかもしれません。確かに知識は非常に重要ですが、実際に使わないとなかなか身につかないことは数多くあります。百聞は一見にしかずですが、百見は一実践にしかず(?)と考えています。
数をこなすことで
- エラーを見る機会が増えるので、それらに対処しやすくなる
- 構築環境やアーキテクチャは様々です。同じエラーでも解決法が異なることはザラで、調べても解決が存在せず、独自の方法でなんとかするというのはよくあります。そもそも情報がない場合もあります
- 悪い設計、良い設計を感覚で察知できる
- 現代の、例えばサーバレスでノーコードな環境の設計の良さというのは、定量的に表すことができません。そのため、知識と感覚に頼ることになります
- 悪い設計の悪さは、ある程度進んでから判明することもよくあります。初めの方で判断するには経験が大切です
- 応用が効くようになるなる
- 例えば、数学の勉強をしているときに、応用的な問題を解くには必ず数をこなすはずです。プログラミングも、応用的な実装をするには数をこなし、どのような組み方ができるかを知ることが重要です
- ポートフォリオが増える
- 動くものがあれば就職、転職にも有利になります。もちろんフリーランスや起業などでも有利なるでしょう
- etc…
また、実際に動くものを完成(+リリース)させることで、モチベーションのアップにも繋がります。
プログラミングは本質的に複雑です。典型的な方法はあれど、これさえあればうまくいくという便利なものはありません。必ず様々な創意工夫をこらし、新しいアイデアを出して進めていくことになります。そのためには、経験が必要です。
“No Silver Bullet: Essence and Accidents of Software Engineering” (銀の弾などない) という、ソフトウェア工学で有名な論文があります。
1986年の論文ですが、”銀の弾”という言葉は今でもソフトウェア工学界で広く知られる言葉です。
もちろん論文を読めというわけではないです。特効薬のような、何にでも通用する画期的な開発手法は無いということが数十年経っても変わっていない、というくらい本質的に複雑であるということです。
真似るときは1行1行を意識する
「検索でとりあえず見つけたからコピペ」
よくあることだと思います。しかし、単にコピペだけしていても身につきません。1行1行どのような動作をしているのかを理解することが重要です。
序盤中盤はサポートしてもらう
私がプログラミングを始めたのは大学1回生初期で、そのときは上級生が1人ついて、プログラムを教えてもらいながらゲーム制作をしていました。
最初の右も左も分からないとき、ポインタやオブジェクト指向などの難関にあたったときなどは、人がついているかついていないかで大違いです。
社会人ならプログラミングのオンラインスクールCodeCamp などのスクールに通う、これから大学生ならゲーム制作などのサークルあるいはスクールというのはありだと思います。
まとめ
プログラミングの学習は、他と少し異なります。それぞれのツールやフレームワークは、具体的な使い方よりも、どんな機能があってどんな向き不向きがあるかを知るべきです。具体的な使い方はひたすら本を読むよりも、実際に触って習得することを推奨します。
