InfoQの読者におすすめする本について、InfoQの編集チームが話し合いの場を持った。その際に、プログラマやアーキテクト、マネージャに与えている影響力の大きさをひとつの基準にした。この記事では最終的に私たちが合意に至った16冊の本を、最初にその本を推薦すると言い出した編集者のコメントとともに紹介する。
Alex Blewitt
『XPエクストリーム・プログラミング入門(Extreme Programming Explained)(リンク)』(著:Kent Beck)は優れたXPの解説書である。たとえあなたが巷のアジャイル手法に同意できないとしても、一読の価値はあるだろう。まあもっとも、これほど参考文献として取りあげらている本はないだろう。
それから、私の座右の書は『アルゴリズムイントロダクション(An introduction to algorithms)(リンク)』(著:Cormen/Leiserson/Rivest/Stein)だ。これは異常に濃いが、非常に価値がある本だ。
John Smith氏の『Troubled IT Projects(リンク)』という本があるが、みなさんおそらくこれまでに目にしたことがないだろう。実際にプロジェクトを管理していく上でうまくいかない可能性のあるいくつかのことについて説明している。現在、取り組んでいるプロジェクトの成績表のように読めてとっても面白いんだけどね。
おそらく手に取ってみる価値はあると思う。けれども、どんなタイプの本が好きか(または、おすすめするべきか)はその人の経験に左右される。Kent氏のXP本は経験の浅い人やアジャイルに馴染みのない人の役に立つ。より経験豊富な人にはCockburn氏の本(参考記事)がよりよいかもしれない。同じように、まったくの新人に『アルゴリズムイントロダクション』を押しつけたりはしないだろう。しかし、Bツリーの実装方法を知りたいとか、複雑度測定のアルゴリズムを理解したいとかいうのであれば、この本は必携だ。
Deborah Hartmann
アジャイルソフトウェア開発という高度に協調的な環境において、『Collaboration Explained: Facilitation skills for software project leaders(リンク)』と題されたJean Tabaka氏の本は対立、人と人とのコミュニケーション、時間的制約のような困難なマネジメントの問題に対する答えを示してくれる。ミーティングが嫌いで、しかも(あるいは)、改善していくべきだと確信しているなら、アジャイルプロジェクトに関わるか否かに関係なく、この本を読まなければならない。
Charles Humble
Harold Abelson氏、Gerald Jay Sussman氏、Julie Sussman氏の『計算機プログラムの構造と解釈(Structure and Interpretation of Computer Programs)(リンク)』。数年前、自分のコーディング能力に行き詰まりを感じていることを友人に雑談混じりに話したところ、「SIC-P」をすすめられた。この本はとりわけ易しい本ではない。問題に対する即効性のある解決策を求めているなら、これはあなたが探している本ではない。しかしながら、この本は読み応えのある濃い本だ。おそらく、これまでに読んだどんな本より自分のコーディングに多大な影響を与えた。
Erich Gamma氏、Richard Helm氏、Ralph Johnson氏、John Vlissides氏の『デザインパターン(Design Patterns)(リンク)』はSIC-Pの次に読むのにふさわしい本だ。でも、私が最初にこの本を読んだときは正直、あまり好きになれなかったことを認めるつもりだ。ある意味ではオブジェクト指向設計の専門知識をとらえているのは疑う余地もないが、はじめは理論としては面白くても、実際には使いものにならないと感じた。時間が経つにつれ、デザインパターンという考え方を段々と評価できるようになってきた。私が設計をしていて困ったときは、いつでもこの本を参考にしている。全力でおすすめする。
Mark Levinson
Alistair Cockburn氏の『Agile Software Development: A Cooperative Game (2nd Ed)(リンク)』。◆→訳注:初版の日本語版は『アジャイルソフトウェア開発』←◆これはおそらく私がこれまでに読んだアジャイルソフトウェア開発に関する本の中でもっともおもしろい本だ。この本は何か1つの方法論について書かれている訳ではない。代わりにAlistair氏はソフトウェア開発全般において核となるゲーム進行、個人のコミュニケーション、チームの協調といった要素について細かく検討している。そして、この本ではアジャイルに関してソフトウェアにとどまらず様々な方法論や諸々の調査について言及している章がある。
Jon Katzenbach氏とDouglas Smith氏の『「高業績チーム」の知恵(The Wisdom of Teams)(リンク)』はアジャイルに通じる本だ。Katzenbach氏とSmith氏はたくさんの業界の実際のチームを研究し、チームを成功させることに関する疑問に対して実際の分析と厳しさを示してくれている。この本を読み終えるころには「高業績チーム(リンク)をつくることは約束できない。できることといえばせいぜい高業績チームをつくる手助けとなる場づくりをすることだ」ということに気づくだろう。この本は私の『Why Scrum Works(リンク)』という連載の核になっている。
Srini Penchikala
Martin Fowler氏の『エンタープライズ アプリケーションアーキテクチャパターン(Patterns of Enterprise Application Architecture)(リンク)』。この本はアーキテクトや開発者が典型的なソフトウェア開発プロジェクトに取り組むときにぶつかるほとんどすべての設計上の問題に関する唯一の情報源であるといえるので、気に入っている。これはパターンに関する最高の本(Gang of Fourのデザインパターン本と並んで(参考記事))だといえるだろう。ドメインロジック、プレゼンテーションレイヤ、セッションステートの管理、オブジェクトリレーショナルの構造と振る舞いに関するパターンといったトピックをカバーしている。他の優れた資料と同じように、この本でのパターンに関する議論は適切で有効である。たとえ、EJB3以前のJ2EEやJEE、HibernateやSpringのような軽量フレームワーク、あるいは.NETを使っているとしてもだ。すべての開発者にとって必読・必携の本だ。
Eric Evans氏の『Domain-Driven Design(リンク)』。この本が2004年に出版されて以来、ソフトウェア開発者のコミュニティのあいだでは何度も言及されてきた。この本ではソフトウェア設計と開発をビジネスの領域に適合させることの重要性を強調している。議論されたコンセプトのいくつか(ユビキタス言語、モデル駆動設計、コンテキスト境界、腐敗防止層など)は大規模なビジネス領域においてドメインモデルの複雑さを管理するためにあらゆる手段を提供している。この本を読んだ後、自分のプロジェクトで適用できそなところならどこでもDDDの原則を適用しはじめた。それからは、ドメインモデル貧血症を克服して、よりOO的なやり方でドメインモデルを扱うことに成功している。この本で議論されているコンセプトは特定の技術やフレームワークからは独立している。そのため、Javaや.NET、その他の技術を用いたソフトウェア開発プロジェクトに適用できる。またこの本は昨年、私が公開した『Domain Driven Design and Development In Practice』という記事(参考記事)に大きなインスピレーションを与えた。この本はビジネスのドメインを作ったり管理したりすることに携わっているあらゆるソフトウェア開発者のための必読書である。
Gregor Hohpe氏とBobby Woolf氏の『Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions(リンク)』。2004年にこの本をはじめて読んで以来、私の愛読書のひとつになっている。著者はエンタープライズアプリケーション(特に、複数システムの統合に関わるもの)で毎日のように使われているいくつかの非同期デザインパターンをうまく体系化して説明している。非同期通信パターンの核心である「メッセージング」を含むさまざまな統合スタイルが議論の中心になっている。この本では、よく見かけるローンの申請から確定までを行うアプリケーションをいくつかの最近のESBフレームワークで実装した例が取りあげられている。この本は最近のほとんどのSOAインテグレーションやESBフレームワーク(ServiceMix(リンク)、Mule(リンク)、Spring Integration(リンク)など)にインスピレーションを与えた。これらのインテグレーションやフレームワークは、この本で議論されているインテグレーションパターンをサポートしている。
Tom DeMarco氏とTimothy Lister氏の『ピープルウエア - ヤル気こそプロジェクト成功の鍵 (Peopleware - Productive Projects and Teams)(リンク)』。友人にすすめられて昨年、この本を読んだ。私がこれまでに読んだ本の中でもっとも影響力の大きい本の1つであると言わずにはいられない。この本で、著者らは業界の事例や調査・統計を示して、ソフトウェア開発における主要な問題は(ピープルウェアというだけあって)人に関することであり、(ハードウェアやソフトウェアといった)技術ではないことを実証している。開発者やデザイナ、その他の知識労働者は「フロー」と呼ばれる状態に達したとき、複雑な問題を一気に解決するという理論を示した。しかし、メールや電話、声をかけられるといった割り込みは「フロー」状態を壊す。そして、再び「フロー」状態に戻るには時間がかかる(統計によると平均15分)。著者らによると、マネージャの仕事はチームメンバーを働かせることではなく、チームメンバーが気持ちよく働ける環境をつくることだ。この本が最初に出版されてから20年以上が経っている。しかし、この本で議論されているコンセプトは新たなソフトウェア開発の技術やフレームワーク、アジャイルなプロジェクト管理手法が出てきた現在でさえも私たちに関係があって有効である。この本はマネージャやチームリーダーをはじめチームメンバーをマネジメントする責任のあるすべての人にとっての必読書である。ソフトウェア開発に関わるすべてのマネージャが(一度ならずとも2度、3度と)読むことを強くおすすめする。
Werner Schuster
Andy Hunt氏の『Pragmatic Thinking and Learning: Refactor Your Wetware(リンク)』は究極のプラットフォームである脳の内部に達人プログラマーの視点を持ち込んだ。学習することや働くことなどを改善するのに役立つようなたくさんのやり方が含まれている。一例として、Dreyfus学習モデルがあげられる。
Jon Stokes氏の『Inside the Machine: An Illustrated Introduction to Microprocessors and Computer Architecture(リンク)』は『Ars Technica』からCPUや他の技術に関する記事を数年分集めている。Jon Stokes氏(「Hannibal」)はCPUというブラックボックスを開けるという試みをしている。あちこちにある興味深い話が目をひく。最近のx86やPowerといった現代のCPUを取りあげている。命令セットがReorder Bufferの効率を改善するのに役立つというノウハウは水冷式のクーラーに関するすばらしい議論だ。しかし、記憶階層とキャッシュの振る舞いが現代のCPUのパフォーマンスに影響を与えるというノウハウはあなたが厳しい局面で最適化を行う際にちょうど役立つかもしれない。
さらに、HOPL conferences(リンク)の議事録を見てほしい。論文の多くはオンラインでアクセスできる(リンク)。また印刷されたものを取り寄せることもできる。C風の命令的な中括弧を多用する言語のパッとしない世界がさまざまなパラダイムによって活気づくかもしれないというように思える。そして、これらのことがうまくいっている。将来の言語やアイデアは過去何十年も前から存在していた。HOPLの論文には多くの言語(Smalltalk、Erlang、Lua、LISPなど)の歴史が詳述されている。どの言語にも脚光をあびる時代がやってくるかもしれない。
『The Early History of Smalltalk(リンク)』というAlan Kay氏の論文は豊富な情報源だ。私は毎年、この論文を繰り返し読んでいる。どういうわけか、読み返すたびに新しい発見をする。この前に読んだときにはオリジナルのSmalltalkがどれくらいActorsモデルに基づいているかということに気づいた。
HOPLの論文は明らかにほとんどが歴史に関するものだ。しかし、多くの開発者はなんと1995年以前に起こった出来事や開発された技術に関して、基礎的な知識さえも欠いていることに気づいた。「経験豊富な」開発者に40年前の技術を見せ、「信じられない!」という顔で息を呑むのを見るのは、ちょっと申し訳ない気分になる(天上からの贈り物を持ってきたプロメテウスのように扱われるというメリットはあるものの、そういう扱いはすぐに飽きが来る)。
◆→訳注:プロメテウスは天から「火」を盗んで人に与えた←◆.
Ryan Slobojan
Joshua Blochの『Effective Java(Effective Java)(リンク)』。『Effective Java』はJava開発のバイブルの1冊として広く認められている。他の多くの本がやっているような言語でできることだけでなく、もっとも効果的にJavaの言語自体やAPIを使って、高速で信頼性が高く、スケーラビリティとメンテナンス性に優れたソフトウェアを作る方法に関する理解を読者に与えてくれる。原則の多くは他のプログラミング言語にも適用できるものである。優れたソフトウェアを設計するための原則の多くは普遍的なものだ。この本を読んだ後、違った角度から自分が書いたコードを見ていることに気づいた。それは自然に読めるか、コード全体の行数をコンパクトにできるか、後で見直したときにバグが簡単に修正できるか、といった視点だ。Javaで開発をする人はみんな絶対にこの本を読むべきだと思う。Javaのwhat(何)を教えてくれるだけでなく、最も効果的に使うためのwhen(いつ)とhow(どのように)を教えてくれる。
Stefan Tilkov
ここ最近で読んだ本のうちベストな1冊はMichael Nygard氏の『Release It!(Release It!)(リンク)』だ。この仕事を生業としている人なら誰でも実際に現場で使えるアドバイスが満載だ。この本には大規模システムが故障に追い込まれる戦慄の体験記がたくさん載ってる。そして、Michael氏は共通するアンチパターンや脆弱な設計に繰り返し発生する問題を抽出するために自身の膨大な経験を使う。それから適切なパターンを使うことで、それらに対処する方法を示している。この本に載っている個人的な実体験に基づいたエピソードがめちゃくちゃ面白く、ガチで動く必要のあるシステムを構築するたびに、現場で実際に適用できる助言が満載なことを実感した。
原文はこちらです:http://www.infoq.com/articles/recommended_reading_list