You Aren’t Going to Need It
それはいずれ必要にならない
初心者プログラマーにはピンとこない。意識高い系の中堅プログラマーに刺さる原則です。
どんなときに使うの?
やりすぎ拡張性
このクラス、モジュール構成見直してインタフェース化してアルゴリズム動的生成で依存性注入できるようコード書き直して、拡張性が爆上がりっすよウェーーイ!
それ、いまいらないんだけど…
「拡張性」、あとで改造しやすくすること。
いちど作ったプログラムは、長い間使われます。あとでいろいろ改造するかもしれません、改造しやすさ(=拡張性)は、とても大事な要素です。
「いずれ直すんだったら、それを見込んで、あらかじめ直しやすいプログラムにすればいいじゃん?」と思うかもしれません。
YAGNI原則は、拡張性の作りこみを否定します。なぜでしょう?
いずれ必要にならない、とは?
この原則をもう少し詳しくいうと、
- 実際に必要なときに、実装すること
- 必要になると予測したときは、決して実装しないこと
- 将来の案件/アプリケーションの設計に、最終的にプラスになることはめったにない
いまの時点で「将来はこうなるだろうな」と予測したところで、本当にそうなるか分からない。
どうなるか分からないことにコストをかけるより、いま必要なことだけをやるべきだ、ということです。
「拡張性」という快楽に立ち向かえ
「拡張性」を唄うとき、ちょっと立ち止まって考えましょう。
「拡張性をプログラミングする」ことは、熟練プログラマーにはとても楽しい作業。
- モジュール構成を見直し
- インタフェース化し
- アルゴリズムを動的生成できるようにし
- 依存性注入できるようにして。。
もういくらでも、プログラミングを続けられます。
拡張性は悪いことではないです。重要なのは、そのコストに見合う対価があるか。
コストをかけるなら、それはチームの仲間、リーダー、クライアントと相談して進めるべきことです。認識をあわせて進めましょう。
まとめ
要は、コストとのトレードオフです。いまやるべきことなのか?を考えましょう。
たいていの場合、拡張性のためにプログラムを追加するよりは、シンプルになるようにプログラムを削ぎ落すほうが有効です。
まず念頭に置くのは、KISS原則。シンプルに勝る拡張性はありません。
コメント