プログラミングを学習するにあたって、色々な選択肢があります。
ある人は専門学校で学ぶでしょうし、またある人は研修で学ぶかもしれません。それら選択肢の中には、独学で学ぶという方法もあります。
しかし、実際のところ独学でプログラミングをどれほどのレベルまで学ぶことが出来るのでしょうか?
今回は、そんな独学でのプログラミング学習について紹介していこうと思います。
目次
独学でプログラミングを習得して活躍している人はたくさんいる
プログラミングを独学で習得した、という人は世の中たくさんいます。幼い頃から好きでプログラミングをしていたという人もいれば、大人になってから学んだけど性にあってぐいぐい技術を習得できたという人もいます。
プログラミングの習得に必要なものは一通りネット上に揃っています。
各種言語についての詳細な解説があり、それらを実際に書いて動かしてみるための環境の作り方も、丁寧に手順を教えてくれるサイトがたくさんあります。
ですから、基本的には【プログラミングの学習は独学で可能】だと言えます。
しかし、可能ではありますが、簡単ではありません。
幼い頃から学んでいた人は、それがもはや学ぶという感覚ではなく遊びの感覚で、ずっと自身のスキルを磨き続けた人です。ですからそうではない大人の人が、幼い子供が大人になるほどの長い期間ではなく、短期間のうちに同じようにプログラミングを手足を動かすかのように自由に書けるようには相当な苦労が要るのです。
その相当な苦労を、いとも簡単に乗り越えてしまう人は多々います。
これはプログラミングに限らず、他のあらゆるスキルについても同じことがありますよね。妙に技術習得の早い人というのはどの業界にもいて、そしてそのようなことの人を世間は天才とか、センスがあるとか、そういった形で自分とは違う存在だと区別するのです。
実際に天才はいます。そして、天才のように見える一般人もまた、たくさん存在します。
血が滲むような努力を厭わず、なに食わぬ顔でこなしてきた一般人は、得てしてまわりから天才だと驚かれたりするものです。ですので、もしあなたが天才的なプログラマーになりたいのだとしたら、同様に、血が滲むような努力をなに食わぬ顔でこなしまくることです。圧倒的な物量は、独学だろうが何だろうが、いとも簡単にそういった努力をしてこなかった人たちを抜き去ることが出来ます。
プログラミングの独学は挫折する人が多い
とはいっても現実問題として中々、血が滲むような努力、なんてものはすることが出来ません。
特にプログラミングのような、壁にぶち当たったときの乗り越え方が難しいものは尚更です。
実際、プログラミングの学習において、学習を始めたものの中々技術が身につかず、結果プログラミングの学習を諦めてしまう人は大勢います。プログラミングの学習を始めてから実際にすらすらと自由にコードを書けるようになる人は、全体の3割ほどしかいないと言われているほどです。
ただでさえ挫折する人の多いプログラミング学習ですから、それを独学で学びきることは大変困難なことです。特にプログラミング初学者は、プログラミングの基本的な部分を理解するために、たくさんのプログラミング特有の概念に馴染む必要があります。
データの型のことや、クラスや変数のこと。オブジェクトやインスタンス、コンストラクタや継承のこと。
そういった聞きなれない概念がすんなりと自らの手や足になれば、プログラミングの学習はどの言語を新しく始めるにしてもぐんと簡単になります。
しかしそうではない状況だと、言語についての理解が中々進みません。辛うじてある程度の理解まで達せたとしても、現場で通用するとまでは言い難い段階であることが多いです。
こういったことにより、初学者の7割がプログラミング学習を辞めてしまうという現状に繋がってしまうのです。
【ググればなんでもわかる】は半分正解!半分は不正解!
プログラミングの独学は困難だ、という話について「今の世の中なら、分からないことがあっても検索すればすぐに解決するじゃないか」という意見があるかと思います。
確かに、検索すれば大体のことが分かります。
プログラミングにおいても同様です。多くの丁寧な日本語の解説記事が検索でヒットするし、日本語でなくても英語のページであればその情報量は際限なく増えます。
しかし、あることについての解説記事が存在する、ということは、独学は簡単だ、ということには必ずしも繋がりません。
これは、検索のみで学習すること自体が抱えるいくつかの問題が原因です。
ひとつは先ほど紹介したプログラミング特有の概念にまつわるもので【検索して解説を読んでもそのことについて感覚的な理解にまでは至らない】ということです。
例えばついさっきまでインスタンスという言葉の話をしていたのに、いきなりオブジェクトという語についてさも当然のように初学者向けプログラミング教本が話をし始めたとき、あなたはそのオブジェクトという語についてネットで調べるでしょう。
しかし、往々にしてこれらの特有な言葉の意味を正確に理解することは困難なものです。困難なものですから、ほとんどの初学者向けページはそれを簡単でほんわりとした表現で説明します。
しかし、それを読んだところで理解は進みません。ほんわりとした簡易的な説明は、【理解はしないがとりあえず先に進める】という状況に読み手を誘導するのみです。感覚的な理解にまでは至らないのです。
こういった言葉の理解には、実際のところプログラミングを自分で書いてみる経験が必要です。
いくら検索して解説ページを読んだとしても、言葉の説明の仕方を覚えるだけで、これが実際にどのようなものかについて理解が進まないのです。
しかし、そうはいってもそんなことは誰のアドバイスもない限り中々気付かないものです。とりあえず、あなたはその言葉についての理解を横に置いて、学習を次のページへと進めるでしょう。
このような、とりあえず学習を進めてやがてそのときになったら理解をすればいい、という考えは多くの場合無難な方針です。しかし一方で、多くの場合その正確な理解の後回しが1つひとつ積み重なり、やがて乗り越えられないほどの壁となって襲い掛かってくるのです。
これが検索のみで学習することの問題のひとつです。
そしてもう1つの問題は【検索での学習は、何を学べばいいか分からない場合には有効ではない】ということです。
前述の1つ目の問題は、これと比べるとさほどの問題ではありません。真の問題はこの、何を学べばいいか分からない、というときにどう学習すればいいかです。
この問題のロジックは簡単です。【分からないものは検索できない】ということです。
学ぶ方向性が定まり、次はあれを学ぶ必要があると分かっている場合は大丈夫です。しかし、独学において、どういったことを学べばいいのかを正しく把握することはとても困難です。
例えば、プログラミングを使うとある業界のプログラマーになりたいとします。
そのためにあなたはプログラミングを勉強することでしょう。プログラミング特有の語を覚え、基本的な構文を理解し、ちょっとしたプログラムを意図した通りに作動できるようになります。
あなたは次になにを学ぶべきかで立ち止まることでしょう。基本的な構文を書けるようになり、次にどんなことを学べばより理解が深まったと言えるのか、あなたはアドバイスを求めてネット上で検索をするかもしれません。
そのネット上には、多くの初学者向けアドバイスをするページが存在します。
とりあえずアプリをつくれ、というアドバイスもあれば、今度はあの言語を勉強しろ、この言語を勉強しろ、というアドバイスもあります。
データベースを理解しろ、という声もあれば、資格試験に合格しろという声もあります。
それらのたくさんの声は、当然ながら、あなた個人に向けられたものではありません。その記事を目にする多くの人に向けられた言葉です。
あなたがどの業界でどんなプログラマーとして働きたいのか、あなたがなにを扱うことが出来て、あなたがどんなスキルセットを保有してくれるかについて、記事制作者は知らないのです。
何を学べばいいか分からない、ということは単なる学習分野の話に留まりません。
それは例えば、プログラミングの学習においてあなたが【なぜか壁にぶつかってしまった】【でも、なにが原因で壁にぶつかってしまったのか分からない】という際に発生します。
これは、プログラミング学習についてはよく発生する事態です。
極めて具体的な事例をあげるとしたら、【エラー対応】です。
これは本当に、よくあることです。初学者に限った話では決してありません。
新しいプログラミングの技術本を購入して、その本にある通りにプログラムを書いたはずなのになぜかプログラムが思った通りの挙動をせず、エラーを返して止まってしまう。
まさに【なぜか壁にぶつかってしまった】【でも、なにが原因か分からない】という状態です。
プログラミングをしているとき、そのようなことは頻繁に発生します。初学者はもちろんのこと、実際に仕事としてプログラムを書いているプログラマーでも同様です。
頻繁に、と書きましたがこれは正確ではありません。むしろほぼ確実に、毎回といっていいほどこの事態は発生します。
あるいは、プログラムを書く段階にすんなりとは入れているのであればそれはまだマシな方かもしれません。
例えば新しい言語や言語についての新技術を学ぶときには、それらを正しく動かすための【環境構築】をする必要があります。特定のプログラムを動かすためのプログラムを導入する必要があったり、そのプログラムを動かすためのプログラムが正しく作動するための前提となる各種アプリケーションを入れる必要があったりします。
しかしこの環境構築がまた、中々うまくいかないものなのです。アプリケーションのバージョンが違ったり、使っているPCのOSが違うことなどが主な原因です。
手順通り環境構築したはずなのになぜか動かない、その上動かなくなった原因の箇所が分からない。正しくプログラムを書いたはずなのに、なぜかエラーが吐かれる。
上記のようなとき、検索による問題解決は中々難しいものです。特に初学者にとっては、それは困難を極めます。
このように、検索はプログラミング学習における全ての問題を解決してくれるわけではありません。検索しても分からないときや、なにを学べばいいのか分からないとき。
そういったとき、検索のみの学習には限界があるのです。
独学で学ぶ場合は書籍を使うのがベター
しかしながら、独学で学ばざるを得ないという状況は多々あることでしょう。
そう都合よくなにもかもを教えてくれる人が現れてくれるわけでもありませんし、時間や金銭的な問題もあります。
なんとかして独学でも、現場で通用するエンジニアになりたい。そういったとき、学習にあたってお勧めするのが書籍による学習です。
先ほど、手順通りに書いたのになぜか動かない!ということが技術書での学習の際にも発生すると紹介したばかりではありますが、それでも書籍による学習は、それらを利用しない学習と比べるとより効率よく学習を進めることが出来ます。
特に、基本的なプログラミングを書けるようになってからのステップは、なおのこと書籍での学習をおすすめします。
プログラミングの最初の基本的な学習を終えた後、広がっているのはどこまでも広がる自由な海原です。
学習を終えたばかりの新しいプログラミングの技術で、ありとあらゆるものの開発を始めることが出来ます。
開発手法も様々ですし、その際に用いる各種の技術も選び放題です。そして、なにをつくるか、という点に関してはそれこそどこまでも自由です。
そんな広々とした海原ですから、そこで遭難することは簡単です。
なにしろ、理解できる人の方が少ないような難解な手法から、誰にでも出来るがあまり多くのことを成し遂げられないような簡易な技術まで、様々なものが公平に目の前に置かれているのです。学習を始める前には、それが今の自分が学習して理解できる範囲の技術なのか、ということは分かりませんから、うっかり手には負えないような技術を、それがそうであるとは知らないままに手にとってしまうことは大いにあり得るのです。
また、あまりにも広すぎて情報が点在していることも遭難の原因になります。
例えば学んだ言語で初めてアプリをつくってみようというとき、あれも調べてこれも調べて、とやっている内に知識のまとまりがなくなってしまい、結局これらの知識をどう組み立てたらアプリを制作できるのか分からなくなってしまうことは多々あります。
こういった状態になるのを避けてくれるのが、書籍での学習です。
書籍は1冊通せばそれについてある程度まとまった理解を得られるように出来ています。アプリ開発であればアプリ開発に必要な知識が多すぎず、少なすぎずの範囲でまとまっていますし、同様にWEBサービスであればWEBサービスに必要な情報が過不足なく記されています。
多すぎず、というのはつまり技術が精選されているということです。
プログラミングの世界は過剰なほどに多くの技術が存在しますから、その中から何を選ぶかということは大切です。この点において、書籍での学習は優位に事を運ぶことができるのです。
独学の場合は相談できる先輩がいた方が良い!
独学するなら書籍を利用した方がいいという話をしましたが、さらに言えば独学の場合は、相談できる先輩がいるとなお良いです。
前述の通り、書籍をつかった学習においても、唐突に発生する想定外のエラーにより学習が進まなくなることは多々あります。検索しても意外とピンポイントで解決してくれるような記事は少なく、記事があったとしても全て英語で書かれていて、理解に時間がかかってしまうということは初学者でなくともよくあることです。
そういったとき、相談できる先輩の存在はとても大きいものになります。
どこかの誰かが書いた解説ページはあなたが直面している問題を知っているわけではありませんが、相談できる先輩はそれについて話を聞いてくれます。そういった先輩がいるというだけで、場合によっては一日中たった1つのエラーと戦う羽目になっていたはずのところが、ものの10分で解決するかもしれません。
実際にその先輩が現場で活躍するエンジニアであれば、他にどんなスキルを持ち合わせていたら現場で通用するかという点もアドバイスできますから、そういった面でも先輩に相談することはお勧めです。
こればかりはそう簡単に用意できるわけではありませんが、もしそういった信頼のおける先輩がいる場合は、ぜひその先輩に相談してみましょう。きっと、的確なアドバイスをくれるはずです。
周りに先輩がいない場合はプログラミングスクールも視野に入れて!
プログラミング学習において、相談できる先輩がいると良いという話をさせていただきましたが、一方でそういった先輩がいない場合はどうすれば良いのでしょうか?
諦めてひたすら自分の力だけで頑張る、というのもいばらの道ではありますが可能です。しかし、前述の通りそれは簡単なことではありません。
現場で通用する、と言えるほどのレベルになるためにはかなりの苦労を覚悟する必要があるでしょう。
それでも、覚悟したからといって実際に通用するスキルを独学のみで得られる人はごく僅かです。
もし、確実に現場で通用するエンジニアになりたいのであれば、プログラミングスクールを活用することも検討すると良いでしょう。
プログラミングスクールなら、プログラミングを学習するにあたって躓きやすいポイントや、度々頭を悩ますエラー対処等、様々な面での学習のサポートを受けることが出来ます。
また、どういったスキルを持ち合わせていたら現場で通用するのかについてもしっかりとアドバイスを受けることが出来ますし、それらの技術の獲得もまたサポートしてくれます。
なにより、スクールには教えることに長けた専門的なスタッフがいますから、その分かりやすさはとてもお勧めできるものです。分からない箇所の相談にも乗ってくれますし、当然、その分短時間で多くのことを学習できます。
多くのことを効率良く学習していけたら、プログラミングはより楽しいものになります。
学べば学ぶほど面白くなっていくのがプログラミングの良さですから、こういった活用できるものを全て活用して、プログラミングをもっともっと楽しんでしまいましょう!
現場で通用するエンジニアになれるというだけでなく、プログラミングをそのものを楽しみながら色々なものを開発できるようになれば、実際にプログラマーとして仕事をするようになってからも、より多くの技術を獲得し続けていけるでしょう。