他の言語の他のライブラリという検証済みのアイディアを利用しよう


 あるOSである言語でプログラムを開発していると、何か機能が足りないと感じることがあります。
 そのようなときには、別の言語のライブラリを参考にしています。

他のライブラリをまねる理由

・何が有益かを既に知っている。
 PythonやJavaなどの言語を使っているとそれらの言語で自分にとって有益なライブラリが何であるのかを既に知っています。
 C++言語のライブラリにもこんなのがあればいいのにという部分を、既に知っているわけで、あとは、その機能をC++言語の標準的なライブラリになければ、実装したいという欲求につながります。STLの他にもBoostのライブラリを見たうえで、自作する必要があるかどうかを見極めます。
・その機能の実装がうまくいくことがわかっている。
 言語が変わっても、コンピュータ言語で実現できる本質は変わりません。その機能が実現できることが既に示されていて、必要ならばその実装の詳細を読むことができるのはオープンソースの強みです。

・外部仕様に迷わなくなる。
 それは有用性が検証されているライブラリをまねることで、少なくとも外部仕様に迷わなくて良くなります。外部仕様が今までに使い慣れたものであれば、そのライブラリを使うために、新たに覚えなければならないことも抑えることができます。
 例:matplotlib のライブラリは、MATLABの描画関数に似ています。MATLABの描画関数を使ったことのある人ならば、matplotlibを使うのは、すぐ慣れることができるでしょう。MATLABを使ったことがない人でも、有用性を検証されている設計のライブラリは、魅力的にうつるでしょう。(私見:Excelのグラフには、ヒストグラムの描画関数がないなど、制限が多いのが残念な点です。)

 どのようなライブラリにすれば使い勝手がよいのかということはとても大事です。様々な言語で目的の処理に対してどのような実装があるかを知ることです。自分が普段使っていない処理系のライブラリを知るためにも、他の処理系やライブラリを使っている人の声を聞いてみることは有効です。

 ライブラリの外部仕様は、メソッドの名前や引数の順序、戻り値のデータ形式という部分でも、よい設計とそうでない設計とがあります。
 例を示します。
scikit-learnの機械学習のライブラリが便利な理由の1つには、機械学習のアルゴリズムの種類によらず、同一のインターフェースで利用を可能にしているという点です。

estimator.fit(X_train, y_train)
y_test_predict[name] = estimator.predict(X_test)

 もし、これが手法ごとに、メソッドの名前、引数のデータ形式、引数の順序、戻り値の形式が異なっていたら、scikit-learn
はここまで有用性を獲得しないはずです。

自分が新たなライブラリを作るときに、既に検証済みのアイディアを利用して、設計をしましょう。

参考URL
scikit-learnで複数のモデルでそれぞれにfit(),predict()しているサンプルコード
Face completion with a multi-output estimators