YAGNIでは、
必要になるまで新しい機能は追加しないとあります。
つまり今必要なものだけを実装しろということです。
UNIX哲学の拡張性の原則では、
拡張性に備えた実装をするべきだとあります。
つまり未来を見据えて実装しろということです。
このふたつは時勢においては矛盾しているように見えますが、
その内容はまったく相対するものではありません。
このふたつのお話しをつなぎ合わせると、
「今必要な機能だけを実装しよう、でも後に拡張するときの準備だけはしておこう。」
という感じでしょうか。
よくこの拡張性を機能と捉えられることがあるのですが、
並のプログラマーなら拡張性は常にある程度考慮しながら実装しています。
拡張性を用意するのに時間がかかると思っている人は、
経験が無いか実力の低いのではと疑ってしまいます。
よほど抽象化のレベルを上げない限りは、
拡張性は実装と同時進行で実現されるべきものなのでYAGNIに引っかからないのです。
むしろここで過剰に反応する人たちは、
意味もなく拡張性を狭める設計をするような気がします。
log4jのロガー名は階層構造が取れるのに、
階層構造ではないロガー設計をして後で泣いていたSEを見たことがあります。
SIerは上流だとか下流だとか言っていますが、
こういうことを考えて実装するには邪魔な区切りではないでしょうか。
まとめます。
YAGNIとUNIX哲学の拡張性の原則は同居できます。
しかし技術力が低かったり、
設計者と実装者が分けられているとその恩恵を享受することは難しいです。
少しでも同居した実装ができる範囲を広げられるように、
もっともっと努力していかなければなりません。
0 件のコメント:
コメントを投稿