Quais seriam realmente os 5 motivos para aprender Java?

Publicado em 2012-10-16 por Vinicius Assef

Afinal, existe atualmente algum motivo para aprender Java?

Ontem, navegando em alguns sites, encontrei um artigo que me despertou a atenção: 5 motivos para você aprender Java. (Infelizmente o site saiu do ar).

Eu fiquei curioso para saber quais seriam esses 5 motivos para eu querer aprender Java. Li, escrevi um comentário grande lá, mas resolvi transformá-lo em um post aqui para explorar mais o assunto.

O conteúdo abaixo é, basicamente, o mesmo que escrevi no comentário lá, mas com alguns acréscimos que fiz, por ter transformado-o em um artigo.

Java é fácil de aprender?

Antes de tudo eu quero dizer que "não, Java não é fácil de aprender!" Assim como C, C++, Pascal, etc. também não são.

Como toda linguagem compilada, ela intimida o iniciante na exploração do ambiente. Isso é criado naturalmente pelo ciclo: codifica > compila > corrige erro > compila > executa > corrige erro…

Isso é muito ruim para quem está aprendendo uma nova linguagem de programação.

Quando eu resolvi aprender Python, me re-encontrei com uma coisa que tinha visto apenas no Basic (nos tempos do TRS-80), no dBase III Plus e no FoxBase: um shell interativo. Estamos falando da década de 1980, mas que maravilha era aquilo! Eu podia escrever uma linha e ver o resultado na hora, sem compilar nada, sem escrever um programa inteiro. Inclusive, a 1ª pessoa que me ensinou programação, em 1986, nem era programadora! Mas usava o console do Basic. Posso dizer que essa experimentação me motivou a entrar na profissão.

Com o passar dos anos e com o envelhecimento do dBase III Plus, enveredei naturalmente para o Clipper, Pascal, C e, ao mesmo tempo, trabalhei muitos anos com mainframes IBM. Durante uma fase programei também em Delphi (nas versões 1, 3 e 5). Antes que alguns dinossauros, como eu, perguntem: sim, eu cheguei a experimentar o VisualObjects da Computer Associates e me decepcionei! Também, mexi um pouco com máquinas Unix, trabalhei com uma linguagem chamada PowerBuilder e parti pra web, com Perl e, depois, com PHP.

Durante todos esses anos pós-dBase III Plus, eu nunca mais encontrei um shell interativo aonde eu pudesse aprender pequenas coisas rapidamente. Até que eu me deparei com o console do Python. Depois, experimentei um pouco de Ruby, que também traz o mesmo recurso.

A coisa está se espalhando e a "moda", pegando em outros ambientes e linguagens. Até que enfim! Isso teria alguma relação com a crescente popularidade dessas linguagens nos últimos anos?

Vale notar que muitos clientes SQL também têm um shell interativo e é essa a característica que acelera o processo de aprendizado das pessoas. Nem sempre SQL é intuitivo. Tente fazer alguns joins mais complexos e sub-selects sem um console interativo pra ver!

Portanto, um shell (ou console) interativo parece bobagem, mas não é. Acredite. Ou experimente um.

Mas, voltando às linguagens fáceis de aprender, quero citar Ruby e Python. Elas, sim, são muito fáceis de aprender. Até PHP, apesar de suas inconsistências e sintaxe suja, é mais fácil de aprender do que Java. Repetindo o que muitos desenvolvedores Java que eu conheço dizem, "ela é muito verborrágica". Eu diria que é burocrática. Ela fica entre você e o problema que você precisa resolver.

Outra característica que, na minha opinião, atrapalha muito no aprendizado do Java, são os XML intermináveis. Hoje em dia isso já melhorou, mas a quantidade de código antigo que existe por aí é tão grande, que a probabilidade de você conseguir trabalhar numa empresa que usa ferramentas Java mais modernas é muito pequena ainda.

XML não é para humanos. XML foi criado para sistemas trocarem dados. Pessoas não sentem-se confortáveis editando XML para configurar um ambiente de trabalho, um framework ou um servidor.

Java não é fácil de aprender.

Orientação a objetos é bom pra tudo?

Um psicólogo muito conhecido, chamado Abraham Maslow -- é, aquele da pirâmide de necessidades -- registrou no livro The Psychology of Science: A Reconnaissance (1966), Cap. 2, p. 15, o seguinte: "Eu suponho que é tentador, se a única ferramenta que você tiver for um martelo, tratar tudo como se fosse um prego". Ele falou isso descrevendo erros que as pessoas tinham em suas percepções de mundo.

Ou seja, te obrigar a usar um único paradigma de programação não é uma boa alternativa para todos os problemas. Em linguagem acadêmicas é muito válido, mas não sempre para o mundo real, com problemas reais.

É importante destacar também que saber usar uma linguagem orientada a objetos é completamente diferente de saber projetar um sistema orientado a objetos. Essa é uma disciplina enorme, muito recente, e que certamente amadureceu bastante com a disseminação do Java.

Não se engane, existe muito código macarrônico por aí disfarçado (ou travestido) de classe Java!

Novamente, Ruby e Python dão banho nesse aspecto. São linguagens que suportam paradigmas funcionais, procedurais e OO. À escolha do cliente e da necessidade real. Falando no popular, não precisamos usar um canhão pra matar uma formiga. Mas, quando o canhão for necessário, ele está lá à sua disposição.

