良い設計は、なぜハウツー(How to)ではないのか
ハウツーは具体例に過ぎない 抽象的な概念はそのままでは実践できない 設計はパターンではない 思考の型は経験によって磨かれる 人間の脳も本質を抽象化している まとめ ソフトウェア設計を学び始めた頃、多くの人は「設計パターン」や「ベストプラクティス」を覚えようとします。 しかし、経験を積むほど、あることに気付きます。 良い設計とは、ハウツーではないということです。 ハウツーは具体例に過ぎない 例えば、100個の設計事例を学んだとします。 それらを一つずつ覚えるのではなく、 なぜその設計が良かったのか 何を守ろうとしていたのか どのような考え方が共通しているのか を考え続けると、100個の具体例は、やがて10個程度の共通した思想へと整理できます。 さらに、その10個を見比べると、もっと本質的な共通点が見えてきます。 最終的には、 「良い設計とは○○である」 という一言で表現できるようになります。 しかし、この一言だけを最初に聞いても、多くの人は何を意味しているのか理解できません。 それは、この一言が100個もの具体例を抽象化した結果だからです。 抽象的な概念はそのままでは実践できない 抽象化された概念は、本質を表しています。 一方で、そのままでは実践には使えません。 例えば、 「責務を適切に分離する」 という言葉だけを聞いても、 実際のプロジェクトで、 どこでクラスを分けるべきか どこまで責務を持たせるべきか 例外的なケースではどう判断するか までは分かりません。 抽象的な概念は、「考えるための軸」を与えてくれるものであり、「答え」そのものではないのです。 設計はパターンではない 設計パターンは非常に役立ちます。 しかし、それだけでは十分ではありません。 なぜなら、ソフトウェア開発で解決したい課題は無限に存在するからです。 チームも違えば、 ビジネス 技術的制約 開発体制 メンバーの経験 将来の変更 もすべて異なります。 つまり、たとえ100個のパターンを覚えたとしても、世の中のすべての問題を解決できません。 だからこそ重要なのは、 パターンを覚えることではなく、未知の問題に対して適切な判断ができる思考の型を持つことです。 思考の型は経験によって磨かれる 思考の型は非常に抽象的です。 そのため、実践経験が少ないうちは、 「なるほど」と思っても、実際の設計にはなかなか活かせません。 さまざまな失敗や成功を経験し、 「あの設計が良かった理由は、この考え方だったのか」 と何度も気付くことで、初めて抽象的な考え方が自分のものになります。 つまり、思考の型は知識ではなく、経験によって検証され、磨かれていくものです。 人間の脳も本質を抽象化している 実は、この考え方はソフトウェア設計に限った話ではありません。 人間の脳は、使わない知識を忘れていきます。 もし、あらゆるハウツーをそのまま覚え続けようとしたら、脳の負担は非常に大きくなります。 そこで脳は、多くの具体例を経験すると、 共通点を見つけ 抽象的な概念へ整理し 必要な場面で、その概念から具体例を導き出す という学習を自然に行います。 つまり、人間は無意識のうちに、 ハウツーを抽象化し、本質だけを残すように学習しているのです。 ソフトウェア設計についても、パターンとして覚えると、世の中の課題の数だけパターンを覚えることになってしまいます。 それは現実的に無理です。 だからこそ、現場でたくさんの事例を見て、そこから共通的な概念を抽出してこそ、初めて現場で使える抽象的な思考の型が身に付くと考えています。 ...