プログラミングを学ぶには近道があります。例えば書籍を買う、プログラミングスクールに通う等です。
ただお金を払えば近道を通れるわけではなく、近道を通れる可能性が上がるだけです。とはいえ理想はお金で解決したいですが、状況により難しい方も多くいると思います。
そこでこの記事では独学でプログラミングを学んでいく上で気を付ける点や実際にどういった順序で学んでいくべきかを解説します。

プログラミングの効率的な学び方について

ゴール設定
まず「学んだ」と言えるゴールラインですが、以下とします。
- プログラミングを学ぶ目的を考える
- サーバを立ち上げてサービスを実装する
- 世の中に公開する
- githubでコードを公開する
- プログラミングのバイトか副業スタートする
プログラミングのバイトを始めることがゴール?って思うエンジニアの方いると思います。
ただエンジニアなら業務でプログラミングすることの重要性は分かるはずです。
始まってからは自然とスキルが身についていきます。学びの最速の方法は仕事で(お金をもらって)プログラミングをすることです。
一番大変だったのは独学でスタートしてから仕事を始めるまでの期間です
プログラミングを学ぶ目的を考える

まずプログラミングを学ぶ目的を決めましょう。
おそらくこのページに辿り着いた方は何らかの理由でプログラミングを学ばないとと考えているかと思います。
プログラミングを学ぶ上でNGなのは目的もなく、プログラミング力をつけないと。と色んな言語を学んだり本を読み漁ったりすることです。
目的が決まるとおのずと使う言語やツールが決まってきます。例えば言語だけでも以下のように目的別に必要な言語知識が変わってきます。
- アプリを作りたい→swift, java
- ゲームを作りたい→Unity, C#
- データ分析や機械学習・AIに携わりたい→Python
- Webサイトを作りたい→Javascript, html, css, php or node
- 業務に使える便利なスクリプトを作りたい→VBA, GoogleAppsScript
- プログラミングの考え方を身につけておきたい
そのため手段ではなく目的を考えるようにしましょう。例えば以下の例は全てプログラミングを学ぶ目的です。
「プログラミングを学んで論理的思考力を上げたい」
「転職したいので業務で使えるプログラミングを学びたい」
「作りたいWebサイトがあり自分で作り方から学びたい」
そこから具体的に目標に落としていきましょう。
目的を達成するための目標を定める
作りたい Web サイトがある場合、自然とそのWebサイトを作成することが目的になりますね。
「プログラミングを学ぶこと」が目的の場合は達成するために必要な目標を定める必要があります。
特に明確な目標が立てられない場合は自分の身近にあるWebサイトを作成することをお勧めします。
例としてオンラインでの買い物が好きな人は、いくつかのオンラインショップを横断した検索サイト。ゲームが好きな人はレビュー投稿サイトなど自分の趣味嗜好にあった具体的な目標を定めることをお勧めします。
身近な課題解決から入るのもお勧めです。例えば毎日同じ業務や家事を繰り返している→解決するための仕組みを作るのような考え方です。
モチベーションを維持できる目標にする
先ほど趣味嗜好にあったもの・身近な課題解決。とお伝えしましたが、プログラミング学習でも必要なのはモチベーション維持です。
英語学習でも必要なのは記憶力やテクニックではなく続けるためのモチベーションをいかに維持するかが重要だと考えます。
プログラミングでも同様で自ら学びたくなるような目的・目標を立てて数か月間モチベーションを維持できるテーマかな?と考えることが大事です。
何となくプログラミング勉強してみようという始め方は99%の人が学び終える手前で脱落します。本を1冊写経してやった感が出せるくらいでしょう。

プログラミングを好きになれるように

