A geração de código por LLM pode levar ao enfraquecimento da confiança
(jaysthoughts.com)- Recentemente, a geração de código baseada em LLM vem sendo cada vez mais usada entre desenvolvedores
- O código gerado automaticamente tem ampliado as preocupações com a qualidade e a confiabilidade do código
- Desenvolvedores relatam maior dificuldade de manutenção de projetos devido à falta de compreensão do código e à validação insuficiente
- A disseminação do uso de código não confiável afeta todo o ecossistema de software
- Com o avanço da tecnologia, destaca-se a necessidade de criar formas de garantir a confiabilidade
Visão geral
Em seu blog, Jay aborda o impacto recente das tecnologias de geração de código baseadas em LLM (modelos de linguagem de grande porte) no desenvolvimento de software. Embora a evolução dessas ferramentas esteja aumentando a eficiência no desenvolvimento, também traz à tona questões de confiabilidade e qualidade do código.
A ascensão da geração de código com LLM
- Ferramentas de geração automática de código com uso de LLM estão se espalhando rapidamente no ambiente de desenvolvimento
- Elas oferecem alta produtividade na implementação de funcionalidades complexas ou em tarefas repetitivas de programação
- Têm como vantagens a prototipagem rápida e a redução da carga de aprender novas linguagens
Problemas de confiabilidade
- O código gerado por LLM nem sempre funciona como pretendido
- Como a intenção e a lógica de projeto dentro do código nem sempre ficam claras, os processos de compreensão e validação se tornam difíceis
- Se os processos de revisão e teste forem insuficientes, podem surgir bugs ou vulnerabilidades inesperadas
Manutenção de projetos e impacto no ecossistema
- Surgem problemas de falta de documentação e explicações insuficientes sobre o código gerado automaticamente
- Como os desenvolvedores têm dificuldade para entender como o código funciona, a complexidade da manutenção aumenta
- Existe o risco de deterioração da cultura de desenvolvimento de software confiável
Conclusão e sugestões
- A geração de código baseada em LLM é inovadora, mas garantir a confiabilidade é um desafio essencial
- Ao adotar código gerado automaticamente, destaca-se a necessidade de reforçar a validação e realizar revisões de código sistemáticas
- No longo prazo, é importante estabelecer critérios para proteger a confiança no ecossistema computacional
1 comentários
Opiniões do Hacker News
Compartilhando o link do archive.is, funciona até em navegadores antigos, e JavaScript só é necessário para contornar o CloudSnare
Um amigo meu sempre dizia: "a inovação acontece na velocidade da confiança". Desde o surgimento do GPT-3, essa frase não sai da minha cabeça. Verificar custa caro, e a confiança é um dos principais meios de reduzir esse custo. Mas eu não sei como construir confiança em LLMs. Eles são extremamente fluentes tanto em código quanto em linguagem natural, mas ao mesmo tempo também se perdem em direções que, se fosse uma pessoa, pareceriam maliciosas
Acabei vivenciando esse tema no trabalho de um jeito inesperado. Sob pressão por resultados rápidos, eu e um colega acabamos fazendo merge de um grande refactor em que eu estava trabalhando, mesmo o PR ainda estando em estado temporário. Depois disso, surgiu um bug em código não testado. Durante a depuração, o colega confessou que achou que eu tinha programado com IA e que estava frustrado por tentar entender, depois do fato, um código que a IA teria gerado. Mas aquele código era trabalho manual, escrito cuidadosamente por mim, e os bugs vieram de pequenos erros durante uma mudança simples de API. Ainda assim, essa experiência acabou revelando de forma natural uma tensão de confiança entre mim e meu colega, e conseguimos conversar sobre isso de forma construtiva. Olhando para trás, foi uma experiência significativa de construção de confiança, e imagino que, em outro contexto, isso poderia ter se complicado muito mais. Dá uma sensação de que sempre é preciso tomar cuidado
Eu não entendo muito bem a premissa. A confiança de que alguém escreve bom código vem da experiência real de ver que essa pessoa codificou diretamente e o resultado foi bom. Se a pessoa usa LLM e mesmo assim entrega código sem bugs, eu confio; se usa LLM e entrega código com bugs, eu não confio. Não vejo no que isso difere de escrever tudo só com a própria cabeça
Já estamos nessa era. Vejo demais frases como "desculpe por ter deixado isso passar, você está certo". Já vi isso 8 ou 9 vezes em cada 10. Por outro lado, também vejo muita gente fazendo copy-paste sem sentido de código gerado por LLM e ficando brava quando o resultado não corresponde ao esperado. Na verdade isso é melhor. Prefiro algo claramente quebrado a algo que parece certo por fora
Ferramentas de abstração anteriores reduziam complexidade partindo do pressuposto básico da "correção" da abstração. Claro, não eram perfeitas e tinham bugs, mas isso era um problema da implementação, não um erro inerente. Uma vez corrigidas, tendiam a ficar mais robustas. Já LLMs são mecanismos probabilísticos de previsão que só apresentam uma precisão aproximada por um período. O ponto que o autor deixa passar é que ainda dá para construir sistemas determinísticos confiáveis usando agentes probabilísticos imperfeitos. Por exemplo, você não confia num coletor de lixo porque acredita no autor da ferramenta, mas porque a ferramenta foi suficientemente testada e demonstrou funcionar como desejado. Acho que no futuro o desenvolvimento orientado a testes vai ficar mais forte. Em vez de confiança, verificação
Ser contra LLMs não adianta em nada. Hoje os LLMs aumentam a produtividade dos desenvolvedores. Pelo menos para desenvolvedores menos experientes, isso é ainda mais útil. Uma ferramenta que aumenta muito a produtividade não vai ser abandonada, não importa o que digam. Mesmo que apareçam casos de danos, como grandes serviços ficando fora do ar por muito tempo por causa de bugs graves, se a produtividade continuar sendo valiosa a tecnologia não vai parar. O único caminho realista é seguir junto com a tecnologia, resolvendo (ou mitigando) suas fraquezas. Nesse processo, se a mitigação atrapalhar o ganho de produtividade, ela vai ser contornada, e acabarão se estabelecendo medidas complementares que convivam com a tecnologia
Em vez de políticas como "prometer que o código contribuído não é produto de LLM, é original e foi totalmente compreendido" ou "exigir que a maior parte seja manual", o foco deveria estar só no resultado. Exigir que quem contribui entenda bem as mudanças faz sentido. Já políticas como "júnior deve evitar ou ser proibido de usar ferramentas LLM por um período" não parecem boas. LLMs ajudam bastante nos problemas caóticos de setup de ambiente durante o onboarding. Além disso, são úteis para entender código e documentação, e também funcionam bem como ferramentas de busca textual e resumo
Foi a primeira vez que ouvi o conceito de "AI Cliff" (fenômeno em que a precisão do LLM despenca de repente). Queria saber se mais gente já passou por isso
O autor diz que não vai resumir textos de várias pessoas, mas na prática parece ser isso mesmo. Ainda assim, eu gostaria que existisse uma marcação em PRs indicando arquivos com código gerado por IA. Os tipos de erro em código de LLM e em código humano são diferentes, então poder distinguir isso na revisão economizaria tempo. Queria saber se alguém já viveu uma política assim em organizações grandes, ou se já existem ferramentas automatizadas para isso. Se empresas medem a proporção de código gerado por LLM, talvez ferramentas desse tipo já existam para métricas mais detalhadas