No momento em que escrevo estas linhas, a linguagem de programação Java lança a sua 21.ª versão – como sempre, com algumas funcionalidades como virtual threads, padrões de registo, API para mecanismos de encapsulamento de chaves, correspondência de padrões, entre outras, algumas das quais em formato de pré-visualização. No entanto, o objetivo aqui não é destacar as funcionalidades do Java, mas sim discutir a aplicabilidade da linguagem nos dias de hoje e tentar compreender se ainda vale a pena um programador investir o seu tempo e esforço nesta linguagem.


Como experiente programador Java (também conhecido como “dinossauro”) que começou a aprender a linguagem em 1999 e a utiliza profissionalmente há mais de 23 anos, penso que posso trazer alguns argumentos para a mesa. Claro que não espero dar uma resposta simples à pergunta que coloquei no início, e tenho a certeza de que estarei longe de obter consenso sobre isso, mas sinto-me à vontade para falar sobre a minha própria experiência com a linguagem e dar uma opinião sobre o que considero serem as forças e as fraquezas do Java.


O Java nasceu oficialmente em 1995 e viu a sua versão 1.0 ser lançada em janeiro de 1996. A Sun Microsystems, empresa por trás do Java, era maioritariamente conhecida pelos seus computadores, naquela época, mas também por ser defensora do software aberto. Esse princípio foi importante para o desenvolvimento da linguagem e pode ser exemplificado pela aquisição da base de dados MySQL em 2008, apenas um ano antes de a empresa ser vendida à Oracle.

 

Ser programador Java ao longo dos anos

Quando comecei a utilizar Java profissionalmente, a linguagem estava na sua versão 1.2, e o ambiente em que os programadores trabalhavam era muito diferente do “mundo” de linguagens e ferramentas que temos hoje, especialmente no que diz respeito ao desenvolvimento web.


No início, o Java era considerado uma boa escolha para construir aplicações web. Conceitos como “front-end” e “back-end” praticamente não existiam, e as opções que tínhamos para construir interfaces web eram limitadas a HTML, CSS e JavaScript.


A era dos frameworks estava apenas a começar. Quando comecei a desenvolver em Java, utilizávamos coisas como Java Server Pages (JSP) e Servlets para escrever código para aplicações web. A dada altura, começaram a surgir frameworks e as coisas ficaram um pouco mais fáceis (embora algumas pessoas possam discordar disso).


Com o tempo, novos frameworks e ferramentas surgiram e desapareceram, novas versões do Java introduziram novas maneiras de lidar com os problemas, e as coisas mudaram tanto que às vezes é difícil acreditar que a própria linguagem ainda está aqui.


Hoje, o Java é considerado uma referência para o desenvolvimento de back-end. Utilizei o Java num contexto em que quase não existiam frameworks para front-end. Ao longo da minha carreira, experimentei Java Server Pages, Struts, Java Server Faces, PrimeFaces, entre outros frameworks, juntamente com HTML, CSS e JavaScript, mas sempre me pareceu que o Java não era a solução ideal para front-end. Quando os frameworks de JavaScript surgiram, o uso do Java em back-end tornou-se padrão.

 

Java e Programação Orientada a Objetos (POO)

Antes de abordar alguns (alegados) problemas e benefícios do Java, gostaria de falar sobre outro conceito que considero intrínseco à linguagem e, para isso, usarei minha experiência como professor. Java foi a primeira linguagem de programação mainstream a utilizar conceitos de orientação a objetos a nível comercial, com razoável sucesso. Portanto, para aprender Java e usá-la adequadamente, sempre foi necessário compreender o paradigma da POO.


Deparei-me com esse problema não apenas como developer, mas também como professor. Durante 16 anos, preparei estudantes para serem programadores, tentando ensinar-lhes Java, POO e Análise e Design Orientado a Objetos. Para ser um bom programador, o processo começa com um bom raciocínio lógico e matemático. A maioria dos estudantes (60-80%) que chegava às minhas aulas de Java não possuía essas bases, o que tornava o meu trabalho muito mais difícil.