趣味嗜好と重ねたほうがよい、もう1つの目的はプログラミングを好きになれることです。
好きになれることはすごく重要でプログラミングの上達は才能よりもプログラミングの時間を好きになれるかどうかにかかっています。
作ってる時間が楽しく趣味の時間よりも優先してプログラミングやりたいという状態になるのが理想的です。
何事もそうですが、特にプログラミングに関しては楽しんでやっているかどうかが学びに関わってきます。
理由としてはプログラミングを始めとしたコンピュータの世界では思った通りに動かすの先に、なぜこういった動きをするんだろうと深く入り込む好奇心が重要となってきます。
こうした積み重ねがスキルの差として産まれてくるわけですが、やらされ感でやっていると動いている=完結してしまうためです。
長々と説明しましたが、ここまでの話からプログラミングを始める前の目的・目標設定の重要性が分かっていただけたかと思います。
目標を達成するために必要なスキルを調べる
ここまで来たら後は必要なスキルを見定めて学習フェーズに入っていきましょう。
とはいえ、調べても良く分からないと思うので、以下に沿って必要となる言語を抑えておきます。
- アプリを作りたい→swift, java
- ゲームを作りたい→Unity, C#
- データ分析や機械学習・AIに携わりたい→Python
- Webサイトを作りたい→Javascript, html, css, php or node
- 業務に使える便利なスクリプトを作りたい→VBA, GoogleAppsScript
実際には言語だけではなく、IDEと呼ばれる総合開発環境の理解やアプリはOS(iOS/Android)の理解、Webサイトはブラウザの理解など多岐にわたります。
ここではざっくりと利用言語を捉えておき次項から周辺の必要スキルを抑えておくようにしてください。
プログラミングの学習方法

ここから実際に学習に入っていくわけですが、大きく分けて学習の手段は3点あります。
- Webページを利用して学習
- Webサービスを利用して学習
- プログラミングスクールを利用して学習
- 書籍による学習
結論としては「書籍による学習」を選択しましょう。
まず何故他の手段がNGなのか、書籍が何故独学で学ぶには優れているかについて説明します。
Webページ学習について
Qiitaに代表されるようなWebページも検索すると山のように情報量があり、書籍よりも最新の情報や分かりやすい情報が並んでいることもあるのですが、問題点として間違った情報も多く、初心者の場合は判断つかないことです。
間違った情報を習得してしまう・間違った情報で進めてしまって問題発生→解決に時間を要するという負のループに入り、完全に時間の無駄なのでやめましょう。
Webサービス学習について
Webサービスは無償・有償とありますが、サービスをきちんと選べばお勧めです。ただしある程度書籍で基本を学んだ後に入るのが良いかと考えます。
Webサービスでは以下がお勧めです。Webサービスのメリットは環境構築を必要とせずに言語学習が出来る点なので、セットでついているサービスを紹介しています。
- paiza→基礎学習ならこちら
- Progate→種類が多め
- Codecademy→英語力があるなら一番お勧め。質が高い
いずれも無料プランあるので、上記の中から自分にあっていそうなサービスを選択するとよいでしょう。
英語苦手な方はCodecademyは避けたほうが無難です。ある程度プログラミング力があると機械翻訳でもデメリットなく進めることができますが、英語苦手かつプログラミング初心者の場合は間違った認識や進捗スピードが遅くなるリスクがあります。
正直初心者には一番おススメできないやり方なので、ゼッタイに避けましょう。
プログラミングスクールについて
最短距離で学ぶためにはプログラミングスクールが最適ですが、料金も高いため人によっては費用対効果が出づらいことと、完全な初心者は正直選び方すら分からない状態でリスク高いためお勧めしません。
ただプログラミングを学ぶ最短コースはペアプログラミングと呼ばれる講師とセットで進めていく方式が一番伸びます。
プログラミングスクールの選び方やお勧めスクールは別な記事でも紹介できればと思います。
書籍による学習について
書籍について、一番のメリットは「間違っている情報が少ない」ことです。
あとは書籍を選ぶ前提ですが、情報の網羅性が優れており、もれなく基礎を学ぶことが出来ます。
Webサービスでもある程度情報の正確性がありますが、網羅性が若干劣ります。
また初心者には若干説明不足の点が否めないため、ある程度自分で知識を補完できる人でないと厳しい面があります。実際に完全初心者にあるWebサービスを実施してもらったことがありますが、途中で知識が追い付かずに断念しています。

初回に選ぶお勧めの書籍について

次に言語別おすすめの書籍について紹介します。独断と偏見で一部の今後将来性のある言語かつ初めて学ぶのに最適な言語に絞っています。
以下基準により選定しています。その他の言語を選ぶ際の参考にもしてください。
- 発売日がある程度新しいこと。書籍で扱っているメインバージョンが現状と異なってないこと 例)pythonだと2ではなく3系を扱っているか
- 版数がある程度重ねられているか
- 著者が実際に業務でプログラミングを行っているか
- 発行社はある程度プログラミングに関する書籍を出しているか
Webサイト全般
学ぶことが多いですが、一通り学んだ後は一番応用が効きやすく全般的な基礎力が身に着くジャンルではあります。
あまり拘りがない方はこちらのジャンルからスタートすることをお勧めします。ある程度Webサイト全般を抑えておくことで他ジャンルにも移りやすいです。
順番としては以下順で学んでいくのが良いです。この記事ではWebサイト全般(クライアント)→Webサイト全般(サーバ)までを解説します。
- Webサイト全般(クライアント)
- Webサイト全般(サーバ)
- サーバセキュリティ
- フレームワーク(番外編)
Webサイト全般(クライアント)
Webサイト(クライアント)の特徴としては、PCとインターネットさえあればほぼ事前準備無しで出来るというメリットがあります。
完全初心者の場合は、クライアント?サーバってなに?って状態だと思いますが、まずは以下書籍から学んでみましょう。
上2つを学ぶとフロントエンドエンジニアとしてスタートすることも可能です。
ただ将来的にフロントエンドエンジニアとして進める上でもサーバ側の知識をある程度抑えておくことをお勧めします。
Webサイト全般(サーバ)
続けてサーバ編です。サーバ側の言語候補はいくつかありますが、現状と今後を考えてもnode.jsを選択しましょう。
最大の理由としてはクライアント側で学んだjavascriptの文法や周辺知識をそのまま流用できる点です。
多少サーバ側になることで覚えることも増えますが、入り口でくじけないことが重要なプログラミングにおいては大きなメリットになります。
その他はphpでもよいのですが、今後を考えるとnode.jsは確実に抑えた上で、phpに展開していくようにしましょう。
rubyなども人気の言語ですが、将来性が若干不安なので、初心者の方が現状node.js・phpを差し置いて選択する意味はありません。

Swift / iOSアプリケーション
iOSアプリケーションを作るための言語は現状Objective-CとSwiftの2種類になります。
現状はほぼSwiftが使われているため、Swiftを学ぶのがよいでしょう。ただし過去のライブラリやCoreコードを参照する上ではObjective-Cを学ぶ必要性はいずれ出てきます。
そのため基礎からきっちり学ぶのであればObjective-Cでもいいんじゃないの?って人もいるかもしれませんが、Objective-Cはかなり文法の癖が強い言語で特に初心者の方にはおススメできないです。
その点Swiftは他の言語に近しい文法になっているため、他言語へのスイッチングハードルも低いです。
iOSアプリケーションの場合は、開発環境となるXCodeの理解やiOS全般の理解など様々な周辺知識の理解が必要となってくるため、言語は1つですが、覚えることも多いです。
Java / Androidアプリケーション
iOSと同じような状況ですが、Androidアプリケーションを作る際にはJavaとKotlinの2種類の言語から選択します。
Androidアプリケーション以外にも業務系システムなどで使われている事と一般的な言語で他言語へのスイッチングも容易なため、Javaを選択しました。
Androidエンジニアとして進むうえでもJavaでも構築後にKotlinを学習したほうがKotlinのメリットを理解しやすいです。
Java / 業務アプリケーション
項目用意していますが、初心者の方でJavaの業務アプリケーションを選択するのであれば他から入ったほうがよいです。
昨今のJavaは基本的にフレームワークと一緒に使われることがほとんどで、初心者の場合は言語理解なのかフレームワーク理解なのか意味不明の状況に陥ります。
結果的に写経をして作れたけど、あまり自身で応用して発展していける力は身につかないため、他で基礎を身に着けてやってくるのがよいでしょう。
業務でも多く使われている言語で初心者の方も手を出しやすいのですが、他言語である程度のオブジェクト指向を学んでいるとキャッチアップしやすいので自己学習として学ぶ意味は大きくないです。
Python / データ取得分析・機械学習
python言語はWebのサーバ系言語としても利用できるのですが、こちらではデータ分析・機械学習に絞ってお話します。
pythonは癖が強くなく学びやすいため初心者用の言語としても知られています。一方で機械学習には欠かせないライブラリなども揃っており、使われる幅が広く給料ランク1位の言語という側面もあります。
Webページからデータを取得する・加工する・分析する・学習する・・などの利用方法としてプログラミングを学びたいという目的がハッキリしている方はこちらを選択しましょう。
独学プログラマー Python言語の基本から仕事のやり方まで
まずは1つの言語に注力して学んでいきたい人にもお勧めの言語です。
GoogleAppsScript / 簡単な業務自動化・スクリプト
こちらはプログラミングを仕事としてではなく、現在の業務を効率化するためにプログラミングを補助的に使いたいような人にお勧めの言語です。
Microsoft Excel(VBA)にも同様の考え方が展開できることもあって、応用力が効きやすい言語ではあります。
副業や転職は考えていないけど、プログラミング思考を学んでみたい方にもお勧めです。
その他
言語の勉強だけではなく、目標設定の基礎を学んでおくこともおススメです。
最終ゴールに向かうために何を学んでいくか、中間地点となるマイルストーン設定などを行っておくことで計画的に、現実的な期間で学んでいくことが可能です。
書籍での学び方

