9

⚔️Final Round: Java vs .Net! Quem ganha?⚔️

#Java
Thiago Guedes
Thiago Guedes
A escolha entre as duas mais populares plataformas de desenvolvimento de software - Java ou .Net, tem sido motivo de dúvida para muitos jovens iniciando carreira na área de programação, assim como para muitos gestores de TI, quando precisam definir uma plataforma para os seus projetos.
E mais do que isso, por estarem bem estabelecidas, estas plataformas despertam legiões de defensores e muitas paixões, quase como uma religião ou time de futebol, onde cada qual justifica sua escolha com argumentos, razões e fundamentos, nem sempre tão claros.
Meu objetivo neste artigo é fugir dos aspectos subjetivos e desmistificar algumas coisas, mas principalmente mostrar aspectos fundamentais a considerar na escolha e assim ampliar a discussão para níveis mais altos, possibilitando uma visão livre de preconceitos, apresentando os benefícios e desafios de cada uma das escolhas. E para entregar este conteúdo pretendo apoiar-me em 3 pilares básicos: 1. Aspectos Técnicos, 2. Aspectos de Mercadológicos e 3. Custos Total de Propriedade.
Evidentemente que os aspectos culturais também pesam, porém não irei entrar neste mérito, sob pena de perder a imparcialidade que um artigo desta natureza pede.

Aspectos Técnicos

Sem me aprofundar nas questões técnicas entre as plataformas, a ideia é revelar alguns aspectos onde elas são similares e outros onde são diferentes e que possam interessar à leigos e tomadores de decisão. Mas se você quer ir fundo, há artigos bem técnicos que comparam as duas plataformas aqui e aqui, só para citar dois exemplos.
Antes de falar qualquer coisa sobre as plataformas, vamos quebrar um mito: Não há o que uma das plataformas faça que não possa ser feito na outra (onde ambas ofereçam suporte, é claro)!
javasquare pixel coffee java javasquare GIF

Um pouco sobre Java

Java é uma referência à um conjunto de softwares e padrões, criados originalmente pela Sun Microsystems, e agora pertencentes à Oracle Corporation. Quando as pessoas falam em Java, elas estão falando genericamente sobre um dos seguintes itens: 
A plataforma Java, que inclui o Java Development Kit (JDK) que inclui o compilador Java e outros utilitários, e o Java Runtime Environment (JRE), que inclui a Java Virtual Machine (JVM).
A Java Class Libraries, que é um grande conjunto de código escrito e disponível para reuso, e que contém a maior parte das APIs (Application Programming Interfaces) e funções que podem ser providas pelo sistema operacional.
A linguagem de programação Java, que os desenvolvedores utilizam para escrever suas aplicações.
Uma "edição" em particular da plataforma Java: Java Card, Java Micro Edition (ME), Java Standard Edition (SE) ou Java Enterprise Edition (EE)
A tecnologia Java foi concebida para ser multiplataforma, isto é, pode ser utilizada em diferentes ambientes operacionais como Windows, Unix, Linux, Solaris, AS-400, MAC, Android e outras, e dependendo do caso, utilizando o mesmo código-fonte, ou com poucas adaptações. Isto se deve graças à característica do Java ser pré-compilado (através do JDK), e utilizar uma "máquina interpretadora" (a JVM) para transformar as instruções em algo executável pelo sistema operacional.
O Java em sua versão "corporativa", conhecida como J2EE, pode ainda ser integrado à literalmente centenas de serviços e plataformas, através da sua API, o que o torna extremamente poderoso e flexível.
Criar um aplicativo Web ASP.NET Core em C# - Visual Studio (Windows) |  Microsoft Docs

Conceitos fundamentais do .Net

