ICPCの練習をするとコードが綺麗に書けるようになるワケ

まずはこの記事を読んでもらいたい。

ITmedia エンタープライズ:キミのコードが汚い理由 (1/3) http://www.itmedia.co.jp/enterprise/articles/0701/12/news011.html

2年半も前の記事に突っ込みを入れるのもアレだが、気になったので書いておく。

問題となるのは2ページ目。「(ICPCでは)クリーンなコードを評価する規定が全くない」と書かれているのだが、自分には「ICPC=コードが汚い」と主張しているように感じられた。これは非常に遺憾だ。ICPC OB/OG会でスタッフとして活動してきて感じたのだが、ICPC上位陣のコードは綺麗で見やすく美しい(と少なくとも自分には感じられる)。例えば以下にICPC上位陣/元上位陣のブログを挙げる。これらのプログラムが汚いと思うだろうか?マクロなど競技プログラミングにおいて特徴的な書き方は置いておいて、汚いところなどほとんど無いように感じられる。マクロについても実際の現場で書かせるときにコーディング規約で禁止すれば良いだけのことだ。(これらのコードの意味が分からないのは至って普通の事であって、コードが綺麗/汚いとは関係ないことです。)

(iwi)の日記 http://d.hatena.ne.jp/iwiwi/
cafelier@SRM - TopCoderhttp://topcoder.g.hatena.ne.jp/cafelier/ (要ログイン)

さらに筆者はこの後に「エレガントなコードを書けば回答を早く取得する確率も高まるといくら主張しても、筆者はこれを立証する調査を1つも知らない。」としているのだが、そもそもそのような調査はどのようにすれば良いのか?調査というからには仮説を立てて(ここでは上位陣のコードは綺麗)、仮説を立証するための実験を行い(コードを書いてもらって)、それらのコードが綺麗かどうかを測定する(綺麗かどうかをベテランの人に見てもらう)必要がある。ここで重要なのは測定方法なのだが、筆者自身が「クリーンなコードとは、美しさのように、見る人によっていろいろな意味で異なる。」と言っているのだから困る。誰もが納得できるような客観的な調査方法は多分存在しない。

もう一つ言っておくと、ICPCでは誤答は20分のペナルティとなるルールがある。これは重要なポイントだ。ソースコードを速く書こうとしてバグを埋め込むと、正確に書いたときよりも評価が低くなってしまうのである。よってバグを入れないように書かなければならない。その為には見やすく綺麗なコードを書かなければならい。結果、綺麗なコードを書く癖がつくはずなのである。

結局、綺麗汚いなんて見る人によって評価が分かれるのだから、評価する側の空気読んで都合よく書き分けられれば良いような気がする。例えば、配列の添え字で言うと「i」「ind」「idx」「index」「indexOfHoge」「indekkusu」を華麗に使い分ければいいんじゃないだろうか?