「数学好き・競技プログラミング好き」な人たちと、ちょっと違うところ

生粋の数学好きとか競技プログラミングに明け暮れている人たちは、「自分で考えること」が好きなんだなあと思う。類型的に言うと、数学セミナーとかに載っている問題を何日でも楽しんで考え続けられる人のイメージがある。一方、今の私は、数学も競技プログラミングもそれなりに面白いとは思うのだが、彼らとは楽しみ方が違う。私のような態度の人が他にどのくらいいるか分からないけれど、たまたま Twitter競技プログラミングの練習と指導の話題が上がっていたので、思う所を書いてみようと思った。なお、私の競技プログラミングでの戦績は Topcoder で一瞬黄色くなったもののすぐに陥落、今は Div1 と Div2 の境目をうろうろする程度だ。体調上の理由と意欲の問題があって、最近ではほとんど参戦していない。

私は、意外に思われるかもしれないけれど、高校まで数学・物理を嫌っていたし、成績も実際悪かった。京大模試で国語は全国1番を取ったこともあるけど、数学は平均に達したことさえなかったような気がする。数学・物理と仲直りしたのは、大学に入ってファインマン物理学を読んでからだ。今では数学は嫌いではないし、研究にも使っているくらいだ。それでもやはり、ラボの勉強会に来る生粋の数学好きとは感覚が少し違うなあと思う。

この違いを一方通行の文章だけでちゃんと伝えるのは難しい。あえて一言でいうと、自分のは「博物学的」な関心なのだ。興味深い数学的現象や美しい定理、意外なところが意外なところとつながって共通の原理で説明がつくという驚きを、アタマの中にコレクションしていくのが楽しい。それから、一見複雑な問題がパワフルな手法によって簡単に解けるのも愉快だ。時に応じて、それを他人に開陳するのも楽しい。しかし、新しい手法・自分だけのやり方を試行錯誤しつつ見つけるのには、あまり興味がない。そんなの何が楽しいんだ? と言われるかもしれないけれど、私は私なりに楽しんでいるつもりである。

私は小学生のころ、親に公文式をやらされていて、漸化式やら何やらが終わって、微分に入ったあたりまで進んでやめたと記憶している。中学受験には、連立方程式や漸化式を駆使して挑んだ。こういうのを使うことを禁止してつるかめ算とか面積図を使って解くことを要求する学校もあるとは聞くが、私の受けたところは、数学的に正しければ何をしても構わないというポリシーだった。個人的には、それは妥当だと思う。より普遍的に解ける方法があるのに、あえて知らないフリをして、問題ごとに固有の方法を編み出して解くことを強要するのはナンセンスだと感じる。しかし、トリッキーな図を考えて出して問題を解くほうがある種の「創意」を測るには適しているだろうし、そういうのを楽しめるタイプの人間こそ、数学好きなのだと思う。

別の喩えとして数独を挙げよう。初中級の問題まではタテ・ヨコ・ブロック内に1-9という条件だけで埋まるのだが、上級レベルの問題になるとバックトラックが必要不可欠になる。前者を解くのは楽しい。心理的盲点で見落としていたマス目が埋まることに気づいた瞬間は爽快だ。一方、後者になると「もうコンピュータにやらせればいいじゃないか」という気分になる。ところが、後者こそ面白い、前者は単なる作業じゃないかという人がいて、そういうものかねぇと思う。将棋も見るのは好きだし、妙手の説明を聞いて「ここでこうすると、こうなってああなって、最終的に有利になるのです」と言われると「うまいな!」と思うのだが、自分でああだこうだ考えるのは、すぐ疲れて放り投げてしまう。

私はワーキングメモリが平均よりも狭いらしい。怪しげなWeb上のテストに基づいた自己診断ではない。心理学・精神医学で使われる WAIS というテスト(数唱・逆唱)の結果である。小学校の頃、学年全体で受けさせられた知能テストでも、短期記憶の課題(浜辺のイラストを数分見せられて、合図と共にページを繰ると、「絵にヨットはいくつありましたか」等と質問が書いてあった)が全くできなかったのを覚えている。さきほど、頭の中でごちゃごちゃ考えるのが嫌いと書いたが、そのせいかもしれない。

とはいえ、オープンソース・アプリケーションのコードをちょこちょこっと hack して目的を達するときや、知り合いがうまく動かないコードに困っているのを調査するとき、まさに「自分で考えること」を楽しんでいるのである。例えば、あるOSSメーリングリストで「○○がやりたい」と書いてる人がいた。開発者は「ごめん、それは本体に手を入れないと、ユーザ側からは無理だ」と言っていたが、なんとなくできそうな気がしたので、あちこちつつき回したところ、本体はそのままでもユーザ側の拡張スクリプトだけで解決できた。開発者側から「すげえ!」と褒めてもらって、実に愉快な思いをしたのだが、こういうのは試行錯誤も含めてすごく楽しい。

私は今、「自分が知ることの楽しみ」というごく個人的な体験と、「世界中で誰も知らない、新しいことを発見しつづけなければならない」という社会的な要請に、どう折り合いをつけるのかで多いに悩んでいるのだが、上に書いた2例の違いを十分内省すれば、なにか見えてくるかもしれないなと思っている。