インターフェースはシンプルにする。実装の複雑さからは逃げない。

Joelのシンプルさを読んだ。その内容とは少しズレるけど感想。
シンプルイズベストという言葉はしばしば製品提供者が実装の複雑さを避けるための逃げ口上として使われる。新機能の追加実装が大変だし間に合わないよとか、作るのダリーとか。
忘れてはいけないのはそもそもソフトウェア開発者の仕事は主にプログラムを実装することによって問題を解決することで、その問題っていうのは複雑でめんどくさいから問題なわけです。めんどくさい事をプログラムにやらせることで1回で済まそうとしてるんだから、その1回の実装でめんどくさいって思っちゃいけない。
さて、ユーザーに対してはそのめんどくささを解決するために機能を提供するんだけど、そのインターフェースが複雑になっていたら誰も使ってくれないので当然シンプルにします。この場合のシンプルさが何かというのは場合によりけりなので書かないけど複雑なものがシンプルになったことで何か問題が解決する。プログラムの価値はそこにある。
ユーザーインターフェースだったらボタンとかスクロールバーとかがその対象になるけど、プログラムのインターフェースはメソッドとかプロパティの宣言だ。最近職場に入った新人から「メソッドをどの単位でどう宣言していいかわからない」という漠然とした質問を受けたけど、こうすべき、という直感がまだ身についていない人にそれを説明するのは結構難しくてしどろもどろになってしまった。そもそも直感的にそれができる人に解説なんか必要ないわけだけど。
Joelのエッセイでヒントが得られたので、その質問に対するひとつの回答を書いておく。メソッドを宣言することによって呼び出し側にシンプルさが提供されなければならない、ということ。そうでなければその宣言は間違っている。呼び出し側のプログラムを書くのが自分だけであっても当然同じ。その宣言によって世界はシンプルさを増したか? それが問題だ。
その問いに対してYesと言えるなら、そのメソッドが100回呼ばれようが1回だけだろうが悩む必要はない。
じゃあ何をもってシンプルとするかって? それはまた別な問題だ。