Nova linguagem

Pessoal trabalho com Java e sou bem feliz e confortável com ela e minha última aplicação que fiz, iniciei meus aprendizados com arquitetura de micro services, usando Docker e Kuberentes e gostei bastante.

Agora queria expandir meus conhecimentos e aprender mais uma linguagem.

Minha dúvida é: qual dessas linguagens, “melhor trabalha” (digamos, a que necessita de menos códigos mirabolantes) com a arquitetura de micro services (incluindo ai Docker e Kuberntes)?

Minhas três opções seriam:

  • C# (Ambiente .Net Core 2)
  • Python
  • Ruby

Acredito que as linguagens que menos precisam de códigos mirabolantes são Python e Ruby, trabalho com Csharp e é um pouco mais complexo (ao meu ver), acredito que Python seja uma boa opção por ser uma linguagem que está crescendo e trabalha bem com microservices também.

Estranho esse tipo de comentário, em arquitetura .NET CORE por exemplo isso ta tudo lá já são poucas configurações e diversidade de tutoriais da comunidade sobre os assuntos, ou seja, é muito fácil fazer isso em .NET CORE como exemplo.

As outras linguagens crescem, mas, há mercado para todo mundo, se fosse para colocar um mais uma linguagem acrescentaria PHP que é muito utilizada.

Observação: por isso que esse tipo de pergunta não leva a lugar nenhum só mesmo experiências que muitas vezes falta vivência em outras

1 curtida

Esse tipo de pergunta é muito diferente do tipo: qual a melhor linguagem, x, y ou z?

Eu frisei um aspecto importante da linguagem: códigos “mirabolantes”. Tá, concordo que esse termo é demasiado vago e não foi bem empregado.

Mas deixe-me explicar melhor: Mesmo gostando do Java, o que mais me “cativou” nessa linguagem, trabalhando com microservices, foram as soluções encontradas pela Netflix e Spring. Então, java sozinho, trabalhando com microservices, sem uso de frameworks ou soluções extras, não saberia dizer o quão trabalhoso seria.
Perceba que não entro no mérito de outros pros e contras da linguagem. Me atento unicamente a facilidade de integrar a linguagem a arquitetura de microservices.
Pelo pouco que li, realmente a Microsoft disponibiliza algumas ferramentas da família azure que facilitam e muito.

Se você gosta de Java por ser sua predileta, procure nela o que precisa, porque, tem o que precisa nela, talvez aprender outra linguagem seja bom ou ruim depende da pessoa e como ela vê as outras linguagens, e como ela vê o que é uma linguagem para ela. A sua pergunta está querendo saber qual é a melhor para determinado tema, que também recai no X,Y ou Z, por ser uma escolha.

O que me chateá e dizer que a sua linguagem não é boa para um determinado fim, concordo que nem todos os fins Java, ou PHP ou Csharp são as melhores, mas, para micro serviços todas elas e mais um monte fazem o papel esperado.

Gosto do Java, mas não tenho predileção por nenhuma linguagem. Apenas quero expandir meu leque de conhecimento, talvez me sirva para um trabalho, talvez não. Mas é sempre bom continuar sempre aprendendo.
E quanto a PHP, eu já programei com PHP, é uma boa linguagem, usava o framework Zend. Mas por questões pessoais, acabei migrando para o Java, que atendeu melhor às minhas necessidades.

Eu considero que a troca de experiências é extremamente válida para suprir a falta de vivência, por isso a discussão se mantém nos Assuntos Gerais.

2 curtidas

Eu entendo que existem duas situações em que você, independente de linguagem ou do combo linguagem + framework, vai utilizar os códigos mirabolantes, as duas estão ligadas à complexidade do que se está desenvolvendo.
1 - Quando o dev não possui experiência na linguagem
2 - Quando a especificação é ruim

Outro achismo muito comum, porém errado, é associar micro serviço com menos código.
Pode ocorrer, mas, em geral, temos até mais código.
Afinal, você vai isolar o sistema em pequenas partes funcionais que serão integradas através do acesso a cada micro serviço.

Pois bem, considerando isso que comentei, acho válido tentar todas.
C# é muito bacana. Python e Ruby são legais.
Já considerou javascript, com NodeJs? É excelente opção, também.

Darlan

Concordo plenamente que microservices não é sinônimo de pouco código. Mas o que eu quis dizer, com código mirabolante, foi em questão das soluções que a linguagem dispõem, com ou sem uso de framework, para os problemas enfrentando nesse tipo de arquitetura. Com java por exemplo, temos as soluções Hystrix, Eureka, etc.
Isso possibilita códigos, a meu ver, de fácil compreensão. Não necessitando baixar n ferramentas / soluções externas, deixando seu programa como uma colcha de retalhos.
É mais nesse sentido que eu quis me expressar.

Pensei em JavaScript, mas como o uso bastante no front, (sei que a abordagem no back com node é diferente) queria algo mais distante do meu dia a dia.

Clojure.

Aprenda um paradigma diferente. Todas as linguagens que você listou são basicamente a mesma coisa, cada uma com suas nuances.

O paradigma funcional é completamente diferente. Aprender a programar com uma linguagem funcional vai te dar uma visão diferenciada de como modelar software, mesmo que você continue usando linguagens imperativas/OO.

Clojure é um dialeto de LISP. A sintaxe é bem simples, e a linguagem disponibiliza estruturas de dados imutáveis como primitivas.