Claro que isso acontece ao aprender qualquer linguagem de programação. No entanto, no caso do Java, os estudantes também precisavam de estudar a orientação a objetos, o que levava a muita frustração. No final, a maioria deles culpava o Java por ser “muito difícil” de aprender, quando a questão é um pouco mais complicada. Uma nota final sobre isso: alguns estudantes, quando finalmente entendiam os conceitos de POO, como herança e polimorfismo, ficavam tão ansiosos para usá-los que acabavam por aplicá-los de maneira incorreta. Mas essa é outra discussão.

 

O lado negro do Java

Falemos agora sobre alguns aspetos do Java que abrem espaço para discussão: funcionalidades boas e más que levam as pessoas a amar ou odiar a linguagem.

  • O Java é lento em comparação com outras linguagens, especialmente C/C++
    Desde o início, o Java adotou o princípio “WORA” (Write Once, Run Anywhere – Escreve uma vez, executa em qualquer lugar). Sim, o Java é uma linguagem interpretada e pode ser mais lenta do que outras, especialmente as que geram código de máquina.

    Por outro lado, os compiladores de Java evoluíram muito para preservarem código pronto para execução (o que, é claro, consome mais memória). Também existem processadores com múltiplos núcleos que podem dividir o trabalho de execução de um programa.

    Finalmente, existem boas práticas que um programador Java deve adotar para melhorar o desempenho de um programa Java. Exemplos comuns dessas práticas são:
    • Escolher a estrutura de dados certa para resolver o problema;
    • Evitar o uso de métodos longos;
    • Tentar otimizar os loops;
    • Evitar o uso de múltiplos blocos “if-else”;
    • Preferir a classe StringBuilder à de String;
    • Evitar a criação de objetos complexos;
    • Preferir tipos primitivos em vez de wrappers;
    • Otimizar as queries para evitar “viagens” desnecessárias ao banco de dados.

  • O Java está sempre atrás dos seus concorrentes e demora mais tempo a adotar inovações
    Muitos críticos do Java argumentam que a linguagem demora muito tempo a incorporar mudanças importantes – ao contrário de alternativas como Kotlin, Python, JavaScript ou Golang. Tendo trabalhado para empresas que adotam o Java como principal linguagem durante quase toda a minha carreira de programador, e tendo lidado com sistemas críticos que têm um impacto significativo nas organizações, posso dizer que não adotar novas versões do Java logo após o seu lançamento é uma prática muito comum entre médias e grandes empresas.

    Atualmente, as versões do Java são lançadas a cada seis meses, em março e setembro, e apenas algumas delas são recomendadas para uso em produção (as mais recentes são as versões 8, 11, 17 e 21). Estas versões são chamadas de Long-Term Support (LTS)e as empresas adotam-nas, geralmente, muito tempo depois do seu lançamento, como forma de evitar problemas (normalmente esperam por uma nova versão LTS para adotar a versão anterior).

    Portanto, do meu ponto de vista, as empresas procuram uma linguagem confiável que atenda às suas necessidades (e às necessidades dos seus clientes), que constituem preocupações mais importantes do que ter os seus produtos equipados com as últimas inovações.

    Por vezes, uma nova funcionalidade não está presente no Java em si, mas está presente em alguma ferramenta do seu ecossistema, que é muito vasto. Por exemplo, é o caso do Spring, talvez o ecossistema baseado em Java mais conhecido do mercado. O Spring abrange uma série de funcionalidades que desenvolvem e melhoram o próprio Java, e é amplamente adotado hoje em aplicações web e aplicações Java baseadas na cloud. O Quarkus é outro exemplo de uma ferramenta que permite o desenvolvimento de aplicações Java para a cloud.

    Em resumo, o que tenho visto na minha experiência é que as empresas que dependem do Java para os seus sistemas críticos estão mais preocupadas com a estabilidade dos seus sistemas empresariais do que com novos recursos da linguagem.

  • O Java está desatualizado e, por isso, não é utilizado para construir novos sistemas
    Atualmente, as empresas parecem pensar muito mais nas vastas possibilidades de linguagens de programação que têm ao dispor antes de iniciarem um novo projeto. Compreender o que cada linguagem oferece é crucial ao escolher o que utilizar num novo projeto.

    É verdade que existe uma enorme base de sistemas Java instalados em todo o mundo e isso não pode ser negligenciado. A linguagem tem mais de 25 anos e tem sido amplamente utilizada ao longo do tempo, e isso é uma consequência natural. Muitos sistemas evoluem a partir de sistemas pré-existentes, por isso o facto de existir um legado Java, uma linguagem que ainda existe e está a ser preservada, é importante no momento de decidir adicionar novas capacidades a uma aplicação existente.

    Além disso, como mencionei anteriormente, uma nova funcionalidade que talvez não exista no núcleo do Java pode ser fornecida por alguma outra ferramenta no ecossistema, e às vezes por mais de um fornecedor.

    Portanto, mesmo quando precisamos de iniciar um novo projeto do zero, não acho que o Java deva ser descartado. Também é importante dizer que os sistemas de hoje não são resultado de uma única linguagem em si. Os sistemas são compostos por um conjunto de ferramentas que se integram para produzir valor. O Java tem a vantagem de ser facilmente integrado com muitas ferramentas do mercado, devido ao seu tempo de existência, à grande comunidade e à aceitação geral.