A plataforma .Net criada pela Microsoft, nasceu para o ambiente Windows e permite que você utilize diferentes linguagens nativas (VB.Net, C#, J#) e não nativas (Cobol, PHP, entre outras, desde que utilizadas em máquinas rodando Windows) e consiste em 5 componentes principais:
Sistema operacional Windows (a partir da versão XP)
Servidores baseados em Windows Server (a partir da versão 2003)
.Net Framework (cujos três maiores elementos são a Common Language Runtime (CLR), a Framework Class Library, e o ASP.Net)
.Net Building Block Services (serviços para internet),
Ferramenta de desenvolvimento Visual Studio.Net. 
A Microsoft tem feito grandes esforços para tornar o .Net cada vez mais aberto, flexível e integrável, e vem ganhando a simpatia e a preferência de muitos desenvolvedores e empresas.

Diferenças entre Java e .Net

Há diferenças significativas nos aspectos técnicos de implementação das plataformas e estas vão além da linguagem de programação utilizada, mas envolvem a forma de desenvolvimento e execução das aplicações (arquitetura de software). 
Não foi fornecido texto alternativo para esta imagem


Comparação das Frameworks .Net e J2EE

Quem pretende desenvolver em Java pode escolher entre diferentes IDEs de desenvolvimento (Eclipse, IntelliJ Idea, NetBeans, e Oracle JDeveloper). Para o desenvolvimento .Net a IDE é o Visual Studio .Net.
A questão do uso multi-plataforma ainda é uma diferença importante, mas a promessa é que isso irá mudar futuramente. Como já mencionado, no Java há uma gama de opções de sistemas operacionais com nenhuma ou pouca adaptação no código, dependendo da arquitetura utilizada (o quanto são próximos conceitualmente).

Semelhanças entre Java e .Net

Ambas plataformas facilitam bastante o desenvolvimento orientado à objetos, baseando-se em em padrões, componentes modulares e serviços, permitindo desta forma que os desenvolvedores concentrem-se nas regras de negócio ao invés de preocuparem-se com os serviços mais básicos.
De fato, tanto o Java quanto o .Net, permitem o desenvolvimento de aplicações multi-camadas que manipulem grande volume de usuários e dados e permitem a interoperabilidade entre diferentes tecnologias, bancos de dados e até plataformas operacionais (desktop, web, mobile). 
Tanto o Java quanto o .Net tem o core open source, isto é, estão com o código-fonte aberto para que desenvolvedores possam modificar, aperfeiçoar e evoluir a plataforma. O Java já nasceu com esse conceito, enquanto a Microsoft tomou esta iniciativa somente no final de 2014. Foi esta mudança que deu um novo rumo ao .Net, fazendo que os meios acadêmicos passassem a ver o .Net com mais simpatia.
Não foi fornecido texto alternativo para esta imagem
Resumindo, os aspectos técnicos não são suficientes para formarem sozinhos uma boa base para decisão. O que em certos momentos é uma fraqueza, em outro pode ser a melhor das virtudes da plataforma.

Aspectos Mercadológicos

É inegável que tanto o Java quanto .Net estão maduros e são performáticos (se bem implementados), e tem promessas de continuidade e de evolução. Mas não existem estatísticas confiáveis e nem consenso sobre qual é o mais utilizado globalmente, dado a grande variedade de cenários de uso e soluções existentes.
Mas quando falamos em termos de mercado, temos que ir além do controverso tema do marketshare, pois temos que considerar o seguinte:
Oferta de Aplicações e Soluções "prontas" em ambas as plataformas dentro do que você está buscando.
Oferta de Empresas especializadas no desenvolvimento e suporte em cada ambiente disponíveis e próximas à você.
Disponibilidade de Profissionais para trabalharem.
As tendências futuras para adoção de cada plataforma em diferentes tipos de aplicações.
O que se observa historicamente é que até um dado momento, o Java estava muito forte nos ambientes acadêmicos, no mundo open source, e entranhado fortemente no governo (quem nunca usou o IRPF da Receita Federal, por exemplo). Antes da abertura do código do .Net, o Java foi fortemente "patrocinado" por algumas das gigantes de tecnologia (IBM, Sun, Oracle e HP) como forma de combater a hegemonia e dependência da Microsoft. A Microsoft por sua vez corria por fora, e era a preferência das empresas produtoras de software "pacote" e desenvolvedores iniciantes, pela maior facilidade de acesso à material oficial e suporte.
Foi justamente com o avanço do desenvolvimento web, a abertura do código do .Net e do lançamento do Visual Studio Communty Edition, que a gigante de Redmond foi anotando um crescimento significativo da adoção do .Net, e gradualmente vem ganhando o espaço não apenas sobre o Java, mas também em cima de outras linguagens de "nicho web" como o PHP e o Python. E obviamente a adoção do .Net também é empurrada pela popularidade do Windows, que está se tornando commodity e roda hoje em 93% dos computadores do mundo.
Enquanto isso, no emergente ambiente de aplicações móveis, ou mobile, em termos de aplicações nativas, a Microsoft "dormiu no ponto" durante décadas com o arcaico "Windows CE", e o .Net ainda hoje só acha espaço no Windows Phone, já que o Android essencialmente se utiliza do Java, e no mundo iOS da Apple a linguagem é o Objective-C. 
Ainda assim, é notório que no Brasil atualmente oferta de empresas de desenvolvimento "sob medida" aptas a trabalharem com .Net é maior do que com Java, e consequentemente o número de profissionais no mercado Java está um pouco mais restrito que em .Net. Mas isto não significa que o profissional Java seja difícil de se achar. 
Resumindo, em termos de tendências, podemos observar:
Igualdade de uso de ambos no ambiente iOS (uso não nativo de ambos). Vantagem do Java no mundo OsX.
Crescimento do .Net em ambientes web.
Domínio do .Net em ambientes windows desktop.
Domínio do Java no mundo Google (Android e Chrome OS).
Crescimento do Java no mundo Posix (Unix, Linux, Solaris).

Critérios para sua empresa escolher entre Java ou .Net 

a) Complexidade, tamanho e necessidade de performance das aplicações
No que diz respeito à performance a discussão é sempre acalorada, pois o que muitos defendem que uma implementação feita em J2EE tende a tornar a solução mais pesada comparada à uma implementação .Net. Os defensores do .Net argumentam que o fato do Java necessitar da JVM (máquina interpretadora), já por si só faz com que a execução seja mais lenta, especialmente nas camadas de apresentação.
Para falar a verdade, isto era mais perceptível uns anos atrás, mas hoje com o avanço dos hardwares, não é algo tão gritante, embora ainda possa ser percebido, especialmente na camada "cliente", já que as aplicações .Net sempre rodam "nativas" nas máquinas. Então se para você desempenho "na ponta" é um ponto crítico, cuidado redobrado se for escolher o Java. Já tive experiências bem desafiadoras para "tunar" aplicações Java... 
Quanto às aplicações mais robustas com alto volume de tráfego e com muitas regras de negócio, que precisam ser mais bem arquitetadas, o Java (J2EE) dispensa um tratamento de classe bem profissional, já que tem muitos recursos prontos e poderosos para o gerenciamento de sessões, failover e balanceamento de carga. Isto pode ser um diferencial relevante a favor do Java. Não que não seja possível fazer todo este gerenciamento no .Net, que amadureceu muito nos últimos anos, mas certamente não é algo tão claramente estruturado, dando um pouco mais de trabalho (leia-se tempo e dinheiro) para implementá-los. Evidentemente que se sua equipe não tiver um bom conhecimento sobre estes aspectos, implementar em Java acabará também sendo complexo e caro (vide o próximo item). 
b) Considere as habilidades da sua equipe 
Embora as ferramentas para Java estejam cada vez mais acessíveis, as ferramentas da Microsoft são geralmente consideradas mais fáceis de aprender e usar, especialmente para construir aplicações que requerem interfaces gráficas mais ricas e que oferecem conteúdo para navegadores da Web.
Considere que treinar e garantir a eficiência de sua equipe em determinada tecnologia pode custar caro (novamente, leia-se tempo e dinheiro). A arquitetura Java por ser mais ampla e mais complexa, vai requerer maior tempo para aprendizado, e treinamentos especializados. Já a curva de aprendizado de quem vem do mundo Microsoft é bem menor e há uma grande oferta de cursos presenciais e online de .Net, inclusive gratuitos oferecidos pela Microsoft.
E lembre-se que no que diz respeito à plataforma .Net, a oferta de profissionais é maior, uma vez que ela suporta diferentes linguagens que podem ser utilizadas junto à .Net Framework.
c) Avalie a infraestrutura que pretende utilizar
Ambientes multi-camadas tipicamente são complexos de montar e administrar, especialmente se forem hospedados internamente. Neste aspecto, o Java costuma ser mais exigente nos requisitos de compatibilidade de hardware e softwares que precisam estar todos ajustados entre si para garantir uma boa performance.
Minhas experiências em ambos ambientes (Java com banco de dados Oracle versus .NET com banco de dados SQL Server) revelam que a implementação da infraestrutura e ajuste de desempenho é bem menos traumática e "obscura" quando feita em .Net.
E novamente vale frisar que com a forte tendência de Cloud Computing, ambientes .Net viraram "carne de vaca", o que não se pode afirmar sobre o mundo Java, onde as ofertas são mais restritas.
d) Pese a importância da portabilidade para a aplicação
Se a necessidade de codificar uma vez e depois replicar para diferentes ambientes é um requisito de sua aplicação, então o melhor é ficar com o Java. Neste caso naturalmente você irá separar a camada de negócios da camada de apresentação. Ainda que você tenha que fazer ajustes aqui e ali na camada de apresentação, você terá uma implementação sólida e unificada, ao invés de trabalhar com uma "colcha de retalhos" de diferentes tecnologias.
A resposta da Microsoft para isso, é oferecer cada vez mais interoperabilidade entre plataformas, de modo que você possa desenvolver sua camada de negócios em .Net, e posteriormente integrá-la a camadas de apresentação em outras linguagens e plataformas. Não é algo tão intuitivo como fazer tudo em uma única plataforma, mas o resultado final também é bom, embora você precisará de conhecimentos multidisciplinares na sua equipe.
e) Investigue quem são ou serão seus provedores de solução
O ponto aqui não é se a(s) empresa(s) que eventualmente for(em) lhe prestar os serviços, de desenvolvimento, implementação, infraestrutura, suporte ou manutenção estão aptas, pois isso é muito óbvio. A questão aqui é: quanto vai custar ter que substituí-los, e o quanto isso é fácil ou difícil. 
Quanto mais difícil ou caro for para encontrar um substituto, maior é o seu risco de ter que "morrer abraçado" com a empresa que contratou, ou ter que jogar tudo fora para recomeçar em outra tecnologia.
A dica fundamental é que antes de decidir qualquer coisa, você precisa tomar 3 orçamentos e referências comerciais dos ofertantes, para ter certeza que você tem opções. Você poderá se surpreender com os resultados destas pesquisas, tanto em .Net, quanto em Java.
f) Custo Total de Propriedade
Leve em conta todos os custos envolvidos para você ter uma aplicação implantada:
Não foi fornecido texto alternativo para esta imagem
Comparando onde ambas plataformas conseguem atuar de igual para igual - o mundo das aplicações corporativas (exemplo: ERP, e-commerce e sistemas legados): O Java tende a custar mais caro que o .Net no médio-longo prazo.
Isto é diretamente influenciado pelos custos diretos (mão-de-obra, que no caso do Java atualmente é mais cara) e indiretos, a menos é claro que você esteja desenvolvendo em Java com recursos próprios (sem precisar contratar mão-de-obra externa) ou com algum subsídio acadêmico.
Apesar dos custos de licenciamento no .NET de alguns componentes de software (Windows Server, SQL Server (caso queira usar um banco de dados de nível corporativo) e o Visual Studio Professional), pelo fato de contar com maior oferta de mão-de-obra, isto pode acabar compensando estes gastos. Lembre-se que dependendo do tamanho do projeto, a mão-de-obra acabará por se tornar o maior ofensor de custos em termos de desenvolvimento, bem mais do que licenças de software. E quando falo mão-de-obra, não me refiro à codificação somente, mas à todo ciclo de especificar, testar, corrigir e manter. 
Tenha um especial cuidado se você optar por aplicações e servidores Java "prontos" fornecidos pelos grandes players (ex. Oracle ou RedHat). Você irá perceber que apesar dos códigos open source, existem custos elevados de implantação, licenciamento das partes proprietárias ou customizadas, suporte, manutenção e upgrades.
Outro fator a considerar no custo é quando falamos de Cloud Computing como modelo de provisão de infraestrutura: os provedores em geral estão com mais ofertas para ambientes .Net do que para ambientes Java, principalmente se incluirmos o Oracle como opção de banco de dados para o Java.
Dependendo do custo complexidade, tamanho, orçamento e prazo disponível para implantar uma solução, você perceberá que a escolha não é óbvia. 

