Nos últimos anos, o uso do Desenvolvimento Orientado a Testes (TDD) tornou-se cada vez mais popular no desenvolvimento de software. TDD é um estilo de desenvolvimento que enfatiza a escrita de testes automatizados do seu código antes mesmo de você escrever o código em si. Neste post, vou contar minha jornada aprendendo GO com TDD e como foi aprender uma nova linguagem de programação como uma desenvolvedora experiente.

Aprendendo GO com TDD: Uma Jornada de Descoberta

Como uma desenvolvedora experiente, dá pra perceber a importância de escrever testes automatizados para meu código antes mesmo de colocar a mão na massa. Por mais que eu ainda sinta alguma resistência nesse processo de inverter o fluxo “normal” de desenvolvimento (mais sobre isso depois), é inegável como escrever testes antes do código melhora o fluxo geral de escrita da lógica em si. Eu também estava ansiosa para aprender um novo linguagem de programação, a fim de manter meu cérebro fresquinho sobre tecnologias além daquelas usadas no meu local de trabalho. Para conseguir isso, decidi aprender GO com Test-Driven Development (TDD). Nesta postagem do blog, compartilharei minha jornada e os insights que obtive ao longo do caminho.

Contexto: Entendendo rapidamente o que é GO

Antes de mergulhar nos detalhes do aprendizado de GO com TDD, irei fazer uma breve introdução à linguagem de programação: GO é uma linguagem de programação de código aberto desenvolvida pelo Google em 2009. Ela foi projetada para ser eficiente, simples e fácil de usar, tornando-o uma escolha popular para o desenvolvimento de aplicações web e backend.

Por que aprender GO com TDD?

Existem dois principais motivos pelos quais decidi aprender GO com TDD:

  1. Melhor qualidade do código: O TDD me ajuda a escrever um código melhor, forçando-me a pensar sobre os testes antes de escrever o código real. Isso garante que meu código seja testável e passível de manutenção, o que é especialmente importante ao trabalhar com uma linguagem como GO, que possui muitas funcionalidades integradas.
  2. Compreensão mais profunda do GO: Aprender GO com TDD me ajudou a entender melhor a linguagem de programação. GO tem uma sintaxe bem diferentes ao se comparar com outras linguagens de programação, e o uso do TDD me ajudou a obter uma compreensão mais profunda de como esses recursos funcionam juntos.

Um guia muito bem-vindo

Para colocar a mão na massa de forma rápida, segui o incrível Leaning GO with Tests, que é um excelente recurso para aprender GO com TDD. O site fornece guias com passo-a-passo que te orienta no processo de aprendizagem, desde o básico até tópicos mais avançados. Foi muito útil seguir um tutorial tão bem descrito.

Desafios e percepções

Mesmo com um caminho claro pela frente, aprender GO com TDD teve seus desafios. Aqui estão alguns dos insights que tive ao longo da minha jornada:

  • A sintaxe do Go: Um dos maiores desafios que enfrentei foi me acostumar com a sintaxe do Go. Mesmo tendo experiência com sintaxes tipo Java e Python (essa última poderíamos argumentar que é bastante semelhante em certo sentido ao GO), ainda foi um pouco desafiador desligar o conhecimento prévio e se acostumar com a forma como o GO está estruturado. GO tem uma sintaxe única e um conjunto de recursos com os quais pode levar algum tempo para se acostumar. Por exemplo, a linguagem utiliza um estilo de programação funcional, que requer uma forma diferente de pensar sobre o código.
  • TDD te força a pensar em testes antes de escrever código: Um dos benefícios mais significativos de aprender GO com TDD é que ele me forçou a pensar em testes antes de escrever código. Isso me ajudou a escrever código mais robusto, modular e fácil de manter.
  • Escrever testes primeiro ajuda a identificar possíveis problemas antecipadamente: Ao escrever testes antes de escrever o código real, consegui ficar de olho e identificar possíveis problemas antecipadamente e corrigi-los antes que se tornassem problemas maiores. Isso me economizou uma quantidade significativa de tempo e esforço a longo prazo. Escrever testes antes do código também ajuda a garantir que meu código era sempre simples e fácil de entender.
  • O modelo de concorrência do GO é único: GO possui um modelo de concorrência integrado que permite processamentos paralelos. No entanto, isso também pode levar a race conditions (que é quando múltiplos processos concorrentes ou threads acessam e modificam dados compartilhados ao mesmo tempo, gerando comportamento inesperado) se não for tratado adequadamente. Ao escrever testes primeiro, é possível identificar esses casos antecipadamente e escrever um código mais robusto e tolerante a falhas.
  • Testando padrões de design: Escrever testes antes de escrever o código real me ajudou a escrever um código melhor, forçando-me a pensar primeiro nos testes. Isso também me permitiu aplicar padrões de design, como Injeção de Dependência (DI), para tornar meu código mais flexível e mais robusto.
  • Testes primeiro podem ser difíceis!: Uma limitação pessoal que senti nesta jornada foi o ato de pensar em testar primeiro em vez de codificar a solução inteiramente de uma vez. Foi um esforço muito consciente para combater a vontade de criar a lógica inteira antes dos testes. Parecia errado no começo, mas acho que no final peguei o jeito e ficou mais fácil.
  • Aprendendo novos conceitos: Esta foi a primeira vez que aprendi TDD com GO, por isso foi importante para mim aprender a linguagem à medida que avançava. Aprender uma nova linguagem de programação pode ser um desafio no início, mas definitivamente vale a pena o esforço. Os benefícios de aprender uma nova linguagem são muitos, incluindo aumento da produtividade e melhoria da qualidade do código.

Conclusão

Aprender GO com TDD foi uma experiência animadora e gratificante. Se você é um desenvolvedor que deseja melhorar seus conhecimentos, recomendo que experimente usar TDD ao aprender GO ou qualquer outra linguagem de programação.

Espero que esse post tenha fornecido alguns insights sobre como aprender GO com TDD. Se você tiver alguma dúvida ou comentário, sinta-se à vontade para entrar em contato comigo pelos comentários abaixo ou pelo LinkedIn. Happy coding! 🥳

Referências:

Leitura Complementar

Se você estiver interessado em aprender mais sobre TDD e GO, aqui estão alguns recursos adicionais: