プログラミング独学の攻略法！

#はじめに
私は、プログラミングを独学で学んでおります。
独学開始から２ヶ月と６日間で、Webアプリを自作いたしました。
下記に自作アプリのURIを貼り付けておりますので、興味のある方はご確認ください。
https://damp-earth-24115.herokuapp.com/

この記事を投稿するまでのプログラミング独学歴は２ヶ月半程度です。
しかし、独学を効率的に行う方法については、自信を持ってお伝えできます。
今回は、私が実践している独学方法について、解説します。


#プログラミング独学の攻略法！


##①挫折しないための心構え
まず、独学を挫折しないための心構えを整える必要があります。
そのために、私は以下の言葉を心に留めております。
（うろ覚えな部分があり、齟齬が生じている可能性がありますが、ご容赦ください）

###プログラミングは天才だけがやるものではない
これは【2ちゃんねる創始者・ひろゆき氏】が、おっしゃっていた言葉です。
ひろゆき氏は学生時代に、自分にはプログラミングの才能はないと自覚した出来事があったそうです。
それでもひろゆき氏は、プログラミングをやめませんでした。
それについて質問者から「才能がないと自覚した時、なぜ挫折しなかったのか？」と質問されると、ひろゆき氏は下記のように答えました。

「会計の仕事をしている人は、数字を扱う専門家だけど、天才数学者じゃないでしょ？
プログラマーだって世界に五万といるけど、全員才能があるわけじゃない。
食べていくくらいの能力なら凡人でも身につけられる」

プログラミングは確かに大変です。
私自身、膨大な量のコードをみた時に、これは才能がないとできない事柄だと思いました。
しかしこの言葉で、学習を進めさえすれば、天才プログラマーにはなれなくとも、一般レベルのプログラマーにはなれると思わせてくれました。

###プログラミングはみんな挫折するから、最高
これは【YouTuber・マナブ氏】が自身のYouTubeチャンネルでおっしゃっていた言葉です。

「プログラミング学習は大変であるがゆえに、大半の人が挫折します。
言い換えると、大半の人が挫折し、なかなか身につかないからこそ、それを乗り越えたエンジニアには、それなりの報酬が与えられます」

エンジニアになることは大変であるからこそ、エンジニアはそれ相応の対価を得ることができるのです。
挫折しそうになる障壁にぶつかったとしても、耐えて頑張ろうと思わせてくれる言葉です。

###向き不向きは数ヵ月では判断できない
この言葉は私の自論です。
数ヶ月触っただけでは、向いているか向いていないかなんて分かりません。
少なくとも、１年程度は一生懸命に試行錯誤すべきです。
それでも「エンジニアに転職できない」であったり「アプリを１つもリリースできない」といったことになれば、方向転換を検討するべきかと思います。


##②「プログラミングは楽しい」と暗示をかける
プログラミング学習は非常に大変です。
いくら心構えを整えたとしても、初学者にとっては苦行でしかありません。
ましてや、IT関連の業務に就いたことのない方であれば、学習を始めた途端に拒絶反応を起こし、３日で挫折するでしょう。
少なくとも、私はそうでした。
よって学習の導入期には、プログラミングをライトに学び、知識よりも楽しさを知ることに心がけてください。

ライトなプログラミング学習方法は以下の通りです。

まず有効なのは、マンガです。
プログラミングに関連するマンガを読んで、リラックスしながらもプログラミングに関する感覚を身につけていきます。
プログラミング関連のマンガについてご興味のある方は、下記のURIを確認ください。
https://web-camp.io/magazine/archives/70465

次にYouTubeです。
最近、エンジニア系YouTuberも増えております。
エンタメ性の高い動画もありますので、ぜひ調べてみてください。

最後に紹介するのは、書籍です。
私がプログラミングに１度挫折した時に読んだ本が、“プログラミング入門講座”です。
これはまさに、「プログラミングは楽しい」を教えてくれる本です。
興味のある方は、下記のURLを確認してみてください。
https://bookmeter.com/books/11092002

プログラミングは楽しいと自己暗示をかけることに成功したなら、次からは本格的な学習に進みます。


##③Webのプログラミング学習サイトで学習する
Webの学習サイトに加入して、実際にプログラミングを学んでいきます。
学習サイトを選択する上での注意点は以下の通りです。

・インプットとアウトプットができる学習サイトとする（Progateやpaizaなどの学習サイトがオススメです。）
・いきなり有料版を選択し、実践する（無料版と比較するとコンテンツの充実度が全く違います。体験する場合でも、いきなり有料版に触れるべきです。）
・月額１０００円程度の学習サイトにする（Progateやpaizaなど、月額１０００円程度の学習サイトでも充実したコンテンツであるため、それ以上に課金する必要はありません。）

学習サイトが決定できたら、以下の学習手順を行ってください。

①HTML・CSSを学ぶ
②初学者でも学びやすいプログラミング言語を１つ選択し、学習する
（学習障壁が低いプログラミング言語は、PHP・Ruby・JavaScriptだそうです。）
③シェルコマンド・Git・Linuxを学ぶ
（ここでターミナルのコマンド操作に慣れておけば、このあとに行うローカル環境の構築がスムーズとなります。）
※データベース・フレームワークの学習については、後ほど行います。

学習を進める上での注意点は、以下の通りです。

