A Inteligência Artificial está fazendo programadores melhores?
ProgramaçãoUma análise científica sobre a qualidade do código gerado por desenvolvedores júniores. O código é melhor? Vamos descobrir.
Eu programo há mais de duas décadas. Comecei numa época em que a internet discada era um luxo, os fóruns eram nosso Google e a documentação vinha em arquivos de ajuda offline ou, se você tivesse sorte, em um livro pesado da O'Reilly. A gente aprendia na marra, errando, depurando linha por linha, e desenvolvendo uma espécie de "sexto sentido" para encontrar bugs. Aquele processo, embora doloroso, forjava uma compreensão profunda dos fundamentos.
Hoje, o cenário é outro. Ferramentas de Inteligência Artificial, como o GTP, Claude e Copilot, estão se tornando onipresentes. Elas prometem acelerar o desenvolvimento, automatizar tarefas repetitivas e até mesmo nos ajudar a escrever um código melhor. Como já disse em diversos outros posts aqui eu já vi muitas "balas de prata" surgirem e desaparecerem, então minha reação sempre foi mais de um cético. Afinal, o que uma máquina que prevê a próxima palavra em uma sequência pode realmente ensinar sobre a arte de construir software robusto e elegante?
Mas, como sempre digo, um bom engenheiro não pode se dar ao luxo de ignorar uma nova ferramenta poderosa. É preciso testar, questionar e entender seu verdadeiro impacto. Essa semana, me deparei com um estudo acadêmico que me fez parar para pensar: "Does ChatGPT help novice programmers write better code? Results from static code analysis" (O ChatGPT ajuda programadores novatos a escreverem códigos melhores? Resultados de análise estática de código).
Este artigo, publicado no IEEE Access, me fisgou. Ele não se baseia em opiniões ou "achismos", mas em dados. Os pesquisadores pegaram dois grupos de estudantes de programação Java, ambos novatos, e deram a eles os mesmos exercícios. Um grupo (o de controle) teve que se virar à moda antiga. O outro (o de tratamento) foi incentivado a usar especificamente o ChatGPT. O resultado? Vamos analisar juntos.
Vamos mergulhar nesses dados e, mais importante, vamos questioná-los. Será que o ChatGPT é o mentor que nunca tivemos ou uma muleta que pode atrofiar nosso crescimento?
A análise da qualidade do código
Antes de dar minha opinião, vamos aos fatos que os pesquisadores Philipp Haindl e Gerald Weinberger desenterraram. Eles usaram ferramentas de análise estática de código, como Checkstyle e SonarQube, para medir objetivamente a qualidade do que os alunos entregaram. Essas ferramentas não se importam com a elegância do seu algoritmo; elas verificam regras, convenções de código e métricas de complexidade.
Os resultados foram, no mínimo, impressionantes. O grupo que usou o ChatGPT produziu um código que era, objetivamente, de maior qualidade. Eles tiveram significativamente menos violações de regras de codificação e o código deles era menos complexo.
Menos "sujeira" no código e mais aderência às convenções
Sabe aquelas pequenas coisas que separam um código profissional de um amador? Comprimento máximo da linha, uso de chaves em blocos if/else
, nomes de variáveis seguindo um padrão. São detalhes que, somados, tornam o código mais legível e fácil de manter.
O estudo descobriu que o grupo do ChatGPT se destacou nisso. Eles violaram menos regras como LineLength
(linhas de código muito longas) e FinalParameters
(parâmetros de método que deveriam ser declarados como finais). Para ter uma ideia, em algumas regras, os alunos com ChatGPT tiveram menos da metade das violações do grupo de controle.
Isso faz todo o sentido. O ChatGPT, sendo treinado com uma vasta quantidade de código-fonte de alta qualidade disponível publicamente (muitos de projetos open-source bem mantidos), tende a gerar código que já segue essas convenções. Ele age como um revisor automático, limpando a "sujeira" antes mesmo que ela seja escrita.
Uma das tabelas mais reveladoras do estudo é a que mostra as violações mais frequentes. Vou destacar alguns pontos da Tabela 3 do artigo:
Regra | Mediana de Violações (Controle) | Mediana de Violações (ChatGPT) | Relevância Estatística (p-value) |
LineLength | 50.3 | 16.65 | < 0.005 |
FinalParameters | 28.57 | 16.23 | < 0.005 |
HiddenField | 9.91 | 6.32 | < 0.005 |
DesignForExtension | 23.51 | 18.10 | < 0.005 |
O que vemos aqui é uma diferença gritante e estatisticamente significativa. O p-value
inferior a 0.005 indica que essa diferença não é obra do acaso. O ChatGPT está, de fato, ensinando (ou forçando) os novatos a seguir as regras básicas.
A complexidade é inimiga da manutenção
Um dos meus mantras ao longo dos anos é: "Código inteligente é bom, código simples é melhor". Um código complexo é difícil de entender, difícil de modificar e um prato cheio para bugs escondidos. O estudo mediu isso usando duas métricas importantes: Complexidade Ciclomática e Complexidade Cognitiva.
Se você não é familiar com esses termos, deixe nos comentários como sugestão que eu posso fazer um artigo aqui no blog, mas aqui vai uma explicação simples:
- Complexidade Ciclomática: Pense nela como o número de "caminhos" possíveis através de uma função. Quanto mais
ifs
,elses
,whiles
eswitches
aninhados, maior a complexidade ciclomática. Um número alto significa mais casos de teste necessários para cobrir todas as possibilidades. - Complexidade Cognitiva: Essa é uma métrica mais moderna que tenta medir o quão difícil é para um ser humano entender o código. Ela penaliza coisas que quebram o fluxo linear da leitura, como aninhamentos profundos e operadores lógicos complexos.
O que o estudo encontrou? Você provavelmente já adivinhou: o grupo do ChatGPT produziu código com menor complexidade, tanto ciclomática quanto cognitiva. O código deles não era apenas mais "limpo" em termos de estilo, mas também estruturalmente mais simples.

