
プログラミング学習は一般的に挫折することが多く、特に独学での挫折率は非常に高くなります。
学んでいるプログラミング言語や、学習方法によっては半年近く勉強を続けていても全く実用的に扱えないということも多くあります。
私の場合は完全に独学でプログラミングを学び始めました。
初めに学ぶ言語は何が良いかとなったときに、所々でプログラミングの基本が最もよく学べるとおすすめされていたC言語が初めのプログラミング言語でした。
半年近くの期間、毎日数時間は打ち込むほど入れ込んでいましたが、それでも実用的にC言語を扱うことは全く出来ずに、プログラミングへの理解も既に頭打ちになっていました。
特にウィンドウを使用したようなプログラムは作り方さえ分からない状態で、ある程度作成法を見つけても情報が古くその時の環境では参考にならないものがほとんどでした。
それからしばらくはプログラミングから離れていたのですが、既存のプログラムに組み込む形の言語というものに興味を持つようになり、一度試しに使ってみることに。
例えば、javascriptはブラウザのブックマークレットといった機能を使用して、自分の書いたコードで実際にブラウザの動作や表示を変更したり、Rubyなどのスクリプト言語は完成された他人のプログラムに簡単に機能を追加することが出来、C言語と違って少ない知識や経験の段階であっても実用的な運用ができることに関心を持ちました。
所々で推奨されているC言語ですが、はっきり言って初心者の段階でこれ一つに絞って勉強していくことは難しいと思います。
まずは実用的なプログラムを組むことを前提にした他の言語学習を中心としながら、基本を理解するためにC言語などの言語を学習するというように複数の言語を選択肢に挙げながら学習していくことがおすすめです。
今回はプログラミング初心者に向けて、どうやってプログラミングを学習していくべきか、何の言語から始めるべきかを紹介していきたいと思います。
独学プログラミングに挫折しないためには
挫折につながる原因
学習の手順

学習初めの頃はまだ基本的な文法や、処理について学んでいくことが一般的ですが、そこから本格的に学んでいこうとするとどういった手順で学んでいくべきか迷ってしまうことがあります。
明確に自分がそのプログラミング言語をどうやって使っていきたいのか分かっていないと学習の方向性が分からずに、何時までも足踏みをしてしまう可能性があります。
開発環境の構築

開発環境の構築までの難しさは言語によってまちまちで、特にマイナーな言語では大きく時間を使ってしまうことがあります。
初期設定で間違いがあると、正確にコードを書き込んでいてもエラーが発生してしまい混乱する原因にもなります。
情報が古い

C言語のような昔からある言語では、入門サイトなども古いものが多く現在の環境で使おうとしても使えなくなっていることがあります。
昔は使用できた関数でも、現在では安全性のために使用できなくなっていることもあるので、学習の際にはなるべく新しい情報を仕入れるように注意するべきでしょう。
相談相手がいない

特に初心者の頃では、自分がどういう所で悩んでいるのか調べることが困難で、原因の特定に非常に難儀することが多いです。
ネット上での検索や本で調べるにもある程度プログラミングの用語や、仕組みを理解していることが前提で、慣れないうちは直接詳しい人に聞くことが出来ると挫折の可能性はずいぶん減ってくるでしょう。
挫折しづらい言語
Ruby、PHP

RubyとPHPはどちらもスクリプト言語と呼ばれるもので、非常に似た言語としてよく比較されます。
学習の難易度としてはRubyの方が文法が固く、一般的には難しいとされますが、その分正確なコードが求められるので、エラーチェックやエラーへの対処には強くなります。
対してPHPはより簡単にコードを書いていくことが出来、ある程度のエラーが発生するコードであっても動作させることが出来ます。
エラーの原因の特定や対処には苦労しますが、積極的に動作させて使用できるということが大きな利点でしょう。
RubyはPHPに比べてよりオブジェクト指向を意識した言語で、オブジェクト指向についてしっかりと理解していかなければプログラミングを進めていくことは難しいですが、PHPではそういったオブジェクト指向のような理解の難しい概念をあまり意識しないままでもある程度プログラムを書いていくことが出来ます。
そのかわりRubyはPHPと比べて日本発祥の言語なので、日本語の情報が多いこと、日本人の利用者が多いことなどが挙げられます。
RubyはPHPよりもプログラミングの基本が学びやすいこともあって、プログラミングのスクールなどでも積極的に教えられている言語です。
PHP、Ruby共に現在でもWebアプリケーション開発の求人情報が多く見つかります。
PHPのほうが求人数が多くあり、言語の習得難易度が低いこともあって人気の言語ですが、Rubyと比べて業務内容が幅広く、一般的なフレームワークが複数あることから職場ごとで幅広い知識が必要になります。
Rubyのフレームワークは「Ruby on Rails」というもので統一されており、求人もアプリケーション開発業務が多いので職場ごとで必要な知識というのは少なくなります。
javascript

