生産性について - プログラミング言語のドメイン
一人ブレスト。ややカオス。
前回のはどうやら釣られただけのようですが、それでも「JavaはRubyより生産性が云々」という議論はよく聞きますよね*1。私はRubyを文法と設計思想でしか知らないので多くを語ることはできないのですが、そもそも一般論で比較する内容じゃなくね?
極端な例だと、SQLとXPathで勝負しているようなもんです。
上記の2つで勝負したら、明らかにドメインが直交している(かぶらない)ので不毛な戦いになることが予想されます*2。
しかし、困ったことにJavaとRubyはどちらも汎用プログラミング言語という、ドメインの分割がしにくい言語です。さらに、特徴が静的/動的型付だったり非LL/LLという(宗教的には)それなりの差異があります。
そうすると、戦いはバックグラウンドまでもつれ込みます
ここで、フレームワークという言葉を使いましたが、現在のほとんどの開発ではこのフレームワークを使っていると思います。私のフレームワークに対する理解は、
というものです。これには、2つの方法があります。
つまり、「分割して統治する」か「侵略する」かの違いだと思います。ただ、例に挙げたS2JDBCは構文がSQLそのもので、Where句に生の文字列リテラルを使ったりするところがあるので、ちょっと例としては適切でなかったかもしれません。
ちなみに私はブリッジの方法が好きです。Javaでコンパイラを書くときも
- パーサをJavaで書く気にならないので、パーサジェネレータを使ってJavaを生成する
- データ構造をJavaで書きたくないので、DSLを作ってJavaを生成する
- テストデータをJavaで構築したくないので、DSLを作ってインタプリタを使う
といった感じに「DSL+ブリッジプロダクト」という形式で、Javaが不得意なドメインでは積極的にDSLを使うことにしています。総合的な生産性についてはよく分かりませんが、少なくとも書いててげんなりすることがありません。
DSLについての考察は、また別のエントリで。