ハッカーと研究者
千葉 滋(ちば しげる)・東京工業大学
オープンソースマガジン、ハッカー養成塾!、ソフトバンククリエーティブ、pp.102-103、July 2006.
大学の教員が本業ですが、JBoss のコミッターとして Javassist の保守開発にあたったりもしています。現在、本業ではアスペクト指向言語の研究をしています。
首藤さんにアカデミアの世界に住むハッカーと紹介された千葉です。そういう紹介をした首藤さんの意図は、アカデミアとハッカーというお題で書いたらどうかということなのでしょう。そういうわけで、今回はアカデミアの世界のハックについてお話ししてみようと思います。
ハッカーであるとは
そもそもハッカーである、というのはとても個人的なことなような気がします。ハッカーというのは、「あの人はハッカーである」と周囲に認められてなるものではないと思うのです。ハッカーというのは気質みたいなもので、プログラムを書くのが好きでたまらなくて、なおかつ自分が書いたプログラムや自分が発見したテクニックを周囲の人に教えるのが大好きならば、それだけで、その人は立派なハッカーであるように思います。プログラムを書くのが上手か下手か、知識が人より多いか少ないかは、あまり本質的なことではないはずです。
ですからハックを楽しめることが大切で、よく言われるマナーやしきたりは、知っているにこしたことはありませんが、あえて言うなら、どうでもよいことだと思います。ましてやオープンソースコミュニティーに貢献するとか、しないとかは、(もちろん貢献できれば一層よいと思いますが)ハッカーであるか否かには無関係でしょう。
何を作るかも自由だと思います。私がコンピュータに初めてさわったのは、中学生のときに学校の先生がもっていたものに触らせてもらったときですが、それ以来、変なソフトをだいぶ書いたように思います。高校生のときは、6809 というプロセッサを積んだ某社のパソコンで、ワープロを作っていました。未完に終わりましたが。なにせそのパソコンには漢字フォントがなく、まず友達が持っていた某社のパソコンから内緒で漢字フォントを磁気テープ(というかオーディオカセットですが)でコピーして(もう時効ですよね)、それを使って漢字を表示するルーチンから書かなければならなかったので、完成するわけがありません。かな漢字変換も自分で書かなければいけませんし。もちろん全部アセンブラです。
当時でも、お金さえ出せばワープロが動くパソコンが買えたので、ワープロを自分で書くという作業は、単なる遊びだったのですが、こういうのも立派なハックだったと思うのです(手前味噌ですが)。山登りみたいなものですね。 その作業自体が楽しい。
作りたいものを好きに作る
もし、この記事を読んでいるあなたが、何か自分で面白いと思って作っているソフトがあったら、それがなんであっても是非、作り続けてほしいと思います。周囲の人がほめてくれなくても、自分が面白いと思ったら作る。それがハックだと思います。そうこうするうちに、きっと絶対に作るべきだ、というソフトに巡り会います。巡り会ってから、プログラミングの勉強を始めても遅いのです。
ちなみに高校時代の私のワープロ作りは未完に終わったのですが、その後これは形をかえて Nitemacs という Emacs 風のテキストエディタとして結実しました。これは NEC PC-9801版とその後の Macintosh 版と続き、当時はそれなりに多くの人に使ってもらえたので、ワープロ作りもまったく無駄な遊びというわけではなかったようです。
私は今でもあいかわらず無駄なソフトを作り続けています。例えばディレクトリ間の同期やバックアップをとるとき、普通は rsync や unison を使うのだと思いますが、私は自分で個人的に書いたソフトを使っています。そんな大事な処理に片手間に自分で書いたソフトを使うなんて自信家ですね、とからかわれますが、単に自分でも書いてみたかったのです。書いた以上は誰かが使わないと無駄になるので、しかたなく(?)自分で使っています。でも自分で作ったものなので、ちょこちょこと便利にカスタマイズ(ユーザが1人しかいないのでカスタマイズというのも変ですが)できるのはよい点です。
アカデミックな世界に住むということ
ハックのこういう知的好奇心にかられた遊びとしての側面は、アカデミックな研究の一番純粋な原動力と同じです。ですからアカデミアの世界は、ハックに比較的好意的だと思います。
ハックに情熱を傾けていても大目に見てくれるのがアカデミックな世界のよいところですが、職業研究者になってしまうと、残念ながら、そうハック(遊び)ばかりしているわけにはいかないのも事実です。4月号のハッカー養成塾で太田一樹さんが、「アカデミックな世界では論文を重視し、実装を軽視する傾向がある」と書いていました。実装を軽視するなんてことはありませんが、自由に好きなソフトを開発できるわけでもありません。
アカデミックな世界、というかコンピュータ科学の世界での研究とは、基本的にはもの作りではなくて、ものを作るための新しい方法を見いだすことです。例えばソフトウェアの研究では、単に何か新しいソフトを作っただけでは評価されません。残念ながらハッキングと研究とは、少々異なるのです。何をすると研究になるのかというと、将来、似たようなソフトウェアを作る人が参考にするべき汎用的なアイデアなり知見を発見すれば研究になります。
そういうアイデアや知見は、見る人が見ればソースを読んだだけでわかるかもしれませんが、文章の形にした方が理解しやすいので、論文をかくことが研究者には求められるのです。論文も「こういうソフトを作りました」というようなマニュアルか解説記事のような内容ではだめで、どういうアイデアに基づいてそのソフトは設計されているのか、どういうアイデアがどういう機能の強化に役立っているのか、などを明らかにしなければなりません。(この辺りは、作品そのもので評価される芸術の世界とは大きく異なります。コンピュータ科学でもユーザインタフェースの研究のように、作品そのものをもっと評価しようという動きも最近はありますが)。
一方、論文さえ書けば実装しなくてよいかというと、もちろんそんなことはありません。論文に書かれたアイデアを実現した実装があれば、アイデアの正しさの証拠になりますから、高く評価されます。例えば Java 仮想機械 (VM) の高速化技法を考案したとして、商用の VM を改造してそのアイデアを実現し、本当に速くなることを示せば、高く評価されるでしょう。逆に実装がまったくなかったり、あるいは自分で開発したおもちゃのような VM 上に実装しただけでは、評価されません。本格的な VM でもそのアイデアが正しく働くか明らかではないからです。
研究の過程で実装したソフトのソースコードは、ライセンスの関係もあるので必ずしも公開されるとは限りません。商用コードが元になっている場合は、通常公開できませんし、外部から研究資金を得ている場合は、研究資金の提供元の許可をとらないと公開できません。最近は国内外問わず、ほとんどの場合、ソースコードも公開されているようですが。
ハックか研究か
研究者は研究しなければならないので、アカデミックな研究の一環として開発できるソフトは、結局、論文が書けるソフトということになります。仮に人気のオープンソースソフトを開発しても、それだけでは研究にはならないのです。
私が数年前に開発して、今では JBoss AS を始めとする少なからぬソフトの基幹部品になっている Javassist も、もともとは研究の一環として開発したソフトです。Javassist は要はコンパイル済みの Java プログラムをバイナリのレベルで編集するためのライブラリなのですが、研究としては、こういうシステムを作る場合は一般的にどう設計すればよいのか、ということを考えて論文を書いたりしていました。
ただ正直にいうと、Javassist を作り始めた一番の動機は、先行して開発されたシステムである Apache BCEL を見て、自分でもそういうライブラリを書いてみたい(ハックしたい)と思ったことかもしれません。研究の一環です、というのは仕事中にハックする言い訳だったと言えなくもありません(そういえば Unix の初期の版は、文書処理システムを研究開発するという名目で作られていたんでしたっけ。今も昔も同じですね。)
でも結局、書いた論文が宣伝になって、世界中でユーザが増え、まわりまわって JBoss projectによる Javassist の採用につながったので、何がどう幸いするかわかりません。読者の中にもし研究者をめざしている人がいたら、研究の中にうまくハックする場所を見つけるようにするといいかもしれません。そうすれば楽しく仕事(研究)ができるようになります。
Eat when hungry,
Drink when Thirsty,
Hack whenever! (出典不明)
次回は
自身もオープンソースの開発者であるだけでなく、Seasar ファウンデーションの代表理事として、コミュニティの発展に活躍している栗原傑享さんにお願いしたいと思います。