Como escolhi entre .NET e Java

Conheci o .NET no meu primeiro local de trabalho oficial: uma pequena empresa de TI que coopera com a indústria do petróleo. Esta é uma continuação da história, o início pode ser lido aqui. 







O que eu gostei no .NET



.NET tem uma longa história. Não é o mesmo que Java, é claro, mas também interessante. Você também precisa separar o .NET Framework e o .NET Core. Segundo - IMHO o que o .NET deveria ser em primeiro lugar. Vamos concordar que, quando digo apenas .NET, quero dizer .NET Framework. Vou escrever sobre o .NET Core com o acréscimo.



No próprio .NET, gostei da presença de um ecossistema, no mínimo, mas conhecendo uma linguagem de programação, você pode escrever sem problemas:

  • salas de servidores;

  • Área de Trabalho;

  • móvel (Windows Mobile);

  • web (olá Silverlight, LightSwitch, ASP.NET WebForms, ASP.NET MVC);

  • quiosque de aplicativos;

  • jogos.





A barreira para entrar no .NET é bastante baixa, auxiliada por extensos eventos e guias da Microsoft. A presença do ecossistema permite ao desenvolvedor não pensar em qual biblioteca escolher, tudo já é conhecido.

Você quer uma teia? Veja o ASP.NET. "Nós, como uma grande empresa (Microsoft), usamos e atendemos a você." E assim em tudo.



C # é um Java melhorado, aqui você tem uma vida fácil com auto-propriedade, e um modelo fácil de programação assíncrona, LINQ que, além disso, pode ser estendido pela implementação de provedores. Por exemplo, LINQ to SQL, LINQ to XML e assim por diante.



EntityFramework, que é mantido pela Microsoft e, compreensivelmente, funciona como um relógio em muitos aspectos. É impossível ficar em silêncio sobre as migrações em EntityFramework. Mudei o modelo, a migração foi gerada e você não precisa constantemente escrevê-los à mão.



Nuget se tornou o ponto focal de toda a comunidade .NET: uma vasta gama de bibliotecas da Microsoft e da comunidade.



O .NET Core pode ser considerado uma correção de bug para a Microsoft. Todas as mudanças ocorreram, entre outras coisas, graças ao CEO da Microsoft - Satya Nadella, que mostrou ao mundo todo que "MS ama Linux". Temos um concorrente Java.



Talvez alguém diga: "É apenas um .NET Framework?"

Minha resposta é: “Java ganhou popularidade precisamente por causa de seu foco em código aberto. A empresa não temia que amanhã alguns esquisitos da Sun ou da Oracle viessem e começassem a usar seus direitos. O .NET Framework é originalmente uma plataforma proprietária, mas graças ao gerenciamento adequado da MS, eles corrigiram essa falha. "



O argumento mais importante na comparação das duas plataformas é, obviamente, a idade e a estabilidade do Java. Por estabilidade, quero dizer padrões dentro da comunidade, uma porcentagem maior de desenvolvedores experientes e um grande número de grandes empresas que usam Java. E Java também é "compilar uma vez executado em qualquer lugar".



Eu vejo o .NET Core como um competidor de pleno direito do Java. A linguagem e o kit de ferramentas estão disponíveis no GitHub sob a licença do MIT.



O que mais foi adicionado desde o lançamento do .NET Core:

  • suporte para OS Linux, macOS apareceu;

  • o trabalho em ambientes de contêiner foi aprimorado (o .NET Core seleciona os parâmetros apropriados no tempo de execução, dependendo do ambiente de inicialização);

  • Xamarin. Os desenvolvedores podem escrever aplicativos ágeis para iOS e Android;

  • A direção da IoT começou a se desenvolver;

  • O WPF se tornou um projeto de código aberto e havia muita esperança para sua plataforma cruzada;

  • O desenvolvimento WEB tornou-se ainda mais acessível graças ao Blazor (você pode fazer WebAssembly e renderizar tudo no lado do servidor).





O resultado final é o seguinte: em 2020, conhecendo a linguagem de programação C #, você pode escrever o que quiser sem muletas como, por exemplo, um navegador sob o capô de um elétron :)



O que eu não gostei no .NET?



Justo? Compreendendo que a Microsoft copiou o Java impudentemente em muitas frentes :) Deixe-me lembrá-lo de que antes do .NET, os camaradas do MS tentavam implementar sua própria representação do Java: J ++ seguido por J #.