O backend inteiro do NuBank é feito em Clojure, se você quiser um exemplo real de uso.

Se quiser livros para aprender funcional (fundamentos de programação bem densos, na verdade), recomendo esses dois livros usados em cursos do MIT:

1 curtida

Abap? ADVPL? Perl?

Cara, dá uma olhada mesmo no node, é impressionante, tem muita coisa bacana e é muito fácil.

A sua opinião só serve pra você é um problema seu não acho esse assunto bom.

Justamente por isso eu disse que eu considero isso, não que todos deveriam considerar.

1 curtida

Concordo muito com o @lvbarbosa nesse ponto. Se quer ver algo novo, procure uma linguagem que te faça pensar de forma diferente em como resolver problemas.

Clojure é uma linguagem que realmente vai fazer isso. Com a vantagem que ainda vai ter todas bibliotecas de java disponíveis se precisar, entao dá pra focar na mudança de paradigma.

Eu iria sugerir Elixir também, pois assim você sai até da VM e vai pra algo totalmente novo.

1 curtida

Se está com essa disposição por algo sem compromisso concreto (pelo menos não informou se é pra conseguir emprego ou qual requisito de negócio precisa atender), então experimenta um pouco cada uma dessas tecnologias e tire suas próprias conclusões para fins de estudos adicionais. Incluiria PHP e Go também.

Microservices com C# e ASP.NET Core Web API é bem tranquilo. Quem chega aqui na empresa com alguma prática em web mas sem experiencia em .NET, pega rápido seguindo algum tutorial, somado a toda facilidade do Visual Studio. Ainda mais pra você que achou Java confortável, mesmo sendo algo que depende exageradamente de soluções de terceiros para melhor produtividade, sem uma boa direção oficial e linguagem que é mais aceita verbosa.

Nessas poucas horas, pesquisei um pouco de .net core, node e clojure.
Uma coisa ficou evidente. Java tem bem mais material para consulta / pesquisa, seja esse de qualidade ou não, oficial ou não.

Vou pesquisar um poucos mais sobre esses três, a priori, o clojure, por ser outro paradigma, foi o que mais me chamou a atenção.

Clojure é bacana, mas aconselho que você pense bem. Seu tempo possui três características: é finito, curto e valioso. Você pode aprender apenas por querer conhecer o paradigma funcional, querer conhecer a linguagem e et cetera, mas pense se vale a pena se aprofundar na linguagem. Você usará ela profissionalmente/pessoalmente? Você pretende usar ela para alguma coisa, além de conhecer?

Claro que essa é apenas mon avis. A vida não é só trabalho, mas agregar conhecimento que você poderá transformar em dinheiro é uma forma de facilitar sua vida. Ainda não vejo tanto uso profissional de Clojure, sei apenas um caso de sucesso de uso da linguagem no Brasil. Todavia, todo conhecimento é válido.

Não querendo te desanimar nem nada, apenas opinando.

[]'s

1 curtida

Opiniões serão sempre bem vindas.

Eu penso nisso (a questão do tempo) e por isso mesmo estou lendo o máximo que posso a respeito do Clojure, se este tem alguma chance de se tornar algo padrão, digamos assim, futuramente (ou pelo menos ser mais difundido, que com isso, mais soluções e mais materiais surgirão). Mas na área de TI coisas mudam muito rapidamente, algo que pode estar no topo hoje, sendo promissora, amanhã pode está em baixa e ser quase esquecida (object pascal, visual basic, estão ai para provar) .

Meu intuito verdadeiro não é apenas aprender por aprender. Tenho uma aplicação comercial, feita em java, que ainda não me da lucro, mas ela foi toda desenvolvida utilizando a arquitetura de microservice, justamente para que eu possa acoplar um novo módulo com uma linguagem diferente. Se fosse seguir pelo “seguro e certo” eu ficaria no próprio Java ou ambiente .NET CORE.
Mas eu também tenho essa vontade de aprender novas coisas. Lógico, nem de longe eu sei tudo do Java e é certo que nunca saberei. Mas dentro do que me aplicação se presta, o meu conhecimento é satisfatório (eu poderia melhorar, sempre se pode, mas prefiro gastar meu tempo e investimento com algo novo).

Opiniões podem vir com vícios embutido, porque você não pega a mão na massa, escolha uma linguagem, busca conhecimento na mesma, aprende Web, Mobile algo que possa te manter no mercado que tão difícil, você repetir: Informática ainda é um campo minado poucos tem sorte.

Eu iria sugerir primeiro aprender mais sobre microservices, posso estar enganado mas na thread percebi aí que por vezes o conceito acaba de misturando com as ferramentas que Java ou C# traz para microservices.

Não existe linguagem “boa” para microservices. É possível aplicar propriedades que caracterizam um microservice em qualquer linguagem que seja, basta saber o que está fazendo.

No meio do caminho, uma tecnologia ou outra pode trazer facilidades, mas microserviço em si é agnóstico a tecnologia.

Depois de aprofundar o conhecimento em microserviços sem recorrer a coisas prontas, recomendo ir de Elixir ou Clojure. Clojure porque você já está habituado à JVM e é uma excelente linguagem. E Elixir porque a característica de actor-model e tolerancia a falha nos processos permite criar “microserviços” de forma barata dentro de uma única VM.