Java é ruim?

Em tempos de Ruby on Rails parece que está na moda falar mal de Java. Na Rails Summit então meus ouvidos chegaram a doer de tanto ouvir falar que Java é ruim, Java é burocrático, bla bla bla e que Ruby on Rails é fantástico, produtivo e sexy. Calma, essa não é mais uma daquelas comparações ridículas de Java versus Ruby on Rails.

Mas ainda ficou a pergunta que não quer calar: Java é ruim mesmo? A resposta, como sempre, é que depende do caso…

Em um projeto de desenvolvimento de software, mesmo antes de começar o desenvolvimento você já tem algumas restrições para escolher tecnologias. A finalidade do software por si só pode já restrigir muito a tecnologia que terá que ser usada.

Por exemplo, se você estiver fazendo um website, provavelmente você não escapará de fazer uma interface em HTML, Flash ou qualquer outra coisa específica para desenvolver uma camada de apresentação web. Provavelmente você não vai querer usar Assembly para fazer a parte server-side, já que não seria muito produtivo (apesar de não ser impossível). Eventualmente esse site pode ser um portal como a Globo.com que têm milhões de acessos por dia e você terá que escolher uma plataforma/linguagem/arquitetura que priorizem performance e favoreçam escalabilidade. Ou então pode ser um site com pouquíssimos acessos e você nem precisará se preocupar com isso…

Ou então você pode precisar fazer um pequeno script para fazer backup automatizado de um banco de dados MySQL. Seria totalmente incoerente usar Delphi, Fortran ou Piet. Provavelmente você vai querer usar algo como Shell script e resolver o problema em meia dúzia de linhas. Alguns bancos como o SQL Server têm mecanismos de agendamento de backup automático que são super fáceis de configurar e usar, portanto nesse caso usar Shell script seria trabalho desnecessário.

Meu ponto aqui é que não dá para dizer que Java (ou qualquer outra coisa) é ruim por sí só. Java pode ser ruim ou bom dentro de um contexto. Por exemplo, em 2005 eu trabalhei num projeto de Call Center à distância via Internet onde precisei desenvolver um softphone e a melhor opção foi usar Java Applets. Além de existirem bibliotecas Java para trabalhar com IAX (que é um protocolo como o SIP, só que proprietário do Asterisk), o usuário não precisava instalar nenhum programa para falar com o Call Center, bastava acessar o site. Eu odeio Applets com todas as minhas forças, mas foi ótimo para esse projeto (eu diria até que foi relativamente fácil). Seria correto então dizer que Ruby on Rails é ruim só porque seria impossível de fazer esse projeto com tanta facilidade? É óbvio que não!!!

Jamais existirá uma única linguagem ou plataforma para resolver todos os problemas. O desenvolvedor de software precisa conhecer vários tipos de ferramenta e saber escolher a melhor delas para resolver cada problema. Que fique claro que eu não sou defensor de Java, Ruby ou de qualquer outra coisa. O caso é que é incoerente dizer que X ou Y é bom ou ruim por sí só; é preciso analisar as opções dentro de um contexto.

Tags: , , , , , , , , , , , , , , , ,

