Ferramentas de codificação como GitHub Copilot podem ajudar os desenvolvedores a criar código 55% mais rápido, de acordo com o GitHub. Viva! Certo? Bem, talvez não. GitClear analisou 153 milhões de linhas de código alterado entre janeiro de 2020 e dezembro de 2023 e agora espera que a rotatividade de código (“a porcentagem de linhas que são revertidas ou atualizadas menos de duas semanas após serem criadas”) dobre em 2024. Em outras palavras, “ O código gerado durante 2023… lembra (o de) um contribuidor itinerante”, como se você contratasse um empreiteiro de curto prazo mais preocupado em produzir código detalhado do que em garantir sua manutenção.
Código inchado cria pesadelos de segurança, entre outros problemas, como Bert Hubert captura. Isso não significa que os desenvolvedores não devam usar assistentes de IA. Em vez disso, é uma indicação de que é preciso tomar cuidado para garantir que a dependência excessiva da IA não torne nossas máquinas e o código que as executa estúpidos.
Todo mundo está fazendo isso
Não haveria muita necessidade de preocupação se a IA generativa (genAI) não tivesse explodido em uso no ano passado. Com essa adoção, vêm coisas boas e ruins, como destaca o criador do Datasette, Simon Willison. “Nos últimos 24 a 36 meses”, escreve ele, “nossa espécie descobriu que é possível tomar um gigante corpus de texto, executá-lo em uma pilha de GPUs e usá-lo para criar um novo e fascinante tipo de software.” Esse software pode melhorar significativamente as nossas vidas, continua ele, se aprendermos a dominá-lo. Felizmente, grandes modelos de linguagem (LLMs) são “realmente muito fáceis de construir”, exigindo apenas algumas centenas de linhas de código Python.
A parte complicada dos LLMs não é o código usado para escrevê-los, mas sim os dados usados para treiná-los. Em 2023, aprendemos novas maneiras de evitar que eles saíssem dos trilhos (“alucinando”) com geração aumentada de recuperação (RAG) e outros meios. Isso é bom.
Do lado ruim da contabilidade, também estamos percebendo o quão esquisitos eles podem ser. Afinal, saber como solicitar um LLM ainda é uma arte obscura (sem consistência). Como observa Wilson: “As coisas que às vezes você precisa fazer para que os modelos se comportem são muitas vezes incrivelmente burro.” Isso se aplica menos à criação de software do que, digamos, a pedir ao ChatGPT para escrever um trabalho final. Mas ainda é verdade que fazer com que um LLM faça qualquer trabalho específico é um exercício de mexer com botões (instruções) para conseguir o que deseja.
A pior parte do software gerado por IA – e do software atual em geral – é o inchaço. “Quanto mais (código) você tem… mais riscos você corre”, argumenta Hubert. De certa forma, tentamos contornar isso tornando a execução de nosso software um problema de outra pessoa. “O software é agora (com razão) considerado tão perigoso que dizemos a todos para não executá-lo”, diz Hubert. A chave é escrever menos código. Software mais enxuto é software mais seguro. “O mundo envia demasiados códigos”, declara Hubert, “a maior parte deles por terceiros, por vezes de forma não intencional, a maior parte sem ser inspecionada. Por causa disso, existe uma enorme superfície de ataque cheia de códigos medíocres.”
A IA agrava o problema.
Instalando portões
A revisão de código, tanto automatizada por máquinas quanto executada por pessoas, é a resposta. Pode-se argumentar que, claro, os assistentes de codificação criam códigos inchados e menos fáceis de manter, mas a IA também minimiza a necessidade de as pessoas mantê-los. Parece aceitável, certo? Errado. A superfície de ataque ampliada permanece.
A resposta para esse enigma sobre a qualidade do código é provavelmente a mesma de sempre: revisões de código.
A origem do código é menos importante do que o processo pelo qual as equipes de desenvolvimento avançam para a produção. Como disse recentemente um de meus colegas: “Um bom código é elaborado tanto por bons processos quanto por bons desenvolvedores”. Esse processo depende de os desenvolvedores não se esquivarem de sua responsabilidade de aprender os fundamentos do desenvolvimento de software. os desenvolvedores pularão os tópicos mais difíceis de engenharia de software, como estruturas de dados e algoritmos, sistemas distribuídos, redes, etc. Isso os coloca em uma posição fraca para fazer revisões de código eficazes.
Minha esperança é que os desenvolvedores aproveitem as novas oportunidades oferecidas pelas ferramentas de IA e, ao mesmo tempo, aprofundem suas raízes no essencial que os ajudará a usar as ferramentas de IA de maneira eficaz e a não se deixarem usar por elas. Esta esperança tornar-se-á realidade à medida que os líderes de desenvolvimento insistirem em revisões de código robustas, o que, por sua vez, eleva a fasquia para aqueles envolvidos no processo de codificação, sejam eles humanos ou máquinas.