Critérios para escolher entre Java ou .Net como carreira profissional

Agora que você já percebeu que a escolha para uma empresa depende de muitos fatores, se você está indeciso sobre em qual das duas plataformas seguir sua carreira, convido-lhe a ler este estudo de 2021 sobre salários x linguagens de programação no Brasil e que pode ser encontrado aqui. Você irá notar que os profissionais Java, no geral, são mais bem pagos que os profissionais .Net.
Portanto, se você está começando no ramo da programação e espera ganhar dinheiro com essa atividade, seria interessante lembrar que quem conhece Java, além do ambiente web e aplicações corporativas, vai encontrar trabalho com certa facilidade no mundo mobile, cuja demanda se faz cada vez maior.
Porém, note que aprender Java vai exigir mais investimento em conhecimento e mais de você tecnicamente (e isto não é demérito nenhum para os profissionais .Net, afinal isso não prova nada, exceto que você terá um esforço maior em uma do que na outra), especialmente para chegar nos níveis de senioridade onde estão os melhores salários. A facilidade e intuitividade do .Net não são tão presentes no universo Java.
Avalie o mercado, e avalie o seu perfil. Você é uma pessoa que gosta de ir mais fundo? Tem facilidade para aprender coisas sozinho? Tem facilidade com o idioma inglês? Está preparado para trabalhar com ambientes híbridos e compreende que nem sempre um código que funciona numa plataforma irá rodar na outra? Consegue ir além do que está documentado? Não fica incomodado em muitas vezes ter que recorrer à fóruns de discussão (e esperar) para obter respostas que não encontrou na documentação ou em cursos? Ainda que tudo isso seja desejável para ambas as plataformas, o pessoal do Java sabe que isso é bem comum em seu dia-a-dia.
Faça sua escolha, na certeza que em qualquer uma delas, você encontrará espaço para desenvolver todo o seu potencial.

