Durante minha convivência com outros desenvolvedores, a pergunta que mais foi feita por meus pares foi como foi meu fluxo de aprendizado, já que grande parte da minha carreira estive habituado em uma linguagem que não era muito convencional na empresa. Em alguns casos, os colegas queriam saber quais foram os recursos que utilizei pra aprender sobre Golang, e em outros, interrogam com o intuito de ver em qual ambiente ou empresa que tive a oportunidade pra fazer a migração.
Acontece que tive uma ótima oportunidade de entrar em uma equipe que teve o objetivo de desenvolver o primeiro microserviço da empresa utilizando Go, mas que tinha a tarefa conjunta de definir como os microserviços seriam criados dalí pra frente, quais seriam as ferramentas e libs utilizadas. O meu maior amigo durante esse periodo, e que me acompanha até o hoje, foi o Go by Example e o segredo para fixar o máximo de conteúdo foi revisitar o site centenas de vezes: nas primeiras, o intuito seria além de aprender algo novo, me desafiava a paginar os exemplos que existem no site para “indexar” os itens, para um dia quando necessitar buscar um tópico específico, saber exatamente onde buscar.
Com as conversas que tive, comecei a refletir sobre como gosto de aprender sobre um novo tema, e infelizmente não sou a melhor pessoa para enfiar a cabeça em um livro ou nas documentações. Acabo aprendendo melhor quando as demandas aparecem, e aí sim vou buscar não só conhecer sobre a ferramenta que vou utilizar para resolver um problema, mas também me tornar a melhor pessoa para resolver aquele tipo de problema, ou que entende daquela ferramenta - sim, gosto de ter em mente que quero ser melhor naquele tema, aqui vai embora a modéstia mas é tema para um outro momento. Essa reflexão, me levou a ter uma ideia de sugerir um framework para pessoas que têm esse mesmo problema ao iniciar um novo estudo de linguagem, antes mesmo de tentar entender a sintaxe, até a “especialização”.
Não só quero propor esse framework, mas prometo testá-lo em breve e trazer os resultados aqui ;).
1. Obtendo conteúdo
O primeiro ponto é conhecer quais são as formas que você pode conseguir mais informações, como também tirar dúvida. São vários pontos que são comuns entre várias linguagens, e a documentação oficial nem sempre é o mais convidativo.
O já citado Go by Example, é um bom ponto de partida, então buscar por “{linguagemDeProgramação} by example” quase sempre vai te trazer algum resultado interessante, sendo o propósito ter algum conteúdo que vai te auxiliar a entender a sintaxe, já percebendo quais são os principais diferenciais do código que você está mais acostumado.
Tendo bons exemplos de sintaxe, é interessante também ter um ambiente virtual que possamos testar a linguagem sem a necessidade de instalação local. Podemos buscar então por {linguagemDeProgramação} fiddle
ou {linguagemDeProgramação} online playground
.
Com os exemplos e o ambiente virtual, precisamos também de referências sobre as principais libs, frameworks ou software que podem nos auxiliar. Para isso, a palavra chave é awesome!!! Buscamos então por awesome-{linguagemDeProgramação}
e isso geralmente vai nos levar a um repositório do GitHub mantido por uma pessoa ou comunidade que vai listar isso para a gente, como também avaliar as melhores alternativas via a quantidade de Stars em cada uma das ferramentas.
Finalizando, precisamos dos escapes, e aí vamos mais livres: buscamos por cursos, a documentação oficial, livros que falam do assunto. Fica também a sugestão de buscar pessoas que falem sobre a linguagem, seja no Twitter, Linkedin, YouTube, blogs, etc.
Quem sabe vale também buscar aquele colega que vc tem como referência e bater um papo se ele já ouviu falar sobre a linguagem
2. Primeiros passos com a linguagem
Aqui é onde precisamos lutar um pouco contra a procrastinação e nos integrar com a linguagem, buscando então ja tê-la configurada na nossa maquina, com as ferramentas que vamos precisar. O intuito final dessa etapa é o de validar se a linguagem cumpre alguma necessidade trazida quando pensamos em estudá-la, quais são os diferenciais, e ter insumos para responder algumas perguntas que vamos abordar no terceiro tópico.
Partimos então conhecendo qual tipo de ambiente precisamos para rodar os programas, e isso geralmente se dá conhecendo melhor a CLI que a linguagem provê. Como trabalhamos com código externo, é essencial entender as ferramentas de gerenciamento de dependência, já que é algo que com certeza vamos ter problemas durante toda a experiência com a linguagem.
Entrando em contato com o código, sugere-se fazer alguns testes coma sintaxe, entender qual o paradigma que a linguagem trabalha, e estudando o máximo possível sobre testes. Algumas linguagens fornecem ferramentas interessantes para esse passo inicial, como a integração do IntelliJ com o Kotlin Koans.
Finalizamos essa etapa então conhecendo mais sobre casos de uso simples: construção de APIs, configuração de variáveis de ambiente, leitura de arquivos, integração com message brokers, containerização, etc.
3. Entendendo o motivo que a linguagem foi desenvolvida
O ponto principal que caba definindo a sua senioridade com uma ferramenta, é de saber e conseguir descutir em quais cenários ela vai ou não entregar valor. Golang geralmente tem tempos de inicialização e uso de RAM reduzido quando comparado a outras linguagens com maior mercado; mas nem sempre desenvolvedores estão dispostos a lidar com bibliotecas em versão alfa, ou que ainda nem existem para algumas tecnologias. A princípio, Go funciona perfeitamente para altas cargas, mas se o cenário é crítico e demanda milhares ou milhões de requisições por segundo, e é necessário ter um tempo de resposta baixo, é bom ter em mente que Go ainda é uma linguagem que trabalha com garbage collection, e nesses cenários com alto throughput, sentimos o seu impacto na performance.
Um segundo ponto, é quando pensamos em startups que querem lançar um novo produto no mercado, e podemos apostar já inicialmente em tecnologias que estão saindo do forno. Já é de conhecimento comum que não é uma boa prática numa cultura de startup, onde geralmente se tem poucas pessoas, já iniciar com uma cultura de microserviços e devops, mas sim ir construindo isso aos poucos. Esse tipo de pensamento deve ser levado em consideração também por quem quer se tornar um especialista em uma linguagem: ela tem um público ou uma comunidade interessante? Como desenvolvedor, encontraria facilidade de achar uma boa empresa que faça uso da ferramenta, ou que se mostre disposta a aceitá-la? Como um gestor, gerente ou C-Level, vou ter facilidade de encontrar pessoas com conhecimento suficiente nessa linguagem e contratar-los a um custo que consiga manter?
São vários os desafios que passamos nessa etapa que passamos a entender melhor o motivo dessa linguagem existir, e se ela acabou cumprindo o seu papel inicial.
Tenho o desejo de aprofundar bastante ainda no tema da especialização de um desenvolvedor, então esperem mais posts com esse assunto no futuro 🤗.