Parece que as intenções são boas. Eles queriam que os javistas tivessem escolha. Mas, naquela época, a MS não fez nada em benefício dos desenvolvedores. Basta ler este artigo na Wikipedia ("Manter, construir e destruir").



No .NET Framework, na época da minha primeira experiência, eu não gostava de:

  • estrutura complexa de arquivos de projeto;

  • problemas eternos com dependências de ligação em tempo de execução;

  • VisualStudio - é muito lento e lento: D;

  • apenas Windows, na época eu já me interessava pelo SO GNU / Linux;

  • Desenvolvimento do Windows Mobile: é terrível em todos os sentidos.





Apresentando Java





Concorda?)



Em fevereiro de 2015, aceitei um emprego como desenvolvedor Java. Não tinha experiência em desenvolvimento de aplicativos em Java, mas estava no assunto, pois li muito sobre a linguagem. Escrevemos em Java 7 e o primeiro dia de programação não parecia muito difícil. “É como C #, só que estranho”, pensei.



Meu projeto foi implementado em JavaEE (rodando em TomEE), frontend em Vaadin. Em geral, não tive nenhum problema particular em interagir com uma nova tecnologia para mim, mas sim em lugares em que estava em choque.



Fiquei surpreso com a abundância de arquivos XML de configuração, configurações do Maven para 300 linhas. A presença de um grande número de anotações era assustadora. Aqui não se pode deixar de mencionar o amor dos javistas pela programação orientada a aspectos.



Paralelamente, a mesma empresa estava desenvolvendo em JavaSE, usando como framework Spring 4. Eu ainda não entendia completamente por que ninguém gostava do projeto no Spring, mas o líder da equipe constantemente discutia com o desenvolvedor no Spring. De acordo com minhas observações, havia muita geração de código e, por causa disso, a própria IU era complexa.



Construir o projeto (JavaEE) em Maven pela primeira vez levou 20 minutos, parecia que estava baixando todas as bibliotecas do mundo. Por isso, podemos agradecer ao Maven, como o colecionador mais nativo. Na verdade, eu simplesmente não sabia da existência do Gradle na época.



O projeto em que fui colocado era implementar o CRM com uma tendência para as empresas de viagens. O MVP foi levantado rápido o suficiente, mas, infelizmente, o projeto foi fechado por falta de financiamento.



Por que eu gostei do Java 7



  • Java é estável;

  • Java é compatível com versões anteriores;

  • existem muitas implementações de kits de ferramentas diferentes. O desenvolvedor tem uma escolha sobre como construir o projeto: maven, Gradle, ou geralmente `javac` :);

  • existem muitos artigos e conhecimentos na Internet sobre a solução de problemas que um desenvolvedor pode encontrar;

  • Java tem uma implementação de código aberto na forma de OpenJDK;

  • Java é usado ativamente no desenvolvimento de sistemas financeiros; O limite para entrar em Java, especialmente após experiência em .NET, não me parecia muito alto;

  • É claro que o IDE: IntelliJ IDEA é ótimo em todos os sentidos.



O que eu não gostei no Java 7



na época da minha primeira experiência em 2015

  • falta de ecossistema: o desenvolvedor deve buscar uma biblioteca adequada entre centenas;

  • a comunidade muitas vezes discorda muito;

  • Bagunça de API ao trabalhar com datas e horas;

  • Maven: por que é tão lento e prolixo?

  • JavaEE: a ideia é ótima, a implementação é ruim. Quem surgiu com tanta customização declarativa em XML?

  • API de crescimento lento;

  • falta de funções de ordem superior e alternativas LINQ;

  • O próprio Java 7 é muito prolixo.





Então eu voltei para o .NET



Não exatamente por que, é claro, mas quando consegui um emprego como desenvolvedor Java para um projeto, me prometeram uma carga pesada, tarefas interessantes e um monte de dificuldades. Na verdade: triste, não inicial, não há carga excessiva.



Quando me pediram para voltar a um antigo projeto .NET com uma promoção, concordei prontamente. As tarefas são familiares, o trabalho na equipe, o financiamento é normal - uma excelente oportunidade para se provar a longo prazo.



O que mudou no .NET