33 Responses to “Java é ruim?”

  1. São só ferramentas.

    Como vc disse, Java – ou qualquer outra ferramenta – é boa para alguns casos e ruim para outras e nós, como desenvolvedores de software, precisamos incrementar nossas caixas de ferramenta. Fora, claro, aprender a usar cada uma delas.

    valeuz…

  2. s/Java/C++/g

    “Several reviewers asked me to compare C++ to other languages. This I have decided against doing. Thereby, I have reaffirmed a long-standing and strongly held view:

    Language comparisons are rarely meaningful and even less often fair. A good comparison of major programming languages requires more effort than most people are willing to spend, experience in a wide range of application areas, a rigid maintenance of a detached and impartial point of view, and a sense of fairness. I do not have the time, and as the designer of C++, my impartiality would never be fully credible.” — Bjarne Stroustrup

  3. Guilherme, assino embaixo.

    No RailsSummit parecia que se você não falava mal de Java não fazia parte do “grupinho dos produtivos”.

    Quem trabalha com Rails geralmente tem muita experiência, mas não deve negar o passado quando aprenderam sobre testes, arquitetura, etc.. provavelmente trabalhando com Java ou .Net

    Abraço

  4. AkitaOnRails says:

    Eu mesmo não assisti a todas as apresentações. De fato vi o Chad Fowler dizendo isso mas acho que ele poderia ser mais específico. Seria mais na linha do Joel Spolsky com o “Java Schools”. Não que o Java em si é ruim, mas o marketing gerado e o resultado de se criar muitos “one trick poneys” de Java é que é o ruim.

    Do contrário, da minha parte eu fiz muita questão de demonstrar que o uso inteligente de Ruby e Java ou até mesmo Ruby e Windows fazem muito sentido e por isso fiz um esforço acima do necessário para ter o próprio Charles Nutter falando de JRuby e o Fabio Kung falando de JRuby on Rails, por exemplo.

    O problema não é a tecnologia Java, mas a mentalidade de que apenas Java (ou na nossa comunidade, que apenas Rails) resolvem todos os problemas: o melhor desenvolvedor sabe escolher a ferramenta certa na hora certa. E o segredo disso é aprender um pouco de tudo.

  5. AkitaOnRails says:

    Ah sim, eu cheguei a convidar o John Lam para falar de Ruby no .Net mas ele não estava disponível para vir.

  6. É bem por aí mesmo…

    Existem tantas ferramentas, tantas opções e tantas formas de se fazer as coisas que muitos acham (e realmente é!) mais cômodo escolher uma ou duas ferramentas do que gastar investir tempo identificando as melhores opções para cada caso.

    O que eu não entendo é essa “implicância” que o pessoal tem com Java. Sei lá, tem gente que parece o meu barbeiro… foi só falar que eu torço para o Corinthians para ele começar a fazer coisa errada no meu cabelo. :P

    Mas enfim, eu já fiz trampos muito bons com PHP, embora não seja nem um pouco fã do negócio. Apesar de hoje eu trabalhar mais com Java, eu acabei de sair de um projeto em Django e a experiência não poderia ser melhor!

    Só uma curiosidade:

    No mês passado eu fui até o Banco do Brasil abrir uma conta, e fiquei realmente espantado com a velocidade com que a pessoa que me atendia operava o sistema, rapidamente consultando informações, imprimindo relatórios e tudo mais. A primeira coisa curiosa foi ver que a pessoa não usou o mouse em nenhum momento. Foi então que eu decidi esticar o pescoço para olhar a tela do computador… e adivinha só? O sistema rodava no terminal de um Linux com KDE!

    Aposto que essas pessoas que dizem que Java é feio-bobo-cabeça-de-melão e que Rails é sexy (ui!) pensaria “Credo, os caras usam um sistema que roda em modo texto em pleno século XXI!”, mas o fato é que o sistema era extremamente simples, organizado e muito, muito rápido (sem travadas entre uma tela e outra). Excelente aplicação do famoso (mas ignorado) “the best tool for the job”.

    A propósito, desculpe por quase derrubar um copo com água em você lá no Rails Summit! (ah se eu visse quem colocou aquele copo lá…) :)

    []s!

  7. Alan Kelon says:

    É válido lembrar do artigo No Silver Bullet, de Brooks, escrito há mais de vinte anos atrás. “Brooks, F. P. 1987. No Silver Bullet Essence and Accidents of Software Engineering. Computer 20, 4 (Apr. 1987), 10-19. DOI= http://dx.doi.org/10.1109/MC.1987.1663532

    Há uma cópia disponível em http://www.virtualschool.edu/mon/SoftwareEngineering/BrooksNoSilverBullet.html

    Abraços

  8. Felipe Conter says:

    “Jamais existirá uma única linguagem ou plataforma para resolver todos os problemas.”

    vamos nso lembrar também, que não existe um processo de desenvolvimento que sirva pra todas as ocasiões. Eu não usaria XP para desenvolver um software de baixo-nível para uma rede industrial, por exemplo… ^^

  9. @Daniel

    Hehe, sem problemas! Ainda bem que era só água, poderia ser um prato daquele Strogonoff :D

  10. Rubem Azenha says:

    Se o cidadão só conhece uma plataforma ou tem sua carreira\emprego totalmente ligado com uma plataforma, é mais fácil xingar a plataforma concorrente do que tentar ter um conhecimento geral das opções disponíveis nas outras plataformas – só não é algo saudável para os projetos de software que esse cidadão participar.

    []’s

    Rubem

  11. Muito bom Guilherme! “Não existem repostas fáceis” e “não existe uma solução para todos os problemas”. Sendo assim, provavelmente problemas diferentes podem ser melhor resolvidos com ferramentas diferentes.

  12. Como eu disse em meu último post [1] (sobre o #railssummit, inclusive), a discussão não deve ser sobre tecnologia, mas sobre filosofia e valores. O cara que usa RoR com a cabeça do desenvolvedor Java de 5 anos atrás fará tanta besteira quanto. E. da mesma forma, o cara que usa Java hoje com a cabeça já atualizada, fará coisas tão sexy quanto em Rails (pq será que ninguém critica o pessoal da ThoughtWorks ou da Globo.com?).

    É como diz o sábio provérbio chinês: “ado ado ado, cada um no seu quadrado”

    [1] http://blog.seatecnologia.com.br/articles/2008/10/19/a-nova-escola-da-ti

  13. Já passou do nível de chato participar de encontros ou eventos em outras tecnologias e o pessoal só falar sobre Java.
    Eu tive que interromper um encontro em outra tecnologia grosseiramente pedindo para não falarem sobre Java porque se eu estava naquele evento era porque a última coisa que eu gostaria de ouvir era sobre Java, seja bem ou mal

  14. Concordo contigo, GC. Além de cada linguagem ter características diferentes, mais ou menos adequadas para cada situação, acho muito importante um desenvolvedor ter um conhecimento básico de diferentes linguagens, pois ajuda a quebrar paradigmas e pensar em maneiras diferentes de resolver um problema.

    []’s

  15. “Jamais existirá uma única linguagem ou plataforma para resolver todos os problemas.” Certo. Mas – cuidado – isso não implica que uma linguagem não possa resolver todos os problemas que uma linguagem anterior já resolvia, e com mais algunas vantagens (quem hoje usa PL/1?).

    Java, a plataforma, ainda tem várias vantagens (como os applets, o desempenho, etc). Java como linguagem está bem ultrapassada – OK, ainda restam alguns nichos onde seu uso tem benefício. Mas o argumento de que *sempre* vai ter seu nicho é uma falácia.

    http://steve-yegge.blogspot.com/2007/12/codes-worst-enemy.html

    []’s

  16. Leandro says:

    Concordo plenamente!

    Aliás, há algum tempo escrevi sobre isso:

    Não há uma única linguagem de programação:
    http://codezone.wordpress.com/2008/02/04/nao-ha-uma-unica-linguagem-de-programacao

    A Plataforma Java não é sobre a Linguagem Java
    http://codezone.wordpress.com/2008/02/04/a-plataforma-java-nao-e-sobre-a-linguagem-java

    Abraço!

  17. Leandro says:

    @AkitaOnRails

    “O problema não é a tecnologia Java, mas a mentalidade de que apenas Java (ou na nossa comunidade, que apenas Rails) resolvem todos os problemas”

    Taí, cara! Tem muito carinha que ontem estava em Java ou .Net, e que hoje está em Rails, que precisava ouvir isso…

  18. Como o GC falou… tudo depende de cada caso!!!

    Acho que o bom e velho Java ainda tem e terá por bastante tempo o seu espaço.

    []’s
    Claudio Braga Leite

  19. Lendo esse post eu vi algo similar com uma situação:

    Um cara chega numa entrevista pra Google por exemplo, e fala que já trabalhou no Yahoo e Microsoft, fez isso e aquilo. Mas os caras não o aceitam porque não é do perfil, ou por qualquer outro motivo.

    O cara responde revoltado, falando algo como “Como assim? Eu trabalhei na Microsoft e no Yahoo. Como não sou aceito aqui?”.

    E o caboclo toma como resposta “Se você foi aceito e trabalhou lá, então volte, pois lá você tem perfil, mas aqui não”

    Seria mais ou menos isso, tal linguagem pode ser ruim ou boa para cada projeto. Ruim seria implementar tal projeto nessa específica linguagem e não a linguagem em si.

    Bom, é isso. Pelo menos é o que eu acho :) Abraço GC

  20. André says:

    Java não é de tudo ruim, ele só é lento e pesado para jogos e softwares desktops e tem-de se escrever demais em JSP além de estar longe de ser tão maravilhoso quanto a sua comunidade prega.

    RoR eu tentei usar, mas amarra muito no desenvolvimento… desisti

    PHP é ótimo para WEB, porém tem muito souce pronto com qualidade duvidosa e muito “metido a programador” que faz porcarias remendando esses codigos

    Python diria que é ótimo também

    .NET seria muito bom se não existisse o visual studio, que possibilita que sistemas sejam feitos por amadores, o que mancha a sua imagem…

  21. Pois é como o @Ruben Azenha mencionou.

    Isso normalmente acontece quando o cara está totalmente amarrado ao Java (Colocou todos seus ovos em uma única cesta), ou mesmo pq tentou trabalhar com Java e se viu atormentado por estudar padroes, arquiteturas, etc(nao q em outra ling isso nao seja necessario).

    Eu tenho feito vários projetos FreeLancer e tenho ajustado as tecnologias ao q mais me atendem no momento e pra falar a verdade faço em PHP e até em Python, mas isso é uma questão de cultura.

    O que seria do vermelho se não existissem outras cores.

    Acho RoR formidável para desenvolvimento, mas ainda não apliquei em nenhum projeto real por N motivos, enfim…

    O que tem acontecido muito é que vemos a famosa “moda da vez”, o cara ouve q tal tecnologia está em alta e sai falando isso ou aquilo de outras.

    Bom é isso, apenas minha opinião.

    Fabio Nascimento

  22. Esqueci de mencionar.

    Trabalho com java durante o dia e em alguns pontos não consigo enxergar outra forma melhor (leia-se tecnologia) de se fazer o que eu faço, mas isso é minha opinião.

  23. Fabíola says:

    Realmente depende muito do seu projeto, nós usamos o que melhor se encaixa ao nosso projeto. Mas o Java é uma linguagem muito boa e que a cada dia mais empresas vem utilizando-a.

  24. Quando li o post, pensei logo no artigo do Brooks. Muito bem lembrado, Alan!

  25. [...] Java é ruim? Guilherme Chapiewski (tags: java rails) [...]

  26. Thiago Silva says:

    @gc “Meu ponto aqui é que não dá para dizer que Java (ou qualquer outra coisa) é ruim por sí só.”

    O que é um ponto bastante comum. Mas não compartilho dessa opinião, pelo menos, no que diz respeito às linguagens ditas de propósito genérico.

    Sem querer entrar no lado filosófico à respeito de algo ser intrinsicamente ruim ou bom, linguagens podem sim ser analisadas qualitativamente (ou seja, grosso modo, “por sí só”). Atributos como consistência, ortogonalidade e uniformidade são só alguns que podem ser observados. O uso da linguagem face a esses atributos pode nos dar uma idéia bem clara a respeito da sua (falta de) qualidade. Análises mais profundas podem ser feitas se considerarmos a natureza fundamental de uma linguagem e a atividade essencial que realizamos ao programar.

    No que diz respeito à comparações, se podemos analisar atributos de uma linguagem, então certamente podemos compará-la com outras linguagens. O comentário do Azambuja me chamou atenção pois muita gente não parece considerar que o Stroustrup _não_ defende a idéia de que linguagens não podem ser comparadas (ou mensuradas), apenas considera a tarefa não-trivial (ao contrário das massas de pessoas que comparam de forma negligente).

    []’s
    Thiago

  27. @Thiago

    Acho que você não pegou o X da questão :)

    Nesse tipo de comparação que estou propondo no post, não estou falando da linguagem Java especificamente, mas sim da plataforma Java. Eu proponho que certas ferramentas podem ser melhores do que outras para determinados tipos de trabalho, e isso continua sendo verdade independente de ser possível ou não comparar as linguagens de programação por quaisquer critérios.

    A linguagem é só uma parte da ferramenta. Veja, o fato de Java ter Applets tem menos a ver com a linguagem Java do que com a plataforma como um todo e outros fatores externos (suporte dos browsers), ou o fato de um SWF poder ser interpretado por um browser não tem nada a ver com a linguagem Actionscript, e o fato de você abrir um socket mais fácil em C do que em Javascript tem menos a ver com a linguagem do que com o ambiente em que elas normalmente rodam.

    Para finalizar, uma analogia. Um marceneiro poderia comparar um martelo e um serrote com vários critérios como por exemplo durabilidade, acabamento, qualidade do metal, etc. Porém, mesmo que ele consiga compará-los e descubra que um dos dois é melhor, o martelo ainda será melhor para alguns tipos de tarefa e o serrote será melhor para outros.

    É esse o ponto.

    [ ]s, gc

  28. [...] é que não existe uma metodologia que funciona para todos os casos e todos os projetos do mundo. Assim como você deve usar a melhor ferramenta para cada problema, você deve usar a melhor metodologia para cada [...]

  29. [...] é que não existe uma metodologia que funciona para todos os casos e todos os projetos do mundo. Assim como você deve usar a melhor ferramenta para cada problema, você deve usar a melhor metodologia para cada [...]

  30. [...] Você se pergunta como conseguia desenvolver sem testes e por que a linguagem que você utiliza não tem um suporte mais “nativo” a [...]

  31. Carlos says:

    Tá na moda falar mal de Java. Simples assim.

Leave a Reply