計算機について

僕の専門は計算機数論である. 数論はいいとして「計算機はどうやって勉強したのですか?」と聞かれることが割とある. ということで, 計算機とのなれそめを書いてみることにする.

計算機に最初に興味をもったのは僕が3歳のときである. 福岡県に住んでいた僕は, たまの休日に親と博多駅のレストラン「シェスタ」に行くのが大きな楽しみだった. 出来上がりを待ちながら, 食券の隅に印字された4桁の数字を加減乗除して10にする遊びをしていた記憶がある(数の図鑑を読んでいたので, 簡単な四則演算はこのときすでに出来た). このレストランの隣は事務用品売り場になっていて, 業務用の OA 機器が数多く並んでいた. そんなある日, ショーケースに置かれていた業務用の電卓に一目惚れした. メーカー名は忘れてしまったが, ミニレジのようなもので銀行員や簿記事務が使うようなプロ向けの電卓である. 緑色の光で表示されるデジタル数字が格好よくてたまらず, ともかくこれを買ってほしいと親にねだり続けた. 親は町の美容室を営んでおり, 店のレジでお会計ごっこをし続けた結果レジを故障させ「破壊王子」の名を欲しいままにした前科があるので, ならばと折れてくれたのか数ヶ月の交渉の末にその電卓を買ってもらった. 確か8,000円くらいしたと思う. これを書いているのは娘がちょうど3歳になったばかりなのだが, いま娘に「プロ向け電卓買ってくれ」と言われて即決できるかと言われると微妙である(どうでもいいが今年の誕生日プレゼントは メルちゃん になった. これを Dr. Grip で有名なあの文具メーカー・パイロットインキが作っていることを知って腰が抜けるほど驚いた). この電卓は MR+ メモリ, つまり前の計算を記憶させる機能や, 税率の変更ボタンなどいろいろなオプションがついていて, 夢中になっていろいろ実験をした. いま思えば, これが僕の数学者としての原点である.

いわゆる「パーソナルコンピュータ」を初めて触ったのは中学1年のときである. 家には PC はなかったが, 部活でパソコン部に入ったため学校の PC が使えた. 確か IBM Aptiva E で, OS は Windows 95 だったと思う. 現在最新の Windows は10なので, 85世代も先取りしていたのかと思うかもしれないがそうではない(そんなこと思う人はいない). PC 室のマシンはすべて一括管理されていたので, OS の起動を2回繰り返さないと立ち上がらない仕様だった. 起動だけで5,6分はかかるので, いかに休み時間に早めに起動させるかが重要だった. ここで人生初のプログラミング言語 BASIC を学んだが, 結局テトリスもどきを作って飽きてしまった.

もっと PC を勉強したいと思い, 少し貯めていたお小遣い(と親からの有難い援助)で中学2年生のときにマイ PC を買った. これははっきりと覚えていて Compaq Presario 2294 である. CPU は AMD K6-2 の 333MHz(≒ 0.3 GHz), ハードディスクは 4GB(TB ではない!)であった. 拡張性に乏しい廉価機種だったが, それでもいろいろなことを学んだ. グラフィックボードが貧弱であったにも関わらずむりやり Sega Rally 2 を入れて遊んだ. 今ではフレームレート 144Hz は当たり前で 60Hz ですらもたつくと言われる始末だが, 当時は処理落ちで毎秒10コマくらいしか動かず, 脳内で 144Hz に補間して遊ぶという高等テクニックを駆使していた. 自宅にはもちろんインターネット回線などないので, 学校の PC でこっそり3.5インチフロッピーディスクに好きなブログ記事を保存し, 家でゆっくり読んでいた. もう時効だと思うので許して欲しい. Compaq はそれから数年して Hewlett-Packard に買収され, ブランド名も消滅した.

中学3年のときにパソコン部の部長に任命された. 運良く予算が潤沢にあり, 別室の特別機1台を自由に選定してよいと言われ Sony Vaio PCV シリーズ(機種名は忘れた)を入れた. 3DCG ソフトウェア Shade をこのとき勉強したが, 後に CREST のポスドクとして映像数学の研究に従事した際 Autodesk Maya を使うときに経験が生きて助かった. ちなみに顧問の先生がいないときはこっそり Flight Simulator をインストールして遊んでいた. もう時効だと思うので許(以下略).

プログラミングはしばらく中断していたが, 大学生になってからC言語を勉強した. 学部2年の「計算機数学概論」で, 精度保証付き数値計算がご専門の長藤かおり先生(現・独 Karlsruhe 工科大学講師)に教わった. C言語の初歩から始めて, 数値計算の基礎(Newton 法や Runge-Kutta 法など)を学んだ. 現任校では学部3年の「アルゴリズムA」でC言語を教えているが, このときの資料がとても役に立っている.

