テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

プロコンします

私はプロコンに良い印象がない. 日立時代にプロコン野郎がいて, プロコンやらないかと誘われたが, やはりものを作ること自体に興味があり, アルゴリズムの問題に対して即答することには興味がわかなかった.

プロコン的なアルゴリズムというのは, 少なくとも私がやってきた領域では必要ない. おそらく, 検索だとか機械学習だとかそういう分野ではかなり重要になってくるから, グーグルなどはプロコンの上位者を採用しているのではないかと推測する. そこでは, データのサイズが桁違いになるからだ. プロコンの上位者の人が, その道の研究者として花開いていることも大変理解出来る.

自分のいる分野に関係がない以外に, プロコンが嫌な理由は, みんなが同じ問題を解くという単なる再開発であるからと, 書き棄てるためだけにコードを書く行為だからである.

とりわけ, コードをただ書き棄てるという行為に抵抗がある. プロトタイピングだって同じではないかと言われるかも知れないが, プロコンのそれは, 何の前進もない書き棄てである. 何かを探しているわけではなく, ただすでに存在する答えを導くために問題を解いているだけである. 大学受験の数学みたいに, 過去問を解いて勉強して, 6問出される問題の中で4完だとか, 4完半だとか喜んでいるようなものである.

彼らはどこにモチベーションがあるのか. プロコンは碁でいうところの詰碁のようなものかも知れない. ここで碁はソフトウェア開発である. そして, 碁を強くなるために詰碁をやるというのは合理的である. しかし多くの人は, ただ, 問題があること自体に喜びを覚え, それを瞬時的に解くことに楽しみを見出しているだけではないかと思う. 詰碁のような意味合いでプロコンに精進している人はそう多くはないだろう.

東大だとか京大だとかいう受験エリートの世界には, 問題を出されてそれを解くことがとても楽しいという人間が結構いる. 私はそういう人間のことは嫌いだし, プロコン勢にはこの臭いがするから, 嫌なのだと思う. プロコンもやっていて, かつGithubなどで高度なソフトウェアも公開しているならばこれはむしろ賞賛に値する. 研究の分野で活躍していても賞賛する. しかしプロコンだけというのは, 単なる問題大好き病ではないかと思う.

というわけでプロコンを嫌ってきたわけだが, ついに私もプロコンをしなくてはならなくなった. 私がどう思おうが, プロコンが出来ないやつは就活で不利になる. 今やグーグルやフェイスブックだけでなく, 日本企業の多くがプロコンを重視している. 各社がプログラミングコンテストを開催し, 上位者をリクルートしているのだ. はぁ羨ましい.

AtCoderというサイトがある. 私はこのサイトのコンテストには少しずつ参加してみようかと思っている. AtCoderの良いところは, 開催時間が健全であること(TopCoderなどは深夜にコンテストがあったりする. 健全ではなく, これに喜んで参加するのは病的だと思う. ゴールデンタイムには寝るべきだ), プログラミング言語が幅広いこと, 問題が日本語なことである.

問題が日本語で書かれるのは重要なことだ. わけの分からない周りくどい英語を読んでも, 英語力の足しにはならないし, 英語の解釈を誤って不愉快な思いをすることが少なくないだろう. 問題をいくつか読んでみたが, 「もっと簡潔に本質だけを述べろ」と言いたくなることばかりだ. そんなことに疲れたくはない. 幸運なことに, 先人のおかげで日本のプロコン力は世界的に結構高い. 母国語で本質にのみ集中出来ることは, 日本人として感謝すべきことだ.

最後に言語について, 色々分析した結果, プロコンは解答自体はそれほど複雑にならない. だから, C言語でも別に構わないわけだが, デバグがしやすい, 書く量が少ない, 手続き的に書くことが出来る, 配列操作がしやすいなどを考慮した結果, とりあえずRubyでやってみようということになった. AtCoder(やCodeforces)のように, Rubyの利用を許容したコンテストでは, Rubyを使ったからタイムアウトするという問題は出ないだろう. アルゴリズムがまともならばちゃんと時間内に実行出来る問題が出されるはずなので, 実行スピードについてはこだわる必要がないはずだ. Rubyは, map, reduce, combination, zipなど配列操作も得意だし, find_indexなどの探索も充実している. 時々使うことになるかも知れない正規表現も充実している(正規表現を使うと一発という問題があったはずだ). 手続き的に書くことも出来るからプロコン本に書いているようなアルゴリズムをそのまま試すことも出来る. pによって, データの中身をそのまま出力することが出来ることはデバグに役立つだろう. とかいうことを考えた結果, Rubyを使ってみることにした.

最近, これは別に書こうと思うが, カーネルにこだわってきた自分を棄てて, ITに対してまた違う関わり方を模索しようと思うようになった. プロコンをするというのも, その一つなのかも知れない. まずは, 一週間後にプロコン試験があるので, そこに向けて意識を高めていくことになる. はぁ鬱だ