結論
思考でも実装でも具体と抽象を行き来するって大事だな〜と思う。
具体と抽象の思考
実装の場合だと
抽象しかできない
- アーキテクチャしか議論できない
- 絵に描いた餅になりがち
- 実装者に「実際にそれを実装して運用できるんですか?」と思われかねない
具体しかできない
- 言語やライブラリ、フレームワークでの詳細な実装しか議論できない
- 局所最適化された無理矢理な実装になりがち
- アーキテクチャや仕様レベルで考えたらもっとシンプルな実装案があったかもしれない
抽象と具体ができると
- 言語やライブラリ、フレームワークの特性を考慮しつつアーキテクチャを考えられる
- 現実的な実装の落とし所を考慮できたアーキテクチャになる
- 抽象と具体の行き来ができるのでDesign DocやADRを書いてチームメンバーを先導しつつコードレビューで実装の良し悪しを指摘できる
- 言語やライブラリ、フレームワークを乗り換えるケースが発生しても抽象レベルの思考ができているのでどう移行したら良いかに対して精度の高い意思決定ができる
なぜこれを考えたのか
SNSを見てるとコンテキストを無視したやり取りが発生しがちであるが故に自転車の置き場議論になっているのをよく見かけるため。
「抽象しかできない(アーキテクチャしか議論できない)」ことの危険性を今一度自分へ戒めるため、考えていることを↑で言語化してみた。