Mudei de volta para .NET em 2016. Exatamente quando meus colegas de seu novo e antigo local de trabalho começaram a escrever uma plataforma de negócios do zero. A ideia era a seguinte: desenvolver um sistema de contabilidade e controle operacional, que pudesse ser ampliado com o auxílio de módulos. Ou seja, algo como SAP PM, apenas na categoria de orçamento. Você pode ler sobre SAP PM aqui .



A pilha era assim: .NET 4.5, ASP.NET MVC 5 (Owin), EF Core, MS SQL Server. O frontend no SAP UI5 é uma estrutura JS de código aberto que permite construir aplicativos de negócios usando controles prontos.



Paralelamente, o .NET Core estava se desenvolvendo ativamente, então me deparei com a tarefa de portar um projeto do .NET Framework 4.5 para o .NET Core 2.1. Foi muito divertido e veio com muita refatoração. Ao mesmo tempo, serramos o monólito em algum tipo de, mas serviços separados.



Na verdade, enquanto eu estava refatorando e coletando os desejos dos meus colegas, um pequeno framework da web nasceu dentro das paredes da empresa. Eu o chamei de NextApi.



Por que NextApi? Quando na versão anterior do sistema, o programador sênior e eu estávamos desenvolvendo uma nova API, a chamamos de "próxima" - Próxima. E o nome da nova estrutura é uma pequena homenagem ao trabalho em equipe. Link para o projeto aqui .



Nesta minha missão foi cumprida: a empresa recebeu serviços que funcionam em um único kit de ferramentas. Conseguimos reutilizar a lógica de negócios em clientes móveis e desktops, offline primeiro. Também conseguimos nos afastar completamente do Windows Server. Tive que sair de uma pequena máquina virtual para construir um aplicativo WPF, mas são ninharias.



É hora de seguir em frente



Depois de transferir o projeto para .NET Core e serrar em serviços, algo novo em minha vida de desenvolvimento não era mais suficiente para mim. Eu estava na posição de líder de equipe, lançamos o produto com sucesso com vários grandes clientes, havia tarefas suficientes, problemas foram resolvidos, mas queria um desafio e uma oportunidade de me revelar.



Ao mesmo tempo, havia um pensamento na minha cabeça sobre a demanda por desenvolvedores .NET. No Cazaquistão, em contraste com os países ocidentais, não há uma demanda tão alta por essa tecnologia. O mesmo não pode ser dito sobre os desenvolvedores Java.



Então, saí do projeto e concordei em trazer a estrutura desenvolvida para o OpenSource. Foi muito difícil fazer isso, como dizem, tive que "sair da zona de conforto". Mas eu decidi firmemente - precisamos seguir em frente.



Minha escolha recaiu sobre Beeline Cazaquistão - eu queria trabalhar em serviços populares. Além disso, eu entendia quais eram as tarefas e a base de clientes, e Java era muito próximo de mim. Além disso, foi interessante ter a oportunidade de olhar para todo o desenvolvimento do lado de um desenvolvedor .NET, para estudar mais profundamente os aspectos do projeto de sistemas de alta carga e deixar uma boa marca na história da empresa.



Com base em minha experiência anterior, percebi que uma nova imersão em Java provavelmente será mais fácil do que da última vez. E assim aconteceu. Quanto mais você trabalha como programador, quanto mais conhecimento fundamental você adquire, mais fácil é dominar as novas tecnologias.



E agora





Existia tal coisa)



No Beeline, usamos principalmente Java 8, mas já começamos a olhar para o Java 11, usamos Spring Boot e começamos a escrever ativamente em Kotlin. Vejo que o Java realmente começou a avançar, lançamentos a cada seis meses. Conte a um desenvolvedor Java sobre isso no início de 2010, ele torcia o dedo na têmpora. Na minha opinião, o Java está mudando para melhor.



Java 8 apresenta interfaces funcionais que permitem tornar seu código mais bonito e implementar funções de ordem superior. Além disso, a API Stream surgiu, o que tornou a vida um pouco mais fácil. Embora o LINQ ainda esteja muito longe, isso já é encorajador.



Ainda não descrevi os recursos que apareceram nas versões mais recentes do Java :)



Consegui me familiarizar com o sistema de compilação do Gradle. Gostei tanto que comecei a escrever scripts de compilação reutilizáveis ​​para implementar algo semelhante a arquivos de projeto no .NET Core.