Conclusões

É por todos os motivos acima, e principalmente por serem tão poderosos, que a "briga"entre Java e .Net promete continuar acirrada durante ainda muitos anos, por profissionais e por espaço no mercado.
Eu particularmente não assumo posições radicais sobre essa ou aquela plataforma. Consigo enxergar desafios e virtudes em ambos os lados, e que em dados momentos uma poderá ser mais indicada que a outra, especialmente considerando o que você precisa fazer e que talentos tem em suas mãos. Nada que um estudo, levantamentos e ponderação não ajudem a resolver.
Afinal, eu sou do tempo que nem o Java, nem o .Net existiam, e em mais de um momento em minha carreira me vi obrigado a migrar completamente de tecnologia por força dos mercados (quem por exemplo, não teve que portar de sistemas "DOS" para Windows, não faz ideia da quebra de paradigma que isso representou, além dos custos e reinvestimentos. Uma senhora frustração!). E eventualmente ainda seremos obrigados a fazer isso outras vezes.
Por isso que não dá para ser "xiita", ou um cego apaixonado, pois em tecnologia é perigoso "abraçar uma causa", já que tudo muda a toda hora. O que hoje é moda, amanhã é obsoleto. O que hoje te paga bem, amanha é conhecimento que não vale nada. Temos que continuar evoluindo e aprendendo, sempre e sempre!
Fato interessante é que não é bem comum vermos sistemas legados integrados com coisas novas - graças ao Java e ao .Net. Também está cada vez mais comum encontrarmos o Java e o .Net coexistindo em um mesmo ambiente, lindamente integrados! De fato, segundo o Gartner, mais de 30% das aplicações corporativas estão em ambientes híbridos de Java e .Net.
A decisão entre uma e outra tem a ver com necessidades, estratégia e recursos disponíveis e muito pouco com a tecnologia por si só. O fato é que ambas plataformas possuem algumas limitações, abordagens técnicas, vocações e pontos fortes.

