Tidy First? の第3部の「理論」を読んだが、ちょっと長いので第26章までメモ
第3部では「なんで整理するのか」についての説明だが、その際に「選択肢」に対する考え方が語られていて、気付かされることがあって面白かった
具体的には以下の質問に回答するような内容になっている
- ソフトウェア設計とは何?
- ソフトウェア設計はソフトウェア開発と運用のコストにどのように影響する?
- ソフトウェアの構造に投資することと、ソフトウェアの構造に投資しないことのトレードオフは何?
- ソフトウェアの構造を変更するかどうか、またどのように変更するかを判断するために、どのような経済的および人的原則を使用できるか?
これを説明するときのキーワードになっているのが「選択肢」だった
22. 有益な関係の要素
ソフトウェア設計とは何かの話
ソフトウェア設計とは、要素を有益に関連付けること
ソフトウェアにおける要素とは以下を指す
- tokens
- expressions
- statements
- functions
- objects/modules
- systems
ここで同階層構造(Compositeパターン)の話が出てきたので以下を寄り道して読んだ
refactoring.guru
関連付けるとは以下を指す
- Invokes
- Publishes
- Listens
- Refers (as in fetching the value of a variable)
つまり、ソフトウェア設計について話す時は以下について考えると構造と動作が明確になるよという話しだった
- 要素階層
- 要素間の関係
- それらの関係によって生み出される利益
23. 構造と動作
行動は価値を創造する
理論上、システムが動作すればするほど価値が生み出されるはず
しかし、価値追求のために「拡張するという選択」をした場合、不安定性が伴う(1,000 台の自動車を製造できるとしても、100,000 台の自動車を製造できるという保証はない)
その要因は、いろいろある
- 重要な従業員が辞めた
- 顧客と隔たりができた
- 変更にかかるコストが急騰した
3つ目はこの本で対処できる問題である
拡張しても動作する構造には価値があると言えるので「動作(振る舞い)の変更」と「構造の変更」は大事
ただ、「動作(振る舞い)の変更」と「構造の変更」は「可逆的」かどうかで根本的に違うものである
24. 経済学:時間価値と選択性
話は急にお金の話になった
著者がお金の性質を学んだとき、プログラミングに対する姿勢が変わったとのこと
著者が学んだお金の性質は、以下の2 つの特性で構成されていた
- 今日の 1 ドルは明日の 1 ドルよりも価値があるので、早めに稼いで後で使う
- 混沌とした状況では、物よりも選択肢のほうが重要。そのため、不確実な状況でも選択肢を作る
これをソフトウェア設計に落とし込むとき、「早く稼いで後で使う」というのと「物ではなく選択肢を作る」というのを調和させる必要がある
25. 今日の1ドル > 明日の1ドル
最初にお金をいっぱいもらうか、後にいっぱいもらうかの話
最初にいっぱいもらった方がやる気が持続するしワクワクするので、この本の中でのお金の時間価値は「片付けは後回し」が推奨されるという話
26. 選択肢
著者がウォール街でトレーディング ソフトウェアに携わっていた時に選択肢の価格設定について知ったとのこと
- 「次にどんな行動をとればいいのか?」という状況は価値の源泉である
- この時に「次にどんな行動を実践できるか?」に対する選択肢があることに価値がある
- 価値の予測が不確実であればあるほど、選択肢の価値が大きくなる
ソフトウェア設計を選択肢の観点から考えると、今まで恐れていたことをポジティブに考えられるようになる
- 価値が変動するほどの振る舞いの変化はあればあるほど良い
- 開発期間が長ければ長いほど不確実なことが増えるので良い
- 選択肢を作成するために行う設計作業は少ないほど良い
感想
お金の価値の話をソフトウェア設計に落としこむ話は、今までなかった観点で面白かった
特に「選択」に目をむけるとこれまでと違った見方がいろいろできるかもと思った