Skip to content

Instantly share code, notes, and snippets.

@mauricio
Created June 10, 2012 14:29
Show Gist options
  • Select an option

  • Save mauricio/2905919 to your computer and use it in GitHub Desktop.

Select an option

Save mauricio/2905919 to your computer and use it in GitHub Desktop.
O que está errado com Groovy?

Como o twitter é curto, vamos pra uma coisa mais longa.

Primeiro, o conceito errado de que tem que parecer com Java. A linguagem em si foi desenvolvida pro programador Java preguiçoso, porque a melhor feature por muitos anos era parece com java! você pode escrever jave em groovy!, o que por si só deveria ser absurdo, mas muita gente aceitou isso como se fosse uma feature.

Segundo, tem os vários projetos clonados de outras linguagens/ambientes em vez de se criar alguma coisa nova, enquanto as comunidades Scala/Clojure procuraram desenvolver soluções que usassem as funcionalidades e cultura das suas linguagens na construção das novas ferramentas, a comunidade Groovy continuou tentando imitar a comunidade Ruby sem sucesso mas vendendo a idéia de que é o rails pra java, quando, obviamente, isso não é verdade.

O caso mais gritante disso é exatamente o Grails. A comunidade é minúscula, o ecossistema ao redor da ferramenta também, caso completamente diferente do Rails, onde se tem plugin/gem pra tudo o que você imaginar no desenvolvimento de aplicações web e você pode facilmente integrar o seu legado em Java usando JRuby, matando completamente qualquer argumento de que eu preciso manter compatibilidade....

No fim, o único motivo que existe pra escolher Groovy e Grails pra qualquer coisa é preguiça, já que a ferramenta não é melhor do que o original em nada.

@juanplopes
Copy link

Não conheço tanto de Grails quanto a @JacAbreu, mas não tenho simpatia pela linguagem (Groovy). Entretanto discordo do seu argumento de que não tem que parecer Java.

Java é uma linguagem antiquada e precisa ser substituída. Ela tem uma base de código gigante e uma comunidade mais sólida e provavelmente mais ativa que a do Rails (onde muito se justifica por fogo de palha). A questão é que para substituir Java sem perder as vantagens que ela tem, é preciso desenvolver novas linguagens que rodem na JVM. Mas se fizermos isso reinventando todos os idiomatismos do Java (com novas coleções, novas formas de lidar com tipos primitivos, e muitas vezes até uma nova convenção de character casing) essa linguagem não vai pegar.

Isso culmina em Scala e Clojure, que você mesmo citou. Linguagens muito legais, principalmente se considerarmos que rodam na JVM. Mas, no final das contas, o fato de rodar na JVM é só acidental, pois a integração entre elas e o que já existe em Java é sofrível. Acabam se tornando linguagens de nicho.

@JacAbreu
Copy link

Sr Maurício. Bom dia :).

Preciso aprender muito mais dessa tecnologia, mas baseado no pouco que sei e no projeto que trabalho, darei algumas respostas.

Quanto ao que o sr disse:

"A linguagem em si foi desenvolvida pro programador Java preguiçoso, porque a melhor feature por muitos anos era parece com java! você pode escrever jave em groovy!, o que por si só deveria ser absurdo, mas muita gente aceitou isso como se fosse uma feature."

Concordo que muitos programadores preguiçosos usam grails e o usam por preguiça. Comandos como "generate-all"
me incomodam profundamente, pois viram argumentos para muitos (não todos) desconhecerem como são feitas as funcionalidades do sistema (mesmo que seja um simples CRUD) , já que é mais rápido e o que vale é "entregar para o cliente em menos tempo" ¬¬' . O que não vale é dizer que somente programadores ruins utilizam grails/groovy.

Conheço programadores que estão tentando contribuir com o grails, portanto sua generalização de que é "programador Java preguiçoso" não é correta.

Não concordo com o @juanplopes que Java precise ser substituída, mas acredito que quanto mais linguagens puderem aproveitar da plataforma Java, que ninguém discorda que é muito boa, melhor será para desenvolvermos soluções, pois teremos um maior leque de ferramentas para utilizarmos e sem termos problemas para integrar tudo. Linguagens, compiladores e afins não são para ser defendido com ferro e fogo e usadas em todas as situações. Elas são formas de resolvermos problemas quando elas tem características necessárias para atender justamente às situações.

No projeto que trabalho, tínhamos código completamente pojo - pois o antigo gestor do projeto não queria acoplamentos com nenhuma tecnologia que corresse o risco de ser descontinuada e de alguma forma, arranhasse o que foi feito/estava sendo desenvolvido - porém o custo para manter o sistema daquela forma era gigantesco e para o rumo para qual foi dado para o futuro do sistema, tinha ficado inviável.

