“Atualmente, os modelos de IA brilham em ajudar os programadores mais ou menos a realizar mais coisas que funcionam no tempo que têm”, argumenta engenheiro David Showalter. Mas isso está certo? Showalter estava respondendo ao pedido de Santiago Valdarrama contenção que grandes modelos de linguagem (LLMs) são assistentes de codificação não confiáveis. Valdarrama diz: “Até que os LLMs nos dêem as mesmas garantias (como as linguagens de programação, que consistentemente fazem os computadores responderem aos comandos), eles estarão condenados a serem eternas ‘demos legais’, inúteis para a maioria das aplicações sérias”. Ele está certo ao dizer que os LLMs são decididamente inconsistentes na forma como respondem às solicitações. O mesmo prompt produzirá respostas diferentes do LLM. E Showalter possivelmente está incorreto: os modelos de IA podem “brilhar” ao ajudar os desenvolvedores médios a gerar mais código, mas isso não é o mesmo que gerar utilizável código.
O truque da IA e do desenvolvimento de software é saber onde estão as arestas. Muitos desenvolvedores não o fazem e confiam demais no resultado de um LLM. Como disse um comentarista do HackerNews: “Eu me pergunto até que ponto a fé dos usuários no ChatGPT se baseia em exemplos em que os erros não são aparentes… para um certo tipo de usuário”. Para poder usar IA de maneira eficaz no desenvolvimento de software, você precisa de experiência suficiente para saber quando está recebendo lixo do LLM.
Não há soluções simples
Enquanto digito isso, muitos desenvolvedores discordam. Basta ler os muitos comentários no tópico HackerNews mencionado acima. Em geral, os contra-argumentos se resumem a “é claro que você não pode confiar totalmente na saída do LLM, assim como não pode confiar totalmente no código que encontra no Stack Overflow, no seu IDE, etc.”
Isso é verdade, até onde vai. Mas às vezes não vai tão longe quanto você esperava. Por exemplo, embora seja justo dizer que os desenvolvedores não devem ter fé absoluta em seu IDE, podemos presumir com segurança que isso não “prejudicará seu programa”. E quanto a coisas básicas como não estragar os colchetes do Lisp? ChatGPT pode muito bem errar, mas seu IDE? Não é provável.
E quanto ao código Stack Overflow? Certamente alguns desenvolvedores copiam e colam sem pensar, mas é mais provável que um desenvolvedor experiente verifique primeiro os votos e comentários em torno do código. Um LLM não dá tais sinais. Você aceita isso com fé. Ou não. Como sugere um desenvolvedor, é inteligente “tratar ambos (Stack Overflow e saída LLM como) provavelmente errados (e provavelmente escritos por um) desenvolvedor inexperiente”. Mas mesmo com erro, esse código pode “pelo menos me levar na direção certa”.
Novamente, isso requer que o desenvolvedor seja qualificado o suficiente para reconhecer que o exemplo de código Stack Overflow ou o código LLM estão errados. Ou talvez ela precise ser sábia o suficiente para usá-lo apenas para algo como um “pedaço de 200 linhas para algo mundano como uma grande tabela em uma página React”. Afinal, aqui “você não precisa confiar, apenas teste depois de pronto”.
Resumindo, como conclui um desenvolvedor: “Confie da mesma forma que confio em um desenvolvedor júnior ou estagiário. Dê-lhe tarefas que eu saiba fazer, possa confirmar se foi feito corretamente, mas não quero perder tempo fazendo isso. Esse é o ponto ideal.” Os desenvolvedores que aproveitarão ao máximo a IA serão aqueles que são inteligentes o suficiente para saber quando ela está errada, mas ainda assim é benéfica.
Você está segurando errado
De volta à afirmação inicial do fundador da Datasette, Simon Wilison, de que “obter os melhores resultados da (IA) na verdade requer muito conhecimento e experiência” porque “muito disso se resume à intuição”. Ele aconselha desenvolvedores experientes a testar os limites de diferentes LLMs para avaliar seus pontos fortes e fracos relativos e avaliar como usá-los de forma eficaz. mesmo quando eles não funcionam.
E quanto a mais desenvolvedores juniores? Existe alguma esperança de que eles usem a IA de forma eficaz? Doug Seven, gerente geral do Amazon CodeWhisperer e diretor de desenvolvimento de software do Amazon Q, acredita que sim. Como ele me disse, assistentes de codificação como o CodeWhisperer podem ser úteis até mesmo para desenvolvedores menos experientes. “Eles conseguem receber sugestões que os ajudam a descobrir para onde estão indo e acabam tendo que interromper outras pessoas (por exemplo, para pedir ajuda) com menos frequência.”
Talvez a resposta certa seja, como sempre, “Depende”.
E, o mais importante, a resposta certa para o desenvolvimento de software geralmente não é “escrever mais código, mais rápido”. Muito pelo contrário, como argumentei. Os melhores desenvolvedores gastam menos tempo escrevendo código e mais tempo pensando nos problemas que estão tentando resolver e na melhor maneira de abordá-los. Os LLMs podem ajudar aqui, como Willison sugeriu: “O ChatGPT (e o GitHub Copilot) me economizam uma enorme quantidade de tempo para 'descobrir as coisas'. Para tudo, desde escrever um loop for no Bash até lembrar como fazer uma solicitação CORS entre domínios em JavaScript – não preciso mais procurar as coisas, posso apenas avisá-lo e obter a resposta certa 80% das vezes .”
Saber onde traçar o limite nesses “80% do tempo” é, como observado, uma habilidade que vem com a experiência. Mas a prática de usar LLMs para ter uma ideia geral de como escrever algo, digamos, em Scala, pode ser útil para todos. Contanto que você mantenha um olhar crítico sobre o resultado do LLM.