俗説1:Rubyは小さなプロジェクトに向いていて、Javaは大きなプロジェクトや複雑なプロジェクトに向いている
要約すると、Halloway氏は、小さなプロジェクトの場合、確立したライブラリを探していることで、開発者が殆どコードにさわることが無く、放置状態となっている間の不確定な要因に応じて、スケジュールの調整が大胆にできるということを主張している。これらの要因は、定評のあるコミュニティや経験豊かな開発者を持つJavaに有利である。Holloway氏は、大きなプロジェクトに対しては、Rubyの利点である軽快なライブラリよりも、言語生産性の点を主張している。彼は、どちらが向いているかという論理は、今既にある見識に逆行していると言っている。彼は、次のように言って説明している。
現在、Rubyはある特定の種類の小さなプロジェクトにおいて、非常に有効です。例えば、データベースをバックエンドにおいたWebアプリケーションがそれにあたります。Ruby on Railsは、Rubyでの小さなプロジェクト全てが持つ不利な点を是正してくれます。
俗説2:いくつかのRubyの機能によって、コードの保守性が悪くなる
この俗説で言いたいことは、Rubyの機能を正しく利用することで、コードの保守性がよりよいものになるということである。保守性の高いコードとは、次のようなものである。
- アプリケーションやモジュールの設計の全体が理解できる
- 見つけたいコードが(すぐに)見つけられる
- コードの可読性が良い
- コードが修正しやすい
- 変更作業の妥当性をチェックできる
それぞれの優位性を比較した結果は、次の通りである。
- アプリケーションやモジュールの設計の全体が理解できる:引き分け
私の経験上、これをきちんと支援している言語はありません。しかし、きちんとした抽象化を支援してくれています。JavaやRubyは、継承の実装、クラス、ポリモルフィズム、カプセル化等といった、一般的な多くの抽象化の機能を備えています。
見つけたいコードが(すぐに)見つけられる:Javaの勝ち
IDEのサポートをベースとして、Javaが勝っていると言えます。
コードの可読性が良い:Rubyの勝ち
ここで言いたいことは、RubyのコードはDRYなコードを書きやすいので、可読性が良いということです。
コードが修正しやすい:Rubyの勝ち
ここで言いたいことは、動的言語であるため、変更が容易であるということです。
変更作業の妥当性をチェックできる:引き分け
RubyとJavaは、共に単体テスト、受け入れテスト、継続的インテグレーション等に対するサポートが充実しています。
俗説3:Rubyは、非常に難しい
一般に、平均的な開発者にとってRubyは非常に難しいものであると言われている。Halloway氏は、プログラミングは難しいものであり、本棚にある本に書かれている言葉をよそに、21日で習得することはできないと主張している。結局、JavaとRubyは両方とも難しい。彼は、次のように主張している。
言語の機能を制限することによって、困難から離れたいと願うことなど無理な話です。
俗説4:Railsの素晴らしいアイデアをコピーするのは簡単である。
この俗説は、一部正しいという意味でトリッキーなものである。Railsの素晴らしいアイデアの多くは、他のどんな言語にもコピーすることができる。しかしながら、このことに対する反論として、次のことがあげられる。
俗説5:ゼロサムゲームである(中略) その他の素晴らしいアイデアとして、特定のRubyの機能に依存したものがあります。Railsでは、より良いものを作成し、より読みやすいオブジェクトモデルにするために、オープンクラスを利用します。例えば、StringUtilities.isBlank(x)と表すかわりに、x.blank?とすることができます。個人的には、そのような違いは大した問題ではないと思っているのですが、多くの人にとって、可読性を大きく向上させるために意味のあることです。
この連載を要約したものとして、Rubyは言語として勝っているが、Javaはプラットフォームとして勝っているという見地に立ち、次のように述べている。
私たち全て、うまくやっていけるのでしょうか?私は、言語をどれにするかによってプログラマが決まってしまうようなことのない世界に住みたいと思っています。Ruby、Scheme、Scala、Erlangとコードを書く人は様々なので、JVMの調和の中で、私たち全てがどこでも住めるようになれば良いと思います。
JRubyプロジェクトへのコントリビュートや、Antの代わりにRake("http://www.infoq.com/rake"を参照)を使った、Javaアプリケーションの管理といったことを含んだ、先に述べたような調和を前進させるためのステップをリストアップした。
(原文は2007年6月8日にリリースされました)