計算機数論を目指す転機となった出来事は2つある. 1つは学部4年のときで, 田口雄一郎先生(現・東京工業大学教授)のゼミでモジュラー形式の勉強をしていた. Jean-Pierre Serre「数論講義」の Chapter 7 が終わってから「これなんかどうですか?」と薦められたのが, 当時出版されたばかりの William Stein "Modular forms: a computational approach" だった. 著者の Stein 氏は当時 Sage という数式処理システムを開発しており, Python をベースとして多種多様な数論の計算を可能にしていた. この頃は日本で Sage を深く習得している数学者は少なかったことと, バグが大量にあったこともあり, 何をやっても「新しい発見」で面白かった. 当時 Microsoft と権利関係でもめたのか, Windows で動くバイナリがなかったことも大きいかもしれない. また田口先生は計算機がご専門ではないので, すべて自力で調べて実装した経験が今でも活きている. こうして数学業界だけでなく, オープンソース系の方にも「Sage の人」として覚えてもらえたことは, 計算機コネクションが広くできたことも含めてとても役立った. とくに濱田龍義先生(現・日本大学教授)と木村巌先生(現・富山大学准教授)にはもう10年以上もいろいろな所でお世話になっている. ちなみに濱田先生の前任校は福岡大学で, その附属高校に通っていたため, 高校2年のときに大学に訪問して Ruby を教えてもらったのが濱田先生との最初の出会いなのだが, いつも「おぼえてない」と言われる(そりゃそうだ).

もう1つは修士1年のときである. Sage でいろいろ計算する傍らで Pari/GPMathematica なども使いこなせるようになったが, パフォーマンス(特に速度)の面で不満も多かった. そんなときに田口先生から「最近見た博士論文だけど, 参考になるかも」と Haluk Sengun さん(現・英 Sheffield 大学講師)の論文をもらった. これはある種のモジュラー形式をコホモロジー類としてとらえると計算機でバリバリ扱えるという類のもので, 数式処理システム Magma を使って実装されており, ベンチマーク(計算時間)も段違いに速かった. ただ Magma は Sage や Pari/GP などと違って有償ソフトウェアであり(Mathematica は大学のライセンスが使えた), 1台入れるのに15万円くらいすると聞いて自腹では無理だと断念した. ところが, 計算機相談員(PC 関連の学内アルバイト)の会議で担当の井口修一先生(現・福岡工業大学准教授)から「予算余ってるから入れたいソフトウェアがあれば検討する」と言われ, Magma を入れてほしいと猛アタックした. 最初は利用人口が見込めないということで難色を示されたのだが, せっかくのチャンスを無駄にできない!と半ばストーカーのようにお願いをした記憶がある(井口先生どうもすみません). かくして無事、2009年初頭に Magma が導入された. これ以来, 僕の研究で使う数式処理システムの95%は Magma である. Magma のマニュアルは数千ページあるが, だいたいどの計算についてどのあたりに書かれているか分かるくらいには使い込んだ. Magma との出会いがなければ, 間違いなく僕は数学者として生きていないと思う. ちなみにその後 Magma は暗号系, とくに高木剛先生(現・東京大学教授)のチームに広く活用してもらい, ユーザ数の拡大と Magma の知名度向上に貢献いただいた. あと Magma を使うきっかけとなった Sengun さんは, 僕が初めて英文メイルを送った海外研究者である. 今では日本語と同じくらいのスピードで英文メイルを書いているが, 当時は1通送るのに半日くらい使っていた.

これは余談だが, 僕は2010年に初めて Mac を使い始め, 2015年には完全な Macker になった. これも Magma を快適に使いたいという動機が大きい. Linux はサーバ管理の業務で仕方なく Ubuntu, Fedora, RedHat は使っていたが, その程度である. もう6年以上 Windows PC を持っていないせいで, 現在ではコントロールパネルがどこにあるのかも知らない.

かなり偏った回顧録になってしまったが, こう見てみると計算機について誰かに教わった経験はほとんどなく, おおよそ独学で身につけたと思う. タッチタイピングも自己流なので, タイピングの速度はそれなりに速いがブラインドタッチは今でもできない. また結局のところ, プログラミングは数学以上に「教わるだけでは身に付かず, 自分でいろいろ失敗を重ねないと伸びない」学問である. 僕がプログラミング系の講義を担当するとき, 講義と演習が分かれている科目であっても講義中に演習を入れる(なので講義40分+演習140分くらいのバランスになる)のはそのためである.


Contact: s-yokoyama [at] tmu.ac.jp