独学によるプログラミング学習で挫折する人は非常に多いです。
結論として、独学でプログラミングを学ぶことは初学者にとって困難な道のりです。
- 独学によるプログラミング学習の挫折と原因
- プログラミングに向いている人と向いていない人
- 独学でプログラミングする最適な学習方法
多くの初学者は、学習ロードマップがない中でプログラミングを始めることになります。
そのため、本記事ではプログラミングへの注意点と学習のマッピングができていない人へおすすめのロードマップを解説します。
独学によるプログラミング学習で挫折する理由
以下は、プログラミングスクールである侍エンジニアがアンケート調査した内容です。
- プログラミング学習の際に、挫折や行き詰まりを感じたことはありますか?
-
挫折や行き詰まりを感じたことがある-87.5%
上記の調査結果から、約90%のプログラミング学習者が挫折していることが明らかになりました。
当然、アンケート調査した人数にも起因していますが統計的に数を増やしても近似値になるはずです。
また、挫折経験をした人の中で6割近い人が「独学」による学習方法であることが分かっています。
プログラミング学習を挫折する主な原因
なぜこれほどプログラミング学習の挫折が引き起こされるのでしょうか。
アンケート調査結果から、以下の主な原因が浮彫りになっています。
- 不明点が聞ける環境がなかった
- エラーが解決できなかった
- モチベーションが続かなかった
上記の原因を引き起こす学習状態はパターン化されています。
独学によるプログラミング学習はサポート環境がない
プログラミングは、学習の過程で必ず疑問点・不明点といった問題に直面します。
プログラミングにおいてエラーが発生すると、エラーの問題はプログラムの実行可能かどうかに直結することが多いです。
そのため、エラーの解決は質問できる環境がないと独学者には厳しい状況です。
おそらく、プログラミング独学者にとって環境の整備ができていないと挫折につながる要因になるようです。
プログラミング基礎知識と専門用語の壁
全くIT業界に精通していなければ、プログラミングはおろか業界で利用される用語もわからないです。
また、プログラミングにおける「変数」「関数」「クラス」「条件分岐」など、基本概念を理解し扱える必要があります。
当然、基本概念の理解によってコーディングが変化したり、いわゆるオブジェクト指向によってアプリケーションへつながるわけです。
基本概念や専門用語が理解できないと初学者は全く頭に入らなくなるため、プログラミングの基礎学習も一定のハードルが存在します。
そのため、初期の学習でつまずきプログラミングの楽しさを感じないまま挫折する要因になります。
エラーに対する解決にどう対応するか
プログラミング初学者であれば、開発環境を構築するだけでも大変だと思います。
さらに、コーディング後に動作検証するとエラーまで発生させてしまい、大変さに拍車をかけます。
- シンタックスエラー
- タイプエラー
- ネームエラー
それぞれのエラーで解決方法が異なるため、一つ一つの対応策を検索・調査が必要になります。
たとえ、修正箇所にあたるコードを特定しても、修正方法がわからず困り果てます。
このように、エラー対処の難しさによってプログラミング学習の難易度を高める要因になります。
プログラミング初心者にとって開発環境構築も挫折になり得る
プログラミング初心者にとって開発環境の構築は、十分挫折する可能性があります。
というのも、いきなりコーディングを実施できる環境がなく、プログラミングまでのセットアップが必要になるからです。
昨今のプログラミングのオンライン学習サービスを利用すると、オンライン環境でコーディングができてしまうため自身で環境構築する機会がありません。
例えば、サーバーサイド・フロントエンド開発利用するTypeScriptだと以下の環境構築が必要になります。
- Node.jsのインストール
- TypeScriptのインストール
- VSCodeのインストール
最低限でも上記の開発環境を構築する必要があります。
また、選んだプログラミング言語によっては構築するエコシステムの環境内容が異なります。
画像と解説を含めたTypeScriptの環境構築を実施したい人は「【TypeScript】インストール方法や開発環境構築を徹底解説!」を一読ください。
独学によるプログラミング学習のメリットとデメリット
上記では、独学によるプログラミング学習の挫折原因を記載しましたが、それぞれメリットとデメリットが存在します。
メリットとデメリットを比較するとわかる通り、表裏一体であることが分かります。
- プログラミングの学習コストを削減できる
- プログラミングの学習内容と時間を自由に設定できる
- プログラミング学習を体系的に学ぶことが難しい
- プログラミング学習内容のプライオリティを設定できない
独学のメリット:プログラミングの学習コストを削減できる
独学で最も大きいメリットは、プログラミング学習のコストを削減できる点です。
教材やオンラインプログラミングスクールによりますが、数千円から数十万円など金額が高いです。
また、教材もある一点の学習内容のために購入すると、網羅的に学習する場合に金額が増えていきます。
人気のプログラミング言語であれば、ネット検索を駆使し無料で学ぶことができます。
独学のメリット:プログラミングの学習内容と時間を自由に設定できる
次に考えられるメリットは、学習内容と時間をあなた自身で自由に設定できる点です。
プログラミング学習の内容は選択した言語や目的によって、学ぶ必要のある範囲が変化します。
それらをあなたのスケジュールに合わせて取り組むことができます。
特に、調べ物はスマホを利用し、動作検証や開発はPC1台で実施できるため、ネット環境さえあれば様々な取り組みに発展できます。
独学のデメリット:プログラミング学習を体系的に学ぶことが難しい
ここから表裏一体の裏事情になりますが、実際はプログラミング学習を体系的に学べず難易度が上がってしまう点です。
学生時代のように学習要項や手順が定められているわけではなく、自らの学習ロードマップを立てる必要があります。
しかし、知らない・わからないものに対して学習ロードマップを立てることはできず、何から始めるべきかわからない状態からスタートせざるを得ません。
ここに、自由度の難しさが現れてしまうのがプログラミング学習の難易度にも影響が出ています。
独学のデメリット:プログラミング学習内容のプライオリティを設定できない
体系的なプログラミング学習のロードマップが立てられないといったデメリットに起因しますが、そもそも学習内容に優先度を設定できない点です。
例えば、プログラミング初学者がWebアプリケーション開発を個人で挑戦する場合、何から始めればよいかといった問題があります。
「全体を把握すればいいのか?」「いきなりフレームワークから学んでいいのか?」など、わからないからこそ引きおこる優先度の仕分けができません。
いきなりプログラミング学習を始めても挫折するため、学習前の準備がとても重要になります。
プログラミングの独学に向いている人と向いていない人の違い
多くのプログラミング初学者は独学から始める人が多いため、独学に取り組む人の中でも向き不向きがあります。
- 学習におけるスケジュールの自己管理ができる
- 未知の問題に対して解決策を思考/試行できる
- とにかく粘り強く実行できる
- 明確なプログラミング学習の目標設定がある
上記のポイントは、プログラミングに限らずどんな物事に対しても当たり前の内容ですが、プログラミングにおいても例外ではありません。
学習におけるスケジュールの自己管理ができる
当然ですが、学生であっても社会人であってもプログラミング学習のみに時間を割り当てられることはありません。
どれだけ管理アプリやGoogleカレンダーなどを駆使しても、当日の時間帯に取り組むかどうかは本人次第です。
つまり、自己管理できる人でなければ「タラレバ」のスケジュールで留まります。
後述で詳細内容を記載しますが、逆算による学習計画を立てて素直に実行できる人がスキルを身に付けます。
未知の問題に対して解決策を思考/試行できる
自身がわからない問題に当たった時、解決できるかどうかは一旦置いて「エラーを見てどんな解決する仮説が立てられるか」を思考する必要があります。
学校の問題集なども、すぐに答えを見てしまうのではなく「どんな問題でどんな解答になるだろう」と考えるのと同様です。
また、プログラミングの解決は自身の検証によって動作するかどうかを確認しない限り、正しさを判定できません。
そのため、解決策の思考と同時に、解決策を実行するといった試行も大切になります。
とにかく粘り強く実行できる
根性論になりますが、とにかく粘り強くPCと向き合えるかも重要なポイントになります。
「なんとなく実行して動いたからよし」で終わらせるのではなく、「なぜ」を常に問うことで1コードへの理解が段違いです。
わからないを徹底的につぶすこともエンジニア思考として重要になります。
明確なプログラミング学習の目標設定がある
学習のスケジュールを立てる際に、漠然と学習計画を立てることは難しいです。
学生時代・社会人の予定であれば、定期試験や客先訪問など将来のスケジュールが事前に定まっているはずです。
どのように管理するかはそれぞれですが、「いつまでに何を学んでおくのか」「いつから始めるのか」といった目標設定が進捗度を高めます。
学習計画を立てるメリットは、「いつまでに学んでおくのか」を設定し、当日の状況と理想の計画で比較ができ、充足の状況が把握できます。
独学によるプログラミングの効果的な学習方法
上述した通り、様々な観点からプログラミング学習を始める前に考えるポイントが表面化していることと思います。
- プログラミング言語の選定
- プログラミングの学習ロードマップを明確化
- プログラミング学習時間の確保と維持
- 疑問点/不明点を払拭できる環境を持つ
「やるものを決める」「やるものに関する範囲から日程を決める」「学習時のルールを徹底する」「わからない場合のサポート環境を持っておく」、これらを押さえるだけでも始めやすいです。
プログラミング言語の選定
初学者にとってプログラミング言語の選択は、もはやプログラミング学習の全てに影響が出ます。
- 人気のプログラミング言語を選択する
- 就職を前提としたプログラミング言語を選択する
つまるところ、就職を前提にしなければ好きなプログラミング言語を選択してよいですが、長期的にプログラミングに携わりたいのであれば人気の言語を選択しましょう。
理由としては、ネット検索時の情報量が膨大に存在するためです。
また、就職を前提にした場合は、求人票や転職サイトで記載のあるプログラミング言語を選択するとよいです。
おそらく、現在のトレンドならサーバーサイド言語が圧倒的にPython(実際に求人が多いかは別だが学習者が最も多い)、フロントエンドであればJavaSript(TypeScript/Node.js/Reactによる求人が安定的)の選択が無難です。
プログラミングの学習ロードマップを明確化
プログラミング学習において、学習内容を大別するとロードマップ化が明確に作成できます。
以下では、プログラミング言語Pythonを例にロードマップを記載します。
・Pythonの基礎的な構文を理解する
・文法内で利用される基本的なメソッドを理解する
・「関数」「条件分岐」「クラス」などプログラム作成からアルゴリズムを理解する
・プログラムが持つデータ構造を理解する
・Pythonの標準ライブラリと外部ライブラリ
・ライブラリを利用したプログラム作成
・ファイル操作によるデータ処理
・Pythonフレームワークの理解(例:Flask, Django)
・HTML/CSSを理解する
・フレームワークを利用してHTML/CSS/Pythonを掛け合わせる
・サンプルアプリを開発する
・機能追加から未知の課題に取り組む
上記のロードマップを参考に、常に理想の進捗状況と現実の進捗状況を比較しギャップを埋め続けることで開始時より向上していることを実感しましょう。
プログラミング学習時間の確保と維持
あなたの目標設定にもよりますが、学習内容の範囲やレベルによって学習時間は変動します。
そのため、学習時間の確保と維持を考えなければなりません。
- 時間帯の固定化
- 行動の習慣化
特に、朝と夜にスケジュールの固定化を実施しましょう。
スケジュール通りに、時間になってもPCの前で「プログラミングを始めるぞ。」といった状態で臨めなければ結局やりません。
そのため、予定前の行動も習慣化することで無駄にすることなく学習に100%で取り組めるはずです。
疑問点/不明点を払拭できる環境を持つ
プログラミングの挫折率を高める要因の一つとして、「質問できる環境がない」といった原因もあります。
そのため、独学によるプログラミング学習において質問できる環境を知っておくことも大切です。
- teratail
- Stack Overflow
サイト内検索のほか、プログラミング初学者がどのような質問を持っているか・聞いているかを見ることもできます。
独学によるプログラミング学習は目的逆算思考も有効
とはいえ、独学によるプログラミング学習時に具体的なロードマップ作成がわからないケースも少なくありません。
「プログラミングを始める」→「○○目標達成」までのプロセスが組み立てられないからです。
未経験であれば至極当然でハードルが高いので、ここでは「エンジニアを目指す」ケースを例にロードマップを構築します。
- プログラミング学習目的から逆算した情報収集
- スキルに基づいたポートフォリオ構想
- 目的に沿ったアプリ開発&インフラ学習
- プログラミング言語の基礎学習
学習ロードマップの順序が逆順になっているのは理由があります。
実際に、目的・目標のゴール地点ではなく、いきなりプログラミング言語学習から始めると右往左往する学習期間が生まれてしまいます。
それぞれの学習ロードマップの項目を解説していきます。
プログラミング学習目的から逆算した情報収集
唐突ですが、あなたがプログラミング学習を通して達成したい目的・目標はなんでしょうか?
まだプログラミング初心者の場合は、案外明確な答えを持っている人も少ないと思います。
ここでは、例として「エンジニア就職を目指す」ことを目的としたケースで考えていきます。
- エンジニア転職市場の情報収集
- エンジニア求人の情報収集
- プログラミング言語選定の情報収集
なぜ情報収集に対して3つの視点が必要か解説します。
エンジニア転職市場の情報収集
エンジニア就職あるいは転職の考えをきっかけにプログラミング学習を始める人は事実多いです。
実際に、エンジニアに限らず近年の様々な職種におけるビジネス市場を確認すると、エンジニアの待遇あるいは働きやすさなど多角的な観点でも有利な時代です。
そのため、多くの人がビジネス市場の観点からエンジニアといった働き方を視野に入れ、取り組み始めるケースが多いです。
ここでの情報収集は、エンジニアといっても様々な細分化が起きているため、それらをしっかりと情報整理しましょう。
エンジニア求人の情報収集
ネット環境が整った現代では、求人サービスやリモート業務など働く環境と相性が良く、膨大な数が公開・掲載されています。
しかし、重要なのは求人内容を数多く見て「どんなプログラミングスキルを身に付けるべきか」といった情報を整理することです。
例えば、機械学習やデータ分析といったデータサイエンティストを目指す人であれば、プログラミング言語Pythonを始めDB知識、生成AIといったスキルも求められることがあります。
他にも、フロントエンドエンジニアを目指す人であれば、TypeScript/JavaScriptを始めHTMLやCSS、Reactに至るまでスキルを確認しておくとよいでしょう。
このように、自身が興味関心を持てた求人内容にて100~200件ほど上位から情報整理すると、求められるスキルセットが一通り抽出できます。
プログラミング言語選定の情報収集
上記のようなエンジニア職種の確定、求人から抽出した自身が身に付けたいスキルセットの確定といった情報整理を終えたら直結したプログラミング言語を選定しましょう。
いきなりプログラミング言語選定から始めてしまう人がいます。
しかし、開発できないジャンルで取り組んだ意味がなかったり、作れるがビジネス市場ではトレンドがなかったりとズレた学習でモチベーションが低下する可能性があります。
また、学習した言語があとになって自身の目的や目標と乖離していると、学習の挫折にもつながります。
そのため、事前に自身の目的・目標を設定するとともに、「狙える市場があるか」「未経験でも求人はあるか」など取り組んでも問題ない状態を作りましょう。
スキルに基づいたポートフォリオ構想
上記で具体的なスキルセットを定めたら、それらのスキルを用いて開発できるポートフォリオを構想しましょう。
しかし、具体的な機能の実装方法や必要なプログラミング知識がないため、作れるアプリかどうか判断がつかないこともあります。
- Qiita
- Zenn
上述したサイトは、実際に現役エンジニアあるいは学習者が取り組んだ内容を記事にして公開していることが多いです。
そのため、作ってみたいアプリあるいはスキル名を検索ワードにし、記事内容から抽出したスキルセットが含まれているか確認しながらポートフォリオ候補としてまとめておくとよいです。
目的に沿ったアプリ開発&インフラ学習
構想したポートフォリオ候補にもよりますが、特にWebアプリ開発で言えば必要なインフラ環境あるいはエコシステムの学習も含まれていきます。
- Visual Studio Code
- GitHub
- Docker
- AWS/GCP/Azureといったクラウドサービス
上記はあくまで一般的なWebアプリ開発で利用されるエコシステムの一部ですが、候補にしたポートフォリオの構想に合わせて必要なシステムを情報整理しておきましょう。
プログラミング言語の基礎学習
ここまで情報整理した段階で、自身で見定めたプログラミング言語の基礎学習を開始するとよいでしょう。
実は、プログラミング言語の基礎学習といっても、言語自体のバージョンアップデートや新たな機能実装によって学習領域はどんどん拡大しています。
しかし、現役エンジニアであっても全てを学習しているわけではなく、必要に応じて学習領域を定めて集中学習を実施しています。
- 頑張ってプログラミングを覚えようとする
- 真面目に基礎学習を何度も反復してしまう
思っている以上に、現役エンジニアであってもコードを最適解で記述できる人は少ないです。
実際に、多くの人が利用するアプリ一つとっても毎月あるいは数ヶ月単位でマイナーアップデートを繰り返しています。
これは、最初から最適なコードを記述しているのではなく、まず動くものから始まり少しづつ改善を繰り返している証拠です。
もちろん、致命的なエラーは別ですが完璧を目指しているといつまでも学習が進みません。
ましてや、何が最適かはアプリによっても変化するため、基礎学習で学んだ機能や文法を理解しておけば問題ないです。
このように、ゴールから逆算した学習ロードマップを作成することで、「今回はやらない」ことを明確にしながら最短の学習経路を設定できます。