【80】クレバーになるな
頭のよさ、機転、思慮深さ、知識の幅と深さ、几帳面さなどは、人として優れた性質だとされるものですが、特にアーキテクトの場合は、これらの性質が求められます。
しかし、クレバー(巧妙、小器用)だという評価には、ただ褒めているというのとちょっと違うニュアンスがあります。素早くソリューションを考えついてその場をしのげるものの、結局は子どもだましのような詐欺のようなものに落ち着いてしまう、という感じがあります。高校の頃にも、意味をゆがめたり論点をずらしたりしてうまく立ち回る同級生がいたと思いますが、クレバーというのはそんな感じです。
クレバーなソフトウェアは、高くつきメンテナンスしにくく、もろいものです。クレバーになってはいけません。できる限り愚直になり、しかも適切な設計を作ることです。適切な設計にはクレバーという印象は生まれません。クレバーな部分がどうしても必要に思えるのなら、問題の立て方が間違っています。愚直に取り組めるようになるまで、問題を立て直しましょう。チョークでラフに書いたスケッチを使い、一般性を保つことです。思いつきの特殊性は消し去りましょう。賢いアーキテクトになるためには愚直でなければなりません。
ソフトウェアにトリックをかけて動くようにするのは、クレバーな技によるものです。細々とした専門的なことによってソフトウェアを動かす弁護士のようなアーキテクトになってはなりません。私たちは、ピタゴラスイッチを発案したループ・ゴールドバーグではないのです。私たちは、冒険野郎マクガイバーでもないので、ペーパークリップとクラッカーとガムから何か複雑な仕掛けを作ったりすることもできません。頭を空っぽにして、クロージャやジェネリックプログラミングの知識を使わずに問題にアプローチしましょう。もちろん、そのような道具が必要になる場合もありますが、普通に思うほどそのような場面が頻繁にあるわけではありません。
ソリューションが愚直なものであれば、それを実装、メンテナンスできるデベロッパーも増えます。愚直なソリューションのコンポーネントは、たった 1 つのことしかできません。そのようなコンポーネントは、作るために必要な時間も後で書き換えるために必要な時間もごくわずかです。また、使っている素材の最適性をそのまま引き継ぎます。それらは生きたプロセスから生まれ、エレガントで単純なものになります。クレバーな設計は、ごつごつの根っこが張っていて、細部がでしゃばりすぎています。そのような設計は、触れたらぼろぼろに崩れてしまうでしょう。