・プログラミングの知識は「暗記する」のではなく、「このコードを使えば、こんなことができるんだな〜」程度の理解で終え、サクサクと学習を進めていく
・問題が出題された時、ググって答えを導き出す（エンジニアの現場は、インターネットを使ってカンニングしても怒られません。）
・ググっても答えが導き出せそうになければ、迷わずに答えをみる（答えをみても「私には才能がない！」と思わないでください。）
・答えを確認した場合、その内容をググって再確認する（完全に理解する必要はないですが、スルーはしないでください。）
・学習サイトの内容は１周だけ行う！２周以上はしない！（暗記が目的ではありません。なんとなく知っておいて、ググれる技術が身につけばそれでOKです。）


##④簡単なアプリを開発する
アプリ開発と聞いて、急にハードルが上がったと感じる方もいるでしょう。
ただ、この段階で作るアプリは、本当に簡単なもので結構です。
例えば『データベースやフレームワークを必要としない、文字や画像を表示されるだけのアプリ』でも構いません。
なぜならば、最初のアプリ開発で重視すべき点は以下の通りだからです。

・Webサイトやアプリというものが、どのようにして作られているかを把握するため
・ローカル環境を整えてみるため

ローカル環境を整える際にターミナルを操作いたします。
その時にプログラミング初心者（私）は「間違ったコマンドを入力してパソコンが壊れたらどうしよう」と思います。
そんな経験をすることも必要であると、私は思います。
ちなみに、ターミナルにコマンドを間違えて入力しても、大抵は問題ありません。
なので、バンバンコマンド入力しましょう。


##⑤Webのプログラミング学習サイトで学習する
再び、学習サイトを使用します。
次に学習していく内容は、以下の通りです。

①データベースについて、学習する
②フレームワークについて、学習する
（PHPの場合、Laravel・CakePHPなどあります。プログラミング言語同様、１つに絞り込み、学習してください。）

上記も、１周で構いません。
なんとなく理解しておいて、次のアプリ開発の時にググれるようにしておきましょう。


##⑥作りたいアプリを設計し、開発する

いよいよ、自分の作りたいアプリを設計し、開発します。
エンジニアの業務は、コードを入力するだけではありません。
むしろ、コードを入力する業務は、全体の２〜３割程度です。
それにひきかえ、アプリの企画・設計に関する業務は全体の５割を占めます。
つまり現場では、コーディングスキルと同様に、創造力が求められるということです。
独学中にオリジナルアプリを開発して、感覚だけでも養っておくべきでしょう。

アプリ企画・設計の重要性について詳しく解説されている記事を、下記に添付いたします。
とても良質な記事なので、ぜひご確認ください。
https://qiita.com/digisaku_tamori/items/741fcf0f40dd989ee4f8

作りたいアプリを探すコツは、自分自身の趣味や習慣を振り返ることです。
または、家族や友人の困りごとを聴取することも効果的です。
情報収集した内容の中から、アプリ化できる事柄を１つだけピックアップしてください。
ピックアップした内容を元として、さらに自分自身のスキルセットに合わせて内容を細分化していきます。
ちなみに私がアプリ開発で取り上げた事柄は、趣味でした。
趣味である勉強をより効率的に行うため、ポモドーロテクニックという機能を実装したアプリを開発することにしました。
また、記事を投稿する機能も実装しました。
理由は、学習を効率化するためのメソッドを、他の人からも聞いてみたかったからです。

作りたいアプリのテーマが決まったならば、計画書を作成します。

計画書の内容ですが、正確・綿密・綺麗に作成することを心がけてください。
なぜならば、計画書こそが、これからの長いアプリ制作期間を支える地図となるからです。
素人プログラマーがコードの迷宮に突入していくのですから、紙とペンで作ることができる計画書くらいはしっかりと構築しておきましょう。

下記のURLをクリックすれば、私がアプリ開発のために作成した計画書を確認することができます。
ご興味のある方は、ぜひ参照ください。
https://qiita.com/okaa/private/c025b1e20cbf5b287477

計画書の沿って作成したアプリがローカル環境に反映できるまでに完成したなら、最後はリモート環境にアプリを公開（デプロイ）しましょう。
「エンジニア転職のことを考えるならばAWSでデプロイすべき」という意見もありますが、最初はHerokuでいいと、私個人としては思います。
Herokuでデプロイしたあと、AWSでもデプロイできるようにチャレンジしてみましょう。


##⑦アプリ開発の体験をQiitaに投稿する
アプリ開発で得た体験を言語化することにより、知識を効率的に定着されることができます。
よって、アプリの開発のために使用した関数・DB・Gitなどの知識について解説した記事を作成して、Qiita等に投稿していきます。
これのメリットは、インターネット上に投稿することができる点です。
たとえ少人数にしか閲覧されないと分かっていても、インターネット上に公開される記事であるならば、下手な内容を投稿するわけにはいきません。
よって、可能な限り正確な情報をあげられるように調べます。
そうすることで、曖昧な知識のままに実装していた技術を正確に復習することができ、より知識を定着させることができます。
また、プログラミングの内容について体型立てて言語化するため、エンジニアとしてのコミュニケーションスキルも向上すると考えております。
（これについては、私自身が実務未経験者であるため、あくまでも予想です。）


##⑧２つ目のアプリ開発を開始する
ここで立ち止まることなく、２つ目のアプリ開発を開始します。
転職活動中・または転職が完了してからも、上記でお伝えした⑥と⑦は続けていきましょう。


#最後に
プログラミング学習は本当に大変です。
ですが、学習をしておいて損のない知識であると思います。
私自身、たとえエンジニア転職に失敗したとしても、このスキルは前職でも応用できるものと考え、全く迷いなく学習できております。
皆さんも、プログラミング学習を行なって、たとえ第一希望の夢が叶わなくとも、意味ある知識を身につけているのだと信じ、迷いなく学習を続けていきましょう。

最後まで読んでいただき、誠にありがとうございました。