Java é maduro. Está testado. E é rápido (contrariamente ao que todos os grupos anti-java possam dizer). Também é bastante palavroso. Ao passares de Java para Ruby, o programador poderá esperar que o tamanho do seu código diminua consideravelmente. Também poderá esperar demorar menos tempo a criar um prototipo aplicacional.
Semelhanças
Tal como em Java, em Ruby…
- A memoria é gerida automaticamente através de um garbage collector.
 - Os Objectos são fortemente tipados.
 - Existem métodos públicos, privados e protegidos.
 - Existem ferramentas de documentação embebidas (a de Ruby chama-se RDoc). A documentação gerada pelo RDoc tem um aspecto muito parecido aquela gerada pelo Javadoc.
 
Diferenças
Ao contrário de Java, em Ruby…
- Não precisará de compilar código-fonte, pois este é executado directamente.
 - Existem vários conjuntos de ferramentas de desenvolvimento com interface gráfica (GUI). Os utilizadores de Ruby podem experimentar WxRuby, FXRuby, Ruby-GNOME2, Qt, ou o biblioteca nativa Ruby Tk, por exemplo.
 - Utiliza-se a palavra-chave 
endpara terminar a definição de uma classe em vez de se colocar parentesis á volta de blocos de código. - Utiliza-se o 
requireem vez deimport. - Todas as variáveis de instância são privadas. Podem, no entanto, ser acedidas externamente através de métodos.
 - Os parêntesis nas chamadas aos métodos são normalmente opcionais e muitas vezes omitidas.
 - Tudo é um objecto, incluído numeros como 2 ou o 3.14159.
 - Não existe validação estática de tipos de dados.
 - Os nomes de variáveis são apenas etiquetas. Não têm qualquer tipo de dado associado a elas.
 - Não existe declaração de tipo de dados, estes são associados a novos
nomes de variáveis conforme se necessite (por exemplo 
a = [1,2,3]em vez deint[] a = {1,2,3};). - Não existe transformação de tipos de dados (casting). Basta chamar os métodos. Os seus testes unitários deverão avisa-lo se existe uma excepção antes da execução do código.
 - Escreve-se 
foo = Foo.new("ola")em vez deFoo foo = new Foo("ola"). - O construtor é sempre chamado “initialize” em vez do nome da classe.
 - Temos “mixins” em vez de interfaces.
 - O uso de YAML é favorecido em relação ao XML.
 - Utiliza-se 
nilem vez denull.