Se você é produtor de software, certamente vai pensar em aspectos que talvez o cliente final não pensaria, mas via de regra, o resultado e o custo final é o que interessa, mais do que efetivamente o meio de como se chegou nele.

E você? O que pensa sobre?
E ah, aproveitando a batalha rolando… no bootcamp everis New Talents, você pode escolher entre uma dessas duas tecnologias e trilhar sua jornada. 

➡️ No everis New Talents 2 - JAVA, você encontra uma trilha completa de 88 horas para dominar a tech e descolar seu lugar como estagiário na everis. 
➡️ Já no everis New Talents 2 - .NET, você terá uma jornada incrível de 77 horas em .NET C# para conquistar seu lugar na everis também! 

Viu? No fim, não importa qual tech é melhor, importa que tem espaço no mercado de trabalho para todo mundo e a everis precisa de você! 💚💚💚

Vem se inscrever, vem:

------------------------------------------------------> https://bit.ly/3yuU5Yd


Bow Tie Coffee GIF by Proposify


Outros artigos:



📌 O Segredo dos Contratados! (Perfil no GitHub)

📌DIO & Você = Recolocação | Ep.01

📌 O casamento perfeito: SASS e CSS

📌 O que um iniciante precisa saber para tornar-se um JÚNIOR

📌Treinamento GRATUITO + Certificação -90% na Oracle!


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Se te ajudei, dê um UP ^ ali do lado esquerdo (marcando como ÚTIL) pra eu saber!




