僕も学生なのだけど(一応)、仕事をしているチームにプログラマをスカウトするために何人もの学生プログラマと会ってきた。能力はいろいろ。Linuxのソースをガンガン読んでいる人もいれば、授業のプログラミング課題がちょっと得意、くらいの人もいた。言い方は悪いけどピンキリ。

で、その差が何から来るのか疑問に思っていた。「プログラミングに対する情熱や興味の差」とか、「アルバイトでの開発の経験」などの差はもちろんあるのだが、どうもそれだけでは説明し得ない壁があるように感じたので、ここ数日それを考えていた。

で、理由を思い立った。

学生に限らず、プログラミング能力は個人差が激しい。これは最終的には「純粋な頭脳労働だから」という点に帰着すると思う。他の多くの世界と違って、プログラミングは「時間と頭脳があれば原理的に何でもできる」わけだ。他の分野においても「頭脳戦の割合が高ければ高いほど偏差も大きくなる」というのは一般論といっても差し支えないと思う。

さて、さらに学生プログラマの場合に言えるのは、「その事実に気づいていない人の割合が高い」ということ。

頭脳戦であるプログラミングを「囲碁」に例えるなら、それを「麻雀」だと勘違いしている。

囲碁は決定性のゲームである（ランダムな要素が何も無い、プレイヤーが打った手によってゲームの全てが決まる）が、麻雀は配牌はランダム要素がある。要するに、

「そんなにがんばっても仕方が無いよ」

とか、

「まぁ役とか覚えてコツをつかめばそれなりに強くなるけど、そんなもんでしょ」

という風に考えている学生が多い。本当は、自分の打った手が全てを決める「囲碁」であるのに。だから、「囲碁」であると気づいている人間は、情報を集めて勉強して、ひたすらコードを書いて、どんどん「強く」なっていく。

能力とか経験とかいう以前に、ゲームのルールを認識する時点で、「勝敗」は半分以上決まっている。