世間ではプログラマが足りていないらしい


最近、私のまわりの会社は求人難だと言う。まともなスキルをもっている人は給料の高い会社(いまならソーシャルゲーム系か)に転職してしまうので、もはや求人市場にはカスしか残っていないとその経営者たちは言う。


毎日、毎日、何十人も面接するが、とんでもないレベルの奴らが大挙して押し寄せてくる。プログラミング歴2年とか3年ぐらいの奴ら。純粋にプログラミングの勉強に費やした時間数で言うと500時間とか1000時間とかその程度の。ピアノで言ったらバイエルすら終わってないレベル。そんな奴らがほとんどだと彼らは言う。


ピアノのリサイタルで金取って演奏するのに、バイエルレベルの奴が来たらブーイングの嵐で金返せーって誰でも思うだろう。しかし、IT業界に至っては最近は開発環境が整っているので生産性が高く、そのレベルの人たちでも出来る仕事がなくもない。だからそんな無茶苦茶がまかり通っているのだ。


私は先日、CODE VS 2.1という賞金つきのプログラミング競技の参加者が少なすぎることについて書いたが*1、賞金総額100万円 + 本戦参加者への交通費全額支給なのに、それにしても参加者が少なすぎる。世のなかのプログラマーたちは一体どこへ行ってしまったのか。


思えば、30年ぐらい前は、コンピューター雑誌は数少なく、『月刊アスキー』『I/O』『月刊マイコン』『RAM』なんかはコンピューター少年ならば必ずそれらの雑誌を見ていたし、エニックスがゲーム・ホビープログラムコンテストを開催したとき(第一回/1982年)も、森田和郎氏、中村光一氏、堀井雄二氏などその後のゲーム史に歴史を残すような天才たちが受賞した。


いまにして思えば当時のマシンは非力で、開発環境は非常に貧弱だったため、その開発環境でまともなゲームを開発するには相当の能力が必要であった。千人に一人、一万人に一人ぐらいの逸材ばかりであった。当時のプログラマー人口からしてみれば、彼らがのちの日本を代表するゲームプログラマのすべて(全員)だったと言っても過言ではなかった。


当時のエニックス社長だった福島さんは「(以降、コンテストを開催していない件について)もう才能ある人はだいたい知っちゃってるから、あとは直接仕事頼めばいいや」*2との考えだったようだ。


そこから現代まではずいぶん長い時間があるのでここには書ききれないが、ともかくそういう求人を兼ねたプログラミングコンテストというのはなかなかビジネスとしては成立しにくかった。プログラマの誰もが目にするようなメディアは存在しなくなったからというのもあるし、「求む!天才プログラマー」の時代は終焉を告げていたというのもある。


いまや普通の企業にとって欲しい人材は千人に一人、一万人に一人というぐらいの希少性の高い人材ではなく、十人に一人か百人に一人ぐらいの、そんじょそこらにごろごろ居るようなレベルで十分だから、その求人のために高い費用を賞金に費やすのは割に合わない。


しかしそのパワーバランスが崩れはじめたのがソーシャルゲームがブームになりだしたころからで、優秀なプログラマーがこぞってソーシャルゲーム会社に行くので、中小企業は「十人に一人か百人に一人ぐらいの、そんじょそこらにごろごろ居るようなレベル」の人材にも事欠くようになってきた。中小企業は面接しても“カス”しかこなくなった。


※ “カス”とは酷い言いようではあるが、給料の高い会社に転職できなかった残りカスという(「カス」本来の)意味で、以下の文章でもこの意味でカスという言葉を使い続けるが、特に悪意はないので該当する人も気を悪くしないで欲しい。


“カス”しか面接にこないどころか優秀な社員は昼休みに同じビルの別フロアにあるソーシャルゲームの会社の面接を受けたりして、どんどん抜けていくこととなった。だって、勤務地が同じビルで(いま住んでいるところから引越しが不要で)、それで年収が200万円ぐらいアップするんだもんな…。


ときを同じくして、CodeIQのような求人を兼ねたプログラミングの問題出題サイトが出てきた。(CodeIQはサイトオープンが2012年6月18日) 面接に“カス”しか来ないにしても、せめて要求仕様通りに動作するプログラムが書ける“カス”のみ面接に来て欲しいと言った中小企業の社長さんにも優しいサイトである。


じゃあ、CodeIQに出題されている問題ってどんな問題なのか?


よく知らないので、一問解いてみよう。どうせ解くなら、問題をたくさん出題されている、出題慣れしている出題者の問題のほうが良い。良問であるはずだし、変に癖のある問題ではないはずだ。そこで、結城先生の次の問題に挑戦した。


問題11. Deepest(ディーペスト)
http://www.hyuki.com/codeiq/#c11


ある星からある星まで到達する経路を求める問題。ある星から行ける星は、Web APIにアクセスすればわかるようになっている。星にはIDが振られており、「この星から行ける3番目の星は?」のように問い合わせるとその行き先の星のIDが返ってくる。行き先がない場合は0が返る。


超初心者向けの問題である。幅優先探索(≒ダイクストラ)で一発だからプログラムを書くのは10分もかからない。


確かに私はそこまでは10分で書けたが、途中、行き先が無限にある星があって処理が終わらない。


行き先を無限あるということは(それらが毎回違う値だとまずいので)どうせハッシュ関数で生成してるのだろうし、その行き先に関しては事前に結城先生が用意した星ID以外だろう。(ちなみにこの予想は正しく、後日の結城先生の解説によると、この行き先が無限にある星はSHA-1を利用した計算で行き先IDを生成しているとのこと。)


この無限に行き先がある星についた時点でその先は行き止まりということが確定するので、行き先が100を超えたらこの星をブラックリストに入れるような処理でもおそらく解けると思うが、もう少し問題がひねってあって、この行き先が無限にある星の何番目かの経路を使わないとゴールできない可能性もなくはないし…などと考え、私はしぶしぶ幅優先探索から反復深化型のコードに修正した。


ここまでで私がコードを書いていた時間は15〜20分程度。(サーバー側からの応答時間があるのでトータルは倍ぐらいかかっている) 問題文に「最短経路を求めなさい」と書いていないところがミソで(経路を求める問題なら普通書く)、「最短」と書いていない以上、ダイクストラで求められないことぐらい最初に気づくべきだった。なんか私の甘さが露呈した感じだ。


問題自体は難しくはないが、一筋縄では解けないように工夫されているし、まったく手付かずにはならない程度の難度に調整されている。問題の作りに関しては流石としか言いようがない。極めて良問である。正答率は78.6%らしい。存外に高い。(時間制限があればもっと減ったに違いないが…)


世間にはプログラムの書けないプログラマが大量にいるという噂だが、そういう人はそもそもこの手の問題をチャレンジ自体しないのか、あるいは、簡単なことはみんなできるが、少し問題をひねったときにこそ出来る人と出来ない人との差が大きく生じるのか。それともプログラマとしての経験年数の浅い人でも難しい問題は(解ける人には)解けるが、IT系の広範な知識に欠けているから業務では使えないのか。


本記事に特に結論は用意していないのだが、IT業界の人は最近の自分の会社の景気についてコメントでも残して行って欲しい。


↓↓↓コメント↓↓↓