javaもrubyも純粋なオブジェクト指向言語ですが、 両者の最も大きな違いは、javaの変数に型があることです。 変数に型があるということは、コンパイル時に最適化や正当性の確認などできることが増えます。 特に、正当性の検査をうまく使うとテストに頼らずプログラムの正しさを保証できます。
つまり、rubyのような動的な型を持つ言語は、プログラムの完全性と引き換えに柔軟性や開発効率を得たというのが、 これまでの一般的な見方でした。 しかし、XPの出現で状況が変りました。 XPでは単体テストルーチンを必ず作成し、修正のたびにこれを100%通して次のステップへ進みます。 この方法でプログラムの完全性の保証については静的型言語のコンパイルと同等のレベルになるのではないかと思います。