まずは本の通りに移しながら実行するを繰り返していきましょう。
その時に気を付けることとしては、以下を抑えておくようにしてください。
- 写して終わりとしない。必ず内容を変えて実行することを試してみる
- 分からない場合はWebで調べるようにする
- 2週目を実施する
- 他の言語に手を出さない
何冊もやるより一冊をじっくりやるのが一番の近道です。
写して終わりとしない。必ず内容を変えて実行することを試してみる
変更して実行確認を徹底的に繰り返してください。
3と書かれていることを5と変更するレベルでもいいですし、何かを作るものだったら別なものを作る形に切り替えるように書き換えてみることも有効です。
写して実行できて本の通り結果が出たから、次に行くが一番意味のない時間の使い方です。目的は本を終わらせるのではなくプログラミングを学ぶことです。

分からない場合はWebで調べるようにする
書籍はWebよりは信頼性が高いですが万能ではないため、時折初心者を置き去りにしたり書いている内容が間違っているケースがあります。
そういった時はエラー文言をWeb検索するなど状況から検索して確実に解決して次に進むようにしましょう。
一番プログラミング力が伸びる瞬間が問題解決時です。また調べる能力はどういった言語を使う上でも必須のスキルになります。
プログラミング力を鍛えるための試練だと捉えて、時間をかけてでも解決していきましょう。最初は時間がかかりますが、徐々に解決までの時間が短くなってくることを実感できるはずです。
他の言語に手を出さない

ゼッタイにやめてほしいことの一つです。浅い知識のうちに他言語に手を出すことはやめましょう。
必ず学ぶ目的を決める→学習する→目的を達成するものを作るまで同じ知識を深くしていくようにしてください。
色々な言語を知ることで学んでいる実感が湧くため成長を感じることは出来るものの、実際には一つの言語をある程度深くまで学習した上で他を学ぶほうが圧倒的に効率性が高いです。
他に学ぶべきこと
言語を学んだ後も様々学ぶことがあります。言語の基礎を学ぶのは最初の1歩です。
- サーバ構築とネットワーク、クラウド
- チーム開発
- Github
- CICD
- データベース
- 実用的なコードの書き方。リーダブルコード
- エラー検索のコツ
ただ全ての知識が揃っていないと、アルバイトや副業に踏み出せないわけではありません。
ある程度の段階で実業務でスキルを身に着けるほうが好ましいですが、また別記事でも紹介していきます。