大工仕事には高い技術が必要であり、その技術の向上に生涯をかけることもできます。しかし大工仕事は建築 (architecture) ではありません。誰かがピッチボードとマイタージョイントから目を離し、建物全体を設計しなければなりません。建物の設計に必要なのは手先の器用さと知識だけではなく、職人技が必要になります。
プログラミングにも高い技術が必要であり、その技術の向上に生涯をかけることもできます。しかし、プログラミングはソフトウェアアーキテクチャ (software architecture) ではありません。多くのプログラマーはプログラム全体に関する問題を何年もかけて考え、取り組みます。「このアプリケーションは拡張可能であるべきだろうか? もしそうだとしたら、プラグインのようなメカニズムを使ったスクリプトによるインターフェースがいいだろうか、それとも全く違った方法がいいだろうか?」 「クライアントですべきことは何で、何をサーバーにやらせるべきだろうか、いやそもそもこのアプリケーションに“クライアント・サーバー”モデルを使うべきなのだろうか?」 階段をどこに設置するかという問題が大工仕事とは関係ないように、こういった質問はプログラミングとは関係ありません。
建物の建築とソフトウェアのアーキテクチャには共通点が多くありますが、決定的な違いが一つあります。建築家は見習いの期間、およびキャリアを通じて何千という建築を勉強するのに対して、ほとんどのソフトウェア開発者が細部まで理解する大きなプログラムというのはごく少数なのです。さらに言えば、“理解している”にカウントされているのが自分で書いたソフトウェアであるということも少なくありません。彼らは歴史的に価値のある偉大なプログラムを目にすることもなければ、経験豊かな専門家によって書かれた、プログラムの設計に関する批評を読むこともありません。結果として、そのようなソフトウェア開発者は過去の成功から学ぶことができず、過去に人々が陥った誤りを繰り返してしまうのです。
この本で、私たちはこの状況を変えることを試みました。各章はオープンソースのアプリケーションのアーキテクチャを一つずつ説明します。つまり、各部分がどう対話するか、なぜそのようにしたのか、そして他の大きなプログラムの設計にも適用できそうな教訓は何か、です。説明を書いたのは、複雑なアプリケーションを数年、数十年に渡って (再) 設計してきた、そのソフトウェアを一番良く知っている人物です。説明されるアプリケーションは単純な描画ソフトウェアから、ウェブベースのスプレッドシート、コンパイラツールキット、数百万行の可視化パッケージまであります。またリリースから数年しかたっていないものもありますし、リリース三十周年が近づいているものもあります。これらの様々なソフトウェアの共通点は、開発者が熟考に熟考を重ねてそのソフトウェアを設計していること、そしてそのときに考えたことを快くあなたと共有してくれることです。彼らの文章を、あなたが楽しめることを願います。
- Eric P. Allman (sendmail)
Eric Allman は sendmail, syslog, trek の初期版の著者であり、Sendmail, Inc. の共同創業者です。彼はオープンソースソフトウェアをそのような名前が生まれる前、あるいはそのようなムーブメントが生まれるずっと前から書き続けています。彼は ACM Queue Editorial Review Board と Cal Performance Board of Trustees のメンバーです。ブログは http://www.neophilic.com/~eric です。
- Keith Bostic (Berkeley DB)
Keith はかつてカリフォルニア大学バークレー校のコンピューターシステム研究グループの一員であり、2.10BSD リリースではアーキテクトとして、4.4BSDとそれに関連するリリースでは主要開発者として開発に関わりました。彼は Unix コミュニティへの多大な貢献に対して USENIX Lifetime Achievement Award (“The Flame”) を受けており、さらに 4BSD をオープンソースでリリースしたことに対してカリフォルニア大学バークレー校から Distinguished Achievement Award を受けています。Keith はオープンソースの組み込みデータベースシステム Berkeley DB の初期バージョンの開発者の一人です。
- Amy Brown (編集)
Amy はワーテルロー大学で数学の学士号を取得し、それからソフトウェア業界で十年以上働いています。現在の彼女は本の執筆および編集を行っており、扱う本の中にはソフトウェアに関する本もあります。トロント在住であり、二人の子どもとかなり高齢のネコと共に暮らしています。
- C. Titus Brown (継続的インテグレーション)
Titus は進化モデル論、物理気象学、進化生物学、遺伝子学、バイオインフォマティクスを行ってきました。現在ミシガン州立大学の助教授であり、科学ソフトウェアの再現性や保守といった新しい分野へ関心を広げています。彼は Python Software Foundation のメンバーでもあり、ブログは http://ivory.idyll.org です。
- Roy Bryant (SnowFlock)
二十年にわたるソフトウェアアーキテクトと CTO としてのキャリアの中で、Roy は Electronics Workbench (現在は National Instruments の Multisim) や Linkwalker Data Pipeline といったシステムを設計しました。Linkwalker Data Pipeline は 2006 年の Microsoft's worldwide Winning Customer Award for High-Performance Computing を受賞しています。彼は直近のスタートアップを売却し、今はトロント大学に戻りコンピューターサイエンスの研究員として可視化とクラウドコンピューティングに関連した研究を行っています。最近では SnowFlock の Kaleidoscope 拡張機能を 2011 年の ACM Eurosys Conference で発表しました。彼の個人サイトは http://www.roybryant.net/ です。
- Russell Bryant (Asterisk)
Russell は Digium, Inc. の Open Source Software チームのエンジニアリングマネージャです。彼は 2004 年の秋から Asterisk の開発チームのコアメンバーであり、コアアーキテクチャの設計と開発を始めとして、Asterisk の開発のほとんど全ての領域に関わっています。彼のブログは http://www.russellbryant.net です。
- Rosangela Canino-Koning (継続的インテグレーション)
Rosangela は 13 年間ソフトウェア業界で働いた後に大学に戻り、ミシガン州立大学でコンピューターサイエンスと進化生物学の Ph.D. を取得しました。彼女は豊富な余暇の時間を読書、ハイキング、旅行、そしてオープンソースのバイオインフォマティクスソフトウェアのハックに使っています。彼女のブログは http://www.voidptr.net です。
- Francesco Cesarini (Riak と Erlang/OTP)
Francesco Cesarini は 1995 年から Erlang を毎日のように利用しており、Ericsson の従業員として OTP R1 リリースをはじめとする様々なターンキープロジェクトに関わりました。彼は Erlang Solutions の創設者であり、O'Reilly から出版された Erlang Programming の共著者です。現在は Erlang Solutions で技術監督として働いていますが、英国のオックスフォード大学やスウェーデンのヨーテボリにある IT 大学で学部生や院生に対する教育も行っています。
- Robert Chansler (HDFS)
Robert は Yahoo! のソフトウェア開発シニアマネージャです。カーネギーメロン大学で分散システムについて研究した後、彼はコンパイラ (Tartan Labs)、画像システム (Adobe Systems)、E コマース (Adobe Systems, Impresse)、ストレージエリアネットワークマネジメント (SanNavigator, McDaTA) に携わってきました。分散システムと HDFS に戻って来たとき、Rob は慣れ親しんだ問題に直面することになりましたが、どれもゼロが二つか三つ多く付いていたと言います。
- James Crook (Audacity)
James はアイルランドのダブリンに住む契約ソフトウェア開発者です。現在エレクトロニクス設計ツールに関する仕事についていますが、これまでにバイオインフォマティクスに関するソフトウェアを開発した経験もあります。彼は将来の Audacity に関する大胆不適な野望をいくつも抱いており、そのいくつかでも日の目を見ることを願っています。
- Chris Davis (Graphite)
Chris はソフトウェアコンサルタントであり、スケーラブルなモニタリング・オートメーションツールの設計と作成を過去 12 年に渡って行っている Google のエンジニアでもあります。Chris は最初の Graphite を 2006 年に書き、それ以降オープンソースプロジェクトとして Graphite を率いてきました。彼はコーディング以外にも料理、作曲、研究を行っています。彼の研究分野は知識モデリング、群論、情報理論、カオス理論、複雑系です。
- Juliana Freire (VisTrails)
Juliana はユタ大学のコンピューターサイエンスの助教授です。現在の職に就く前の彼女は Bell Laboratories の Database System Research Department (Lucent Technologies) の技術スタッフ兼 OGI/OHSU の助教授でした。研究分野は追跡 (provenance)、科学データ管理、情報統合、ウェブマイニングです。彼女は NSF CAREER と IBM Faculty award を受賞しています。彼女の研究の資金は National Science Foundation, Department of Energy, National Institutes of Health, IBM, Microsoft, Yahoo! によって提供されています。
- Berk Geveci (VTK)
Berk は Kitware, Inc. で科学計算ディレクターとして働いています。章を受章した VTK ベースの可視化アプリケーション ParaView の開発を指揮するのが彼の仕事です。研究分野は大規模並列計算、計算ダイナミクス、有限要素法、可視化アルゴリズムです。
- Andy Gross (Riak と Erlang/OTP)
Andy Gross は Basho Technologies の主任アーキテクトであり、Basho のオープンソースおよびエンタープライズのデータストレージシステムの設計及び開発を管理しています。Andy は 2007 年から Basho で働いていますが、それ以前にはソフトウェアエンジニアおよび分散システムエンジニアとしての 10 年の経験があり、Mochi Media, Apple, Inc., Akamai Technologies では分散システムのシニアエンジニアでした。
- Bill Hoffman (CMake)
Bill は Kitware, Inc の CTO であり、共同創業者でもあります。彼は CMake プロジェクトの主要開発者であり、二十年以上に渡って大規模な C++ システムに取り組んできました。
- Cay Horstmann (Violet)
Cay はサンノゼ州立大学のコンピューターサイエンスの教授ですが、産業界に働いたり外国で指導を行うためによく席を空けています。彼はプログラミング言語とソフトウェア設計に関する書籍を多数執筆しており、オープンソースプログラム Violet と GridWorld のオリジナルの著者でもあります。
- Emil Ivov (Jitsi)
Emil は Jitsi プロジェクト (かつての SIP Communicator) の創設者兼プロジェクトリードです。彼は ice4j.org や JAIN SIP プロジェクトといった取り組みにも参加しています。Emil はストラスブール大学から Ph.D. を 2008 年に取得し、それから Jitsi に関連する活動に集中して取り組んでいます。
- David Koop (VisTrails)
David はユタ大学でコンピューターサイエンスを研究する (2011 年夏に修了予定の) Ph.D. 生であり、研究分野は可視化、追跡 (provenance)、科学データ管理です。彼は VisTrails システムの主任開発者であり、VisTrails, Inc. では上級ソフトウェアアーキテクトです。
- Hairong Kuang (HDFS)
Kuang は長い間 Hadoop プロジェクトのコントリビューター兼コミッターであり、とても熱心に取り組んでいます。現在 Facebook に勤めていますが、以前に働いていたのは Yahoo! でした。IT 産業で働き始める前、彼女はカリフォルニア州立工科大学ポモナ校の助教授であり、コンピューターサイエンスの Ph.D. をカリフォルニア大学アーバイン校で取得しています。彼女の関心はクラウドコンピューティング、モバイルエージェント、並列計算、そして分散システムです。
- H. Andrés Lagar-Cavilla (SnowFlock)
Andrés はソフトウェアシステム研究者であり、可視化、オペレーティングシステム、セキュリティ、クラスターコンピューティング、モバイルコンピューティングに関して実験的研究を行っています。工学の学士号をアルゼンチンで、コンピューターサイエンスの修士号と博士号をトロント大学で取得しました。オンラインでは http://lagarcavilla.org で見かけることができます。
- Chris Lattner (LLVM)
Chris はソフトウェア開発者であり、様々なことに対する興味と経験を持っています。特に関心があるのはコンパイラツールチェイン、オペレーティングシステム、グラフィック、イメージレンダリングです。彼は Open Source LLVM Project でデザイナー兼リードアーキテクトを務めています。Chris 自身と彼のプロジェクトについては http://nondot.org/~sabre/ を参照してください。
- Alan Laudicina ( Thousand Parsec)
Alan はコンピューターサイエンスを専攻するウェイン州立大学の修士生で、研究分野は分散コンピューティングです。空いた時間にはコードを書いたり、プログラミング言語を学んだり、ポーカーをしたりしています。彼については http://alanp.ca/ で詳しく知ることができます。
- Danielle Madeley (Telepathy)
Danielle はオーストラリア出身のソフトウェアエンジニアであり、Collabora Ltd で Telepathy をはじめとした魔法に取り組んでいます。彼女は電子工学とコンピューターサイエンスの学士号を持っており、加えて plush penguin をたくさん持っています。ブログは http://blogs.gnome.org/danni/ です。
- Adam Marcus (NoSQL)
Adam はデータベースシステムとソーシャルコンピューティングの交わる領域を専門とする Ph.D. 生であり、MIT のコンピューター科学・人工知能研究所に所属しています。最近の研究は古くからあるデータベースと Twitter などのソーシャルストリーム、そして Mechanical Turk などのヒューマンコンピュテーションを結び付けるものです。自身の研究で作ったプロトタイプを実際に使えるオープンソースのシステムに作り上げるのが得意で、ビーチを散歩しながらオープンソースのストレージシステムを探索するのが趣味です。彼のブログは http://blog.marcua.net です。
- Kenneth Martin (CMake)
Ken は現在米国に拠点を置く研究開発会社 Kitware, Inc の会長兼 CFO です。彼は 1998 年に Kitware を共同創業してから会社の成長に尽力し、Kitware を多数の政府及び商業セクターにまたがるクライアントを持つ一流 R&D プロバイダに導きました。
- Aaron Mavrinac (Thousand Parsec)
Aaron はウィンザー大学の Ph.D. 生で、電子・計算機工学が専門です。カメラネットワーク、コンピュータービジョン、ロボティクスの研究をしています。空いた時間があると、彼は Thousand Parsec などの自由ソフトウェアに Python や C で取り組んだり、他の面白そうなことに挑戦したりしています。彼のウェブサイトは http://www.mavrinac.com です。
- Kim Moir (Eclipse)
Kim はオタワにある IMB Rational Software 研究所で働いています。Eclipse プロジェクトと Runtime Equinox プロジェクトの主任リリースエンジニアであり、Eclipse Architecture Council のメンバーでもあります。彼女の関心はビルドの最適化、Equinox、そしてコンポーネントベースのソフトウェアのビルドにあります。仕事の外での彼女はランニング仲間と走って次のロードレースに備えています。彼女のブログは http://relengofthenerds.blogspot.com/ です。
- Dirkjan Ochtman (Mercurial)
Dirkjan は 2010 年に CS の修士号を取得し、それから金融スタートアップで三年間働いています。暇な時間ができると、彼は Mercurial、Python、Gentoo Linux Python CouchDB ライブラリといったものをハックしています。彼は美しいアムステルダムに住んでおり、個人サイトは http://dirkjan.ochtman.nl/ です。
- Sanjay Radia (HDFS)
Sanjay は Yahoo! 所属の Hadoop プロジェクトのアーキテクトであり、Hadoop コミッターかつ Apache Software Foundation の Project Management Committee のメンバーでもあります。以前は Cassatt、Sun Microsystems、INRIA でシニアエンジニアをしており、そこで彼は分散システムやグリッド/ユーティリティ計算インフラのためのソフトウェアを開発しました。Sanjay はカナダのウォータールー大学でコンピューターサイエンスの Ph.D. を取得しています。
- Chet Ramey (bash)
Chet は bash の開発に二十年以上関わっており、十七年前からは主要開発者です。彼はオハイオ州クリーブランドのケース・ウェスタン・リザーブ大学の永年勤続者であり、学士号と修士号もその大学で取得しました。現在はクリーブランドに家族とペットともに住んでおり、オンラインでは http://tiswww.cwru.edu/~chet からコンタクトできます。
- Emanuele Santos (VisTrails)
Emanuele はユタ大学の科学研究員であり、研究分野は科学データ管理、可視化、追跡 (provenance) です。彼女はコンピューティングの Ph.D. をユタ大学で 2010 年に取得しており、現在は VisTrails システムの主任開発者でもあります。
- Carlos Scheidegger (VisTrails)
Carlos はコンピューティングの Ph.D. をユタ大学で取得し、現在は AT&T Labs-Research の研究員です。Carlos は 2007 年に IEEE Visualization で、2008 年には Shape Modeling International で best paper awards を受容しています。研究分野はデータの可視化と解析、幾何学処理、コンピューターグラフィックスです。
- Will Schroeder (VTK)
Will は Kitware, Inc. の社長で、共同設立者でもあります。彼は計算科学の専門家であり、VTK の主要開発者の一人です。美しいコード、それも計算機何学とグラフィックスが絡むコードを書くことを楽しんでいます。
- Margo Seltzer (Berkeley DB)
Margo はハーバード工学・応用科学スクールで情報科学における Herchel Smith 教授職についており、Oracle Corporation のアーキテクトでもあります。彼女は Berkeley DB の主要設計者の一人であり、Sleepycat Software の共同設立者です。研究分野はファイルシステム、データベースシステム、トランザクショナルシステム、医療データマイニングであり、彼女の研究者としての来歴は http://www.eecs.harvard.edu/~margo で見ることができます。ブログは http://mis-misinformation.blogspot.com/ です。
- Justin Sheehy (Riak と Erlang/OTP)
Justin は Webmachine と Riak の開発を支えた企業 Basho Technologies の CTO です。Basho の前、彼は MITRE Corporation では主任科学者、Akamai ではシステムインフラ担当のシニアアーキテクトを務めました。二つの企業ではスケジューリングアルゴリズムや言語ベースの形式モデル、障害耐性といった頑健な分散システムの様々な側面に集中して取り組みました。
- Richard Shimooka (Battle for Wesnoth)
Richard はオンタリオ州キングストン市にあるクイーン大学の Defence Management Studies Program で助教を務めており、Battle for Wesnoth の副部長兼秘書でもあります。Richard は政府やオープンソースプロジェクトといった社会的集団の組織文化を調査する研究をいくつか発表しています。
- Konstantin V. Shvachko (HDFS)
Konstantin は HDFS のベテラン開発者であり、eBay における主要 Hadoop アーキテクトであり、専門は大規模分散ストレージシステムにおける効率の良いデータ構造とアルゴリズムです。構造化されていないデータをインデックス化するための S-tree と呼ばれる新種のバランスの取れた木を発見したのは彼であり、S-tree を使った Linux ファイルシステム (reiserFS のプロトタイプ treeFS) の主要開発者でもあります。彼はコンピューターサイエンスの Ph.D. をモスクワ大学で取得しています。また Apache Hadoop の Project Management Committee のメンバーです。
- Claudio Silva (VisTrails)
Claudio はユタ大学でコンピューターサイエンスの正教授を務めており、研究分野は可視化、幾何学計算、科学データ管理です。彼はコンピューターサイエンスの Ph.D. をニューヨーク州立大学ストーニーブルック校で 1996 年に取得しており、その後 2011 年にニューヨーク大学工学研究所のコンピューターサイエンスと工学の正教授として着任しました。
- Suresh Srinivas (HDFS)
Suresh は Yahoo! のソフトウェアアーキテクトとして HDFS に取り組んでおり、彼は Apache Software Foundation の Project Management Committee のメンバーです。Yahoo! に入る前、彼は Sylantro Systems でホストされた通信サービスのスケーラブルなアーキテクチャの開発を担当しました。Suresh はカルナータカ国立工科大学で電気通信の学位を取得しています。
- Simon Stewart (Selenium WebDriver)
Simon はロンドン在住の Google のテストソフトウェアエンジニアです。彼は Selenium プロジェクトのメインコントリビューターであり、WebDriver の作成者でもあります。オープンソース活動に熱心であり、ビールと質の高いソフトウェアの作成を、ときには同時に楽しんでいます。Simon のホームページは http://www.pubbitch.org/ です。
- Audrey Tang (SocialCalc)
Audrey は台湾に住む独学のプログラマー・翻訳家です。彼女は現在 Socialtext で働いており、その役職名は “Untitled Page” です。ローカライゼーションとリリースエンジニアリングを行う Apple の契約社員でもあります。Pugs プロジェクト (Perl 6 の最初の実働する実装) の設計・指揮を行ったのは彼女であり、その他にも Haskell, Perl 5, Perl 6 の言語設計委員会に所属し、CPAN と Hackage に多数のコントリビューションを行っています。彼女のブログは http://pugs.blogs.com/audreyt/ です。
- Huy T. Vo (VisTrails)
Huy は 2011 年 5 月にユタ大学で Ph.D. を取得しています。彼の研究分野は可視化、データフローアーキテクチャ、科学データ管理です。VisTrails, Inc. の上級開発者である彼は、ニューヨーク大学工学研究所の研究助教授でもあります。
- David White (Battle for Wesnoth)
David は Battle for Wesnoth の出資者であり、主要開発者でもあります。David はいくつかのオープンソースのゲームに関わっており、Frogatto では共同出資を行いました。彼は旅客技術で有名な Sabre Holdings でパフォーマンスエンジニアとして働いています。
- Greg Wilson (編集)
Greg は過去 25 年以上に渡って高パフォーマンス科学計算、データの可視化、コンピューターセキュリティの分野で働いてきました。彼はいくつかのコンピューターに関する本 (2008 年の Jolt Award を受賞した Beautiful Code は彼の著作です) と二冊の子ども向けの本の著者および編集者です。Greg は 1993 年にエディンバラ大学でコンピューターサイエンスの Ph.D. を取得しています。彼のブログは http://third-bit.com と http://software-carpentry.org です。
- Tarek Ziadé (Python のパッケージング)
Tarek はフランスのブルゴーニュ在住です。彼は Mozilla のシニアソフトウェアエンジニアで、Python でサーバーを管理しています。空いた時間には Python のパッケージングに取り組んでいます。
Eric Aderhold, Muhammad Ali, Lillian Angel, Robert Beghian, Taavi Burns, Luis Pedro Coelho, David Cooper, Mauricio de Simone, Jonathan Deber, Patrick Dubroy, Igor Foox, Alecia Fowler, Marcus Hanwell, Johan Harjono, Vivek Lakshmanan, Greg Lapouchnian, Laurie MacDougall Sookraj, Josh McCarthy, Jason Montojo, Colin Morris, Christian Muise, Victor Ng, Nikita Pchelin, Andrew Petersen, Andrey Petrov, Tom Plaskon, Pascal Rapicault, Todd Ritchie, Samar Sabie, Misa Sakamoto, David Scannell, Clara Severino, Tim Smith, Kyle Spaans, Sana Tapal, Tony Targonski, Miles Thibault, David Wright, Tina Yee