Engenharia com IA

Go é a linguagem certa para a era do código gerado por IA Quando a IA escreve e o humano revisa, o gargalo muda — e o Go foi feito para esse gargalo.

Saiu no Hacker News a provocação 'If AI writes your code, why use Python?' (919 pontos, 252 comentários). A comunidade rejeitou o raciocínio mas expôs a verdade: a IA derrubou o custo de escrever em qualquer linguagem, então o critério de escolha mudou. Não é mais facilidade de escrever — é quanto a linguagem restringe a IA em tempo de compilação e quão fácil é o humano revisar e operar. Rust domina o primeiro eixo e perde no segundo. Python domina o segundo e perde no primeiro. Go pontua alto nos dois ao mesmo tempo.

O Problema

O gargalo deixou de ser escrever. Virou revisar e confiar.

Os dois argumentos históricos do Python — 'é fácil de escrever' e 'tem biblioteca pra tudo' — perderam força: a IA escreve Rust tão rápido quanto Python e porta bibliotecas de uma linguagem para outra quase de graça. O que não mudou foi a sua responsabilidade. Você não digita mais o código, mas cada diff entra na sua fila de revisão, e quando o sistema quebra em produção é você quem entra no terminal.

Eixo 1 — Restrinja a IA

'LLMs prosperam na restrição e se afogam na liberdade.' Quanto mais o compilador estreita o espaço de soluções, mais provável que o que sai funcione. Tipagem estática vira mecanismo de alinhamento: o erro de compilação corrige o agente antes do bug chegar ao runtime.

Eixo 2 — O humano ainda revisa

O comentário mais afiado da thread: 'a legibilidade do Python não é vantagem na escrita; é vantagem na revisão. Cada diff vai pra minha fila — esses 10% são a parte crucial.' Você lê muito mais código gerado do que escreve.

O falso dilema

O erro do artigo original foi tratar os eixos como se um anulasse o outro. Não anula. A linguagem certa é a que maximiza os dois ao mesmo tempo — e performance bruta raramente é o gargalo real: a página é lenta por causa da linguagem ou das 16 chamadas a serviços externos?

O bug que só um humano resolve

Vibe coding 'fair weather' funciona até o app ser exposto a uso sério. Vai haver o O(n²) escondido que trava com 1000 usuários, e a IA entra em loop tentando consertar. Aí é preciso um humano que entenda a linguagem — o que torna a escolha relevante de novo.

Nossa Abordagem

Por que Go encaixa nos dois eixos

Go não é a linguagem com o type-system mais forte (Rust ganha aí), nem a com mais dados de treino (Python ganha). É a que equilibra restrição da IA e operabilidade humana — exatamente o que importa quando a IA escreve e o humano revisa.

1

Restringe a IA, na medida certa — e com loop rápido

Estaticamente tipado: o agente não passa string onde se espera int, não esquece retorno. Não é o borrow-checker do Rust, mas é guard-rail real com uma vantagem que o Rust não tem: o compilador é rápido. O loop 'IA escreve → compila → corrige' roda em segundos, então o agente itera mais e melhor.

2

É legível na revisão — onde está o trabalho de verdade

Gramática pequena e uma única forma idiomática. Você lê uma função gerada e entende em segundos, sem decorators mágicos, sem três níveis de metaprogramação, sem Arc<Mutex<...>> aninhado. A verbosidade do 'if err != nil' é boilerplate que se skimma, não se decifra.

3

gofmt + idiomática única = baixa entropia

Como só existe um jeito de formatar e quase um jeito idiomático de resolver cada coisa, o agente converge para a convenção sozinho — não inventa estilo a cada arquivo. O codebase fica coeso mesmo gerado por IA em sessões diferentes, e a revisão fica previsível.

4

Stdlib completa = árvore de dependências minúscula = menos supply-chain

Agentes adoram instalar pacotes, e cada install roda scripts de terceiros e amplia a superfície de ataque. Com a stdlib batteries-included do Go (HTTP, TLS, templates, crypto, testes), a IA simplesmente não precisa puxar dependências. Menos deps, menos footgun, menos auditoria. Some o binário estático: deploy trivial.

Resultados

O que entregamos

1 dep real

1 dependência num web app de produção

O Stickybit — este site — roda em produção, foi construído majoritariamente com IA, e tem UMA biblioteca de terceiros (markdown) mais o TLS automático do ecossistema oficial. A stdlib cobre o resto. go.sum de 8 linhas: superfície de supply-chain quase nula.

Binário único

Deploy sem cerimônia

O artefato é um binário estático único (~12 MB). Sem imagem de 800 MB, sem node_modules, sem 'funciona na minha máquina'. A IA gera, go build, sobe.

~4.4k linhas

Legível mesmo em arquivo grande

~4.400 linhas de Go, 52 funções, navegáveis por tipos explícitos e gofmt consistente. O tipo de estrutura que a IA produz e que só é sustentável porque o Go é legível. (Vale refatorar em pacotes — mas dá pra conviver enquanto cresce.)

Compile em s

Loop de iteração rápido

Compilação em segundos, não dezenas de segundos. Quando o feedback é barato, o agente itera mais — e o gasto de tokens corrigindo erros de compilação fica baixo, ao contrário do ciclo lento e caro do Rust.

go test -race

Concorrência sob guarda

O risco número um do Go com IA: data races que nem o agente nem o revisor percebem. Mitigação não é opcional — go test -race no CI e ceticismo em todo diff que mexe em estado compartilhado entre goroutines.

Cobertura

O que o compilador não garante, os testes garantem

Como o type-system é mais fraco que o do Rust, bugs de lógica passam pela compilação. A contramedida é deslocar a verificação para os testes — e o loop rápido do Go te deixa bancar muitos. Trade consciente: rigidez do Rust por velocidade e legibilidade.

Quer colocar código gerado por IA em produção sem perder o controle?

A IA pode escrever em qualquer linguagem. Você ainda tem que ler, confiar e manter o que ela escreveu. Ajudamos times a escolher o stack certo e a montar o processo de revisão, tooling e guard-rails para a era dos agentes.