少しず読んでいる Tidy First? の読書メモ
第3部の「理論」の第27部から最後まで
27. 選択肢とキャッシュフロー
27章では割引のキャッシュフローと選択肢の経済的な考え方の違いについて軽く説明している
- 割引のキャッシュフローは、より確実に早く収益を上げ、より不確実な後で支出するように教えている。つまり、最初に整理しない
- 選択肢の考え方は、後でより多くの収益を上げるために今支出することを教えている。つまり、絶対に最初に整理するべきで、その後も整理を続けるべき
創出される選択の価値が大きい場合、最初に整理する方が経済的に理にかなう可能性がある
ここは直感による判断になる
28. 可逆的な構造変化
28章では可逆的な構造変化について説明している
整理整頓に関連する 1 つの特性として、「構造の変更」は一般に元に戻せるが、「振る舞いの変更」は戻せないということ
例えば、ヘルパー関数を抽出したが、気に入らない場合に再びインライン化すれば、そのヘルパーは存在しなかったことにできる
一方で、10万通の誤送信といった振る舞いの変化が起こした影響は後戻りできない可能性がある
意思決定を可逆的にする(「元に戻せる」ようにしておく)ことには価値がある
29. カップリング
29章はカップリングの話
「結合」が及ぼすソフトウェアの影響に関してうっすらと説明している
これに関しては「Balancing coupling in Software Design」を読むのが良さそう
30. コンスタンティヌスの等価性
30章はコンスタンティヌスの等価性について
「コンスタンティヌスの等価性」とは、ソフトウェアのコストはソフトウェアを変更するコストとほぼ等しいという法則
ケント・ベック氏が名付けたもの
結合と凝集性に関する最初の研究である Structured Design で、ソフトウェア設計の目標はソフトウェアのコストを最小化することであると仮定したが、そのコストとは変更するコストと言える
ソフトウェアのコストを削減するには結合を減らすのが良いが、分離は無料ではなく、トレードオフの影響を受ける
31. カップリングとデカップリング
これまでの割引のキャッシュフローや選択肢の例えで出てきた、最初にコストを支払うか、後にコストを支払うかはカップリングとデカップリングのコストに帰着しているなという印象を受けた
つまりカップルリングにコストをかけるか、デカップリングにコストをかけるかの話
両方のコストはトレードオフである
32. 凝集性
32章は凝集性の話
凝集性とは、モジュール(クラス、関数、コンポーネントなど)が持つ要素がどれだけ密接に関連しているかを示す指標
一般的には、高い凝集性が望ましいとされる
例えば、ヘルパー関数の抽出は、「凝集性のあるサブ要素を抽出する」アプローチ
ヘルパー関数の行をまとめて変更する必要がある場合、ヘルパーは凝集性があり、分析や変更が容易になったり、偶発的な動作変更への耐性が得られたりする
何と何が結びついているかを最初から完全に理解するのは不可能なので、すべてを劇的に再配置することはやめる
33. 結論
「最初に整理すべきか?」というタイトルの回収
以下の点で回答が変わる
- コスト: 整理整頓によってコストは削減されるのか、遅くなるのか、発生しなくなるのか
- 収益: 整理整頓によって収益は増えるのか、早くなるのか、増える可能性は高くなるのか
- カップリング: 整理整頓によって、変更する必要のある要素は少なくなるのか
- 凝集性: 整理整頓によって、変更する必要のある要素の範囲が小さくなり、集中的になるのか
これらに回答できるとき、誰が・いつ・何を・どうやって・なぜ を意識して整理を始める
これが、ソフトウェア設計を日常業務と戦略計画の両方に取り入れれば、ビジネスとテクノロジーの間の溝を埋める機会が得られるはず