「汎用的」を逃げに使うな
「ここは汎用的に作ってください」
よく仕事でプランナーから言われる台詞です。
時々プログラマーからも言われたり、自分で言っていることもあります。
この「汎用的」という言葉ですが、良く言えば「どんな状況にも柔軟に対応出来る」という事です。
しかし、悪く言えば「具体的なことは現時点で決まっていない」という事でもあります。
「汎用的」というのは究極的には直接プログラミング言語を書くのが一番汎用的なのですが、おそらくそんなことは誰も求めていなくて、もっと限定された機能を手軽に利用したい、というのがニーズでしょう。
となるとプログラマーの作業はプログラミング言語から手軽に利用する手段へと各機能をコンバートするという事になります。
ここで具体的なことが決まっていない場合、どの機能をコンバートすればいいのかが曖昧になってきます。
後々使ってみると、アレが足りない、コレはこうじゃなかった、なんて事もあります。
結局プログラマーがわざわざ機能をコンバートするよりは、最初からプログラミング言語でベタで作った方が早くて楽だった、って事もあります。
要するに何が言いたいかというと、具体的なことが決まっていない段階で「汎用的」を持ち出すのは問題先延ばしの逃げでしかなく、しかも無駄な作業が増える可能性も孕んでいるのでやめましょうってことです。
「汎用的」のコストはベタで作るよりも多くかかります。
確かに汎用的にした方がメリットが出てくる損益分岐点のようなものは存在しますが、そこを精査するためには「では汎用的にしたシステムで具体的に何を作るのか」をハッキリさせないといけません。
私の経験則から言えば、何か汎用的なものを作る場合は、具体的なものを作った上で、少しずつ汎用的にするのがうまく行く方法だと思っています。
最初から汎用的に設計したものほど、実際に使ってみると抽象的すぎて役に立たない、ということは多いものです。

