ISBN 9784814400317
ソフトウェア設計のトレードオフと誤り : プログラミングの際により良い選択をするには
- 出版社
- オライリー・ジャパン
- 刊行
- 2023-05
Amazonアソシエイトおよび楽天アフィリエイト等の広告リンクを含みます。Amazonのアソシエイトとして tech-book.net は適格販売により収入を得ています。
詳細
概要
コード〜分散システムまで横断する設計判断のトレードオフを原理から学ぶ
想定読者
モノリス・マイクロサービス・ビッグデータ処理など多様なシステムの設計・開発に携わり、場面ごとの設計判断を言語化・体系化したい中級〜上級エンジニア
こんな人には向いていない
- プログラミング自体がはじめての段階にある初学者。本書が扱うトレードオフの前提となる実装経験がないと文脈を掴みにくい
- 特定言語やフレームワークの使い方を習得したい人。本書は言語横断の設計判断論であり、チュートリアル的な内容は含まない
- 分散システムを既に深く運用しており、さらに低レイヤの実装詳細を求める人。本書の分散関連章は設計判断の整理に重点を置く
読了後にできるようになること
- コード重複と柔軟性のどちらを優先するかを、変更頻度と結合度の観点から判断できる
- 例外と代替エラーハンドリングのトレードオフを、業務エラーとシステムエラーの区分を踏まえて選択できる
- APIの明瞭性と保守コストのバランスを、バージョニング戦略と合わせて設計できる
- 分散システムにおける整合性とアトミック性のトレードオフを、データ分散パターンと対応づけて説明できる
- 早期最適化とホットパス最適化の判断基準を、データローカリティやメモリ使用量の観点から具体化できる
- サードパーティライブラリの採用可否を、トレンド追随コストとコードメンテナンスコストから評価できる
本書のキー概念(章解説)
- 第 1 章 はじめに
- 第 2 章 コードの重複と柔軟性 — DRY原則の適用限界を具体例で示す。設計議論の共通言語として機能する章
- 第 3 章 例外と代替エラーハンドリング — Qiita で複数回参照された章。エラーと例外の定義が文脈依存であることを理論的に整理している
- 第 4 章 柔軟性と複雑さのバランス
- 第 5 章 早期最適化とホットパス最適化
- 第 6 章 APIの明瞭性と保守コスト
- 第 7 章 日時データの効率的な扱い — タイムゾーンと直列化にまたがる実務頻出の落とし穴を体系化
- 第 8 章 データローカリティとメモリ使用量
- 第 9 章 サードパーティライブラリ
- 第 10 章 分散システムにおける整合性とアトミック性 — マイクロサービス設計者に直結する章。Lelek の業務経験から来た具体的な失敗パターンを含む
- 第 11 章 分散システムにおけるデータ分散
- 第 12 章 バージョニングと互換性管理
- 第 13 章 トレンド追随とコードメンテナンスコスト — 技術選定に疲れたチームが参照すると判断軸の整理に使いやすい
ハイライト
- ソフトウェアにかかわるすべての人は常に、さまざまなコンテキストや制約の中で多くの決断に迫られています。設計における潜在的な問題や限界をあらかじめ学ぶことで、より良い選択ができるようになるでしょう。(本書の実践的な立場が端的に表れている記述。事後分析ではなく予防的設計学習の本であることを示す)
- エラーと例外は、プログラミングコミュニティや文脈によって定義が異なり、普遍的に区別されるものではない。本書はこの前提に立ち、実際の業務システムでの意思決定を深く分析する。(Qiita 記事が本書の第3章を参照した際の核心。定義のあいまいさを認めた上で設計判断を論じる本書の姿勢を示す)
外部からの言及
- 例外設計を扱う複数の記事が本書第3章を参照しており、エラーと例外の定義を文脈依存として整理するアプローチを理論的な根拠として引用している。設計議論の土台を作る本として実務エンジニアが活用している様子が見られる(qiita)
編集メモ
Qiita 参照記事 2件 / 累計 likes 223。記事数は少ないが、例外ハンドリングという特定トピックで繰り返し参照されており、実務判断の根拠として使われている。楽天ランキング入りの記録はなし
読む前に押さえておきたいこと
- 複数の言語またはフレームワークで実際に本番コードを書いた経験(言語横断の議論が多いため)
- モノリスまたはマイクロサービスを業務で設計・運用した経験が1つ以上あること
- 分散システムの基礎概念(整合性モデル、CAP定理の概要)を知っている状態が望ましい(第10〜11章向け)
学習のコツ
- 全章を通読するより、現在直面している設計課題に対応する章から読み始めるほうが吸収が早い。第2〜6章はコードレベル、第10〜12章は分散システムレベルとレイヤが分かれている
- 各章末で提示されるトレードオフの整理を、自分のプロジェクトの判断と対比しながら読むと、単なる知識習得を超えた判断軸の言語化につながる
- 第3章(例外とエラーハンドリング)と第12章(バージョニングと互換性)は、チームレビューで判断基準を共有する際の共通言語として使いやすい章
出版社による内容紹介
ソフトウェアで陥りやすい誤りと、設計のトレードオフを紹介! ソフトウェアにかかわるすべての人は常に、さまざまなコンテキストや制約の中で多くの決断に迫られています。本書は、モノリス、マイクロサービス、ビッグデータ処理、ライブラリなど、さまざまなソフトウェアシステムの経験から得た教訓を共有するため、実際の業務システムの開発の中で行われた意思決定、そのトレードオフ、そしてその失敗を深く分析しています。設計における潜在的な問題や限界をあらかじめ学ぶことで、より良い選択ができるようになるでしょう。
この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。