正義と微笑

numb_86のブログ

プログラミングの勉強に挫折する理由

 ニートが社会参加するための手段として、プログラミングは有用なんじゃないか。そういうエントリを何回か書いてきた。
 自分自身も、プログラミングに可能性を感じている。

ニートや引きこもりがプログラミングを勉強して就職できた話 - 正義と微笑
地味で冴えないノースキルな若者は、どこで働けばいいのか - 正義と微笑
信金マンがエンジニアに憧れる、いくつかの理由 - 正義と微笑


 だがもちろん、プログラミングの習得は簡単ではない。一念発起して挑戦してみたが挫折した、という人も多いと思う。
 ニートや引きこもりにプログラミングを勧めるような言説はけっこう見かけるが、それに比べると、実際に勉強しました、就労しました、という話は少ない。印象論だけど。
 そもそも、一歩を踏み出せない人、挫折してしまう人が多いからこそ、「誰でも簡単プログラミング!」といったエントリが繰り返し注目されるのだと思う。


 なぜプログラミングに挫折してしまうのか、モノにすることが出来ないのか、理由をいくつか考えてみる。

具体的な目的がない

 これが根本的な原因。強い動機付けがないと、学習は続かない。
 何となくの憧れだけでプログラミングを始めてしまった場合などが、該当する。また、勧めておいてなんだが、「就職のためにプログラミングを身に付けよう」という人も、このパターンに陥りやすい。もともと具体的な目的や動機がないため、情熱が尽きやすい。

 プログラミングはとても楽しいものだと思うけど、それをすぐに感じられる人ばかりではない。
 それに、勉強していく過程は、楽しいことばかりではない。なかなか理解できなかったり、上手く動かなかったりすることは、よくある。
 そういう時に、強い目的意識や動機付けがないと、投げ出しやすい。

 憧れだけで始めてしまった人も、その憧れを出来るだけ具体的な形に落とし込んで、目に見える目標を持ったほうがいい。

 やらないと怒られる状況だったり、周囲に宣言して後に引けないようにしたりすることで、動機付けするという方法もある。自発的に外圧をつくる。だがこれは、あまりお勧めしない。このような状況で嫌々勉強を続けたとしても、学習効率は低いように思える。やはり、勉強自体が目的になるようにしたほうがいい。知識の習得が達成感や充実感につながる状況。

身の丈を越えた目標を掲げてしまう

 目標を持っていたとしても、それがあまりにも壮大過ぎると、却って、学習の妨げとなる。
 Twitterやモンスターストライクに憧れて、自分もプログラミングをやろうと思い立つ。それは素晴らしいこと。だが、自分が普段使っているようなウェブサービスやアプリは、そう簡単には作れない。
 目標が高過ぎると、そのゴールの遠さに絶望し、まず間違いなく挫折する。見えないゴールは、動機付けには役立たないし、むしろ逆効果となる。

初期に学習する内容が地味すぎて、達成感や意味を見出だせない

 何事もそうだが、最初は、初歩的なこと、基本的なことから勉強していくことになる。
 だがそれは、とても地味で、面白みがないことが多い。刺激的ではないし、何に役に立つのかも分からない。そうなると、意欲はどんどん低下していく。習得したとしても嬉しくないようなトピックが延々続くのだから、モチベーションの維持が難しい。

 教本にはサンプルや設問が用意されていることが多いが、画面に Hello,world! と表示させることの、何が嬉しいのだろう。ボタンを押せば自動で足し算をしてくれる機能をつくっても、満足感は得られない。
 限られた知識を前提にしてサンプルを用意することは、とても大変だと思う。そもそも、学習者によって「プログラミングで何をしたいのか」は異なるのだから、万人に刺さるサンプルや設問を用意することは不可能だ。

 それでも、「サンプルがつまらない」というのは、初学者を挫折させるのに十分な理由だと思う。なにせ、「つまらない」のだから。

 自分なりに想像力を膨らませて、今日覚えたことがどんなことに役立つか、どういう風に応用できるか、自分の目標達成にどう関係してくるのか、意味づけていく。そういう工夫が大切だと思う。

身に付けたことをどう利用すればいいのか分からない

 手頃な目標を掲げ、自分なりに楽しみながら、何とか学習を進めてきた。そして、購入した初心者用の教本を一通り読み終えた。
 しかしここから、習得した知識や技能をどう利用すればいいのか分からない。という人もいる。
 教本に書かれていることは出来るし、その内容もそれなりに理解している。だがそれを、どう活かせばいいのか分からない、というパターン。

 教本に書かれていることを理解し再現する能力と、書かれている内容を使って自分でアプリケーションを構築していく能力は、違うのかもしれない。

 だがそうすると、せっかく苦労して知識を身に付けたことが無意味に思えて、そこで歩みを止めてしまう。

 知識そのものだけでなく、その利用法も学習しないといけない。

進捗や習熟度を把握しづらい

 プログラミングには、分かりやすい指標がない。そのため、自分がどれくらい前に進んだのか、どれくらいスキルアップできたのか、感じにくい。
 例えば英語なら、TOEICなどがある。これも一面的なものに過ぎないが、ある程度の目安にはなる。
 そこまで分かりやすい目安がなくても、ゴールが明確で、そこまで一直線に向かっていくタイプの分野なら、自分の現在地を確認できる。
 だがプログラミングは、「何を、どこまで学べばいいのか」が決まっていない。そのゴールは、人によって、状況によって、違う。
 そうして、たくさんの時間や手間をかけたが、果たして自分がどれほど成長できたのか、不安になってくる。

 作りたいものが明確であり、そこに向かって進んでいれば、進捗を実感できるが、そうでない場合は厳しい。
 自分がどれくらい進んでいるか確認できない努力は、とても苦痛だ。ひたすら空回りしている感覚。


 プログラミングに限らずどんな分野でもそうだが、達成感、充実感、前に進んでいるという感覚、意義、といったものを見出だせないと、学習が苦痛になってくる。
 プログラミングを学習する際も、このようなポジティブな感覚を引き出していかないと、挫折してしまう。そのための工夫をしたり、それを阻害する要因を排除したり。
 学習は楽しいことばかりではないのだから、それを乗り越えるためのポジティブな要因がないと、続けられない。