2009.05.09
「必要になったときに学ぶ」遅延評価的学習法
アクセスログを見ていて、次のページを見つけた。

OKWave - WEBプログラマーに進路変更したいのですが
http://okwave.jp/qa4732414.html

<こんにちは、私は今20歳で専門学校の1年生です。
私はIT学部の情報処理科で勉強をしています。
もとから絵を描いたり、WEBページを作ることが好きだったのでWEB学科に進み、WEBプログラマーになりたいと思っていました。
しかし、就職のしやすさなどを考え進路を変更してしまい、情報処理学科に入学してしまいました。
私たちの学科ではC言語を勉強しています。2年生ではC#を学びます。
もともと作ることが好きなのと、アルゴリズムが苦手というのもあり、C言語でシステムを作ることににまったく興味がもてず、授業がとても苦痛です>。

全文は上のリンクから読んでみてほしい。回答者のなかに、私の「「フロントエンド・エンジニア」という呼び名のパワー」にリンクしてくれた人がいて、それでアクセスログに入っていたようだ。

この質問に対して、「Cくらいわからないとダメだ」「アルゴリズムがわからないようでは、Web系でも無理だ」といった趣旨のきびしい回答が多くて、驚いた。

私なら、「いちばんやりたいWebの方向にすぐ進むべきだ。Cやポインタがどうしても必要になったら、そのときに学べば十分」と答える。

ITの現場というのは、「必要になったら学ぶ」ということの繰り返しだ。これは、アジャイル開発とか「遅延評価」にも通じる考え方で、いわば「遅延評価的学習法」だ。この方法では、「あとで必要になるかもしれない」から事前に学んでおく、というコストをかけないので、使わないものを学ぶというムダが生じない。すぐに使うものを学ぶほうが効率がいいし、有用性をすぐに実感できるのでモチベーションも上がる。

「Cやポインタをやっておかないとダメ」みたいな考え方に私がなぜ反対かというと、主に2つある。

1) モチベーションの上がらないものを無理にやっても成長できない。学習においては苦痛は時間のムダで、有害ですらある(嫌いになったり、誤った先入観を持つようになる)。ほんとうに必要になり、興味がわいたときに学べば十分だし、そのほうが学習効率も高い。

2) これだけ激動するITの世界で、Cやポインタを必須の基礎に据え、それを最初にやることの根拠がない。現場的にはオブジェクト指向のほうが重要かもしれないし、特にWebプログラミングには、何らかのスクリプト言語やHTML、HTTP、Linuxの基本などのほうが重要で、優先度が高そうに思う。

私は10数年前、HyperCardJavaScriptによって、プログラミングの世界に導かれた。どちらも「見える」環境であり、簡単にいじることができて、いじった結果がすぐに「見える」のが良かった。その後Zopeにハマったのも、「見える」環境で、簡単にいじることができたからだ。

もしこれが、C言語の「Hello World」やポインタから入っていたら、いまの私はなかったと思う。HyperCardやJavaScriptのような「見える」仕組みで、かつコンパイルなしですぐに動き、ポインタのようなローレベルの仕組みは隠蔽されている環境のほうが、入門者には絶対に向いていると私は確信している。

もし質問者がいまの専門学校に満足していないのなら、即やめて、一刻も早くWeb開発の現場にもぐりこんだほうがいいと思う。きっと学校よりも10倍くらい早く学習できるし、実際に動くものをひたすら作るので、理解の深さも違う。少なくともITに関しては、「学校でしか学べないこと」などないと思うし、学校のレベルと現場のレベルはかけ離れている。

このなかの回答にもあるが、現場でほんとうに重要なのは、新しいことを貪欲に学んでいく「学習力」だったり、講義や教科書では学べない「設計力」だったり、仕事仲間やお客さんと話ができる「ヒューマンスキル」だったりする。学校で多少の知識を学んできても、どのみちそれほど役に立たない。現場的な観点からいうと、自分で自宅サーバを立てたり、ブログに技術解説を書いたりするほうが、よっぽど役に立つ。それは学校に行かなくても、やる気さえあれば独力でできることだ。

私は教える側の人間でもあるので、教える側の限界もわかっているつもりだが、講義で教えられるのは、しょせん「教えられること」だけだ。それも、生徒が1人や2人でなく、10人や20人もいるのであれば、通りいっぺんのことしか教えられない。学校での集団教育では、「ほんとうの学習」は無理で、せいぜい「きっかけ」を与えられるに過ぎない。もし「きっかけ」だけでも与えられたら、それだけでじゅうぶん成功だと思う。

だから、学校の授業が苦痛だったり、ついていけなくても、まったく心配はいらない(教えるのがヘタな先生もいるので、原因は先生かもしれない)。ほんとうにWeb技術に興味があり、やる気があるなら、参考書とネットの情報だけで、絶対に自習できる。自習して、わからないところだけ、先生や友達に聞けばいいと思う。誰も答えられなければ、それもネットで質問すればいい。

この質問者の問題点は、C言語が理解できないことではなく、<就職のしやすさなどを考え進路を変更してしまい>というふうに、自分のやりたいことに邁進するのではなく、世間的な基準に振り回されている点だ。これは20歳ならば仕方がないところもあるし、日本では特に、世間的な基準に合わせたほうが得だという価値観を叩き込まれるので、なおさらだろう。

ぜひ、世間的な基準に振り回されず、自分の本当にやりたいことに邁進してほしい。実際、そういう人のほうが自分の強みを発揮できて、競争力のある人材に育ち、社会的にも成功する可能性が高くなると思う。


関連エントリ:
ITエンジニアにコンピュータ・サイエンスは必須か
http://mojix.org/2008/12/29/it_engineer_cs
「楽しくない」と感じたなら、飛び出したほうがいい
http://mojix.org/2008/09/15/when_to_jump_out
イリイチの脱学校論
http://mojix.org/2008/05/04/illich_deschooling
「好きな奴が勝つ」定理
http://mojix.org/2004/03/16/231002