昨日のエントリのコメントでid:NyaRuRuさんに紹介してもらった記事。
情報科学科の先輩に聞く!|東京大学理学部 情報科学科/東京大学大学院情報理工学系研究科 コンピュータ科学専攻
いいお話です。
――その2つの「お客」の要求がconflictするようなこともあるんでしょうか。
それは難しい話ですね。ライブラリとしての機能を限定してしまうと、開発はしやすくなってもお客様にとって不利益になったりします。ただできるだけ両者の利益になるように、安易に妥協はしないようにしています。場合によってはカスタマイズ性の高いAPIと利用が簡単なAPIを2種類用意することもありますね。
この辺は私もライブラリを提供する側として、身につまされる話です。私の経験では開発当初は簡単なAPIで、あまり多くないものが喜ばれます。使うために敷居が低いことと、Aという結果を得るために手段1,手段2,手段3と複数あると「じゃあどれを使えばいいんだよ!」と逆切れされることがあるからです。レイヤーが少し違いますが、今のASP.NETなんかわかりやすいですね。ASP.NET MVC/Ajax/Silverlight/Dynamic Dataなどなどいろいろあって、じゃあ途中どれを採用すればいいか経験の少ない人はわかりづらいかもしれません。
そして、開発が進むと「もっとこんなことしたい」という要求が出てくるので、もっと低レベルのAPIを公開したり、矛盾のない〜Ex(制限拡張系)とか〜2(Ver2)とかいうAPIを用意していくことになります。
使う人が楽をするためにライブラリ開発者が提供しているわけなので、できるだけ開発者は「面倒だから」といってさぼらずに作りたいものです。いや、私も人のこと言えませんから…。MSDNでAPIをみていると、つかむまでは難しいけど、つかみだしたら加速するというか。会社によってはミドルウェアでAPI提供していないものとか、殴りに行きたくなることがしょっちゅうです(;-;)。