はじめに
現代のコンピューターハードウェアは非常に高速であり、基本的に開発者はパフォーマンスを気にしなくて構わない、と考える人は多い。実際、Douglas Crockford は本書への執筆依頼を次の理由で断った:
もし私が一つの章を書くとすれば、それは「アンチパフォーマンス」の章となるだろう: パフォーマンスを向上させるために費やされる労力は多くが無駄になる。あなたが求めるのはそんな文章ではないと思う。
Donald Knuth も同様の意見を 30 年前に表明している:
小さな効率向上は、おそらくその 97% ほどは、忘れるべきである: 早すぎる最適化は諸悪の根源だ。
しかし、わずかな電源とメモリしか持たない携帯機器用ソフトウェアから、テラバイト単位のデータを処理するデータ解析まで、コードを速く、データ構造を小さく、応答時間を短くする必要があるプロジェクトに取り組む開発者は存在する。一方で、オペレーティングシステム、ネットワーク、コンピューターグラフィックス、データベースの基礎を解説する数百冊の教科書では、うんざりするほど遅い実際のアプリケーションが抱える問題を特定・解決する方法が示されることは (あったとしても) ほとんどない。
本書は、そういったギャップを埋めることを目標としたケーススタディ集である。各章は既存のシステムの高速化、あるいは最初から高速なシステムの設計に取り組んだ実際の開発者によって執筆されている。彼らに課されたのはソフトウェアとパフォーマンスに関する多種多様な課題であるものの、彼らは共通して大規模なアプリケーションの異なる部分がいつどのように協調動作するかに関する深い理解を持っていた。本書が ── 前作 The Architecture of Open Source Applications と同じように ── 専門家の肩からの視点を提供し、読者を開発者として成長させることを私たちは願っている。
コントリビューター
- Tavish Armstrong (編集)
- Tavish はコンコルディア大学でソフトウェアエンジニアリングを学んでおり、2014 年春に卒業を予定している。http://tavisharmstrong.com が彼のオンラインホームである。
- Micael Sonyman (Warp)
- Michael は FP Complete の主任ソフトウェアエンジニアである。彼はロバストで高パフォーマンスなウェブアプリケーションを構築するためのパーツを提供するウェブフレームワーク Yesod の考案者かつ主任開発者でもある。大学で保険数理学を学んだ経験があり、米国の自動車保険業界や住宅保険業界で巨大なデータセットを解析する仕事をしていたことがある。
- Kazu Yamamoto (Warp)
- Kazu は IIJ Innovation Institute の上級研究員である。彼はオープンソースソフトウェアに 20 年近く取り組んできた。彼の作成したソフトウェアには Mew, KAME, Firemacs, mighty などがある。
- Andreas Voellmy (Warp)
- Andreas はイェール大学の Ph.D. 候補生である。ソフトウェア定義ネットワークの研究に Haskell を利用し、Haskell を使ってルーターを制御する nettle-openflow といったオープンソースの Haskell パッケージをいくつか公開している。Andreas は GHC プロジェクトのコントリビューターでもあり、GHC の IO マネージャのメンテナを務めている。
- Ilya Grigorik (Chrome)
- Ilya はウェブパフォーマンスエンジニア/デベロッパであり、Google の Make The Web Fast チームに在籍している。
- Evan Martin (Ninja)
- Evan はプログラマーとして 9 年間 Google に勤めている。Google に所属する以前の経歴として、彼はコンピューターサイエンスと言語学の学位を持つ。彼は多くのマイナーなフリーソフトウェアプロジェクト、そしていくつかの有名なプロジェクト (例えば LiveJournal) に取り組んでいる。彼のウェブサイトは http://neugierig.org である。
- Bryce Howard (モバイルネットワーク)
- Bryce はプログラムの高速化に強い関心を持つソフトウェア技術者である。彼はソフトウェア業界で 15 年以上の経験があり、読者が聞いたことがないであろう様々なスタートアップで働いてきた。現在は「物書き」業に挑戦中であり、O'Reilly Associates で出版予定の Amazon Web Services に関する本を執筆している。
- Kyle Huey (MemShrink)
- Kyle は Mozilla Corporation でウェブブラウザ Firefox のレンダリングエンジン Gecko に取り組んでいる。彼はサンフランシスコに引っ越す前にフロリダ大学で数学の学士号を取得している。彼のブログは http://blog.kylehuey.com である。
- Clint Talbert (Talos)
- Clint は最初ボランティアとして、後に従業員として Mozilla プロジェクトに 10 年近く関わってきた。彼は現在 Automation and Tools チームの主任であり、このチームは自動化できる全ての作業を自動化することを担当する。彼は自動化マシンからアイドルサイクルを排除することを個人的なモットーとしている。彼が経験したオープンソースの世界の冒険や彼の執筆した書籍は http://clinttalbert.com から確認できる。
- Joel Maher (Talos)
- Joel は自動化ソフトウェアに関する 15 年以上の経験を持つ。直近の 5 年は Mozilla で働いており、Automation and Tools を携帯電話に拡張する作業を行っている。また、Talos の所有権を引き継ぎ、テストの拡張やレグレッション検出・信頼性の改善に取り組んでいる。自身が手掛けた自動化が実行されている間、Joel は人生における新しい課題に挑戦している。彼が体験した自動化に関する冒険は https://elvis314.wordpress.com から確認できる。
- Audrey Tang (EtherCalc)
-
Audrey は台湾に住む独学のプログラマー・翻訳家であり、現在 Socialtext で「Untitled Page」という役職に付いている。また、Apple ではローカライゼーションとリリースエンジニアリングに関わっている。Audrey は世界初の実働する Perl 6 実装を作成した Pugs プロジェクトの立ち上げと指揮を担当した。Haskell, Perl 5, Perl 6 の言語設計委員会のメンバーであり、CPAN と Hackage に大量のコントリビューションを行っている。Andrey の Twitter は
@audreyt
からフォローできる。 - C. Titus Brown (khmer)
- Titus は進化的モデリング、物理気象学、発生生物学、遺伝学、バイオインフォマティクスの経験を持つ。彼は現在ミシガン州立大学の准教授であり、そこでの研究対象は科学ソフトウェアの再現性とメンテナンス性といった新しい分野に広がっている。また、彼は Python Software Foundation のメンバーでもある。彼のブログは http://ivory.idyll.org である。
- Eric McDonald (khmer)
- Eric McDonald は科学ソフトウェア開発者であり、高パフォーマンスコンピューティング (HPC) に特に興味を持っている。彼は過去 13 年間の多くを HPC の分野で過ごした。物理学の様々な分野の科学者と関わった経験から、彼は現在バイオインフォマティクス分野の科学者の手助けを行っている。彼はコンピューターサイエンス、数学、物理学の学位を持つ。Eric は 90 年代中ごろから FOSS のファンである。
- Douglas C. Schmidt (DAnCE)
- Dr. Douglas C. Schmidt はヴァンダービルト大学でコンピューターサイエンスの教授、コンピューターサイエンス・エンジニアプログラムの担当主任、Institute at Software Integrated Systems (ISIS) の上級研究員を全て務めている。Douglas はソフトウェアに関連する広範な分野に関する 10 冊の書籍と 500 本以上の技術論文を執筆しており、過去 20 年の間に ACE, TAO, CIAO, CoSMIC の開発を指揮した。
- Aniruddha Gokhale (DAnCE)
- Dr. Aniruddha S. Gokhale はヴァンダービルト大学で電気工学・コンピューターサイエンス学科の准教授と Institute for Software Integrated Systems (ISIS) の上級研究員の両方を務めている。彼の名前で公開された技術記事は 140 本以上あり、彼の現在の研究はクラウドコンピューティングとサイバー物理システムで新たに発生している課題への新たな解決策を開発することである。
- William R. Otte (DAnCE)
- Dr. William R. Otte はヴァンダービルト大学の Institute for Software Integrated Systems (ISIS) で研究員を務めている。彼はオープンソースの分散システム、リアルタイムシステム、そして組み込みシステムに関する 10 年近い開発経験を持ち、DARPA, NASA, Northrup Grumman, Lockheed-Martin といった政府機関や企業をパートナーとして開発を行ってきた。こういった研究の進歩に関する大量の技術記事と報告書を執筆しており、コンポーネントミドルウェアのオープン規格の策定作業にも参加している。
- Manik Surtani (Infinispan)
- Manik は JBoss (Red Hat のミドルウェア部局) でコア R&D エンジニアを務める。彼は Infinispan プロジェクトの初期メンバーであり、JBoss Data Grid のプラットフォーム技術者でもある。彼は JSR 347 (Data Grids for the Java Platform) という仕様の策定を主導し、JSR 107 (Temporary caching for Java) の専門家グループでは Red Hat の代表者を務める。彼は現在クラウド、クラウドコンピューティング、ビッグデータ、NoSQL、自律システム、そして高可用性コンピューティングに興味を持っている。
- Arseny Kapoulkine (pugixml)
-
Arseny はキャリア全体を通じてゲームグラフィックスと低レベルシステムのプログラミングに関わってきた。開発に参加したタイトルは小規模で目立たないものから FIFA Soccer といった AAA ブロックバスターまで多岐にわたる。彼は遅いものを速く、そして速いものをさらに速くすることに楽しみを見出している。彼には
mail@zeuxcg.org
または Twitter (@zeuxcg
) からコンタクトできる。 - Arjan Scherpenisse (Zotonic)
- Arjan は Zotonic に関わる主要技術者の一人であり、他にも数十のプロジェクト (ほとんどは Zotonic と Erlang に関するもの) に同時に取り組んでいる。Arjan はバックエンドとフロントエンドの Erlang プロジェクトの橋渡し役となることが多い。スケーラビリティとパフォーマンスの問題に取り組んでいないとき、彼はよくクリエイティブなプロジェクトに関わっている。Arjan はイベントの常連登壇者である。
- Marc Worrell (Zotonic)
- Marc は Erlang コミュニティで高く評価されるメンバーの一人であり、Zotonic プロジェクトの考案者である。彼は大規模な Erlang プロジェクトのコンサルタント、Zotonic の開発者、Maximonster の CTO、MaxClass と LearnStone の創設者として時間を使っている。
謝辞
本書は Amy Brown と Greg Wilson の助けがなければ存在しなかった。彼らは本書の編集を私に提案し、それができると私に納得させた。初期の編集に手を貸した Tony Arkles にも感謝している。また、技術的レビューを行った次の人物にも感謝する:
- Colin Morris
- Corey Chivers
- Greg Wilson
- Julia Evans
- Kamal Marhubi
- Kim Moir
- Laurie MacDougall Sookraj
- Logan Smyth
- Monica Dinculescu
- Nikita Pchelin
- Natalie Black
- Pierre-Antoine Lafayette
次に示す少数精鋭のコピーエディタと協力者がいなければ、本書が 2010 年代に公開されることはなかった:
- Adam Fletcher
- Amy Brown
- Danielle Pham
- Erik Habbinga
- Jeff Schwab
- Jessica McKellar
- Michael Baker
- Natalie Black
- Alexandra Phillips
- Peter Rood
本書のビルド、画像作成、組版に関する助力に対して Amy Brown, Bruno Kinoshita, Danielle Pham に特別な感謝を捧げる。
本の編集という難しいタスクも、心強い友人がいれば楽になる。Natalie Black, Julia Evans, Kamal Marhubi はずっと熱心で忍耐強かった。
コントリビュート
本書を作成するために数十人のボランティアが熱心に働いたものの、まだすべきことは多くある。謝りを報告したり、文章を他の言語に翻訳したり、他のオープンソースシステムの説明を執筆したりすることで私たちに手を貸すことができる。本書に関わりたい場合は、gvwilson@third-bit.com
から私たちに連絡してほしい。
その他
[英語版の] 表紙のフォントは Jos Buivenga が作成し exljbris Font Foundry が所有する Museo である。本文フォントは TEXGyre Termes、見出しフォントは TEXGyre Heros であり、この二つのフォントは Bogusław Jackowski と Janusz M. Nowacki によって作成された。コードフォントは Raph Levien が作成した Inconsolata である。
表紙の写真はウィーンの聖シュテファン大聖堂に以前あった塔時計である。この塔時計は現在ウィーン時計博物館で展示されている。写真は Michelle Enemark によって撮られ、表紙は Amy Brown によってデザインされた。
本書は (表紙を除いて) オープンソースソフトウェアで作成された。LaTeX, Pandoc, Python, Calibre (ebook-convert) といったプログラムは特に有用だった。