Shell script e C não são linguagens OO, mas são duas das mais usadas no mundo. Não se assustem, mas COBOL continua sendo uma das linguagens mais usadas em sistemas principais de bancos, companhias telefônicas e seguradoras do mundo inteiro. E o COBOL geralmente usado nesse perfil de empresa é o COBOL ANSI, sem OO.

Java é uma linguagem robusta e segura?

Robustez e segurança estão mais ligados ao programador, ao projetista do sistema/aplicativo, ao framework, do que à linguagem propriamente dita.

Se você me der uma metralhadora com mira de precisão, provavelmente eu não vou acertar quase nada. Mas se der um revólver de espoleta pro Chuck Norris, ele mata uma cidade inteira!

Não devemos confundir a linguagem Java com a plataforma Java (que tem mostrado, recentemente, não ser tão segura assim).

Java é multiplataforma?

Esse é, sem dúvida alguma, o grande benefício do Java: a plataforma, não a linguagem.

É por isso que a JVM tem ganho bastantes adeptos pelo motivo de incorporar linguagens com abordagens mais modernas, como Ruby e Python, que já rodam na JVM há alguns anos.

Rodando na mesma JVM, é possível acessar objetos e classes Java a partir do Ruby ou do Python. Foi uma grande sacada do pessoal da Sun, apesar de não ser nada muito novo. Em mainframes, a intercomunicação entre linguagens é coisa bem antiga. O Pascal já permitia chamar rotinas escritas em C. É a mesma abordagem que o Python faz com C. Quer desempenho? Então faça isso em C e chame a partir do Python.

Mas você já pensou por que isso aconteceu? Em ambientes assim, soluções mais simples podem ser implementadas de forma mais simples, mais direta, mais rápida e mais barata. Isso traz competitividade à empresa, melhorando o time to market.

A tendência nesse ambiente tem sido crescer as aplicações usando as novas linguagens e deixando o código legado em Java mesmo.

Seria esse algum sinal para os defensores da linguagem Java?

Java é realmente popular?

Sem dúvida Java é muito usada. Mas, como você classificaria uma linguagem popular?

Eu ainda não conheci uma pessoa que dissesse assim: "rapaz, eu tive uma ideia e vou implementá-la em Java porque ela é uma linguagem muito boa de se programar. Ela é simples e com certeza eu serei mais produtivo com ela do que com Ruby ou com Python."

Se você conhecer essa pessoa, me apresente. Só não vale me apresentar pessoas que só conheçam Java. Aí não existe termo de comparação válido.

Eu já perguntei para vários programadores Java o motivo de eles continuarem trabalhando com ela. E a resposta, quase que invariavelmente foi: "porque preciso pagar as minhas contas, né?". Essa é a mesma resposta que ouço de alguns amigos que resolveram fazer concurso público: segurança. Eles sabem que é uma plataforma estável comercialmente.

Seria esse um indício de popularidade de uma linguagem? Eu diria que a Sun Microsystems foi muitíssimo competente no marketing do Java, para vender servidores e serviços, já que a linguagem em si sempre foi gratuita. A long tail continua até hoje e vai permanecer por muito tempo.

Entretanto, mesmo sendo muito usada, em quais ambientes de trabalho ela é aplicada?

O que eu vou escrever agora é muito mais filosófico do que outra coisa, mas, em grande parte, a linguagem que você aprende indica o perfil de empresa que você vai trabalhar.

É claro que existem exceções, mas eu já cansei de trabalhar numa fábrica de software onde você precisa ler especificações funcionais e técnicas para desenvolver funcionalidades para pessoas que você nunca verá na vida. Aliás, já até coordenei um ambiente assim. É uma linha de produção mesmo. Programador só programa. Analista só analisa. Testador só testa. GP só pergunta data e andamento do serviço. Lembra da analogia do martelo e do prego?

Infelizmente, esse seria o único motivo para um iniciante aprender Java atualmente, e isso não é errado em si: empregabilidade. As pessoas precisam sobreviver e pagar as contas.

Para terminar, reflita com sinceridade, qual é realmente o motivo para você querer aprender Java hoje em dia?

Recomendo ler o texto The Python Paradox. Ao lê-lo troque "Python" por Schema, Haskell, Julia, etc., ou troque "Java" por Visual Basic, PHP, ASP, conforme seu caso. Esse texto não fala especificamente sobre as linguagens de programação, mas sobre as atitudes dos profissionais e das empresas que trabalham com elas.

[update em 17/07/2013] Eu tenho pensado nesse assunto e cheguei à conclusão que existem, sim, alguns motivos para aprender Java, além de conseguir trabalho mais facilmente:

  • Desenvolver aplicativos para Android.
  • Passar na prova da faculdade.

[update em 25/10/2016] Continuando a reflexão, talvez você precise aprender Java porque foi alocado em um projeto que é desenvolvido em Java e não pode ou não quer sair para outra empresa. Trabalhar e ganhar seu dinheiro honestamente é perfeitamente justo.

Vinicius Assef

Eu sou apaixonado por Python e shell script.

Aprenda com seus erros e dê nome certo às coisas.