/ プログラミング学習

プログラミングが向いているかいないかの判断のしどころを考える

こんにちはEduTalkの手島(@atsuhio)です。

本日は、表題の通りプログラミングが向いているかどうかの判断をどういう段階ですれば良いのか、ということに書いていこうと思います。

なぜこれを書こうかと思ったかというと、僕の友人、知人を含めてプログラミングを始めてみたものの、自分には向いてなさそうなのでやめた。という方の話をちらほら聞くためです。

ただ、その向いていないと判断した段階はわりと様々だったりします。ある人は、本当に触りの部分だけを勉強してやめてしまうし、実際に企業でプロのエンジニアと働いてみてから向いていないと判断するケースもあります。

この実際に企業でプログラマをやってみたけど、向かないと思うケースでは、既にある程度の経験を積んだ上での判断なので分かりますが、前者の方はもったいないケースも多いんじゃないかと思いました。

天才と遭遇してやめるパターン

一つ考えられるのが、天才と遭遇して自分は向いてないと判断するパターンかもしれません。

これまで僕が出会ってきた中で、語学の天才と呼べるような人が何人かいます。例えば1人は、リンガルボックスでの元パートナーなのですが英語、韓国語、日本語を全てをネイティブなみに話せ、英語の講師、通訳を務めており、加えてスペイン語の日常会話もこなします。他にも、僕もフィリピンに何年も滞在していてもほとんど現地語は話せないのですが、耳から入ってくる音声だけで、ほんの1,2ヶ月で日常会話が出来るようになるような人もいます。

この語学の才能に関しては、例えば言語の習得が早い人は海馬の活動が活発とか諸説ありますがまだ解明はされていません。ただ脳科学者も語学習得の才能があると認識しているのは確かです。

こうした語学の才能は僕にはないので、とてもうらやましいなぁと常々思うのですが、かといって僕が英語が習得できてない訳ではありません。もちろん、上記の友人のようにプロ教師として働くには十分ではないかもしれませんが、才能がないおかげで同じように才能がない人の直面する困難などはより理解しやすいというポジティブな面もあります。

プログラミングもこれに近いのかなと思います。プログラミングでも天才と呼べるような人はいて、こうした人がプログラミングやコンピューターの発展に直接貢献するような実績を残します。jQueryやRailsのコアコミッターであり、Ember.jsを生み出した、Yehuda Katzが本格的にプログラミングを開始したのは大学卒業後です。だから、例えばプログラミングスクールに通うとしても才能を発揮して一気に自分と差を付けてしまう人はいるかもしれません。

もしプログラミングをマスターする目的が、例えばMongoDBや、CircleCI、Dockerなどのように高度な技術がないと出来ないプロジェクトをすること、だったら別ですが、普通のサービスを作るのならそんな特別なスキルは要らないです。

だから、天才でなくてもサービスは作れるので、天才に遭遇して自分は天才でないからプログラミング向いてないという判断するのはちょっと違うかもしれません。

理解出来ないことが出てきて止めるパターン

次に多いのが、プログラミングを初めて割と早い段階で、理解出来ないことが出てきてしまい、そこで「自分は向いていないんだ」という判断を下すケースではないでしょうか?

これも数学や英語などと近いのではと個人的には思います。

例えば、英語で言うと英語が全然話せなくて文法も全然分からないという場合は、英語を身につける本来の目的である、英語をビジネスで使う、であったり、外国人と話す、ということはほぼ出来ないので楽しくないかもしれません。また文法も単語も覚えることがたくさんあるし、たまに言葉の持つ意味と全然意味が違う熟語もあります。ただ、こうしたつまらない暗記を繰り返していけば、段々バラバラだった事柄が繋がって、少しず話せるようになります。話せるようになると、それ自体がモチベーションに繋がってより話せるようになるというスパイラルが生まれます。

このようにプログラミングでも、最初は全然分からなくてつまらないけど、やっていくと分かったという気になれる地点へ到着します。そこから上手く正のスパイラルが生まれたら、プログラミングが出来るようになっていきます。

このバラバラだったことがつながることを、「チャンキング」と専門用語では言います。(塊として物事を覚えやすいというようなテクニックを指すチャンキングとは別なので注意)詳しく知りたい方は、英語でしか解説がないですがWikipediaをご覧ください。Chunking (psychology)

この点から、理解できないことがあるから、とやめてしまうパターンのほとんどは、もう少し続ければモノになったかもしれないのに。と思うケースが多いのかなと思います。

プログラミング自体よりも、何を表現したいかが大事

個人的には、スタートアップのCTOになりたいとか、上場企業で人工知能の研究者になりたいなどでしたらプログラミングが天才的に出来る人でないと、困難に遭遇するかもしれないですが、そうでないなら特に向く向かないとかないんじゃないかと思います。

上であげた語学の例で言うと、ネイティブなみに話すのは難しくても、ビジネスで使えるレベルまでなら勉強すれば誰でも到達するからです。プログラミングも語学と同様にある程度の時間を投資すれば向き不向きとか関係なくそこまで到達します。

なので、結論からいうと向いている向いてないで判断するよりも、自分の表現したいこととつながるかどうかで判断するのが正しいのかなと思います。

例えば、プログラミング全く関係ない分野で何か成し遂げたいことがあるのに、プログラミングがこれからは大事みたいな言葉に踊らされて、プログラミングを学ぼうとすると上記の理由付けにたどり着いて、やめてしまう可能性はとても高いかもしれません。

逆に、自分のやろうとしていることとプログラミングがリンクしているのであれば、上記のようなパターンと遭遇しても続けてみるべきでしょう。

例えば、自分が作りたいサービスが既にあるという場合は、プログラミング自体がやりたいことにリンクしていますよね。作りたいサービスをどう見つけるのかということについては、以前こちらに詳しく書いたので良かったら一読ください。

また、こうして目的を持ってプログラミングをする場合でも、僕もそうですが意志強くやり続けることってとても大変です。

だからモチベーションを保つとか、習慣化するということは、科学理論を適用するのがいいと思います。

例えば、先日リンガルボックスのブログで紹介したのですが、「やり抜く人の9つの習慣 コロンビア大学の成功の科学」という本は、理論にもとづいて目標の達成方法が解説されているのでオススメです。
正しい目標を立てることが目標達成への近道、「やり抜く人の9つの習慣」の紹介

また、そもそもその自分がやりたいことが自分の幸せにつながるのか分からない。という場合は80000 Hoursという、ケンブリッジ大学教授が監修するキャリア指南サイトを読んでみることをオススメします。

こちらについてもブログで紹介しているので良かったらご覧下さい。

ケンブリッジ大学教授が監修するキャリアパス指南サイト「80000 Hours」がオススメ

まとめ

いかがだったでしょうか。結論から述べると天才でないと出来ないような仕事を除いて、向き不向きとか特に考える必要ないってことです。それよりも、続けるためのモチベーションをどう生むのか、保つのか、そもそもプログラミングは自分に必要なのか、ということにフォーカスするのが重要かなと思います。

プログラミングスクールで、プログラミング勉強しているという方や、これからプログラミングを学ぼうか検討中という方は是非参考にして頂けるとうれしいです。