Introdução
Como desenvolvedor sênior em TypeScript, passei anos imerso em um ecossistema altamente expressivo, dinâmico e repleto de ferramentas que facilitam o desenvolvimento web moderno. TypeScript me oferece tipagem estática poderosa, integração nativa com bibliotecas JavaScript, e uma curva de aprendizado suave para quem vem do mundo do JS. No entanto, recentemente, decidi encarar um novo desafio: aprender Golang.
Há alguns anos venho atuando no desenvolvimento de software e, nesse tempo, acumulei uma boa variedade de experiências. Já mergulhei em código legado — alguns verdadeiramente marcantes, como sistemas escritos em Clipper (xBase) — e também trabalhei com stacks bem mais "moderninhas", como Python e TypeScript, usando até o Deno em alguns projetos.
Entre todas as linguagens com as quais tive contato, a que mais me conquistou, sem a menor dúvida, foi o TypeScript. E não, não estou falando apenas de usar React (sim, estou sendo um pouco pejorativo aqui) para montar páginas web e controlar estados como um verdadeiro "front-enzo". Minha atuação foi principalmente front-end, mas sempre amei estar no back-end também e me aprofundei consideravelmente nesse ecossistema, explorando o Node.js, Deno e - mais recentemente - a runtime Bun.
Já estive à frente da construção de servidores back-end que conversavam com bancos relacionais — em sua maioria — tanto com frameworks completos como o NestJS quanto com servidores mais leves e "crus", usando Express ou Fastify. Todas essas experiências foram extremamente enriquecedoras e moldaram muito da forma como penso e escrevo código hoje. Além disso, foi com essa linguagem que pude colocar em prática pensamentos meio soltos relacionados à arquitetura de um software e até ao design de código dos projetos que criei (a maioria privado, mas muita coisa disponível publicamente). Estudar Programação Orientada a Objetos — que era o foco principal da minha abordagem com TS — e também revisitar a programação procedural foi uma ótima experiência que eu tive com o typescript. Tem sido um forte companheiro nesses poucos anos de carreira.
De um tempo para cá, estava ouvindo alguns ótimos podcasts como o Código Fonte TV, Café Debug e assistindo os vídeos do mano Deyvin para distrair a mente e me ocorreu que eu estava há um tempo em minhas "zonas" de conforto. Sempre a mesma stack: postgres ou mysql com typescript ou python. A única variação era a lib, ou até o método de abordagem. As perguntas eram sempre: "Ah, vou usar sequelize (gosto mais de typeorm e sqlalchemy para python) como ORM? Aliás, vou usar ORM ou faço algo mais hard com sanitização de queries, etc?", então "Bom, eu posso usar um PDO com doctrine ou ZendFramework/Laravel?" ou então "Faço um monolito, microsserviços, monorepo?" - sim, às vezes é um saco ser pleno e ainda ter algumas dúvidas infantis.
Pensando nisso, comecei a me aventurar a descobrir novos horizontes. Quer dizer, o mundo da tecnologia é tão amplo e sofisticado. Nunca temos uma resposta definitiva, há sempre algo apropriado para um problema específico. Mas mesmo assim, todos os dias surgem coisas novas e tentam matar outras coisas (RIP Flutter). Em minhas pesquisas pessoais e buscas por mais conteúdo profundo sobre programação, além de ter me dedicado a mais estudos referentes a estruturas de dados e algoritmos, me deparei com linguagens de mais "baixo nível". Eu na verdade, as chamo de nível médio kkkkkk. Dentre elas: zig, rust e a linguagem que dedico esse post: golang.
Aprender golang está sendo um desafio extremamente prazeroso e tenho conseguido estar mais perto de problemas que, linguagens quase que humanas como python e typescript, nos suprimem de conhecer. Algumas coisas interessantes são os controles de threads, os controles de erros (quando descobri que golang não tinha try/catch minha mente deu uma explodida, confesso) e até mesmo a manipulação intensiva de ponteiros e seu uso dinâmico. Mas vamos por partes...
Logo de cara, o contraste entre as duas linguagens é significativo. Golang é realmente minimalista por natureza, e eu achava que isso era uma espécie de sensacionalismo. É impressionante como que escrevendo pouco, as coisas tomam forma de maneira bem fluída e simples. Ele remove toda a "mágica" que frameworks e abstrações em TypeScript muitas vezes introduzem, forçando você a pensar de maneira mais direta, próxima ao metal. A ausência inicial de generics (que felizmente agora fazem parte da linguagem), o modelo de concorrência com goroutines e channels, e até mesmo a maneira pragmática como erros são tratados (sem exceções!) representam uma nova mentalidade.
Há algum tempo atrás vinha escrevendo sobre conceitos-chave da orientação a objetos e do mundo de linguagens de alto nível. Mas golang é uma linguagem pragmática, que se utiliza fortemente de padrões de programação funcional e procedural, o que foi uma quebra de padrões para mim, mais acostumado com o foco em OO que tive com TS. Aprender Go é como reaprender a programar com foco em simplicidade e performance. Tudo parece mais enxuto, mais pragmático — às vezes até cru. Mas é exatamente aí que mora a beleza da linguagem. Ela é rápida, consistente e feita sob medida para sistemas concorrentes, APIs robustas e aplicações de back-end em larga escala. Quando cheguei nas coisas mais específicas do go, tais como defer, goroutines, channels e paralelismo, tive um pouco de dor de cabeça. Nada muito horrível de entender, mas como muitas coisas um Java da vida vai sintetizar e "mastigar" pra gente, nós não pensamos tanto. Mas quando chegamos em uma linguagem como golang, devemos estar atentos a literalmente TODAS as coisas. Além de todas essas coisas um detalhe me salta os olhos: o compilador e linter do golang deixam o código extramemente belo e legível ao forçar um padrão consistente. Ainda tenho muito a aprender, sei disso, mas devo dizer que tem sido incrível!
Conclusão
Agora, já tenho 3 projetos em golang que deixei público e que são frutos de migrações de code-bases escritas essencialmente em typescript e tenho gostado muito dos resultados. Linguagens de programação não deveriam, definitivamente, existir para serem pivôs de richas infantis na internet sobre qual é melhor e qual é pior. Consigo perceber que Golang não substitui outras linguagens — ele complementa. Enquanto python, java, node e até C# brilham em produtividade e expressividade, Go se destaca em performance, escalabilidade e manutenibilidade em ambientes de alto desempenho. Basta você escolher a melhor para auxiliar sua abordagem.
#golang
#webdev
#bolhadev
#carrer
#carreira
Top comments (0)