エンジニア

なぜプログラミング学習は挫折するのか

道

今回は「なぜプログラミング学習は挫折するのか」ということを考えてみたいと思います。本音で書きますので、少し厳しいことを言うかもしれません。

プログラミングに向いている人と向いていない人というのは確かにあると思いますし、プログラミングを始めた年齢、文系や理系の差なども多少はあると思います。しかし、プログラミングができるようになるか・ならないかの本質的な分水嶺ではありません。

文系出身のプログラマーや回路設計者というのも数は少ないもののおられますし、私も大学を卒業してから初めてプログラミングをやる必要に迫られてから覚えました。

プログラミングができるようになるか・ならないか、の分水嶺がどこにあるかというと、私は「プログラミングを、生きていく中で当たり前のように使う環境に一度でも身をおいていたことがあるかどうか」に関わっていると思っています。

これからプログラミングを始めようとする方にはイメージがしにくいと思うので、たとえば乗り物の運転ということを例に考えてみようと思います。

自転車に乗らずに乗れるようになった人はいない

おそらく多くの方は自転車には乗れると思うので、イメージしてみてほしいのですが、一度も失敗することなく自転車に乗れることになった人ってほぼいないと思うんですね。

補助輪をつけた状態で初めて、徐々に補助輪を外していって、時にはこけたりもしながら感覚をつかんでいって…、いつの間にか補助輪がなくても乗れるようになっています。そして一度感覚をつかんで日常的に乗りこなすようになると、多少期間が開いたからといって、乗れなくなることはないと思います。

車の運転なんかも同じですよね。最初はシュミレーターで運転を体験してみたり、教習所の教官の指導を受けながら乗れるようになって、おそるおそる乗れるようになっていく。運転ができるようになれば、もはや運転ができなかったときの感覚を思い出すことのほうが難しい…、誰にだって経験はあると思います。

料理を例にしてみてもいいと思います。最初は味付けに失敗しながらも、自分で食べたり、人に食べてもらったりしながら、徐々にうまくなっていく感じです。

プログラミングは日常に落とし込むのが難しい

プログラミングもそうなのですが、「使いこなすという状況が日常になる」という経験が一度でもないとなかなか「プログラミングができるんだ」という感覚を持つに至らないのです。日常生活の中で、プログラミングをしなければならないということはそうそうありません。

私だって、こういう仕事についていなければ、プログラミングを行うことはありません。朝起きて、ごはんを食べる、寝る、電車に乗る、メールを書く、電話をするなどなど、普段生きている中でプログラミングをしないと出来ないことなんてほとんどありません

ですから、みなさんの中でプログラミング学習をやったことがあるにも関わらず挫折してしまったとしたら、よく考えてみてください。あなたの学習には「プログラミングをやらないといけない必要性がなかった」のではないでしょうか。

どんな職業にも「やらないといけない場面」というのが必ずあります。パイロットは飛行機を操縦することなく、パイロットになれるでしょうか?試合に出たことのないプロサッカー選手やプロ野球選手なんていないですよね。

他の職業と同様、プログラマーも実際にプログラミングをしないといけない状況に身を置く必要があります。プロスポーツ選手に戦力外通告や降格などがあるように、芳しい結果を残せない限り、続けることはできないかもしれません。

しかし、試合に出て戦ってみないと絶対に本物にはなれません

私が多少の失敗をしながらもプログラミングができるようになったのは、ひとえに「プログラミングをしないといけない環境の中にいた」ということによります。勝とうが負けようが何度も試合に出ました。多少なりとも向いていたからこそここまで続けることができた訳ですが、とくにプログラミング的な思考に優れているわけではありません。

しかし、日常生活にプログラミングの必要性のある場面なんてないので、黙っていてもそのような機会は巡ってきません。つまり、プログラミングができるようになりたいのなら、自ら何等かのアクションを起こすことで「やらなければならない状況」との接点を見つける必要があります。

誰もあなたに「状況」を用意してはくれない

実際に「やらなければならない状況」が必要なのはなんとなくお分かりいただけたかと思います。しかし、この状況に身を置くことは意外とハードルが高いです。

だれもそのような状況をあなたに与えてはくれません

プログラミングに対する意欲はある、プログラミングの学習サイトや参考書などで言語の文法を勉強しても、実際に使われない知識や技術はあなたの脳や体に定着しません。

私もいくつもの言語を勉強しましたが、結局定着したのは一度でも実際の開発に使った言語のみです。

本気でプログラミングをやりたいかたは、ぜひ自身をいかにして「やらなければならない状況」に置くか、を最重要課題としてください。その課題が解決できない限り、いくつの言語の文法を覚えようと、ドットインストールやProgateなどの学習サイトを何周しようと、IT系の資格といくつ取ろうと、あなたはプログラマーとしてお金が稼げるようにはなりません

どんなに優良なプログラミングスクールも先生もあなたの代わりに「やらなければならない状況」を経由することなど出来ないのです。彼らにできるのはあなたをその手前まで導くことなのです。

今は、良質なプログラミングスクールが出てきていますので、そういったスクールに通うのなら、エントリー用のポートフォリオ(サンプルのプログラムやサービス)を開発し、実際にWeb系の開発企業やシステム開発をしている会社にエントリーしてみてください。これ自体は、パイロットで言えばフライとシュミレーターでの操縦のようなものかもしれませんが、もしうまく企業に入ることができれば、過去の設計のメンテナンスなど比較的負担の小さいものから徐々に仕事を任されるようになります。そして、いつか試合に出られるようになります。つまり新規開発の案件を任されたり、重要な役割を担うことになります。

プログラマーとして希望の企業に採用してもらえないなら、知り合いの飲食店にホームページを作らせてもらう、とかでもはじめは良いかもしれません。自分からやらせてくれと言ってしまえばやらない訳にはいかないので、ある程度は「やらないといけない状況」に身をおくことができます。どんなに小さくても良いので、現実に何かプログラムを作成してお金をもらう、ということをやってください

自分への期待とそれほど高く持たないようにしてください。あのiPhoneですら初代は酷い出来栄えでした。最初から、顧客を大満足させるサービスなんて生み出せません。

上手くいったとしても、失敗したとしても、そこで何かを感じるのはあなた自身にしかできないことなのです。それがプログラミングを習得するために必要な最初の1歩であり、その後あなたがプログラマーとして歩み続けると決めたなら、もっとも重要な1歩と言えると思います。

多くの乱立するプログラミングスクール同様に、このサイトにできることがあるとしたら、「あなたが最初の1歩を踏み出す、その直前までの道案内をすること」なのかもしれません。

ただ、最初の1歩を踏み出すまでに何をしたら良いか、という問題はあります。何の準備もしないままに実際の仕事を受けても怪我をするだけで、最初の1歩を踏み出すための準備は確かに必要です。次回は、最初の1歩を踏み出すまでに何をしたらよいのかについて、私なりの考えをまとめてみたいと思います。

それでは、また。Rossiでした。