日本が勝てない理由。

東大の「産業総論」で露呈 日本人の知力崩壊が始まった
http://www.nikkeibp.co.jp/style/biz/feature/tachibana/media/070316_rotei/


突っ込みどころ満載の文章ですが、既にいろいろ叩かれているので今更突っ込みません。


日本人はなぜプログラミングコンテストで勝てないのか。
その大きな要因のひとつに、すごく単純なのがありますね。


日本人は英語が苦手だからです。


ICPCの国内予選において、ほとんど全てのチームがまず最初に直面する問題は、
英文で記述された問題を正しく解釈することです。
ICPCに出る大学生のうち、英文をネイティブ並のスピードで、
正確に読める人なんてそれこそ数%にも満たないでしょう。
まずそこに他国のトップレベルのプログラマとの差があります。
そのギャップを縮めることはできても、ゼロにすることはなかなか難しい。
多少のハンデがあることを認めた上で
それを補うだけのアルゴリズミックな思考力と実装力が問われているわけです。


さらに英語というやつは参入障壁にもなります。
プログラミングを多少囓った人が「まず出てみよう」という気になるには、
プログラミング自体よりも英語への不慣れによって
敷居が高いと感じてしまうのではないでしょうか。


パズルが大好きな人間などは、むしろ「問題設定がちゃんと把握できない」ことにより
やる気が削がれてしまったりします。


この分野に限らず、理系の公用語は基本的に英語です。
日本語で行われるプログラミングコンテストを私は知りません。
最初から世界を相手にするしかなく
必然的に、そこに飛び込める人の数は減ってしまう。
日本国内で競争が生まれない。

世界レベルで戦えるプログラマの数

さて話は変わって。


200チームのうち、まともに競争に参加できるのは上位10チームぐらい
というのはおそらく正しい。


しかし、残りの190チームの数学的思考力を底上げするというのは、
方針として間違っているわけではないものの、遠回りだと思うのです。


日本にも、大学受験レベルでは数学ができる人というのはそれなりにいます。
それに伴う論理的な思考力を持ち合わせた人も。

けれど、その中でプログラミングをやる層というのが、あまりに少ない。
そもそも高校までにプログラミングの魅力の片鱗に触れる機会が、今の日本には絶望的に足りてない。
もっとプログラミングを始める切っ掛けが、世の中に溢れていてもいいと思うのですが。

一応高校の数学の範囲にプログラミングが含まれているものの、
受験にあまり関係ないため、大抵の高校は当然スルーです。
そして優秀な人の多くは、大した理由もなく医学部に行ったり、理学部に行ったりします。
そういう中でプログラミングに興味を持つ人というのは、その時点で相当なレアモノなんです。
(その分布はなぜかオタクに偏り、なぜか女の子が少ない…。)


さらに、コンピュータやプログラムに興味を持った人でも、
アルゴリズマーとして目覚め、コンテストに出るに至るとは限りません。
そもそも興味を持たない。まずそういったコンテストの存在を知らないというケースが多い。
また、与えられた問題を解くことよりも実際に世の中にコミットできるものを作ることに
楽しみを見いだす連中もいます。OSSコミュニティとかですね。(それはそれでよろしいことです。)


いや、そんなことやる暇あったらサークルに入り浸ったり、
バイトに明け暮れたり、大学生活をエンジョイするわ、
という考えが一般的だったりするのかもしれません。


そして前述の通り、英語です。
避けて通れないとはいえ、積極的に関わりたくはないという心情は理解できます。
それを乗り越えるだけのモチベーションがあまり無いんですよね。


こういった数々のフィルタをくぐり抜けた上での、
200チームのうち上位10チームなわけです。

優秀なプログラマを増やすには

プログラミングコンテストで世界とマトモに競争できる人の数をNとし、


N = L × P × E

  • L: 数学的思考力のある大学生の数
  • P: そのうちプログラミングに興味を持つ人の割合
  • E: そのうち英語がある程度以上できる人の割合


とした場合、P と E の倍率が異常に低いように思われます。
そして N を増やすには、L を増やすより、P と E の倍率を上げる、すなわち

  • 潜在的にプログラミングに興味を持ち、コンテストで活躍しうる人に対してプログラミングの魅力を伝え、こっち方面に来る最初の一歩を踏み出させる。
  • 技術的な分野の英語に日常的に触れさせ、英語を読むことに対する抵抗を少しでも和らげる。

ことの方がおそらく具体的で容易です。

パイの取り合い

日本のソフトウェア業界の水準を手っ取り早く挙げるには、
優秀な人間をかき集めることです。

Google に攫われたくなければ、Google よりも魅力的な労働条件を整えればいい。
単純な話ですね。それにしても日本におけるプログラマの待遇は悪すぎだと思うのですが…。


それが無理ならば、日本のソフトウェア業界は、彼らの代替となり得る人材を
他の業界に取られる前に押さえる努力をすべきだと思います。


それは優秀なプログラマの母数を増やすという意味では
教育によって優秀な人間をたくさん育てるという方針と一緒です。
しかしそれは理想論であり、目に見える効果が出るには十年ぐらいすぐに経ってしまう類のお話です。
ならば他の所から持ってくるしかありません。


なにも他の分野がおろそかになっていいというわけではなく、
ソフトウェア業界の魅力と重要性が正当に評価されてほしいだけです。
それと同時に、前途ある高校生に「自分がやりたいこと」をしっかり見つけてほしい。
『給料が低い』なんていう本質的でない理由で、
生きがいにできるかもしれない楽しいことをみすみす逃すようなことは不幸ですよ。


結局人だと思うのですね。
世界レベルで活躍できるような、素直に凄いと思える人が増え、
彼らがちゃんと評価されれば、そこを目指す人も増えるわけです。


だから、まずはプログラミングの楽しさを宣伝すること。
そういうコンテストの存在をそもそも知ってもらうこと。
そして、こういうことにはインセンティブを出すべきだと思います。
TopCoder みたいなものを日本人でも参加しやすいようにすることから始めたらいいのではないでしょうか。


まとめ

日本人がプログラミングコンテストで勝つには

  • 数学よりむしろ英語の方が問題かも。
  • 高校生がプログラミングに興味を持てる機会を増やす
  • 情報系の大学生にコンテストの存在と、参加するモチベーションを与える


ひさびさに長文書いてしまった。まとまらないまとまらない。。