A solução dada foi a migração de tudo para grails. Obviamente, existem outras formas de se mudar o cenário dito acima, mas o que ocorreu - NESTE CASO - foi uma integração perfeita com o código legado, a curva de aprendizado da equipe inteira foi extremamente pequena e já conseguimos resultados realmente expressivos.

Admiro muito a comunidade de scala e clojure - a importância delas é inegável e as duas linguagens - pelo pouco que sei - são realmente dignas e notáveis - não discordo com você em nada do que disse sobre elas.

Não defendo a utilização de nenhuma linguagem em particular, apesar de ter as minhas favoritas. O que deve nortear a tecnologia é o ambiente em que ela será empregada. Neste caso, grails fornece de forma fácil, solução para problemas simples. Creio fortemente que ele não foi proposto para revolucionar nada e sim está "plagiando" (ao meu ver) soluções que deram certo em outras tecnologias, para tentar melhor atender aos seus utilizadores. Creio que muitas linguagens e frameworks conhecidos também o fazem.

Obrigada pelos argumentos :D

@mauricio
Copy link
Author

@juanplopes eu acho essa idéia de que precisamos de um novo Java um equívoco, Java não vai deixar de existir, muito do que se desenvolve em todas essas tecnologias relacionadas depende, e muito, da existência do Java e o ecossistema em si hoje não está mais aberto pra o "one language to rule them all" the o Java tem representado esses dias porque o custo de se desenvolver um ambiente desses é proibitivo, é só olhar o quanto o pessoal do Mono ainda está atrasado quando comparados a JVM. Java vai continuar tendo um futuro brilhante como sendo o C dessa geração atual de ferramentas e o ponto de encontro de todas essas linguagens que rodam em cima da JVM, se você quiser interoperabilidade, vai continuar trabalhando com Java e exportando isso pras outras linguagens do ambiente sem problemas, não vejo isso mudando tão cedo.

Quanto a integração, eu trabalho com Scala diariamente e já brinquei com Clojure algumas vezes, não posso comentar sobre Clojure, mas a integração Java -> Scala é 100% (já de Scala pra Java é mais complicado). A maior parte das bibliotecas de terceiros que eu uso na aplicação que temos aqui no trabalho é escrita em Java e eu nunca tive problema nenhum com integração, tudo se integra de forma relativamente natural (não é completamente porque existem patterns em Java que não usamos em Scala por ter construções melhores). Não há dificuldade em se integrar o código entre as duas linguagens.

Quanto a reinvenção da roda, se ela for mais redonda, é completamente aceitável, Rails é um caso clássico disso, não tem nada de muito especial, mas escrever uma aplicação web simples com Rails é brutalmente mais produtivo do que com qualquer outra tecnologia do mercado, especialmente se você compara com os elefantes da sala, Java e C#. As novas linguagens tem que sair das amarras do Java, não podem depender das decisões que não fazem sentido ou que foram infelizes. Um exemplo importante é a API de coleções de Scala, não fazia o menor sentido uma linguagem com raízes funcionais ter uma bibliteca de coleções que só tem coleções mutáveis e que não diferenciam iteração direta e indireta, a decisão de recriar a biblioteca de coleções foi a mais acertada por parte deles pra não ter que viver e se misturar com um legado que não faz sentido pra linguagem.

@mauricio
Copy link
Author

@JacAbreu o grande problema de plagiar é que o original vai sempre ser melhor e o projeto copiado vive pra sempre preso a ser "a cópia daquele framework que tem naquela outra linguagem". Cada linguagem tem que procurar a forma mais eficiente ou inteligente de usar as suas próprias construções na hora de produzir suas ferramentas. Um exemplo clássico disso é o Django, que é o framework web mais comum pra apps em Python hoje e não se parece em quase nada com o Rails, porque ele se aproveita da estrutura e idéias do próprio Python pra montar os seus conceitos.

Quando você migra um framework que depende fortemente de conceitos de uma linguagem em específico, como o Rails, pra outra linguagem que não tem as mesmas construções, você perde muito na tradução e o produto final fica como sendo um primo pobre do original. Depois de anos trabalhando com Rails, quando eu olho pro Grails a única coisa que me vem a cabeça é que eu nunca usaria ele pra nada, porque não faz sentido pra mim escolher o primo pobre quando eu posso escolher a ferramenta original.

Que bom que pra vocês migrar pra Groovy ajudou, mas de repente outros frameworks em Java como Play ou VRaptor pudessem ser avaliados também em vez de usar Grails, já que migrar de Java pra Groovy termina por nem ser lá uma migração mesmo, já que pouco do código realmente muda e a linguagem em si não oferece também muito apoio. Eu tenho visto, inclusive, uma contração da comunidade de desenvolvimento, com o reforço das outras linguagens da JVM e a chegada do Java 8, essa contração tende a aumentar, já que Groovy vai ficar realmente como sendo uma linguagem que adicionou uma coisa ou outra mas não revolucionou em nada.

No fim, é a minha opinião pessoal, se deu certo pra vocês, que continue dando :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment