Uma das melhores características dos Modelos de Linguagem de Grande Escala (LLMs) é a sua capacidade de gerar código incessantemente. Afinal, quem se importa com o princípio DRY (Don't Repeat Yourself)? Você não precisa ser a pessoa a atualizar a mesma condição longínqua em quatro arquivos diferentes - a IA faz isso por você! Certo?
Recentemente, percebi que estava adotando essa abordagem em um projeto que desenvolvi com a ajuda da IA. Precisava de uma verificação de acesso em vários lugares: um manipulador de rota, um job em segundo plano, um endpoint de API, um webhook, e assim por diante. A cada vez, eu descrevia o que precisava, e o modelo gerava algo que funcionava, que eu então integrava ao código.
As versões do código pareciam mais ou menos assim:
if (user.isActive && user.hasPermission('read') && !user.isSuspended && account.status === 'open') { }
Essencialmente, eram as mesmas condições repetidas. Quatro condições, talvez com nomes de variáveis ligeiramente diferentes, lógica copiada com uma ou duas palavras alteradas. Havia uma maneira mais limpa de fazer isso - um helper compartilhado, por exemplo, algo que eu teria extraído se estivesse escrevendo isso manualmente. Mas eu não fiz. O código funcionou! Os testes passaram e eu não seria a pessoa a ter que mexer nele novamente.
Essa é a preguiça: se não segue as melhores práticas, ou se sei que um trecho de código será difícil de manter, qual a diferença? Quando precisar modificar algo mais tarde, o LLM se encarrega, não eu.
Porém, o LLM não escreve no vácuo. Ele analisa sua base de código, os arquivos que você tem abertos, os padrões que já existem e as mudanças recentes que você fez. Cada atalho que você integra é um sinal sobre como as coisas são feitas ali. Da próxima vez que você solicitar ao LLM outro endpoint com as mesmas regras de acesso, o modelo não começará do zero. Ele se baseará nas outras quatro cópias já existentes no seu repositório.
Então, você solicita um quinto endpoint e recebe uma quinta condição, com o mesmo código copiado. Se você pedir uma refatoração, o modelo preservará todos os cinco, porque é assim que seu código se apresenta. O mau padrão não é mais uma exceção, mas sim considerado seu estilo.
Se você deixar as coisas assim, pode realmente confiar que o LLM capturará cada instância se tentar corrigir mais tarde?
Claro, algumas dessas situações não são catastróficas. É assim que tudo começa, mas os "cheiros de código" se acumulam. Cada condição duplicada, cada função "deus", cada "vou limpar isso depois" adiciona mais uma camada de sinalização ao próximo prompt. Eventualmente, você não consegue mais se livrar disso facilmente. Pelo menos, não sem sujar as mãos e arregaçar as mangas.
A parte mais frustrante: eu pensava que estava terceirizando a manutenção para o LLM, mas a ladeira escorregadia em que me encontrei estava, na verdade, treinando-o para ter hábitos cada vez piores.
Escreva código como se um humano fosse mantê-lo. Os LLMs são esponjas que absorvem tudo o que você faz e repetem. Portanto, certifique-se de que seja bom.
Confira os últimos vídeos publicados no canal