A Figura 3 do artigo ilustra isso de forma visual. A imagem mostra claramente que as caixas (boxplots) que representam a complexidade do grupo do ChatGPT estão consistentemente mais baixas do que as do grupo de controle em todos os exercícios.
Isso é um grande ponto a favor do uso da IA. Se ela pode guiar os desenvolvedores, especialmente os iniciantes, a escreverem um código mais direto e compreensível, estamos falando de um ganho imenso em manutenabilidade e redução de dívida técnica no futuro.
Mas estamos criando uma geração de "digitadores de prompts"?
Ok, os dados são claros. O ChatGPT ajuda a escrever um código objetivamente melhor, de acordo com as métricas de análise estática. Mas a minha experiência de me diz que a qualidade de software é muito mais do que a ausência de violações de lint
. A verdadeira questão é: o que está acontecendo na cabeça desses estudantes?
Eles estão realmente aprendendo por que uma linha de 120 caracteres é ruim? Eles entendem por que um baixo acoplamento e um design extensível (DesignForExtension
) são cruciais para a longevidade de um sistema? Ou estão apenas copiando e colando a resposta da IA porque ela "simplesmente funciona"?
Essa é a minha maior preocupação. O estudo, por sua própria natureza, não consegue medir a compreensão. Ele mede o resultado final, não o processo de aprendizado. Os pesquisadores admitem isso como uma limitação. O perigo que eu vejo é a criação de uma geração de desenvolvedores que são excelentes digitadores de prompts, mas que não desenvolvem a intuição e a capacidade de resolução de problemas que vêm do esforço de quebrar a cabeça com um bug ou de refatorar um código complexo.
O processo de aprendizado em programação é, em grande parte, sobre construir modelos mentais. Você aprende a "rodar" o código na sua cabeça, a prever os estados, a antecipar os problemas. Ferramentas como o ChatGPT podem, se mal utilizadas, agir como um curto-circuito nesse processo. Em vez de construir o modelo mental, o desenvolvedor simplesmente terceiriza o raciocínio para a máquina.
As nuances que a análise estática não vê
Outro ponto importante é que o estudo revelou que, para algumas regras, a diferença entre os grupos não foi estatisticamente significativa. Regras como MethodParamPad
(espaçamento em parâmetros de método) e AvoidNestedBlocks
(evitar blocos de código aninhados desnecessários) não mostraram uma melhora clara.
Isso sugere que, embora a IA seja ótima para regras de formato e sintaxe, as questões mais sutis de estrutura e estilo ainda podem passar despercebidas. E isso nos leva a um ponto crucial: a análise estática é apenas uma camada da qualidade de software.
Ela não consegue avaliar:
- A adequação da solução ao problema: O código pode estar perfeitamente formatado e ter baixa complexidade, mas resolver o problema errado ou de uma forma ineficiente do ponto de vista do negócio.
- A clareza da intenção: Nomes de variáveis e funções podem seguir as convenções, mas serem péssimos em comunicar o que o código faz.
processData()
é um nome válido, mas terrivelmente vago. - A arquitetura geral: A análise estática olha para a árvore, não para a floresta. Ela não vai te dizer se sua escolha de padrões de projeto foi adequada ou se a arquitetura do seu sistema é um castelo de cartas prestes a desmoronar.
A IA pode gerar um método limpo, mas a responsabilidade de garantir que esse método se encaixe de forma coesa e lógica dentro de uma arquitetura maior ainda é, e continuará sendo por um bom tempo, puramente humana.
ChatGPT vs. Copilot
É interessante notar que o estudo se concentrou no ChatGPT, um modelo de linguagem conversacional. Muitos desenvolvedores no dia a dia usam ferramentas mais integradas, como o GitHub Copilot. Embora ambos usem tecnologias de IA semelhantes, a experiência do usuário é bem diferente.
O ChatGPT exige um esforço consciente: você abre uma janela, escreve um prompt, copia e cola a resposta. Isso força um momento de reflexão. O Copilot, por outro lado, é quase subliminar. Ele sugere código diretamente no seu editor enquanto você digita. É mais rápido, mais fluido, mas talvez ainda mais perigoso em termos de incentivar a aceitação passiva de sugestões sem um pensamento crítico.
Estudos que avaliaram o Copilot também mostram resultados mistos. Um estudo de Nguyen e Nadi (2022) descobriu que a precisão das sugestões do Copilot variava muito entre as linguagens, com Java tendo uma boa precisão (57%), mas JavaScript uma bem baixa (27%). Outro estudo, de Yetistiren et al. (2022), apontou que, embora 91.5% do código gerado pelo Copilot fosse válido (compilava), apenas 28.7% estava totalmente correto em sua lógica.
Isso reforça a minha tese: essas ferramentas são assistentes, não oráculos. Elas podem gerar um código que parece bom e passa nas verificações estáticas, mas que pode conter bugs lógicos sutis ou não ser a solução ideal. A responsabilidade final, a revisão e a validação, continuam sendo nossas.
Como usar a IA para aprender, e não para se acomodar
Então, qual é a conclusão? Devemos proibir o uso de IAs na educação de programação, como algumas instituições inicialmente tentaram fazer?
Eu acho que essa seria uma reação equivocada e inútil. É como tentar proibir a calculadora na aula de matemática. A ferramenta existe e será usada no mercado de trabalho. O nosso papel, como educadores e desenvolvedores seniores, não é proibir, mas ensinar a usar a ferramenta de forma inteligente e crítica.
Se eu estivesse mentorando um desenvolvedor júnior hoje, eu o incentivaria a usar o ChatGPT, mas com algumas regras:
- Nunca confie, sempre verifique: Use a IA para gerar um ponto de partida, mas sua tarefa é entender cada linha gerada. Se você não consegue explicar o que o código faz, você não pode usá-lo.
- Peça por explicações, não por soluções: Em vez de pedir "escreva uma função que faça X", tente "explique os prós e contras de usar a abordagem A versus a abordagem B para resolver o problema X". Use a IA como um tutor socrático.
- Use-a para refatorar: Pegue um código que você já escreveu e peça à IA para sugerir melhorias. "Como eu poderia tornar esta função mais legível?" ou "Existe um padrão de projeto que se aplicaria melhor aqui?". Isso transforma a ferramenta de uma "fábrica de código" para um "parceiro de revisão".
- Compare e contraste: Dê o mesmo problema para a IA várias vezes com pequenas variações no prompt. Analise as diferentes soluções que ela gera. Por que ela escolheu uma estrutura de dados em vez de outra? Essa análise crítica é onde o verdadeiro aprendizado acontece.
A Inteligência Artificial é um martelo
No final das contas, ferramentas como o ChatGPT são como um martelo incrivelmente poderoso. Você pode usá-lo para construir uma casa linda ou para esmagar o próprio dedo. O estudo que analisamos prova que o martelo funciona: ele pode ajudar a "pregar os pregos" de forma mais reta e uniforme, resultando em um código mais limpo e menos complexo.
Mas a engenharia de software nunca foi apenas sobre martelar pregos. É sobre saber onde construir a casa, qual tipo de madeira usar, como desenhar a planta para que ela seja funcional e agradável, e como garantir que a fundação seja sólida o suficiente para resistir a um terremoto.
A IA, hoje, nos ajuda com a execução, mas a estratégia, a visão e a sabedoria ainda são domínios humanos. Ela pode nos livrar das tarefas tediosas e nos ajudar a seguir as boas práticas, liberando nossa mente para focar nos problemas realmente difíceis: a arquitetura do sistema, a experiência do usuário, o impacto no negócio.
A provocação que deixo para você, leitor, é: estamos prontos para essa mudança? Estamos nos preparando para sermos os arquitetos e os estrategistas, ou estamos correndo o risco de nos tornarmos meros operadores de martelos de IA, esquecendo como se constrói de verdade? O futuro da nossa profissão pode depender da resposta que daremos a essa pergunta.
Comments