No ano passado fiz a transição de Sysadmin para DevOps como falei nesse post. Na minha entrevista eu deixei claro que meu background era majoritariamente em operações, mas que eu tinha uma boa experiência escrevendo código – o suficiente para passar como desenvolvedor – e que estava disposto a melhorar ainda mais.

O objetivo do nosso time de DevOps é ajudar o resto dos desenvolvedores em outros times serem mais produtivos enquanto ao mesmo tempo melhoram a qualidade do código produzido. Portanto o meu time precisa ser um exemplo para os outros.

A minha situação então era de alguém que não só precisava melhorar nos meus conhecimentos para meu próprio trabalho, mas também para servir de exemplo para outros times. Tava precisando de ajuda. Vai aqui a abordagem que tomei caso alguém se encontre numa situação parecida:

Rápida introdução às ferramentas

Felizmente a principal linguagem dentro do meu time é Python, com o qual eu já tinha uma boa experiência. Não precisei me preocupar com isso no começo.

A segunda linguagem é Groovy, utilizada principalmente pelo Jenkins, nossa ferramenta de CI/CD. Com uma rápida pesquisa no Youtube achei um vídeo chamado “Groovy Tutorial”, que em uma hora ensina todo o básico da linguagem. Assumindo-se que você já sabe programação o vídeo é muito útil porque apenas se preocupa em ensinar sintaxe e algumas características da linguagem.

Uma pesquisa rápida no Youtube mostra que existem vídeos similares para várias linguagens, como Lua, Ruby, Rust, etc… É um bom jeito de ir de ignorante para conhecimento básico em apenas uma manhã.

Melhores práticas

Não tenho um diploma de Ciências da Computação ou Engenharia de Software. Meu estilo de código sempre foi o que mais ou menos parecia limpo, legível e potencialmente bonito. Mas como aprender realmente as melhores práticas?

Novamente depois de pesquisar no Google achei 3 livros que parecem constar em todas as listas de “Livros que todo desenvolvedor deveria ler”. As posições variam mas esses 3 sempre aparecem:

Vou dizer apenas o seguinte: Uau!

Ainda não terminei Code Complete (914 páginas é meio puxado) mas mesmo em menos da metade já aprendi muita coisa. Os outros dois foram leituras bem mais rápidas e adquiri conhecimento que pude colocar em prática imediatamente. Mais de uma vez eu li alguma coisa de manhã cedo e assim que chegava no trabalho já colocava em uso.

Aliás, mesmo que você tenha seu diploma universitário chique eu recomendo esses três livros. Coloquei inclusive na lista de material recomendado para todo mundo que é contratado no nosso time.

Conhecimentos gerais

Ao mesmo tempo que estava lendo os livros acima também comecei a gastar um tempo melhorando minhas habilidades de escrever algoritmos de uma forma geral.

A maior parte do tempo não escrevo código complexo que precise mergulhar fundo num algoritmo. Mas eu provavelmente era mais fraco do que deveria.

O site leetcode é uma mão na roda. Tem uma lista enorme de pequenos problemas para serem resolvidos e você pode submeter a solução em uma grande variedade de linguagens.

Indo a fundo

Eu sou da opinião que é muito melhor ser generalista do que especialista. Conhecer um pouco de um monte de coisa te dá muito mais flexibilidade e possibilidades no trabalho. Mas conhecer pelo menos uma das suas ferramentas um pouco mais a fundo é extremamente útil.

Python foi a minha escolha pra aprender bem. Os dois livro que recomendo são:

Além disso uma assinatura do site Real Python se pagou rapidinho.

Lógico que vídeos de PyCons, tutoriais e o Podcast Talk Python To Me são coisas que estou quase que diariamente assistindo ou ouvido. Assinatura de newsletters e seguir algumas pessoas estratégicas no Twitter também é uma boa.

Automação

E finalmente para a última sessão eu automatizei muita coisa. Se você ler Code Complete vai ver que o melhor momento para descobrir e corrigir defeitos em Software é ali ainda antes de sair da mão do programador original.

Eu uso como editor o vscode e uma lista de extensões me forçam a escrever código limpo, bonito e com menos bugs do que a média:

  • Bracket Pair Colorizer – Coloca cores diferentes em pares de (), {} e []. Assim fica fácil de identificar visualmente e saber onde começa e acaba cada parzinho.
  • Prettier – Formata seu código automaticamente. Uso esse para tudo, exceto Python, onde configurei o vscode para utilizar o Black
  • Pylance – A extensão oficial da Microsoft para Python. É sensacional.
  • Sonarlint – Nós temos uma versão Enterprise de Sonarqube, então aproveitei e adicionei o linter direto no meu vscode.
  • Sourcery – Uma ferramenta que sugere refactoring no seu código Python, já com auto-correção automática.
  • TabNine – Uma ferramenta de auto-complete baseada em inteligência artificial. Pago USD 15/mês do meu próprio bolso, mas com gosto.
  • Visual Studio IntelliCode – Outra ferramenta que usa IA para dar sugestões no seu código
  • YAML – Ferramenta da Red Hat para suportar YAML (inclusive com suporte a sintaxe para Kubernetes)

Todas essas extensões ajudam. Cada vez que salvo o arquivo que estou trabalhando o mesmo é formatado corretamente e analisado pelos linters, que vão gritar comigo se alguma coisa óbvia estiver quebrada ou fora dos padrões ou se pudessem ter sido escritas de uma maneira melhor.

Por fim, antes de submeter meu código eu passo tudo por um gancho no Git usando pre-commit.

Esse gancho faz mais uma limpeza adicional e evita alguns erros comuns:

  • Impede de fazer commit direto no master branch
  • Faz checagem de sintaxe em arquivos YAML, JSON e TOML
  • Remove espaços em branco extras
  • Detecta se estou acidentalmente fazendo commit de chaves privadas ou credenciais AWS
  • Formata Python com Black (de novo, apenas no caso de ter editado algo rapidamente com vi ao invés de vscode)
  • Faz lint adicional
  • Re-ordena os imports em arquivos Python

Se qualquer um desses ganchos falha o Git não deixa o commit sequer acontecer. Já posso corrigir o problema ali mesmo.

Conclusão

No final das contas estou me dando bem no meu trabalho como desenvolvedor, mas precisei de muita ajuda. O bom é que ajuda é mais fácil de achar hoje em dia do que jamais foi antes. Com alguns minutos no Google e com um investimento razoavelmente pequeno é possível aprender muito.

Sumarizando então:

  • Aprenda o básico o mais rápido possível
  • Descubra as melhores práticas que vão se aplicar independente da ferramente à mão
  • Aprenda pelo menos uma das ferramentas com profundidade
  • Use o máximo de automação possível para evitar erros simples e garantir uma qualidade mínima