自分の仕事との関連も深く、最近読んだ本の中では、ググッときた1冊。
ソフトウェア業界の著名なソフトウェアアーキテクト達による97のエッセイ。
エンジニア向けの本であるにもかかわらず、技術的な内容よりも、ビジネスドメインとのかかわり方や、仕事の仕方、精神論のような記述が多いのは、ソフトウェアアーキテクトという役割の特性なのでしょう。
97のエッセイのうち80%くらいは共感できるもの、そして残り20%くらいに新しい発見もちらほら。(いくつかは、自分とは異なる意見のものもありましたが・・・。)
その80%の共感できるもののうち、どれだけのものを自分が実際の職場で「実践」しているだろうか、できているだろうかと考えてみると、、、これが案外出来ていないんですよね。
わかっていても、実現できないことがこんなにもある、という自分のスキルマップの棚卸をすることもできて、とても有用な1冊。
アーキテクトとは、時には、エッセイで述べられているような方法論を、相手に合わせた様式に翻訳して、理解させ、説得させなくてはいけないことも多い仕事。
一見抽象的になりがちな精神論・方法論を、しっかりと文章として表現できているところも、作品をよせているアーキテクト達の表現力の高さを感じずにはいられません。
原書では読めていませんが、下記から同じものを原文で読むことができます。
http://97-things.near-time.net
以下、備忘録がわりにいくつか引用。
フレームワークとかベンダーの言う「ソリューション」といったものの多くは、往々にして付随的複雑病の兆候を示しています。個別の問題を解決してくれるフレームワークは役に立ちますが、やりすぎると解消してくれる以上に新しい複雑さを持ち込むことになります。(中略)まず、象牙の塔から紡ぎだされたフレームワークではなく、現場で生まれたフレームワークを選ぶことです。(02 本質的な複雑さは単純に、付随的な複雑さは取り除け)
なぜパフォーマンステストがそんなに大切なのでしょうか。最大の理由は、どのような変更を加えたときにパフォーマンスが急降下したかわかることです。これならパフォーマンス問題に直面したときに、アーキテクチャー全体を相手にえずに最近に加えた変更に焦点を絞り込んでいけるのです。(13 パフォーマンスの検討に早すぎるということはない)
設計の判断として2つの選択肢のどちらを選らんでもよさそうな感じがする時には、アーキテクトは1歩下がって考えなければなりません。選択肢AとBのどちらを選ぶかではなく、A,Bどちらを選んでも、それほど重大な意味を持たないようにするために、どう設計するかを考えるのです。(24 不確定性が潜むという感覚を磨け)
アーキテクチャの図表は、いわば1万メートルの上空からの目、飛行機から見た風景です。ふつうは、システムに対する視点はあとひとつ、すなわちソースコードしかありません。しかし、これら2つの視点はソフトウェアの品質について多くの情報をとりこぼしてしまいます。(中略)必要なのは、上空300mからの目です。(28 上空300mからの目)
再利用を行うために必要な人々。
1.再利用できるものがあることを知っている人
2.使い方を知っている人
3.自分で作るよりも再利用したほうがよいと思っている人
(26. 再利用はアーキテクチャだけではなく人と教育の問題と心得よ)
現実の世界はずっと前から同じ問題に取り組んできているのです。遅れた手紙、破られた約束、行き違いになったメッセージ、間違って口座への支払いなど。(中略)ですから、あなたの頭痛のために現実世界を打た非難するのではなく、解決方法を探す場所として現実世界を活用して下さい。(47 現実の世界にようこそ)
明確な原則を持つアーキテクチャは、何から何まで面倒をみることからアーキテクトを解放します。レバレッジや影響が大きくなるのです。(59 趣味や個人的な意見ではなく、原理原則に従え)
ソリューションがあまりに巧妙すぎて自意識過剰みたいだと感じたら、手を止めて考えましょう。そのソリューションは、問題にぴったりと合っているでしょうか。(62 単純なものは単純に)
よくできたアーキテクチャはごく普通のことの積み重ねです。有能なアーキテクトの多くは、知識としては知っているものの、習慣として実践できているわけではないことを思い出すために、毎日毎週のチェックリストを作り、それに従うようにしています。(78 勤勉さが必要)
優れたアーキテクトは、自分があまりよく知らないドメインについては、その道のエキスパートに譲るものです。(79 自分の判断に責任を持て)
いかに魅力的に感じたとしても、すでにわかっている要件やユーザーが希望している特性以上に大規模なシステムを設計するのは避けましょう。大きな設計ではなく、大きなビジョンを持つのです。(97 優れたソフトウェアは構築されるのではなく、成長する)