Tudo bem que conheço bem pouco do Ruby On Rails, então peço que quem conhece mais me corrija se eu estiver errado.
E também não sou o dono da verdade, então, quem conhece pode corrigir qualquer um dos pontos que vou comentar a baixo.
Este post é o resultado de aproximadamente 1 semana brincando com o RoR, em casa a noite, ou seja, não dediquei muito tempo a isto …
Mas mesmo assim vou fazer aqui uma pequena comparação baseada nesta pouca experiência e em minhas preferencias pessoais …
Inicio de desenvolvimento rápido:
Bom, neste ponto o RoR sai disparado na frente do java, mas com certeza não é nada da linguagem ou do framework em si, e sim o ótimo conjunto de geradores de código que fazem parte do rails.
Existem alguns conjuntos de geradores acoplados a frameworks para java, como por exemplo o Trails e o JBoss Seam, mas nenhum deles é tão completo quanto o Rails, pelo menos foi a impressão que eu tive.
Linguagem:
Este item é bastante subjetivo, mas eu simplesmente não gostei da sintaxe do Ruby (Tudo bem, antes de eu começar a programar em java, aconteceu exatamente a mesma coisa, eu olhei o código, não gostei da sintaxe, e passei uns 6 meses sem mexer com java, depois voltei a estudar e acabei me acostumando).
Outra coisa que não achei legal no ruby, é que pelo menos até onde eu vi, não existe o conceito, pelo menos de maneira clara, os escopos private, protected e public (package private é coisa do java
)
E também achei muito extranho, eu poder declarar a mesma classe em 50 arquivos diferentes, e o que vai estar disponivel em runtime é a soma de todas as declarações, e também não entendi como ele trata conflitos, ou como ele define a ordem de processamento, considerando que a ultima definição de um método é que vale …
Outra vantagem para o Java é que por ser tipada, as IDEs podem facilitar o refactoring, o code completion nas IDEs (pelo menos as que testei) para Ruby é bastante fraco. ou seja, por ser uma linguagem fracamente tipada, a IDE não pode poupar tanto trabalho para o programador, como ela pode em uma linguagem fortemente tipada, e tudo bem, eu concordo que para varias coisas, se precisa escrever menos em ruby, o que diminui muito este problema, mas eu estou acostumado a ter IDEs trabalhando pra mim ![]()
Comunidade:
Pelo que percebi até agora, e provavelmenta também pelo tempo de estrada, o Java tem uma comunidade muito maior de desenvolvedores, mas também parece que proporcionalmente, a comunidade do Ruby, e principalmente do RubyOnRails é mais ativa, mas isto é puramente especulação, pelo que vi neste pouco tempo.
Utilização para Scripting:
Acho que não era bem scripting a palavra que eu estava procurando, mas a ideia é, é muito mais fácil fazer um programa console para pequenas tarefas em Ruby, principalmente por causa do Overhead de inicialização do java, um “Hello World” em java leva muito mais tempo para executar do que um em ruby por causa da inicialização do interpretador java, que com Java 6 melhorou bastante, mas ainda não esta bom ![]()
Utilização Enterprise:
Aqui o Ruby leva uma surra, pelo menos pelo que eu percebi até agora, por exemplo, não encontrei nenhuma forma de trabalhar com RPC distribuido em Ruby (algo similar a EJBs), claro que tem suporte a WebServices, REST, …
Mas nestas tecnologias é necessário saber onde esta o serviço, e a grande vantagem do EJB é que não é necessário saber isto, ou seja, o balanceamento de carga fica muito mais fácil.
Também não achei nenhuma forma de se trabalhar com mensagens assincronas, pode ser apenas falta de saber onde procurar, mas isto faz falta dependendo do sistema que se esta desenvolvendo.
Mapeamento Objeto Relacional:
O RoR tem um framework O/R mas achei ele muito menos flexivel que por exemplo o Hibernate, achei menos flexivel que JPA, suficiente para a grande maioria dos casos é verdade, mas menos flexivel.
Eu não tenho base suficiente para comparações de performance, mas esta foi a primeira impressão pelo menos ![]()
Curva de aprendizado:
Bom, não se pode dizer que eu aprendi Ruby, mas me parece que a curva de aprendizado é muito menor do que a curva de aprendizado do Java.
A maior parte disto, vem do fato de em Java se ter pelo menos umas 5 maneiras diferentes de se fazer cada coisa. O que é bom, por que é possivel utilizar a maneira mais apropriada, mas para quem esta iniciando é um problema, por que é preciso escolher qual caminho seguir, e para escolher bem é preciso conhecer todos …
Mas a curva de aprendizado do Java ainda é bem menor que a do C++ ![]()
Documentação Disponivel:
Bom, acho que pelo tempo de mercado, existe muito mais documentação disponivel sobre java, o que é bom e é ruim ao mesmo tempo. Pois também existe bastante documentação Velha, o que pode confundir quem esta iniciando.
Mas em ambos os casos, os foruns de usuários são bastante ativos, e ótimas fontes de referencia, assim como os blogs ![]()
Compatibilidade:
Neste ponto nada se compara ao JCP, eu só conheço duas implementações do Ruby (O Ruby mesmo, e o JRuby), e as duas não são 100% compativeis entre si.
E todas as implementações de Java são 100% compativeis (só se pode dizer que é uma implementação de Java se esta for certificada). Qualquer aplicação Java 5 roda em qualquer VM Java 5, e nem tudo o que roda no Ruby roda no JRuby, nem tudo que roda no JRuby roda no Ruby …
—–
Acho que era isto, a principal vantagem do RoR sobre o Java/WEB são realmente os geradores de código excelentes disponiveis no Rails. Meus parabens para os criadores do mesmo.
Mas eu ainda prefiro java para desenvolvimento WEB, pelo menos por enquanto.
E por favor, comentem sobre o que eu escrevi, coloquei aqui a minha opinião, mas gostaria de saber a opinião de vocês …
Se você gostou deste post, lembre-se de assinar o RSS feed do blog, para ser notificado de novos posts!
Bom,
concordo em vários pontos com você principalmente na questão na sintaxe da linguagem ( também não gosto do ruby em si );
Mas, rails é muito mais produtivo que os frameworks em java para web.
O aprendizado em ruby rails é bem mais rápido que aprender java, e outra, do meu ponto de vista, mesmo a comunidade no Brasil de ruby ser mais nova e menor, são mais participantes.
Agora uma coisa que não ficou claro para mim.. o que você definiu como flexivél em relação ao mapeamento objeto relacional. Entre hibernate e o O/R do rails fico com o rails…
entre rails e java prefiro o django.. mas acho que falta um framework em java que procure focar a produtividade. Evitando muita codificação e configuração, se houver algum framework assim me comuniquem.
=]
Reply to this commentBom, pode ter sido falta de conhecimento, mas por exemplo:
não encontrei uma forma de executar SQL nativo e o RoR me retornar Objetos/ActiveRecords no Hibernate isto é relativamente fácil.
Mapeamento de chaves compostas, eu não tinha achado uma forma de fazer, mas antes de responder este comentário, encontrei um GEM que adiciona o suporte a isto no Rails.
Vou tentar arrumar um tempo no futuro proximo para dar uma olhada neste django
E quanto a produtividade em java, isto é relativo …
Sem a utilização de geradores de código, ja montei arquiteturas onde era possivel criar um cadastro razoavelmente complexo com mais de 15 campos e alguns relacionamentos em 5 ou 10 minutos, o que fica bem parelho com o RoR se não estou enganado (veja bem, eu disse sem geração de código
)
Com geração de código, ja montei arquiteturas com geradores que a parte de cadastros levava o tempo de desenhar o diagrama para ficar pronta.
O problema neste ponto, é que não conheço algo pronto e bom neste sentido em java
Reply to this commentO django funciona bem parecido com o rails e certamente o que não gostou no rails não ira gostar no django também =].
O fato é que django é que ele trabalha com o princípio de não precisar ‘repetir códigos’.
Voltando na questao de aprendizagem, acho que no tempo em que alguem aprende java ( sintaxe), leva o mesmo tempo para se aprender, ruby ( ou python ), rails ( ou django ) e dominar bem suas ferramentas. Enquanto em java ainda tera que aprender EJB, Hibernate, Struts, Velocity entre outros para ter um grande desempenho. ( isso na minha opiniao )
Resumindo, acho que em vez de se criar um JRails o legal seria trabalhar em algum projeto que resolvesse o problema de produtividade para web no java.
Reply to this commentOlá!
Também sou desenvolvedor Java bastante tempo e ultimamente tenho estudado Ruby e Rails. A principio pela curiosidade, depois pela passionalidade
Vou comentar alguns pontos do que você escreveu:
1 - Escopos:
Existe o conceito sim.
a. Através de símbolo:
def diga_oi
puts “Oi”
end
private :diga_oi
b. Através de delimitação:
private
def diga_oi
puts “Oi”
end
def diga_tchau
puts “Tchau”
end
—
2 - Fracamente tipada:
Não, Ruby não é fracamente tipada. Ela é, sim, dinâmica, porque o tipo é definido em runtime a partir da primeira atribuição, mas não é fracamente tipada.
Perl, SmallTalk e C são fracamente tipadas. Ruby não.
Em Ruby as variáveis não podem sofrem coerções. Isso denota tipagem forte, apesar dela ser dinamicamente tipada.
—
3 - RPC:
Rails não dá suporte a RPC, porque não foi projetado para isso.
Ele foi projetado para ser apenas e tão somente um framework para aplicações web, sem se preocupar em atender 100% dos casos e das necessidades. Ele atende 80%.
—
4 - Incompatibilidade entre Ruby e JRuby:
Isso é fato. Mas por que? Porque o JRuby ainda é muito novo, imaturo. A tendencia é que essa incompatibilidade seja minimizata e, quem sabe, até desapareça com o tempo.
—
Bem… é isso!
Um abração!
Leandro
Reply to this commentAh! Vou linkar esse seu post no meu blog…
Abraço!
Reply to this comment“Acho que era isto, a principal vantagem do RoR sobre o Java/WEB são realmente os geradores de código excelentes disponiveis no Rails. Meus parabens para os criadores do mesmo.”
Você encontrou algum esforço por parte da comunidade Java em criar uma funcionalidade tão poderosa quanto tendo em vista esta “concorrência” com o RoR?
Reply to this commentos que eu listei no inicio do post são os melhores (Trails e Seam), tem também o Grails e algumas outras iniciativas parecidas
Reply to this comment“Existem alguns conjuntos de geradores acoplados a frameworks para java, como por exemplo o Trails e o JBoss Seam, mas nenhum deles é tão completo quanto o Rails, pelo menos foi a impressão que eu tive.”
O Grails chega mais perto, mas a falta de um “gems” para Java, dificulta a história. Ou seja, é uma diferença entre as plataformas mesmo.
“eu simplesmente não gostei da sintaxe do Ruby”
É uma questão de costume mesmo, normal, depois de algum tempo vc passar a ver as construções de outra maneira, especialmente pela verbosidade menor.
“Outra vantagem para o Java é que por ser tipada, as IDEs podem facilitar o refactoring, o code completion nas IDEs (pelo menos as que testei) para Ruby é bastante fraco.”
Esse item também deveria ser marcado como “subjetivo”. Tipagem dinamica tem uma série de vantagens - e desvantagens, claro. E sobre IDEs trabalhando para você, eu pensei muito nisso quando comecei a programar em Ruby. Hoje minha opinião é: quando programo em Ruby, eu realmente preciso que a IDE trabalhe tanto para mim?
“a comunidade do Ruby, e principalmente do RubyOnRails é mais ativa, mas isto é puramente especulação, pelo que vi neste pouco tempo.”
A melhor opinião que já li sobre o assunto foi esse artigo do Ronie Uliana no RubyOnBr.
“Utilização Enterprise”
Ruby ainda precisa mesmo resolver uma série de outras problemas que Java já resolve faz algum tempo. De qualquer maneira, vale uma lida nesse post da wikipedia.
valeuz…
Reply to this comment“não encontrei uma forma de executar SQL nativo e o RoR me retornar Objetos/ActiveRecords”
Seria isso ou você se referia a outra coisa?
Abraços.
Reply to this commentBruno, era exatamente isto
valeu a dica …
como eu falei no inicio do texto, foi pouco tempo de Ruby, onde só brinquei um pouco
Reply to this commentUrubatan,
Muito legal ver um desenvolvedor java, ter a curiosidade de se aventurar pelo RoR. Tenho estudado o rails e até adquiri o livro do Akita ( leitura recomendada ) para esse propósito. Bem queria fazer duas considerações sobre seu
artigo:
1) Sobre a tipagem, como o Leandro Silva falou, a do ruby é dinamica, porém não fraca. Quando me deparo com uma linguagem com tipagem fraca já olho atravessado, não tinha noção do poder de tipagem dinâmica & forte. Sucintamente: ADOREI! =)
2) Apesar de estar dando meus primeiros passos, não acho que seja a geração de código do framework uma de suas maiores virtudes. Vejo sim os conceitos ‘DRY’ e ‘Convention over Configuration’ com sendo as melhores coisas a se esperar quando desenvolvendo.
Hoje mesmo estou fazendo um pequeno aplicativo em j2me e já orei algumas vezes para que eu não precisasse mais escrever objetos burros para guardar os dados que pego por xml de uma pagina da web, creio que dá pra usar reflection, porém não tenho muita experiência com este, e como a aplicação tem que sair rapidamente não parei pra estudar antes de codificar. ( É apenas um trabalho de facul )
3) A terceira consideração é em relação ao apoio que o rails dá para que vc possa realmente testar seu código, sabendo que uma das partes mais importantes para desenvolvimento de projetos de médio/grande porte é o teste, mesmo assim não tenho o custume de ser muito rigoroso com isso. O rails me ajuda com a geração dos aquivos necessários para que eu possa largar a preguiça e realmente testar meu codigo, mesmo sendo meu projeto pequeno/médio.
T
T
Reply to this commentSó para esclarecer, eu sou um desenvolvedor que atualmente trabalha com java, mas ja programei em diversas outras linguagens …
1) muito obrigado pelo esclarecimento, erro de principiante na linguagem …
Reply to this comment2) Convention over configuration realmente é show de bola, mas eu estava fazendo uma comparação entre RoR e Java, e Convention Over Configuration existe em java também dependendo do framework, por isto falei que a maior vantagem era a geração de código …
2.1) o que é DRY?
3) o eclipse gera stubs para teste de código também, não achei isto tão espetacular no Rails, mas como disse é opinião minha
Dry = Dont reapeat yourself
http://en.wikipedia.org/wiki/Don‘t_repeat_yourself
vejo que ror tem várias vantagens, como o DRY, Convention over configuration, a facilidade de realizar testes, migrations, entre outros, acho que com um pouco mais de estudos e praticas, você vai descobrir as várias outras vantagens de ROR.
Reply to this commentFalei que iria fazer duas considerações e fiz três =).
- ??don?t repeat yourself?? , Penso nisso em contra ponto ao tempo que um iniciante leva para conseguir ter um “repositório” de código próprio em java. Ou ainda mais díficil como fazer um gerador de código para um determinado projeto. Lógico que no mundo web o java e seus frameworks existe muito código escondido que ajuda demais, por exemplo código de validação de entrada de dados. Mas o coceito DRY faz com que mesmo iniciantes em RoR já comecem pensando em como reaproveitar regras de negócio repetitivas, como exemplo. Eu tive meu primeiro contato com metaprogramação esses dias exatamente por causa do RoR, digamos que mais por conta do ruby, dada sua natureza OO e o tal metodo missing_method , achei muito bom mesmo não precisar especificar cada metodo que eu irei precisar, é como se eu tivesse trabalhando com aspectos de uma região do software, e sabendo que aqueles objetos ou atributos tivessem uma “vida própria” codifico umas dez linhas e tenho o comportamento esperado, solidificado sobra o ActiveRecord (que trem mais facil sô !). Bem era isso, grande abraço.
Reply to this commentUrubatan,
Bela iniciativa!
Posso sugerir alguns pontos pra vc dar uma olhada?
Pra gostar de Ruby, cheque “Closures” e como eles trabalham com coleções e com o objeto “File” (na verdade, “IO”, no Ruby). Ali dá pra sentir um dos pontos mais fortes da linguagem em comparação com Java. Python tem o mesmo conceito, mas parece q ali o nome é “lambda”.
Pra sentir os pontos mais fortes do Rails, eu sugeriria dar uma olhada na estrutura q ele gera para criação de testes automatizados, e uma olhadinha na idéia de migrations (e suas consequências ao usar controle de versão). A parte de templates (layout partials) e helpers do Rails tb merece uma olhadinha com atenção. Principalmente se vc comparar o poder dos helpers vs Tag Libs.
Qto a geração de código, apesar de servir como um bom começo, são como rodinhas pra quem anda de bicicleta. Aprendeu a andar, chuta fora.
Gostei muito do post!
Reply to this commentÉ isso, meus dois centavos
[...] Comparação Java e Ruby (tags: http://www.urubatan.com.br 2007 at_tecp java ruby rails blog_post comparação) [...]
Reply to this commentUrubatan,
muito legal o artigo, também já andei dando uma olhada em linguagens dinâmicas, mas ouvi falar do Grails e acabei testando ele e nao o RoR. Queria a opinião do pessoal que está comentando aqui a respeito do Grails. Eu sei que é uma cópia do RoR, e queria saber quais as limitações dele. Como sou novato tanto no Grails como no RoR não tive como pegar essas diferenças, ficando pra mim como se os dois fossem praticamente iguais (mudando a sintaxe, claro, que no Grails é bem parecido com o Java).
Eu acho muito importante a gente deixar as “paixões” de lado e pesquisar coisas novas. Parabéns Urubatan e espero que vocês possam comentar sobre o Grails um pouquinho.
valeu!
Reply to this comment[...] Ok, tudo bem, não é exatamente um Rails da vida, mas tem uma grande vantagem, roda perfeitamente em servidores Java EE, que são ótimos em [...]
Reply to this commentOpa muito legal o seu post,
também olhando rapidamento o Ruby
quanto a produtividade realmente ele ganha do Java
digamos que para projetos de pequeno e medio porte
digo que tem até como encarar…
agora um projeto dos que vemos o Java em ação
com N servidores, balanceamento e tudo mais que vem por ae
não sei se o Ruby da conta desses casos…
a desvantagem do Java para web comparado com o Ruby
ao meu ver são graças a maioria dos frameworks MVC Java
perde-se muito tempo configurando ao inves de codificar a aplicação em si…
mas isso é algo que acredito que está mudando agora no Java
o pessoal já percebeu finalmente acredito eu, após o surgimento do Ruby
que o que temos quer fazer em uma aplicação web é desenvolver essa aplicação
e não ficar configurando framework
parabens Urubatan pelo seu post =]
Reply to this commentPara os que perguntaram sobre geradores em java, ja viram a série de posts sobre produtividade em java que estão sendo postados no blog?
PS.: andei dando mais uma olhada no Ruby, e os aspectos dinamicos da linguagem são realmente excelentes, principalmente closures e as classes “abertas” …
Reply to this commentVou continuar estudando mais um pouco …
Em algum momento faço outro post sobre ruby por aqui
Ae urubatan, muito bom o artigo.
Estou agora no dilema se adoto o java ou o ruby num para um projeto Web que vou fazer. O requesito que mais complica é que a aplicação tem que ser bem leve, pois não terei um servidor muito legal para dar o deploy da mesma. Com questão a isso, você conhece algum comparativo entre estas linguagens mostrando qual das duas é mais “leve”?
[]s.
Reply to this commentMeus parabens pelo artigo, muito bem escrito, me deu uma clareada no quesito desenvolvimento web, para escolha de linguagem…
[]’s
Reply to this comment[...] Ruby [On Rails] X Java [WEB], por Rodrigo Urubatan, 2007-03-02. [...]
Reply to this commentGostei do comparativo e da lealdade, gostaria de citar o aspecto de curva de aprendizado, na faculdade nos tivemos c1 e c2, e vimos algoritimos de sort e tals…
Reply to this commentAi que vem a surpresa, a materia posterior e Linguagem O.O., e adivinhem, em C++, kkkk, nao posso dizer sobre outras linguagens pois nao as conheco muito bem assim como ruby e java, mas nas 3 primeiras semanas de aula eu me perguntava que raio que o professor esta falando, aquilo parecia mais com um devaneio, mas depois consegui finalmente ir bem na materia. Em meu curso(SI- MAckenzie) e uma das materias que mais reprovam. E achei C++ muito elegante para a apresentacao de conceito LOO, muito bem estruturado, depois de um tempo voce consegue pegar facil as coisas… uma das coisas mais dificeis que naum instendia nem ferrando era o conceito de alcance de ponteiros :: , esse demorou pra entender…de resto ate que foi viu… ate mais …parabens pelo post
Tambem nao gosto nem um pouco da sintaxe do Ruby, pois nao segue nenhuma linguagem “classica”, como o C#/Java/PHP que seguem o C e Delphi que segue o Pascal. Apesar de nao gostar do Ruby, acho Rails interessante e fico brincando com eles só para a acompanhar o mercado de TI.
Reply to this commentOpa, o ruby tem sim e bem claro os conceitos de métodos privados, publicos e protegidos, você pode ver isso no livro do TaQ
Reply to this commentvenho estudando o Rails desde 2007 e percebi algumas vantagens sobre o java em alguns aspectos , a saber :
1 - Curva de aprendizado
2 - Clean code
3 - Faça mais com menos
4 - Simplicidade
5 - Objetividade
Eu indico o Ruby On Rails.
Reply to this comment