プログラミングは、独学が可能な技能です。たくさんの人が、独学で職業プログラマーにまでなっています。
しかし、誰もがそうなれるわけではありません。プログラミングの独学では約9割の人が挫折するとも言われています。
この記事では、挫折しづらいプログラミング独学法を紹介します。そして最後には、独学が挫折しやすい原因とその対処法について考察します。
プログラミング独学のための前提知識
プログラミングを独学するにあたって、まずは学ぶ対象であるプログラミングについて概要を知っておきましょう。
プログラムという、形がなく手で触れたりすることのできないものを作るわけですから、イメージがわきづらいかもしれません。そこで、プログラミング未経験の方にもわかりやすいように、噛み砕いて説明します。
プログラミングとは何か
ひとことで言えば「コンピューター上で動くプログラムを作る」のがプログラミングですが、もうちょっと詳しく、具体的に何をするのかを見ていきます。
コンピューターに対する命令・指示
プログラムとは、「コンピューターに対する命令や指示」の集まりのことです。コンピューターは、命令や指示がないと何にもしてくれません。人間のように気を利かせてくれることはないのです。
その命令や指示は、できるだけ具体的に、詳しく与える必要があります。例えば画面に丸を描いて欲しいときは「丸を描け」だけでは足りません。丸とは何かという定義から始まって、画面のどこに画くのか、大きさはどれほどか、線の太さや色はどうか、塗りつぶしの色は、と、事細かに指示しなければなりません。
けれども、ひとたび丸を描くプログラムを組んでしまえば、「画面にビッシリ1000個の丸を色違いで描け」というような指示を与えるのは比較的容易です。人間が1個1個手作業で、マウスを使って描いていたらどれだけ大変かを考えれば、ありがたさが分かります。
このように不器用ではあるけれども、言われた仕事はすごいスピードで疲れもせずいつまででもやってくれる、というコンピューターの性質を理解して、上手に使うのがプログラマーの仕事です。
プログラムは「書く」もの
さて、それでは、どのようにしてコンピューターに命令や指示を与えるのでしょうか。それは、文字で与えられます。プログラムとは、「書く」ものなのです。
コンピューターは、「機械語」という、人間にはわけのわからない言葉でしか命令を受け付けません。それを人間が分かるように翻訳したものが、「プログラミング言語」です。人間がプログラミング言語で書いた命令を、機械語に翻訳するプログラムで翻訳することによってコンピューターに分からせます。
プログラミング言語で書かれた命令・指示の塊を「ソースコード」あるいは単に「コード」と呼びます。ソースコードは、テキストエディタとかIDE(統合開発環境)といった道具を使って、1文字1文字手で入力していきます。それが「コーディング」と呼ばれる作業です。
ただ闇雲にコーディングしても破綻するだけですから、書く前にちゃんと「設計」して、書いたコードはいちいち「テスト」します。こうした一連の作業を積み重ねて、プログラミングは進んでいきます。
様々なプログラミング言語
プログラミング言語には様々なものがあります。全部で200種類くらいあるともいわれています。
これほど多くの言語が存在している一方で、それぞれ設計思想が違いますし、できあがったプログラムの動作は速いけれども難解な言語、動作は遅いけれども読みやすく書きやすい言語など、使い勝手も様々です。
また、言語によって得意分野が違います。Web開発ならPHP、JavaScript、Rubyなど、データ分析ならPythonやR、高速に動作させたいならCやC++などというふうに。
「プログラミングを学ぶ」とは、主にプログラミング言語を学ぶことです。もちろん全部の言語を学ぶ必要はありません。自分のやりたい分野を決めて、それに適した言語を学べばいいのです。最初はひとつに集中して学び、キャリアを重ねながらだんだんと使える言語を増やしていく、というのがいいでしょう。
ここまで、プログラミングとは何かについて紹介してきました。こちらの記事ではこれらの内容をより詳しくまとめております。よく分からないことがあったという方はこちらの記事も参考にしてみてください!
プログラミングの諸側面
プログラミングとは、人間と、人間とはだいぶ動作原理の違うコンピューターとの橋渡しをする仕事です。機械相手ではあっても、人間寄りの、人間くさい営みでもあるのです。
ですから、プログラミングには人間の持つ様々な側面が反映されます。ここではそれらを論理的、言語的、実用的、芸術的側面に分解して考えてみます。
論理的側面
まず第一に、プログラムは論理的なものです。コンピューターがガチガチに論理的なものですので、当然そうなります。
プログラムに論理的な間違いさえなければ、コンピューターは正しく動くはずです。必ずしも論理だけで動くわけではない人間にとって、それはなかなか難しいことではあります。
言語的側面
プログラミングはプログラミング言語を使って行いますから、言語的側面も強く持ちます。もちろん言語は論理を記述するために使われますが、それと同時に「読みやすく、分かりやすく書く」といった、文章術にも通じる作法が要求されます。
プログラミング言語の学習は、英語などの自然言語の学習に通じるところがあります。「習うより慣れろ」で、どんどん手を動かして書くのがよいのです。間違いを恐れずどんどん書いてどんどん動かす。間違っていたら修正する。その繰り返しで上達していきます。
実用的側面
プログラムは、実際に使われて初めて価値を持ちます。とても実用的なものです。プログラミングをするときは、常にその意識を持つことが大切です。
たとえどんなに優れた機能を持っていようと、使いづらければ使ってもらえません。どれだけ機能を詰め込もうと、無駄に終わってしまいます。
そういう意味で、プログラミングを学ぶときには、学問とはやや違うアプローチが必要になってきます。
芸術的側面
プログラミングはまた、とてもクリエイティブなものでもあります。多くのプログラマーが「プログラミングは芸術だ」と言っています。
その意味を説明するのは難しいのですが、「今までこの世になかったものを作れる」という点で、人の持つ創造性を刺激する、というようなことでしょう。
プログラミングは、絵筆や楽器のように、想像のための道具であるという側面も持っています。
プログラミング独学の方法
「プログラミングとは何か」ということが大ざっぱに分かったところで、実際に独学をする方法について見ていきましょう。
もちろん学び方は一通りではなく、人それぞれであっていいのですが、ここでは誰がやっても比較的うまくいきやすい方法を紹介します。
学ぶべきこと
学ぶ手順に入る前に、まず学ぶべきことについて明らかにしておきます。プログラミング言語を学ばなければならないのは当然ですが、言語だけを知っていてもプログラムを動かせるようにはなりません。環境構築など、周辺技術が意外とやっかいだったりします。
プログラミング言語
最優先で学ぶことは、プログラミング言語です。ここに一番時間がかかります。
文法を理解し、基本的な書き方を練習し、ライブラリーの使い方を覚える、と、やることはたくさんあります。けれども全部覚える必要はありません。記憶よりも理解に重点を置いて学習を進めるのがお勧めです。何度も出てくる大事な書き方は、そのうちいやでも覚えます。
環境構築
とりあえず文字を入力できる環境さえあればプログラムを書くことはできます。しかし、それを動かすとなったらいろいろな準備が必要です。プログラミング言語を機械語に翻訳するための「コンパイラ」や「インタープリタ」と呼ばれるプログラムをインストールしなければなりません。
中にはパソコンを買った時点ですでに環境がすべて整っているような言語もありますが、多くは何らかの形で環境構築をする必要があります。これが意外と骨が折れる場合があります。
IDEなど、ツールの使い方
プログラミングをするための道具が一式そろうIDE(統合開発環境)というものは便利ですが、多機能なものが多いので、最初はやや使い方に戸惑うかもしれません。
テキストエディタは一般にIDEよりもシンプルなので、学びはじめの人も比較的安心して使えます。ただし、VimやEmacsといった、プログラマーに古くから愛用されているエディタは、クセが強く、使いこなせるようになるまでの学習曲線が急です。
テキストエディタやIDEに関しましては、こちらの記事で詳しく紹介しております。
その他の周辺技術
言語、環境、道具を学べば、とりあえずはプログラミングの形にはなります。しかしプログラマーとしてやっていこうと思ったら、そのほかにも身につけるべき技術はたくさんあります。
例えば「バージョン管理」は早い段階で身につけておいたほうがいい技術です。プログラムが一息で完成することはまずないので、途中途中の状態を「セーブ」しておき、バージョン名を付けて管理するのです。具体的には、バージョン管理ツールのGitやGitHubの使い方を覚えるということになるでしょう。
その他、プログラムが正しく動作するか確認する「テスト」、コードを整理して読みやすくしたり機能を追加したりしやすくする「リファクタリング」などは身につけておいて損のない技術です。
ただし、学習の初期段階からあちこち手を広げすぎると覚えることが多すぎて挫折の元になりますから、ほどほどにするのがよいでしょう。とりあえず言語さえ学べば、その他のことはあとからでも学べます。
学習過程
学ぶべき内容が分かったところで、いよいよ学習の手順に入っていきます。大事なのは、「目標を絞り込む」ということです。独学では、周りに誰も励ましてくれる人がいないことが多いため、負荷が大きすぎると継続が困難になります。
学習手順は、おおむね次のようになります。
- 目標設定
- 言語選び
- 学習法の選択
- 計画を立てる
- 学習の実行
ひとつひとつ順を追って説明します。
目標設定
まずは目標を絞り込みます。そのためには、たくさんある開発系の仕事のうち、どの分野に進みたいか、ということを考えます。
自分に向いているのはWebサービス系なのか、データサイエンス系なのか、組み込みなのか、というようなことを調べます。特に興味があるのはどのジャンルか、将来性はどうか、ということも勘案します。
案件の多さとか関連する言語・技術の習得の容易さから、未経験者に一番お勧めできるのはWebということになります。もちろん、各自が自分の考えで選択するのが一番です。
プログラミングを使った仕事は何があるのか知りたい!という方は、こちらの記事にまとめましたのでご覧ください。
言語選び
目標が定まったら、学習するプログラミング言語を選びます。自分が進みたい分野では、この言語を使えることが必須である、あるいは使えると有利である、そういう言語を選びます。
そして、プログラミング未経験であるなら学びやすい言語を選択すると学習を続けやすくなります。例を挙げれば、
Web開発系 ── HTML&CSS、JavaScript、PHP、Ruby
データサイエンス・AI ── Python
などが、最初の言語としては適しています。
こちらの記事で、初心者向けのプログラミング言語を紹介しておりますので参考にしてみてください!
学習法の選択
学ぶ言語が決まったら、次は学習法の選択です。独学の場合は、書籍で学ぶか、Webを利用するか、あるいはそれらを併用するか、ということになるでしょう。
独学といったら、昔も今も読書が王道です。それはプログラミング学習にも当てはまります。内容の充実度や信頼性からいって、書籍で学ぶのが第一選択肢だと言っていいでしょう。入門的なものから専門的なものまで、様々なレベルのものがあるのも書籍のいいところです。
けれども、本を読むのは骨が折れるのも確かです。特に普段読書をする習慣のない人には辛いものでしょう。そういう人の場合は、Webで学ぶ手段がいろいろあります。
様々なプログラミング言語の入門講座が、動画で多数公開されています。無料のものも有料のものもあります。質はまちまちといったところですが、それらを拾うだけでもある程度の基礎を学ぶことができます。
動画は受け身になりがちですが、アクティブに手を動かして学ぶタイプのプログラミング学習サイトもいろいろあります。コーチが直接教えてくれるわけではないので独学の一種ではありますが、挫折しづらい工夫がいろいろなされています。
書籍を中心に学び、よく分からないところをネットで動画を探して見る、というのもよいでしょう。プログラミング学習サイトで学びながら、よりくわしく知りたいところを書籍で調べる、というやり方もあるでしょう。
選択肢や組み合わせはたくさんあります。どれを選ぶかは、学習者本人に任されています。
下記記事で、プログラミングの独学にお勧めの本やサイトを紹介しています。
計画を立てる
学習方法が決まったら、いよいよ学習開始に向けて計画を立てます。
どの学習方法をとるのか、どのくらいの時間が取れるのか、といったことを考慮して計画を作っていきます。
「この本を読み切る」というような大きな目標を立てたら、次にそれを小分けにして、「今週はここまでやる」という小目標を立てるとよいでしょう。あまり無理せず、できる範囲でやることをお勧めします。
できるだけ毎日学習するほうがよいでしょう。間が空きすぎると、前にやったことを忘れてしまいがちです。毎晩9時から11時までなど、決まった時刻にやるようにして習慣化するのが理想です。
学習の実行
ここまでくれば、あとはやるだけです。いかにしてモチベーションを持続させるかがカギになります。
プログラミング学習で一番大事なのは、実際に手を動かしてコードを書くことです。これに勝る上達法はありません。ただ本を読むだけ、動画を見るだけではダメなのです。英語をしゃべれるようになりたいのなら、実際に声に出して英語をしゃべることが必要なのと同じことです。
この前の段階の、目標設定から学習計画までがうまくいってれば、学習の実行の段階もスムーズに行くでしょう。逆に言えば、学習の実行をスムーズにするために、その前にいろいろと準備をするわけです。
もし学習が頓挫しそうになったら、その前の段階のどこかに問題があったのかもしれません。そのときはそこに戻って練り直す必要があるでしょう。ただし、教材をコロコロ変えたりするのはあまりお勧めしません。難しいと感じても、粘って続けていればそのうちわかるようになることもあります。
プログラミング学習と受験や試験勉強との比較
プログラミングの学習にも、受験や試験勉強のやり方が役に立ちます。けれども、やはりプログラミング学習は試験のための勉強とは違う部分もあります。
ここでは、試験勉強と比較することによって、プログラミング学習の本質へさらに迫ります。
共通点
プログラミング学習と受験勉強の共通点は、「目標を絞ったほうがよい」ということです。
漠然と「大学に行きたい」という目標だけを持っていても、具体的にどう動けばいいのかはっきりしません。学習計画を立てるのは困難です。大学のことをよく調べて、自分の学びたいことが学べるかを考えた上で「○○大学の△△学部に行きたい」と目標を絞り込むことによって、学習方法が明確になり、勉強へのモチベーションも上がるのです。
なんとなく勉強して、受験直前になったら模試の成績を見て受験校を決める。そんなやり方で大学受験をしても、合格はなかなか難しいでしょう。もし合格しても、学びたいこととその大学・学部の教育内容のミスマッチが起こり、充実した学生生活が遅れない可能性が高いでしょう。
それと同じように、プログラミング学習においても「Webのサーバーサイドの専門家になりたい」というようなはっきりした目標があったほうがスタートが切りやすいし、学習の持続もしやすいのです。
相違点
プログラミング学習と受験や資格試験の勉強には、様々な相違点があります。
ひとつは、プログラミング学習は「合格」のためにやるのではない、ということです。
試験では、言い方は悪いですがある意味「合格しさえすればよい」というようなところがあり、時に本質的ではない受験テクニックに走る人も出てきます。
それに対してプログラミング学習では、試験に受からなければならないなどという縛りがないため、のびのびと楽しんで、本質的なことに集中できます。
試験会場では基本的に教科書や参考書、ネットなどを見ることはできませんから、重要なことは覚えていかなければなりません。苦しい暗記も必要になってきます。
それに対して、プログラミング学習では暗記をする必要はありません。一部、暗記をすると楽になる、というような事項もありますが、必須ではありません。
プログラムは、何かを見ながら書いても大丈夫です。それは学習の段階でも、実務としてやるようになってからでもそうです。膨大な言語仕様やライブラリをすべて覚えなければプログラミングができないというわけではありません。
間違っても、ある部分を完璧に記憶してから次にいく、というような学習方法はとらないでください。理解できたと思ったらどんどん先に進み、書き方を忘れたら戻って見ながら書く、というので十分です。そうするうちに、だんだんと覚えていくものです。
時には、分からないところを飛ばして次にいくということをしても大丈夫です。そういうところは、ある日突然パッと分かったりします。多くのプログラミング言語には誰もがつまずく難所があります。そういうところでつまずくぶんには、特に気にする必要はありません。「いつか分かるさ」と気楽にいきましょう。
また、プログラミング学習には、いつまでに学ばなければならない、という時間制限がない点も試験勉強とは違います。それは、長い時間かけて存分に学んでよいということです。気楽と言えば気楽ですが、見方を変えればどこまでいっても終わりがないわけで、苦しいことでもあります。
実際のところ、プログラマーやエンジニアとして生活できるようになってからも、勉強は続けていかなければなりません。本当に終わりはないのです。
プログラミングの独学はなぜ挫折しやすいのか
ここまでプログラミングの学習、特に独学についていろいろ述べてきましたが、その中で「挫折」という言葉を何度か使ったことにお気づきでしょうか。そう、プログラミング学習は、特に独学の場合、とても挫折しやすいのです。一説には9割が挫折するとも言われています。
プログラミングの独学は、なぜ挫折しやすいのでしょうか?その疑問に答えるために、まず、挫折率が格段に低いとされるプログラミングスクールを利用した学習と比較してみます。
独学とプログラミングスクールの比較
独学とスクールを利用した学習の決定的な違いは、1人で学ぶか、それとも先生について学ぶか、ということです。
それによってどんな違いが生まれてくるのでしょうか。詳しく見てみましょう。
独学
独学によるプログラミング学習の特徴は、以下のようなものです。
- 情報収集から計画、学習の実行まで全部自分でやる
- 費用はあまりかからない
独学の大きなメリットは、費用を抑えられることです。その代わり、何でも自分でやる必要があります。
何でも、というのは、教材の選定や学習計画、それから「自分を励ます」というようなことも含みます。自分の裁量次第でどうにでもできる、とても自由な学び方です。その代償として、プログラミング以外の細々したことを自分でやるという負担がかかってきます。
自分が書いたコードの評価も、自分でする必要があります。動くかどうかくらいは確認できるとしても、それがいいコードなのかどうかは、自分で判断しなければなりません。
もし書いたプログラムが動かないときも、原因を自分で探る必要があります。もちろん、プログラマーになりたいのならそういう力をつけることは大事ですが、学習の初期の段階では、時間的にも心理的にも大きな負担となります。
プログラミングスクール
プログラミングスクールの特徴は、以下のようなものです。
- オールインワンの指導
- 目標達成まで導いてくれる
- 費用は高め
プログラミングスクールでは、学習のはじめの段階からいろいろと相談に乗ってくれます。目標に合わせて、何をどう学んだらいいか、カリキュラムを組んでくれます。そのため、生徒は雑事にとらわれず、プログラミングの学習に専念できます。
わからないことをすぐに質問できるのも、スクールのよいところです。初心者のうちはとにかくたくさんのエラーを出すのが普通です。わけがわからなくなって泣きたくもなるのですが、そこでサッと助けてくれる先生がいることは、大変な安心感を与えてくれます。
そうやって折に触れて助け船を出してくれて、目標達成までサポートしてくれます。その上、学習終了後に仕事を見つけるお手伝いまでしてくれたりします。
まさに至れり尽くせりですが、そのぶん費用はかかります。それが高いか安いかは、本人の意欲次第です。
独学では、学習過程の各段階に挫折の要因が
こうして独学とプログラミングスクールを比較してみると、独学がなぜ挫折しやすいのかが見えてきます。
どうやら、独学では「全部自分でやる」というのが挫折の大きな原因になっているようです。目標の設定から学習の実行までのすべての段階に、挫折の要因が入り込む余地があります。
目標を設定する段階では、情報収集をしなければなりません。どんな分野があるのか、ということからして、未経験者にはよくわからないかもしれません。まして、それぞれの分野で学ぶべき言語の選定となると、かなり難しいと言えるでしょう。「この言語、簡単だっていう触れ込みだったけど、自分には難しすぎた」ということも起こりがちです。
教材の選定も、初心者には難しいものです。その本がどれくらい難しいかは、ちゃんと読んでみないと分からないところがあります。途中まで分かりやすかったんだけど、後半は「何かの罠か」と思うくらい難しい、そんな本も存在します。自分に合わない教材を選んでしまうと、急速にどうでもよくなる恐れがあります。
学習計画を立てるのも、失敗しやすいところです。他のことで独学の経験があり、「独学慣れ」している人ならいいのですが、そうでない場合、ペース配分を間違ってしまいがちです。オーバーペース気味の計画を立ててしまうと、だんだんと計画から遅れていき、取り戻しようのないほど遅れてしまった後、ポッキリと心が折れて何にもしなくなってしまう──これがよくあるパターンです。
学習の実行段階も、挫折ポイント満載です。教材の記述で意味の分からないところがある、エラーが出すぎて進まない、遊びに誘われたが「プログラミングの独学の予定があるので」と言って断るのも気が引ける、というか何かやる気が起きない、等々、いろいろなことが前進を阻んできます。
試験勉強と違って、いつまでに終わらせなければならないという縛りがないのも、ネックになります。何ヶ月もサボっていても、「中断してるだけ。まだ挫折してない」と、自分の心をごまかすこともできてしまいます。
「踏まなきゃならない段階が多いから挫折の要因が入り込みやすいのなら、目標を絞り込んだり計画を立てたりするのをやめてしまえばいいのでは」というアイディアもあるでしょう。しかし、そうするとおそらく最速で挫折します。そういう段階を踏むのが、そもそも挫折を防ぐためだからです。
そんな皮肉な構造の中、今日も多くのプログラミング学習者が挫折しています。
人間はとてもめんどくさがりです。程度の差こそあれ、すべての人がそうだと言っても過言ではないでしょう。コンピューターがこれほど普及したのも、「めんどくさいことは機械にやらせたい」という人間の欲求があったからではないでしょうか。
そういう人間だからこそプログラミングの独学は挫折しやすいという、これもまた皮肉な話です。
プログラミングスクールに関してはこちらの記事で詳しく紹介しています。どのようなサポートがスクールにあるのかなど、参考にしてみてください。
独学で挫折を防ぐために
プログラミングの独学で挫折を防ぐために、段階を踏んで計画的に行う以外に、できることはないでしょうか。次のようなことが考えられます。
- 周りで教えてくれる人を見つける
- 周りで独学している人を見つけて励まし合う
- SNSで他の独学者と繋がる
要するに、独学でありながら「独りじゃない」という感覚を持つことです。特にSNSは、適度な距離感を保ちながらたくさんの人と繋がれるので、独学者の心の支えとしては最適なのではないでしょうか。
まとめ
プログラミングの独学について、徹底的に解説しました。知れば知るほど、そこら中に挫折の罠が潜んでいると思われるかもしれません。しかし、この記事で紹介した方法にきちんと従ってやれば、1割の「勝ち組」になるのも夢ではありません。