Em Java, trabalhar com assincronia é mais transparente: quando você escreve código, você realmente tem que pensar muito. Isso é bom e ruim. Gosto deste momento porque, tendo amor pelo SO e pelo hardware, é bom poder influenciar a JVM como você deseja.



Quanto aos planos pessoais, estou interessado no tópico de aplicativos de alta carga. Ainda não foi totalmente revelado para mim, mas estou estudando-o ativamente.



Procuro não ser fã do DRY, mas sempre que possível procuro reaproveitar o conhecimento.



E, claro, quero aprimorar meus conhecimentos em Kotlin para começar a escrever serviços interessantes em corrotinas. O próprio Kotlin é o que Java deveria ser. Andrey Breslav & Co fizeram um excelente trabalho.



A diferença entre Java e .NET é amplamente compensada pela introdução do Kotlin em minha vida. Mas sinto muita falta do .NET.



Luzes:

  • perca o conjunto de ferramentas do console dotnet. Lá você pode construir um projeto, criar um novo a partir de um modelo e muito mais;

  • Estou perdendo uma alternativa normal para EntityFramework com LINQ;

  • Java realmente parece consumir mais recursos do que .NET. O computador às vezes simplesmente desaparece dentro de si mesmo.





Mas, na vida real, Java é talvez a coisa mais interessante que aconteceu comigo ultimamente.



Conclusões e palavras de despedida



Mudar algo na vida costuma ser uma violação da zona de conforto e algum tipo de incerteza. Você pode olhar para a situação com pessimismo, mas, pelo contrário, isso me estimula. Eu quero ser sempre relevante. Eu entendo perfeitamente que você não pode obter todo o conhecimento, mas pode tentar.



Especificamente, ao mudar a linguagem de programação de trabalho, percebi o seguinte: a maioria dos problemas são os mesmos em todos os lugares. A única diferença é que eles são resolvidos por abordagens diferentes.



.NET me mostrou o lindo C # com muito açúcar e também ficou na minha memória como o conjunto de ferramentas mais poderoso, sem ter que correr e empilhar o mundo em uma thread.



Java me mergulhou no mundo infinito das bibliotecas OpenSource e também me mostrou que existem muitas maneiras de resolver este ou aquele problema. A linguagem Java em si é muito simples e acho que é muito amigável para programadores novatos.



Minha opinião é que antes de entrar em disputa sobre a legalidade de uma tecnologia, você precisa tentar uma alternativa. Por exemplo, no Beeline Cazaquistão, tive a oportunidade de usar o .NET 5 para implementar um microsserviço. Ou seja, para utilizá-lo em uma empresa onde a principal linguagem de software de servidor é Java. Os microsserviços se adaptam a toda a paisagem sem problemas. Meus colegas estavam interessados ​​em fazer revisões de código, nós até discutimos diferenças fundamentais. Em geral, os caras também se interessaram em expandir seus horizontes.



No meu mundo, um programador de verdade não é aquele que se afoga atrás de uma linguagem de programação ou grita a torto e a direito que a tecnologia que usa é a melhor. Um verdadeiro programador é alguém que pode resolver um problema de forma rápida, eficiente e barata e, o mais importante, a longo prazo. Essas pessoas não se importam em qual linguagem de programação desenvolver, elas escolhem uma ferramenta com base na tarefa.



Portanto, recomendo que todos tentem mudar a pilha de tecnologia e talvez a função na equipe. Todas as mudanças acabam levando ao enriquecimento do conhecimento. Talvez você não precise de algum conhecimento agora, mas pode ser útil mais tarde.



Alterar a pilha não é difícil - você precisa imaginar o momento em que começou a escrever código e tentar mergulhar na nova tecnologia “ligando o tolo”. É claro que, com o tempo, não há como escapar das comparações, mas é importante lembrar que cada tecnologia e linguagem de programação frequentemente prega seu próprio estilo e princípios.



Isso não significa que você precisa escrever código espaguete e estruturas de três andares em todos os lugares. Você deve sempre manter a separação de interesses e escrever um código simples. Mas, se desejar, você também pode permitir muletas. Somos todos pecadores :)



Desafie-se e esteja sempre no topo!



PS: Se você leu o artigo para descobrir qual idioma e plataforma é o melhor, ou para escrever sua opinião sobre isso, vamos ajudar.



All Articles