Ultimamente é mais do que batido famosos artigos comparando linguagens e com conclusões um tanto radicais do tipo : “A linguagem B é melhor que C pois é mais produtiva”; “A linguagem P não escala”; “A linguagem Z é mais fácil e tem tudo que é necessário já integrado”; etc. As questões que coloco frente a essas publicações são: Existe escolha perfeita ? Será que os contextos usados são justos, ou seja, permitem uma comparação em igualdade? Dá para comparar ou isso é apenas uma discussão como “sexo dos anjos”? Recentemente a discussão ganhou mais força com uma recente divulgação, não oficial, de que os desenvolvedores da Google estão sendo desencorajados a usarem Python em novos projetos [1] .Na troca de emails, a decisão é justificada no fato que, o senso comum dentro da empresa acredita que o Python, dado o crescimento e escala das aplicações atuais, não responderia de forma satisfatória.
Java foi inventada na década de 90 (sua primeira versão foi por volta de 1995) e sua origem é bastante interessante e pouco conhecida do público em geral. Java, antes chamada por Grosling de OAK (Carvalho em inglês), foi criada com objetivo permitir a comunicação entre diversos equipamentos, que não somente o computador. Nesses projeto, a intenção não era de criar um nova linguagem e sim uma tecnologia de convergência. Por um capricho do destino, as empresas não gostaram tanto e não compraram a ideia.
Nesse mesmo período a internet começava a se tornar o sucesso de hoje. Com um crescimento rápido e em pouquíssimo tempo uma grande interativa estava se formando. Era exatamente este tipo de conectividade que a equipe de Grosling propunha. A ligação foi imediata e partiram para adaptar a OAK para esse novo possível uso. Assim nascia a primeira versão de Java. Ela foi totalmente concebida dentro do objetivo de “trafegar” em ambientes heterogêneos. Seu primeiro momento de sucesso veio do uso dos Applets (aplicações java que rodavam dentro do navegador através de uso de plugin) que deu um tom dinâmico ao, até então, estático hiper texto (html). Daí por diante a adoção e crescimento do Java foi meteórico e hoje temos esse cenário onde ela é a principal tecnologia usada por grandes empresas em seus sistemas.
O interessante dessa história, é que durante muito tempo do início da linguagem, Java era considerada ruim. Isso mesmo ruim: muitos afirmavam que sua natureza multi-plataforma, sendo interpretada, a tornava lenda e muito pesada, pois consumia muita memória dos pobres PCs da época (antigamente memória e disco eram caros). Não foram poucos artigos escritos que afirmavam que, num ambiente corporativo, Java jamais seria aplicável pois sobrecarregava demais o equipamento e não era escalável (lembra alguma coisa não). Tais problema realmente existiam, como por exemplo, a questão das strings, do tempo de interpretação, o problema do AWT (biblioteca para aplicações desktop), etc.
A questão que várias investimentos e esforços, ao longo do tempo, foram feitos para que a linguagem fosse melhorando e se tornando mais robusta e perfomática. Primeiro foi a adoção completa do bytecode, hotspot, melhoria constantes no algoritmo de garbage collector(coletor de lixo – parte responsável por retirar da memória os objetos que não estão mais em uso), api de threads, melhorias significativas na parte Desktop, e por aí seguem as mudanças. Hoje já estamos na sua sexta versão e em breve virá a sétima. A linguagem que temos atualmente é completamente diferente daquela lançada em 1995 embora ainda guarde muita da filosofia e arquitetura.
Claro que paralelamente as sucessivas melhoras, os próprios computadores e servidores evoluíram muito também. Hoje é normal termos máquinas pessoais com mais de 2Gb de memória e discos rígidos de 500 Mb. Se pensarmos em servidores, a um custo bastante acessível é possível adquirir equipamentos de até 64 Gb de memória, 4 processadores, 64 Bits, etc. Isso logicamente tem um impacto: não tem grande relevância o uso de memória ou cpu por uma linguagem, guardando as devidas proporções, é claro.
Bem fato é que Java é usada amplamente em diversas empresas e representa um parcela significativa do mercado de desenvolvimento. Graças a sua natureza “gratuita”, porém não aberta – mais adiante isso será melhor abordado – uma grande comunidade em seu entorno se formou, facilitando a sua adoção e incrementando a experiência do desenvolvedor com bibliotecas, frameworks, ferramentas, etc.
Porém dado o seu sucesso e sua ampla adoção, parece que Java passou de herói para vilão: as pessoas mais revolucionárias afirmam que ela é ruim, muito presa, evolui lentamente, extensiva demais, pouco produtiva, etc. Não faltam quadros comparativos de classes Java que fazem algo e outro com código da linguagem B que faz a mesma coisa com bem menos linhas. Não faltam blogs com artigos dizendo que Java não livre e que é corporativa, que não possui uma sintaxe clara e legível. E por vão outros exemplos.
Duas “linguagens” e suas comunidades se destacam: Ruby e Python. O interessante que ambas, inclusive, surgiram antes do Java. Seus pontes fortes são sua alta produtividade através de abstrações em alto níveis, sintaxe doce (suggar sintaxe) – um forma de escrever sem grandes amarrações (ponto-virgula, chaves, etc) e extremamente legível - e natureza dinâmica (podemos alterar o comportamento dos objetos, funções e módulos em tempo de execução de forma ultra simples – meta classes é um exemplo). Outro aspecto relevante é o fato dela serem, realmente open source – software livre : ambas são mantidas e evoluídas pela comunidade não existindo uma entidade, diretamente, responsável por controlá-las.
A primeira questão que fica é : será possível comparar Java a Ruby ou Java a Python ? Dependo do contexto e das métricas. Podemos dizer que, considerando a sintaxe legíveis e concisas, Java “perde” pois tem uma escrita mais rígida, formal e menos “humana”. Exemplo
Ruby
10 times do put “Andre Fonseca” end
Java
for (int i = 0, i < 10, i++){
System.out.println(“Andre Fonseca”);
}
Porém essa “fraqueza” do Java lhe confere característica que em outro quesito a torna mais interessante escolha que as demais. Se agora considerarmos, questões como consumo de memória e recursos de máquinas, um código Java ganha com uma boa margem dos demais. Mesmo pensando em Cloud Computing, onde um aumento de demanda pode ser resolvido com acréscimo de máquina, Java parece se mostrar economicamente melhor pois precisa de menos máquina para atender a uma mesmo disponibilidade.
Sendo assim uma conclusão que podemos chegar seria que grande parte das comparações e suas conclusões são inúteis e pouco esclarecedoras. Cada um aborda no contexto que favorece a sua preferida e no final todas são melhores do que as demais, em algum aspecto que seja.
Outra coisa que é extremamente vaga é quando se afirma que “tal coisa não escala” . O fato de um aplicação ser capaz de aguentar um crescimento de acesso ou uso está muito mais ligada a sua arquitetura do que na tecnologia usada. Se fosse assim, todas aplicações de massa (sites, portal de jornais, twitter, etc) deveriam ser feitas em assembly pois assim seriam ultra otimizadas. Um bom exemplo é que vários sites e/ou ferramentas de grande acesso foram feito em Ruby ou Python e funcionam perfeitamente (com alguns problemas que são normais).
A segunda pergunta é se existe uma escolha perfeita e definitiva. Diante a tudo dito até aqui, fica fácil concluir que a resposta coerente seria NÃO . Existe sim, uma escolha coerente com o contexto do desenvolvedor, usuário, recursos, etc. Qualquer aplicação pode ser feita em Java ou Ruby ou Python, cada uma terá seus pontos fracos e fortes. Cabe ao desenvolvedor colocar tudo isso de forma ponderada e ver quem lhe trará mais lucro frente ao objetivo almejado.
De forma conclusiva e de acordo com os fatos expostos, fica claro que não existe comparação definitiva, nem justa, pois sempre dependerá do contexto e do objetivo desejado. Além disso, Java começou lenta e ruim e foi melhorando com o uso, sugestões da comunidade, entre outras coisas, nada impede que um mesmo esforço ocorra em Ruby e Python e daqui a alguns anos elas estejam tão “corporativas” quanto Java é hoje.