
[読書レビュー] Fundamentals of Software Architecture
Fundamentals of Software Architecture (日本語版)
** You can read the English version here.
この本について
この本はソフトウェアアーキテクチャについて、そしてソフトウェアアーキテクトとしてどう振る舞うべきかについて書かれています。
「最適なアーキテクチャとは何か?」という問いに対する明確な答えは存在しません。
そのため、アーキテクトはビジネス環境や要件を理解し、限られたリソースの中で優先順位をつけ、設計のトレードオフを分析する必要があります。最終的に、より良いアーキテクチャを見つけることができます。アーキテクチャ設計は常にトレードオフの問題なのです。
このプロセスの中で、アーキテクトはソフトウェア工学に精通しているだけでなく、チームやステークホルダーとの連携を促進することも求められます。なぜなら、アーキテクチャはチーム全体で受け入れられ、一貫性を持つ必要があるからです。
背景
この本は、ソフトウェアアーキテクチャの重要性が高まっていることを受けて執筆されました。
ソフトウェア開発の初期には、計算リソースやネットワークの能力が限られていました。そのため、アーキテクチャは通常モノリシックであり、比較的シンプルなビジネスドメイン向けに設計されていました。
しかし、技術の進歩とビジネスの複雑化に伴い、現代のソフトウェアアーキテクチャははるかに洗練されたものになっています。その結果、ソフトウェアアーキテクチャの重要性も時代とともに大きく増しています。
何が学べるのか?
この本の内容は、大きく3つのテーマに分類できます。
ソフトウェアアーキテクチャを考える際の視点
ソフトウェアアーキテクチャのスタイル
ソフトウェアアーキテクトとしての振る舞いとキャリア開発
第1部では、アーキテクチャのスタイルを学ぶ前に、その基盤となる視点を身につけます。例えば、ISO/IEC 25010 はソフトウェア製品の特性を評価するための標準化された指標の一つです。
第2部では、さまざまなアーキテクチャのスタイルを体系的に整理し、第1部で紹介した指標を用いて、それぞれのメリット・デメリットを比較します。
知識やハードスキルだけでなく、実践やソフトスキルも同様に重要です。最終章では、チームメンバーがアーキテクチャの決定に従うように導く方法を解説します。また、急速に変化するソフトウェア業界の中で、新しいアーキテクチャスタイルをキャッチアップし続けるためのヒントも紹介されています。
なぜこの本を読んだのか?
私はマネージャーに相談し、バックエンドエンジニアリングにより集中したいという希望を伝えました。幸運にもバックエンドのプロジェクトにアサインされましたが、ソフトウェアエンジニアとしてどのようにレベルアップすればいいのか悩むことがありました。
再び相談したところ、マネージャーは次のように強調しました。
成長において最も重要なのは、実際のプロジェクトに携わることだ。
実際のプロジェクトを通じて、クリティカルシンキングや問題解決が求められる課題に直面することができる。
これには完全に同意しましたが、実務経験を補完するために、体系的な知識も身につけたいと考えました。
読後の変化
この本を読んだ後、私は以下のような変化を実感しました。
議論の中で、整理された視点に基づいたより良い意見を述べられるようになった。
アーキテクチャのスタイルに関する知識が広がり、より多くのアイデアを提案できるようになった。
チームメンバーにアーキテクチャをレビューしてもらう際、常に選択肢と比較表を提示するようになった。
新しい AWS サービスを試す際、そのサービスの背景やコンテキストをより深く理解できるようになった。
ただし、ソフトスキルの向上は今後さらに意識して取り組む必要があると感じた。
そして、もう一つ重要な点に気付きました。
アーキテクチャ設計は、ビジネス要件の深い理解とステークホルダーとの積極的なコミュニケーションが不可欠なため、AI では完全に代替できない のではないか、と。