🔰 概要
プログラミングの勉強法には多少コツがあるので、オーソドックスな勉強方法はある程度抑えておきましょう。
厳密にはプログラミングの勉強法ではなくて、ソフトウェア開発のための勉強法になります。
✅ 基本的な勉強方法のフロー
- STEP1: 必要なインプットを最低限行う(ネット情報、ChatGPT、本、動画などを利用)
- 慣れてくると、ネット情報やKindle Unlimitedなどの本で概要を掴んで、その後にChatGPT使いながら進めていけるようになります
- 例
- QiitaやZennなどで複数の記事を読んで、実際に進めていけるようになる
- 「React todo app tutorial」などの英語記事を読んで、実際に進めていけるようになる
- 「AWS ec2 deploy」などの英語記事を読んで、デプロイや必要技術範囲を習得することができる
- STEP2: 実際に何かしらの目的がある状態で、アウトプットベースで使って練度を高める
- 例
- 実務でDockerの「Multi-stage builds(など)」タスクを終えるために、DockerのMulti-stage buildsを勉強して実際にそのタスクを終える
- 個人開発でGoogleのOAuthを使うために、OAuth認証をネットで調べて真似して、実装をする
- コーディング試験を突破するために、データ構造とアルゴリズムを特定の期間だけ勉強して、実際にコーディング試験対策になる問題を解く
✅ 効率が良いプログラミングの勉強法
メイン: アウトプットする目的のために必要な箇所を調べながら手を動かす
具体例はこんな感じです。
- ウェブアプリを作るためにフレームワークの使い方を調べたりSQLを調べたりする
- 仕事でAという実装をするために必要な知識を調べながらAを終えようとする
- 個人開発で稼ぐために、ウェブアプリを作って課金機能の実装として、StipeのAPIやユーザーテーブルの定義方法などについて調べながら考えて実装する
目的があって、その目的を達成するために調べながら手を動かすというのが1番効率が良い勉強方法になります。
厳密には勉強方法というよりかは、必要な知識を必要な分だけ集める作業とも言えます。
サブ: 必要であろう知識をインプットメインで必要な分だけ勉強する
具体例としてはこんな感じです。
- AWSを実務で使えるようにしたい
- そのためにAWSの本を2~3冊買って、ざーっと寝る前などにインプットを行う
- CS(コンピューターサイエンス)の基礎的な知識が不足しているから補いたい
- そのためにCSの基本的な本を買って、移動中にざーっと読む
プログラミングの勉強では、インプットメインで学習を行っても実際に使える知識にはならないケースが多いので、あくまで最初の「知る」という部分の時だけインプットメインで行う勉強スタイルも悪くはないです。
理想を言うと、やはりアウトプットが必要な状況下で必要な分だけインプットをするのが最も効率が良いというのはあります。
✅ 効率が良い勉強方法の具体例
1: ポートフォリオ作成のために調べながら作る
- 目的: XXXまでにポートフォリオを作って仕事に応募する
- 手段: そのためにポートフォリオを作る
- そのために、Pythonの基礎をドットインストールで勉強して、その次にDjangoのハンズオンの本を1個選んで実際に手を動かしながら進める
- そのあとに、実際に自分で機能要件などを考えて、オリジナルの実装を行う
2: 実務ベース(仕事に入ってから)でタスクをこなすことをメインに適宜必要なインプットを行う
仕事に入ってからは基本的にはタスクベースで開発や実装などをしていくことになるので、そのタスクを終えるために必要なインプットを適宜行うスタイルです。
例えば、「バックエンドのAという箇所のSQLのパフォーマンスが悪い問題を改善する」というタスクがあった場合を考えてみます。
- ChatGPTに「SQLのパフォーマンスが悪くなるのはなぜですか?」と聞いて情報を集める
- コードはこんな感じですと、コピペして貼る
- 具体的な解決策がでてくればそれを参考にパフォーマンスを改善する
- その他疑問点があれば、Google検索やAIに再度聞く
1つの具体例ではありますが、AIなどを使いながらタスクをこなすために、適宜インプットをしながらアウトプットを出していくようなイメージになります。
3: 個人開発で作りながら必要なインプットを行いつつ勉強する
個人開発で何か作る目的がある場合には、その作る目的を達成するためにインプットを行っていくような勉強方法になります。
例えば、「Aというジャンルの掲示板を作る」というテーマで個人開発をするなら、掲示板を作るために必要な技術などを調べて、機能要件などを書いて、実際に調べながら実装を進めていくようなスタイルです。
✅ プログラミングで非効率的な勉強方法
1: 暗記メインの勉強
例えば、JavaScriptの関数型の処理や配列のメソッドを片っ端から暗記していったり、AWSの全サービスの説明を暗記したり、、、といったような暗記主軸の勉強は基本的に意味がありません。
厳密には意味がないというよりかは、使わない知識をひたすらインプットして暗記しても、使わないのでその時間が無駄になるという感じです。
プログラミングは1つの言語のメソッドだけにフォーカスしても無数に存在するので、暗記メインで勉強を進めていくと本当に永遠に勉強が終わりません。
2: 網羅的な勉強
上に書いてある内容と少し重複しますが、例えば、Pythonの文法を網羅的に勉強しようとしても、終わりません。
Linuxコマンドもそうですし、JavaScriptもそうですし、AWSもそうですし、Reactもそうですし、Dockerもそんな感じで、基本的に網羅的に勉強してから使っていくのは時間的にかなり難しいです。
繰り返しにはなりますが、目的のための手段として適宜調べながら実装をしていきましょう。
結局本当に使うものは慣れてきてやがて覚えますし、ある程度の技術力がついてくると未知のことを調べながら実装しても理解がすごくスムーズにできるようになるので、調べながら仮にやっていたとしてもそれなりのスピードはやがて出るようになります。
3: 勉強のための勉強
プログラミングは勉強のために勉強を行うと、繰り返しになりますが、本当に永遠に終わりません。
ちょっとニッチなメソッドや技術的な事柄を知っているほうが少しインテリ風になれますが、使いどころがない知識を詰め込み続けていっても特に意味がないので、勉強のための勉強は非推奨です。
✅ プログラミングの勉強で最も大事な部分
「調べながら目的のために何かを作る」という部分がプログラミングの勉強で最も重要になります。
✅ 具体的なアクション
- プログラミングの勉強をする場合には、「何かを作る」ということをベースラインにして日々の作業に落とし込む
- 網羅的であったり「勉強のための勉強をしていないか?」ということを常に自分自身で確認して微妙な場合には適宜修正を行う
- 他にも、自分のやり方などに疑問を持った際にはChatGPTに聞いたり、LVLPATH村で質問する