Odores de código gerado por IA.
Problemas recorrentes no código escrito por assistentes de programação com IA: como reconhecê-los, por que os modelos os produzem, como corrigi-los e quais regras os detectam.
Um assistente de IA envolve o código em funções, classes ou interfaces extras que adicionam uma camada de indireção sem esconder nenhuma complexidade nem permitir reutilização — abstrações que apenas repassam para um único ponto de chamada.
Ao escrever código novo, assistentes de IA tendem a colar ou rederivar uma cópia levemente ajustada de uma lógica que já existe em vez de chamar ou extrair uma função compartilhada, de modo que o código duplicado cresce a cada nova funcionalidade.
Assistentes de IA raramente reestruturam o código existente: eles penduram novos ramos, parâmetros de flag e camadas de wrapper sobre o que já existe, então funções e condicionais não param de crescer enquanto a refatoração — o retrabalho que mantém uma base de código saudável — desaparece em silêncio.
O modelo escreve à mão código sob medida para algo que uma biblioteca padrão, uma dependência existente ou um helper já presente no repositório já faz — adicionando lógica duplicada e menos testada em vez de chamar o que já existe.
Código gerado por IA que chama funções, métodos, parâmetros, chaves de configuração ou pacotes que parecem plausíveis, mas que não existem na versão real da biblioteca da qual você depende.
Assistentes de IA tendem a gerar código que trata apenas o caso bem-sucedido e bem-formado — pulando validação de entrada, tratamento de erros, verificações de nulo/vazio e casos extremos — de modo que o código funciona na demonstração e quebra em produção.
Assistentes de IA produzem código funcional que silenciosamente omite os controles de segurança que um humano adicionaria por hábito — validação de entrada, autorização, codificação de saída, tratamento de segredos — porque "compila e retorna 200" parece estar pronto.
Comentários que são artefatos da conversa de geração — prompts reformulados, narração passo a passo, comentários de bate-papo e elisões com placeholders como `// ... resto do código aqui` — versionados no código-fonte em vez de documentação real.
Assistentes de IA incham lógica simples com comentários que repetem cada linha, narração passo a passo, escadas defensivas de verificações de null e expressões prolixas onde bastaria um idioma da linguagem ou um helper existente — aumentando a contagem de linhas sem acrescentar comportamento.
Um assistente de IA nomeia código novo com placeholders genéricos ou uma convenção nova que ignora os identificadores existentes e o vocabulário do domínio do repositório, corroendo a legibilidade e gerando conceitos duplicados e mal descritos.
Código gerado por IA que ignora silenciosamente as convenções estabelecidas de um repositório — reinventando helpers, escolhendo a biblioteca errada e usando nomenclatura e tratamento de erros fora do padrão da casa — fazendo a base de código derivar em direção a um estilo genérico, médio da internet.
Assistentes de IA emitem com confiança APIs, bibliotecas e expressões idiomáticas que eram atuais anos atrás, mas que agora estão descontinuadas, removidas ou substituídas, porque seu conhecimento paramétrico está congelado em um corte de treinamento e o padrão antigo ainda é o estatisticamente mais comum em seu corpus.
Assistentes de IA se protegem contra falhas que não podem acontecer, embrulhando código já seguro em verificações de null redundantes, cláusulas de guarda mortas e blocos try/except pega-tudo que adicionam complexidade sem adicionar segurança.
Assistentes de IA incorporam valores específicos de ambiente — URLs, portas, caminhos, timeouts, chaves e números mágicos — diretamente na lógica, em vez de lê-los a partir de configuração ou do ambiente, porque um literal é o próximo token mais provável e o modelo desconhece sua camada de configuração existente.