【おまじない】人にプログラミングを教えるむずかしさ【死すべし】
はてなのブロガーは、何かと情報処理に関する仕事ばかりについているイメージがあります。
しかし自分はプログラミングは全然できません。だから、こういった初心者解説みたいなものは、とても重宝します。
自分はプログラミングの技術は持っていません。
だが、吐き気のする「邪悪な入門書」だけは分かる!
目次:
1.最初に出てくる即死の罠
#include <stdio.h>
//これはおまじないです
これがあまりに危険すぎる。
「ここは難しいから今は気にしないで」という言葉を使って、「未定義のもの」を通してしまっている。
未定義のものを仮定する。理解を後回しにする。
そういった行為は、人間の理解に大きな負担をかける。メモリの面でも、処理数の面でも。
この先、何か分からないものが出てくるたびに、「あの時の未定義のものが関係していないかどうか?」を、チェックしなくてはならなくなる。
「ここは難しいから今は気にしないで」という言葉を使われたら、「その未定義なものは何?」と追及せざるをえない。正しく自分の力で考えて納得しようという人間であればあるほど。この力は、人が頭で理解するのに最も必要なものであり、それを無視することは、学習の機会を正面から冒涜することになる。
コンピューター様は、セミコロン一つ忘れただけで発狂する。一つでもわからないものがあったら、以降のものはもう全部「わからないもの」になってしまう。
しかしプログラミングを教える人は、相手が人間だとわかると、突然こんな危険な「おまじない」を通そうとする。正しく自分の力で考えて納得しようという人間であればあるほど、理解の仕方はコンピューターと変わらないはずであるのに。
2.「説明を飛ばす」という、古い配慮
確かに、教える側の意図としては、なるべく早くプログラミングが楽しめるようになってほしいのだろう。だから、最初の部分の説明はしても楽しくないので、できる限り触れずに飛ばしたいのだろう。
その気持ちは分かるが、そうまでして急いだ「楽しいプログラミング」とやらが、
printf("Hello, world!");
return 0;
これじゃあ何にも楽しくないよ!
というか、return 0も説明せずに「飛ばす」つもりか!
おそらく、多くの割合の人は、「単にプログラミングを楽しみたい」のではなく、「正しい理解が欲しい」のだと思う。
ズルした近道では本物にはたどり着けない。長い道でも最初の一歩から進みたい。
人の知的好奇心は、それぐらいには高貴なのであると思う。
3.正しいルートを教えれる人が、いない。
断言するが、ものを教える際は、何より重視するべきものは「話す順番」である。
しかし、正しい順番で物を教えるのは、とても時間がかかる。
先の例でいえば、#include <stdio.h>とか、return 0とか、全部丁寧に教えていたら、非常に長くなる。90分のプログラミング講座ではとてもおさまらないし、入門書を出す際にも、紙面の制約があるのだろう。
それ以前に、講座や入門書では、そもそも扱える内容に制約がある。90分のプログラミング講座では、(形だけでも)ができる人間を作るという目的があるし、出版される入門書も、一番ニーズがあって売れそうな範囲の内容しか取り扱えない。
そして、プログラミング技術を持ったプログラマー達も、忙しすぎて時間がない。教育を専業にできるプログラマーなど滅多にいない。
そんなプログラマー達が、あくまで片手間に、興味のある分野だけ、突発的に説明してくれるような、そういう機会を逃さず汲み取ることでしか、本質的な学習をする機会がない。
4.他人の説明に横やりを入れる性
このスレッドでも見られるように、誰か一人がプログラミングに関する説明を始めると、必ず横やりが入る。
その横やりが、「ここが間違っていた」とか「ここが分からない」とかだけならば、まだいい。それはむしろ、議論を活発にするいい傾向である。
しかし、プログラムに関することになると、なぜか攻撃的な人が多くなる。「ここが間違っていた」の次には、「間違えるぐらいなら説明するなよ!」という論調を持ち出す。「ここが分からない」の次には、「分からないなら引っ込んでろカス!!」といって、初心者を追い出そうとする。また、「なぜ~を説明しないのか!」「もっといい表現方法を使え!」といって、話そのものをひっくり返そうとする者が多い。
「横やり入れている奴ほど自分でスレを立ててみろよ」、という意見はもっともだが、それはできない。何故なら横やりを入れるだけの技術を持ったプログラマーは、みんな忙しすぎるから。
このスレッドの>>1だって、GWだからこそ、時間を使ってここまで丁寧に説明してくれたのだろう。
新しいもの作るより叩く方がずっと簡単だ。
彼らは暇がなくて、叩くことしかできなくなっている。
5.横やりを入れ続けることで進化する理論
プログラミングは、コンピューターで完結してしまうので、ほかの研究分野に比べて、物理的制約があまりない。
だからこそ圧倒的な速度で、理解が進歩していく。例えば、実際のプロ野球選手になるより、パワプロのサクセスモードをクリアする方がずっと簡単であるように。
確かに、あらゆる科学がそうであるように、系統だった理解と理論は、既存のものを踏み越えることによって進歩する。他人を踏みつけて新しい技術を学び続けることが、高速に進歩することである。
だからこそ、あやまちも高速に進んでいく。他人の解説に横やりを入れるプログラマー達は、このような激しい環境で育ちすぎてしまったのだろう。
教えるべき内容はどんどん増え続けている。
それを当人が喰らい続けるだけで精いっぱいだから、プログラマー達は、忙しすぎて時間がない。