Javaで大規模開発に役立っている機能や特徴は何でしょうか?

どうも前の質問は、Java屋さんJava信者さんのアイデンティティを傷つけたようですので、質問を変えてみます。


質問: Java の機能や特徴のうち、大規模開発に役立っていると思うものは何ですか? (理由付きでお願いします)


質問の背景を説明すると、前の『大規模開発ではどう役に立つの?』という質問だと感情的な回答が目立ち、説得力のある回答はありませんでした。そこで逆に考えて、大規模開発で役に立っているJavaの機能を列挙していけば、大規模開発では特に役立っているわけではない機能もわかるのでは、という考えです。

Javaは大規模開発で実績をちゃんとあげている言語です。しかしJavaのすべての機能や特徴が大規模開発向きというわけではないでしょう。Javaの豊富な機能のうち、特に大規模開発で役に立っているものとそうでないものとをはっきりさせてみたいと思います。また何が大規模開発で求められるのか、そもそも大規模開発とは何か、という話にも広げられればうれしいです。

Javaの機能や特徴のうち、大規模開発に役立つとして簡単に思いつくのは、こんなところでしょうか。

  • 静的な言語である (静的な型がある)
    • コンパイル時に多くのエラーが発見できる
    • 他人が書いたコードを解析しやすい
    • IDEでの入力補完ができる
  • 実行速度が速い
    • CPU boundなアプリケーションで特に有効
    • (IO boundなアプリケーションではそうでもない)
  • ネイティブスレッドをサポート
    • マルチコア/マルチCPUでは重要
  • 本格的なオブジェクト指向言語である
  • 動的な要素が少ない
    • evalやマクロは黒魔術を増やすだけ
  • classとinterfaceがある
    • 仕様と実装を分離して疎結合にしやすい
  • ライブラリが豊富
    • 実装しなければならないコードを減らせる
  • 商用サポートが受けられる
    • 責任の押しつけ先って必要だよね


最後のほうは機能じゃないですけど、まあ関連事項ということで。他に思いつくものがあれば、コメント等でご意見ください。

念のために書きますが、ここで質問しているのは『大規模開発にとって便利なJavaの機能』であって、『Javaの利点』ではないです。大規模開発にとってどうか、という観点を持つようお願いします。


というわけで、Java屋のみなさんよろしくお願いします。この連休中に何も予定がないような人は特に! 暇つぶしにどうぞ! ついでにアンチつぶしにもなるよ!


#あれー、連休中にすることが他にあったはずなのに・・・