目くばせYAGNIと快晴のYAGNI

不要な抽象を持ちこまないのは YAGNI の大きなテーマだ. YAGNI に従うなら, 本当に必要になるまで, つまり実際に再利用や変更がおこるまでは距離をつくる抽象を持ち込むべきでない. 一方で, 経験からいずれそうした抽象が必要になるとわかることもある. あとで変更するのが目に見えているだけに二度手間が推しい. 今のうちに抽象をつくりこみたい. 絶対必要だってば. 私のなかの博打打ちがそう告げる. でも待って. <いずれ> や <今のうちに> は典型的な YAGNI 違反の堕落ですよ. 私のなかの清教徒がすかさず咎める. 睨み合いが始まる.

結果主義と投機気質の板ばさみにあった玉虫色の私は, 結果主義者の顔をたてながら投機屋への隙を残すようになった. 実際に距離をつくることはしないが, いつでも距離をおける道を選ぶ. そして投機屋がそれに気付くことを祈る. たとえば, インターフェイスの抽出はしなしなくても具象クラスを特定する箇所(インスタンス化など)は減らしておく. 新しいクラスの抽出はしなくても関係の深いプロパティの宣言をまとめておく. メタプログラミングはしなくてもそれとなく名前づけのルールを揃えておく. データドリブンにはしなくても値の設定を局所化しておく... 投機屋なら嗅ぎ分けられる, 結果主義者には気付かれないこうしたサインを, 私は <目くばせ> と呼んでいる. 目くばせのうち運のよかったものは, やがて本物の抽象に引き上げられるだろう.