Muranaga's Golf

46歳でゴルフを始めて10数年。シニアゴルファーが上達をめざして苦労する日々をつづります

計算機システム研究論文の速読法

「『Google を支える技術』は大規模分散システムのガイドブック」というエントリーが、ソーシャルブックマークはてブ」に多数登録され、びっくりするほどのアクセスがあった。Google(グーグル)の技術競争力の源泉である分散システムを勉強したいという人がたくさんいるということだと思う。せっかくなので、僕がシステム系の論文にあたる時に実践しているちょっとした速読のコツを書いておくことにする。

Google の分散システムに関わる論文の多くは、計算機のシステムソフトウェアの設計・実装に関するもので、この分野では最高峰の学会・カンファレンスである SOSP (ACM Symposium on Operating Systems Principles)OSDI (USENIX Symposium on Operating Systems Design and Implementation) にて発表されている。システムの研究者であれば必ずウォッチすべきカンファレンスであり、ここに参加する人たちが世界のシステムソフトウェア研究を支えていると言っても過言ではない。したがってシステム分野の研究開発動向を見る際に最も注視すべき論文が集まっていると言える。しかも厳しい採択率をくぐり抜けてきたものばかりなので、質が高く「外れ」がない。

これらの論文集は、計算機システム研究を始めるにあたって莫大な数の論文のサーベイ (survey) を行うときには必ず目を通すことになるし、一方、現在の僕のように技術マネジメントを行う者にとっても、これらの質の高い研究をざっと眺めることで、「どういうテーマが議論されているのか」を効率よく把握し、「今後、どういうところに重点が置かれて技術が発展していくのか」を考える機会になる。(一点、留意すべきは、カンファレンスの論文なので、1年くらい前の研究内容であるということだ。最新の研究の進捗については、こういうカンファレンスに参加し、face-to-face で話をする必要がある。)

システム論文を効率よく眺めるために、僕は以下の順番で論文にざっと目を通している。

  1. Title
    • 読み手を惹きつけるために、著者は簡潔に研究内容を表すべく題名には相当気をつけている。
  2. Abstract
    • 要約である。著者の言いたいことがまとめられており、ここで自分が読むべき論文か、だいたい判断することができる。
  3. Conclusion
    • 結論。新しいアイディアがどういう結果をもたらし、今後の研究方向(未解決の問題)が提示される。
  4. Introduction
    • 要約と結論を読んで、読む価値があると思ったら導入部に目を通す。ここは研究の背景・解決したい課題が提示され、アイディアのポイントが示される。ここまで読むことにより概念的にはほぼ論文の主張したいことはわかったことになる。
  5. Related Work
    • 著者がアイディアの独創性を主張する部分である。システム系では画期的なコンセプトはそう簡単には出ない。ちょっとした差異かもしれないが、その差異が追求すべき技術の方向性の一端を示している。またここで参照される他の研究論文が、自分が今後目を通すべき論文の候補であると同時に、もし自分が既に読んでいる、あるいは著名な論文であるならば、今読んでいる論文のアイディアがそれらの技術を発展させたものであることがわかる。著者名も要注意。その分野のキーマンたちである。

上記のポイントを把握すれば、この論文に書かれた研究アイディアの概要と、その分野における位置づけがわかる。自分にとって重要であり、興味深いアイディアだと思えるなら、さらに詳細な内容に突っ込んでいけばよい。ここで初めて「精読」フェーズとなる。

  • Design and Implmentation
    • 言うまでもなくアイディアを詳述した論文の本文 (body) である。
  • Lessons Learned / Experiences / Applications
    • 定性評価にあたる。アイディアがどういう応用をされたか。実際に使われているのか。それとも単なるプロトタイプに留まっているのか。SOSP や OSDI レベルになると、たとえ少数のユーザであっても、半年以上実用に供されていなければ、「逸話」(anecdotal) だとされ、信頼できるデータとはみなされない。Google 論文の評価が高いのは大規模分散の実システムであって、サービス提供のプラットフォームとして現に動き続けているからである。
  • Perfomance Evaluation
    • 定量評価である。これがしっかりとフェアになされていなければ決して採択されない。注目すべきはトレードオフである。どんなによいアイディアであっても、必ず何かを犠牲にして成り立っている。この論文のアイディアは何を重点的に解決して性能を向上させたのか?その代わりに何を失っているのか?よく考察すべきである。

計算機科学(コンピュータ・サイエンス)の、特にシステム論文はほぼ上記の章で構成されるので、ここで述べた「速読法」はかなり広範囲に応用できるのではないかと思う。そしてとにかく多く読むこと。多読すればするほど、自分の中に関連する研究アイディアやキーマンとなる研究者の名前が蓄積され、ネットワーク化される。そうすれば論文を一目見ただけで、読む価値があるかどうかがわかるようになり、さらに速く読めるようになる。英語そのものにも慣れるので、一挙両得である。

10数年前、現役の分散システム研究者であった時の方法を紹介した。今はインターネットの発達により、最新の研究アイディアは Web サイトでどんどん入手できる。その数は莫大で質もさまざまなので、SOSP や OSDI で「よい研究・よい論文とはどういうものか」を知って、見る目を養っておくと、情報の取捨選択も効率的に行えるだろう。

現在、技術者を卒業して事業経営に携わる身になっても、最先端のアイディアを探るには、こういう研究論文をサーベイするのは有効な手法の一つだろうと考えている。しかしなかなかその時間をとれないのも事実であり、やはり現役の技術者たちから話を聞くほうが速い。その中にあって、 『Google を支える技術 巨大システムの内側の世界』には、久しぶりにオリジナルの論文に目を通してみようと刺激を受けた。

Google の論文の中では BigTable が比較的とっつき易いように感じる。Google File System ような低レイヤーのシステムではなく、より上位にあって Google AnalyticsGoogle Earth など実アプリケーションがイメージできるからである。Introduction や Conclusion によれば、設計・実装に 7人・年(推測するに 3人 * 2年強 )かかったそうである。さすがに技術者として錆び付いてしまったので、設計・実装 (Design and Implmentation) のところは今の僕には難しい。内容を理解するには 『Google を支える技術』は必須である。著者である西田氏の、技術スキルに支えられた要約力の賜物である。