javascriptの一番の利点はプログラミングを始めるまでの導入が非常に簡単であることでしょう。
ブラウザ上で動作させることが出来、直接ブラウザの挙動を操作することが出来るので、実用的でプログラムの動作を実感しながら使用していくことが出来ます。
chromeなどのブラウザでは開発のためのデバッグ機能もあり、既存ウェブページなどで使われているjavasciptの動作を参考にしながら学習していくことも出来ます。
javascriptの求人は数あるプログラミング言語の中でも特に多く、ウェブページの動作やデザインと密接に関わるので、ウェブデザイナーを目指すなら必須と言っても良いでしょう。
C#

C#の利点は例えばWindowsアプリケーションのような実用的なアプリケーションが簡単に作れるところです。
C#を使った開発では「Visual Studio」という有名な統合開発環境があります。
視覚的にUIを作成するエディタやソースコードを書くための補助機能が多く内包されており、実際に書く必要があるコードは最低限に実用的なアプリケーション開発をしていくことが出来ます。
C#はこういった開発の容易さがありながら、ある程度C言語のような高度なPCの制御もでき、幅広く使っていける言語です。
Windowsだけではなく、Macやスマートフォン向けのアプリケーション開発にも使え、あらゆるアプリケーションに使っていくことが可能です。
C#はwindowsアプリケーションやウェブアプリケーション、スマホアプリケーションなど幅広い開発が可能なので、様々なプラットフォームに向けたアプリケーション開発業務全般に強い言語です。
特にUnityなどのゲームエンジンで使われていることもあって、ゲーム開発に関する求人には今最も強い言語の一つと言えます。
挫折しない学習法は?
具体的な目標を持つ

具体的な目標というのは、実際にどういったプログラム、アプリケーションを作るかやプログラミングを利用した活動や就職を意識するということです。
例えばRubyやPHPといった言語であれば、Webアプリケーションの開発から、Webサービスを立ち上げて運営までを目標としたり、Swiftなどのスマホアプリケーション開発向けの言語であれば、公開販売を目的として意識できるでしょう。
プログラミングを学習することが目的になってしまうと、延々と勉強し続けるだけになってしまい、覚える必要のないところまで手を付けていることがあります。
学習の範囲が増えて行けば、挫折しやすくなり自身の喪失に繋がります。
疑問は相談する

プログラミングを独学で学習していくには必須と言っても良いことです。
本やネット上の情報では調べようのないことであっても、人と相談しながらであれば簡単に有益な情報が得られます。
プログラミング関連に特化した質問サイトとしては、日本語で質問、相談していける「Teratail」や英語がある程度使えるのであれば、海外の「StackOverFlow」などがあります。
初心者プログラマによる質問なども活発に行われており、積極的に参加していけばプログラミングの学習に大いに役立つかと思います。
疑問の中には誤解や勘違いから変なところで悩んでしまっていることもあります。
そういったときには調べて誤解に気付く事は難しく、そのまま挫折して理解できないままといったこともありえます。
独学のメリット・デメリット

・自分のペースで学習できる
・問題解決能力の習得につながる
・費用がかからない
・学習の方向性を見失いやすい
・自分の学習程度が分かりづらい
・就職やアプリケーションの販売といった、実際の活動に向かいづらい
独学は茨の道

如何だったでしょうか?
プログラミングは独学で習得していくことが特に難しいスキルです。
苦労してせっかく習得したとしても、苦労相応なスキルが身につくとは限らず就職活動などで経験をアピールすることも難しくなります。
それでも独学のためには十分な情報が今では誰でも簡単手に入れることができ、ネット上でも初心者向けに学習の手引きをしている所もたくさんあります。
費用をかけずに、自分の興味の向くままに学習していけるという点は独学の大きな魅力でしょう。
自分で具体的な目的や方向性を持って、人と積極的に交流しながら学習していける人にとっては、デメリットよりもメリットのほうが強く光るかもしれません。
プログラミング学習はどうやって進めていけばいいでしょうか?