Como estudar e aplicar tecnologias de cloud para backend Java

Quando assunto é dev backend, especialmente no mundo Java, existe um tema que não dá mais pra fugir: tecnologias de cloud.

E claro, o grande desafio nesse assunto é não apenas saber o que é necessário e vale a pena aprender, mas também como é que faz pra aplicar esse aprendizado na prática.

Se isso é algo que está presente na sua carreira hoje, fica comigo nesse post que eu vou te dar um guia pra você tirar esse problema da frente de uma vez por todas!

E, como sempre, eu gravei um vídeo sobre este assunto! Aí vai:

Então vamos lá, é hora de respondermos à pergunta: sendo eu um dev backend Java, como faço para estudar e aplicar tecnologias de cloud?

  1. Comece pelo mais importante: qual problema você vai resolver?
    • Repetindo o mantra daqui, porque ele é muito importante em um caso como esse: dev é resolvedor de problemas… blz?
    • E porque isso é importante neste tópico? Porque muitos devs, quando querem ir mais a fundo em uma área, começam pelas tecnologias: “que linguagem eu tenho que aprender? que banco de dados eu uso? qual cloud provider que eu escolho?“… e todas estas perguntas estão erradas (neste momento);
    • O problema a ser resolvido é o que vai embasar as respostas a todas estas perguntas. “Que linguagem normalmente se usa para resolver x? Qual banco de dados é mais usado por quem trabalha resolvendo x? Os devs que resolvem x normalmente usam qual cloud provider?“;
    • E como escolher o problema que você vai resolver? Bom, há algumas opções:
      1. Às vezes tem algo que já está claro pra você, seja por aptidão, por paixão, por experiência, etc. Normalmente esse é o caminho mais fácil pra ser achar um problema pra resolver;
      2. Se não achou nada no item anterior, você pode tentar na empresa onde trabalha: toda empresa tem um monte de problema pra ser resolvido. Pega um pra você;
      3. Pode ser que você ainda não trabalhe, ou não queira fazer nada com a empresa atual. Nesse caso, você pode tentar com as pessoas próximas de você (família, amigos, igreja, vizinhos, etc). Tem um monte de problema dando sopa por aí!
      4. Se ainda assim você não conseguiu pensar em nada, olha pro mundo. Ele está cheio de problemas (provavelmente você já se deu conta disso), então nunca pense que não há nenhum que você possa resolver. Tem sim, procura direito!
    • Com o desafio em mãos, o resto fica mais fácil!
  2. Descubra quais tecnologias de cloud são mais usadas para resolver este tipo de problema
    • Definido o problema, aí sim você pode começar a pensar em ferramentas;
    • Conduza uma pesquisa fazendo o seguinte questionamento: os devs que resolvem problemas iguais ou semelhantes a esse usando cloud, normalmente usam quais serviços?
    • Há várias formas de fazer essa pesquisa:
      1. Conversar com profissionais da área (essa é, de longe, a melhor de todas);
      2. Postar perguntas em fóruns e comunidades;
      3. Procurar no Google mesmo.
    • E porque isso fazer essa busca? Oras, porque cada cloud provider de mercado tem um bilhão de serviços disponíveis, mas você não precisa de um bilhão. Precisa de meia dúzia;
    • Feito isso, você já uma boa ideia do que você vai precisar aprender a fazer no cloud provider escolhido.
  3. Aprenda a integrar containers dentro da solução desejada
    • Feito isso, assegure-se de que a solução que você está montando funcione utilizando containers;
    • Se alguma ferramenta escolhida, ou se mesmo problema em si traz limitações ao uso de containers (acho pouco provável), considere fazer mudanças no escopo;
    • E porque esse requisito de containers é tão importante?
    • Eu já falei sobre isso em vários posts por aqui, mas vale a repetição: porque distribuir aplicações em cloud utilizando containers está se tornando a abordagem default;
    • Ou seja, começar os seus estudos no assunto “se garantindo” em relação a containers, é uma ótima forma de garantir o melhor uso do seu tempo e dos seus esforços, além de se adequar ainda mais ao perfil mais desejado do dev backend do mercado no momento;
  4. Sempre que possível, opte por serviços gerenciados
    • Eu não sei se consigo enfatizar o suficiente o quanto isso é importante…
    • Olha só: digamos que você vai utilizar um banco de dados na sua aplicação. Se o cloud provider que você vai utilizar tiver uma opção gerenciada desse banco de dados, utilize-a!
    • Se não tiver, considere mudar o banco de dados escolhido, se possível;
    • E porque isso? Porque serviços gerenciados vão te livrar muito, muito, muito tempo para que você possa focar na construção da sua aplicação, e não na instalação, configuração e manutenção desses serviços;
    • Outros serviços que vale a pena procurar por opções gerenciadas: Kubernetes (OpenShift), API Gateway, mensageria, Kafka, SSO, etc.
  5. Limite o seu escopo: menos é muito mais
    • As escolhas que você vem fazendo até aqui (problema, cloud provider, ferramentas, containers, serviços gerenciados) estão limitando o seu escopo de atuação e de estudos… e isso é proposital;
    • No que depender de você, reduza sempre o escopo. Quando menos coisas você tiver que fazer, mais você vai poder focar e ir a fundo nelas;
    • Exemplo: dependendo do cenário da aplicação, pode valer muito mais a pena investir um tempo aprendendo service mesh, do que gastando tempo escrevendo código que vai gerenciar toda a comunicação entre os seus microservices na mão… sacou?
  6. Escolha ferramentas feitas para ambientes distribuídos em cloud, ao invés de forçar a barra com aquilo que não serve para este cenário
    • Imagina que você precisa cortar uma barra de titânio, e para isso está usando uma serra tico tico… será que vai funcionar?
    • “Não, mas eu vi um tutorial de um indiano ensinar um hackzinho que faz dar certo…”
    • Pois é, tem gente fazendo deploy de aplicação em cloud assim…
    • Durante muito tempo esse tipo de abordagem de justificou, porque estávamos fazendo as primeiras grandes migrações para cloud. Então, no começo, o mais importante era migrar, ainda que algumas coisas continuassem “como estavam”;
    • (Eu, por exemplo, já coloquei uma aplicação rodando VB 5 na AWS… era o tipo de trabalho que, quando eu chegava em casa, eu me sentia sujo…)
    • Mas hoje em dia já não tem mais muita desculpa: temos um ecossistema inteiro à disposição para que aplicações cloud native sejam distribuídas do jeito certo;
    • Então… sabe aquele framework? Aquele, que a imagem de container fica do tamanho de um navio cargueiro? Que o start demora 15 minutos? Que precisa alocar um nó inteiro do cluster pra ele? Então… não rola mais, né?
  7. Implementação é a mãe do aprendizado
    • Sim, o Aprendizado tem uma mãe! Ela chama-se Implementação;
    • Ela é uma mãe muito dedicada em fazer o seu filho, o Aprendizado, crescer, amadurecer e dar resultados;
    • Ou seja: se você fez todos esses passos, ainda que tenha estudado muita coisa, mas não implementou nada… parabéns! Você conseguiu jogar fora tempo, esforço e, quem sabe, dinheiro;
    • A única forma de um conhecimento realmente fazer as conexões em nosso cérebro é através da implementação;
    • Se você não gerar código, não usar os serviços do seu cloud provider, não integrar as soluções, não lidar com erros e ficar debugando até altas horas… enfim, se você não se dedicar a implementar a solução para o problema que você se propôs a resolver, não existe estudo e nem aprendizado de tecnologia alguma.

E aí, faz sentido? Me diz aqui nos comentários! Um grande abraço, até a próxima e tchau!