O Java ainda respira

De acordo com o índice TIOBE, que mede a popularidade das linguagens de programação e é atualizado mensalmente, o Java ainda está entre as cinco linguagens mais populares do mundo. Isso é um bom indicador de que a linguagem ainda está viva.


O Java é compatível com muitas soluções utilizadas por developers para produzir um sistema de computador funcional. A maioria das ferramentas desenvolvidas no mercado é compatível com Java, o que demonstra a força e popularidade dessa linguagem.


Basta olhar para o Stackshare, um portal onde developers e empresas partilham as ferramentas que utilizam nas suas atividades normais. Podemos ver que empresas como Uber, Instagram, Airbnb, Netflix, Google, Amazon, entre outras, recorrem ao Java.


Isso significa que existem sempre vagas de emprego para developers Java e essas oportunidades não parecem diminuir. Uma pesquisa rápida por ofertas de emprego Java em sites como o LinkedIn, por exemplo, pode comprovar isso.


Por fim, posso dizer, com base na minha própria experiência, que o Java é usado em grandes empresas para construir sistemas que agregam valor a milhões de pessoas. Ao longo da minha carreira, tive a oportunidade de participar de muitos projetos importantes que tinham o Java como base – por exemplo, o sistema de pagamento instantâneo mais popular do Brasil, chamado Pix, foi desenvolvido com recurso a uma variedade de tecnologias, mas no seu núcleo existe código Java em execução.

 

“É uma pena que ela não vá viver. Mas, afinal, quem vive?”*

É claro que o Java não tem hoje a relevância que teve no passado. Não sabemos por quanto tempo a linguagem irá sobreviver, mas os factos não parecem sugerir um desaparecimento a curto ou médio prazo. Produtos em Java continuam a ser desenvolvidos e preservados, gerando uma procura que podemos ver todos os dias.


Portanto, o Java não está morto, ou pelo menos não perto do seu fim. O Java tem os seus problemas, mas ainda é amplamente utilizado, em parte porque possui uma grande base de sistemas instalados, uma vasta comunidade e ecossistema, mas também porque funciona e as pessoas consideram-no confiável. Também é verdade que a linguagem continua a reinventar-se ao longo dos anos.


Com o desenvolvimento de novas tecnologias, especialmente na área da Inteligência Artificial (IA), há quem diga que as linguagens de programação já não serão utilizadas dentro de alguns anos. Verdade ou não, isso é um desafio não apenas para o Java, mas para todas as linguagens de programação. O facto é que todas elas terão de se adaptar ao mundo em constante mudança em que vivemos.

 

* Citação famosa do filme Blade Runner (1982), dita por Gaff (personagem de Edward James Olmos).

Partilha este artigo