始めに
こんにちは〜、まんじです。
今回は「効率が悪い間違ったプログラミング勉強法!」というテーマでお送りしたいと思います。
個人的な主観ではあるものの、プログラミングにおいては以下の勉強方法は正直すごく微妙です。
- 暗記する
- ノートとかにまとめる
- 教材を何周もする
- 模写作業(…?)
- 技術書をいっぱい読む
- 何も考えずにコードを読む(自称コードリーディング)
基本的にアウトプットベース(何かを作る、仕事でタスクをやるなど)で、勉強することが最強に効率が良くて、逆にインプットベースとか学校の勉強(大学受験含む)みたいなスタイルだと超微妙という具合です。
今回は1個1個、その微妙な勉強法達をdisっていきたいと思います。
1個目: 暗記する
プログラミングにおいては暗記はほぼ不要です。
というのもググったりAIに聞けば出てくるってのもありますし、何より暗記することに集中すると、そもそも量が多すぎて覚えきれないってのがあります。
覚えようとして暗記するというよりかは何度も使いまくってると勝手にいろいろと覚えてくるってのが実際の覚え方です。
例えば、linuxとかのコマンドって最初の本当に基本的なやつは多少覚える要素はあるんですけど、何度も何度も打ち込んでると、勝手に手が動くようになります。
ls
cd ./work
docker-compose up -d
bash insert_seed.sh
SQLとかその他の文法もそうで、基本的なやつは何度も打ち込んでると勝手に意味含めて覚えられるってのがあります。
あとはよく使うもので勝手に覚えるぐらいのものが本当に覚えるべきことです。(勝手に覚えられるんだけど)
そもそもSQLのコマンド1つ取っても文法とかって無数に存在するので、暗記から入ると普通に挫折します。
とりあえず、頑張って暗記しようとしてる場合は、やめましょう!ってことを熱心に伝えたいところです。(まあ、あんま必死こいて暗記してる人なんていないと思うけど…)
2個目: ノートとかにまとめる
ノートにまとめるのは学校の勉強でも微妙なんですけど、プログラミングにおいてはもっと微妙です。
紙のノートとかに丁寧にまとめ始めたりしたらもはやそこで試合終了レベルに微妙なので、そこは気を付ける必要があります。
上に書いた暗記ってのとかぶるんですけど、ノートにまとめて覚えようとすること自体が、すごく微妙になります。
繰り返しなんですけど、使ってると勝手に覚えってくるってことは忘れたくないプログラミング入門tipsです。
ノート系に関して強いていうなら、日本語とかコードをnotionとかにちょっと貼るぐらいは良いというか、最初何か勉強する時は微妙に必要な時もあります。
でも結局そこを見返すことってあんまないんで、どちらかというと、コードをちょっと置いておくぐらいのスタンスでnotionとかオンラインのノート系アプリは使うといいのかなって思います。
自分はクソ長いコマンドとか、ちょいちょい使うコードとか、どう考えても覚える意味がないコードとかをnotionとかに置いてたまに参照するぐらいで使ってます。
とりあえずノートにまとめる系の勉強法は超微妙な確率が高いので、やめたほうが良いと思いますというか、やめましょう。
追記: 昔nginxの本とか読んで日本語まとめてたけど・・・
kindleとかってプライムリーディングで無料で技術書が読めるんで、勉強モチベが上がるとついつい勉強のための勉強をしたくなりがちなんですけど、微妙です。
自分はエンジニアでインターンしてた実務1年目ぐらいの頃にnginxの本を読んで日本語を必死こいてまとめていくみたいな作業をしてた時期があったんですけど、控えめに表現したとしても、、、まじで時間の無駄でした。
ということで、本読んで日本語まとめていくとかは、や、やめてぇっ><!
3個目: 教材を何周もする
教材を何周もするっていうのは、「ドットインストールとかプロゲートとかを5周します!!!」みたいなやつです。
大学受験とかの参考書なら5周とかは意味あるんですけど、プログラミングにおいてはそういった網羅的に勉強していく方法が超微妙です。
なんで微妙なのかって話なんですけど、範囲にキリがないからなのと、教材をやったから技術力が上がるのではなくてあくまで教材を補助としてインプットした後で、仕事か何か作ることでアウトプットすることを続けていると徐々に技術力が上がっていくような流れで技術力は上がるからです。
普通に技術書とか無限にありますし、1個1個すごい重いですし、1個1個やってると本当に人生それだけで終わってしまいます。
あとは繰り返しなんですけど、網羅的にいくら勉強しても大してできるようにならんです。
個人的には最低限のところだけ本とか教材とかでやって、その後はひたすら何かを作る、仕事でタスクをやるとかのアウトプットベース(お金を稼ぐためにプログラミングをする)というスタイルがおすすめというかそれしかおすすめしていません。
教材(本)とかを何周もするとかの大学受験チックな勉強方法はやめましょう。
極端な例をあげるとするなら、ドットインストールのPython入門講座とかを30周しても、Pythonはたいして書けるようにはなりません。
4個目: 模写作業(…?)
ウェブ制作とかでたまに見る模写作業みたいなのも、ウェブエンジニアのプログラミングだとすごく微妙な勉強法です。
模写に近いような真似するとかコピペして編集するとかは普通にナイスな勉強法というかコード書く時の作業工程としてあることが多いんですけど、勉強として模写するのは,,,微妙・・・?だと思います。
本当に最初の段階でアプリを作る時とかに本に書いてある内容とかの書き方を真似していくっていうスタンスはいいんですけど、ある程度自分で手が動いたり調べたりできるようになってきたら、模写というよりかは考えて組み合わせていく作業が必要になります。
あとは全く何も考えずに模写したところで、理解できてないので意味ないってのは間違いないと思われます。
ウェブエンジニア系のプログラミングだと、こんな感じの工程をループするのが良いというか、ナイスな勉強法というか手の動かし方かなと思います。
- 何か目的を作る(コードを書く必要性、仕事やポートフォリオ作成やアプリ作成など)
- 読む(必要な知識をインプットする)
- 考えつつ書く(試行錯誤しながらアウトプットする)
- デバッグとかしつつ動かす(動かしていくことで定着するって感じ)
とりあえず何も考えずに真似しても意味がないので、模写はやめたほうがいいと思われます、というか普通に微妙。
5個目: 技術書をいっぱい読む
技術書を片っ端から読んでいく勉強法も上に書いた内容と若干重複しますけど、微妙な勉強法な確率が99%です。
オライリーの本とか定番のソフトウェエンジニアなら読んでおけよな!っぽい本とかは無数にあるんですけど、ぶっちゃけそんなん読まなくてもアウトプットベース(仕事やアプリ開発)で手を動かして必要な知識を都度インプットしていけばそれなりの技術力にはなります。
*それなりの技術力ってのはフリーランスなれたり、それなりに良い企業(有名なSaaSとか)に応募してコーディング試験やら面接突破するぐらい
本に書いてあることって大体ネット(AI)にも書かれるんで、別に本という形式にこだわる必要がないという感じ。
やたら「本」を強調してくる真面目系(本読むおれインテリみたいなやつ)の人もいるんですけど、メガベンチャー系やらGAFAM系の人からリアルで本を推奨されたことは自分は1回もないです。
本はただの手段ですし、ネットの情報もAIもただの手段であって、目的ではないからです。
6個目: 何も考えずにコードを読む(自称コードリーディング)
全く処理を終えてない状態でコードを読む、自称コードリーディングも微妙な勉強法の1つです。
自分も駆け出しシーズンとフリーランス駆け出しシーズンになんかやっていたんですけど、ほぼ意味ないです。
なんか上から下にかけて目だけ動かして、
「フムフム、ここのparamsからidを取り出して、それをこのメソッドに渡して…」
みたいな感じで脳死コードリーディングをやっちゃうわけなんですけど、目的なく読んだところで深い理解はできません。
- 他人からコードレビュー依頼されて適当に読むことが許されない
- 特定の箇所のコードを理解しないと自分のタスクが進められない
- 特定の箇所のコードを理解しないと実装不可能
こういった読まないと許されない環境下(アウトプットベース)でコードを読まないと、よほど天才的な人でない限りは理解できません。
厳密には理解はしようとすればできるけど、理解してなくても大丈夫だからただ情報が通過していくようなイメージです。
コード読む時は実際に動かすとか、処理を追わないといけない必要性というか、理由が必要です。
コードを深く理解して読む必要性がある状況をセッティングするのが大事です。
(実務でタスクをこなす、アプリ開発で実装する、テストコードを書く、など)
まとめ
よく言われることなんですけど、「何かを作る」ってことをベースにプログラミングは勉強しないと、基本的には微妙な勉強方法になります。
じゃあどうやったら効率悪い感じにならないのかっていうと、個人的には2つが結論かと思っています。
- プログラミングで仕事をする
- 個人開発など(ポートフォリオ含む)で何か作る
こういった目的があって、そのための手段として適宜インプットをしていって、必要な目的の部分でアウトプットを繰り返していると技術力は伸びてきます。
といっても、、、技術力を伸ばすとかってクソ地味な積み上げゲーなので、3ヶ月とか5ヶ月とかいう単位でようやく「あれ、ちょっと前よりできるようになってんな」みたくなっていくぐらいのスタンスです。
効率を多少意識できていようがプログラミングは地味な継続ゲーなのは否定できないので、そこは耐える必要があるというか、習慣にして何も感じないぐらいまで慣れる必要があります。