Sempre posto por aqui então me siga pra gente se ajudar e chegar mais longe.
Conte comigo.

Obrigado por tudo, Inovadores! 💛🧡💓

7
382

Comentários (7)

0
Thiago Guedes

Thiago Guedes

12/09/2021 13:33

Obrigado, pessoal! De verdade!

1
Mauricio Gebrim

Mauricio Gebrim

07/09/2021 01:07

Conforme indexadores de rankings de trends, como o Tiobe em https://statisticstimes.com/tech/top-computer-languages.php , algumas linguagens entram na moda e outras minguam ao longo do tempo. Fui até feliz de ter estudado ao longo do tempo c/c++, apesar da recente decadência dessas, ainda que sistemas legados não matem totalmente linguagens em desuso.


As empresas que mantêm as propriedades intelectuais de partes ou integralmente dessas plataformas, isto é, Oracle e Microsoft, acertaram em incentivar ecossistema de desenvolvedores com ofertas de documentação, cursos, certificações, "open source", patrocínios, suporte. Mas e se essas empresas quebrem, dividam ou vendam?! Simplesmente surgiriam forks dessas linguagens (des-asnibles), assim como as empresas da Alphabet Inc (ex-Google) tem criado linguagens que nem coelho.


Em suma, façam e usem o que gostem e sejam felizes, seja na alta ou na baixa.

1
César Sales

César Sales

06/09/2021 15:28

Texto excelente e construtivo. Obrigado, caro Thiago!

1
Murillo Júlio

Murillo Júlio

04/09/2021 15:25

Mais tarde esse vai ser um otimo artigo para ler, obrigado pelo post! Com certeza aprenderei muito


2
CARLOS SILVA

CARLOS SILVA

31/08/2021 16:50

Thiago, com certeza vou ler teu artigo completo mais tarde, mas só pelo tema e estrutura do artigo eu sei que vou aprender e tirar muitas dúvidas. Sou do mundo .NET e sei que vou aprender muito sobre o mundo java também.


Um abraço,

1
Alessandro Silva

Alessandro Silva

31/08/2021 17:52

Um ótimo artigo Thiago.

Mas nem precisamos estender ao lado xiita.

É so comparar quantas pseudas linguagens de programação a microsoft criou durante o tempo de vida do Java!

0
Thiago Guedes

Thiago Guedes

31/08/2021 17:34

Obrigado, mano Carlos!

👨‍💻Community Support Analyst at Digital Innovation One |Front-End Volunteer🌠

Brasil