O uso da IA deve ser proporcional ao entendimento
Vibe coding é um espectro.
Meu artigo inaugural nessa newsletter é uma reflexão honesta: A Inteligência Artificial está nos tornando programadores piores? Escrevi isso quando os agentes de IA estavam engatinhando e a maior parte das pessoas interagia com o ChatGPT no modo copy paste1. Nem um ano se passou e já me sinto como Elrond: "I was there Gandalf... I was there 3000 years ago."
À época, escrevi explicitamente para programadores experientes. Sendo Engineering Manager de uma empresa de tecnologia, o problema de como aumentar a produtividade sem comprometer a qualidade do trabalho sempre foi algo que prestei bastante atenção. Preferi deixar de lado a reflexão sobre se um iniciante deveria utilizar a IA por um simples motivo: eu não sabia a resposta.
Avance alguns meses e nos encontramos numa situação onde a programação assistida pela IA atingiu níveis impressionantes de assertividade, o termo vibe coding explodiu, abrindo uma fenda por onde muitos observaram uma oportunidade de negócio: de repente, programar já não é algo restrito a profissionais e plataformas de low/no code se popularizaram.
Eu noto isso na pele: meu humilde canal no YouTube, destinado a servir de laboratório para o teste de tecnologias e ferramentas, fervilhou de "novos programadores", pessoas genuinamente interessadas em construírem ferramentas para si, ou até mesmo iniciar um novo negócio. Já adianto que não vejo problema nenhum nesse fato – pelo contrário, encorajo a todos que aprendam a programar, independente de terem pretensões profissionais2.
Sendo assim, o tema de como conciliar Inteligência Artificial sendo um programador iniciante tem ocupado minha mente. Como proceder? Devemos evitar seu uso no início do aprendizado? Ficaremos muito para trás se ignorarmos as ferramentas que estão aí? Esse texto é uma tentativa de elucidar essas questões.
Comecemos pelo óbvio: quanto menor o esforço empregado em escrever e aprender um assunto, quanto mais passiva for sua atitude diante do aprendizado, menos você irá reter o conhecimento. Se o LLM escreve todas as linhas para você, e toda dúvida é sanada de forma mecanizada com a IA, cedo ou tarde aquela informação será perdida. É por isso que já argumentei que todo programador deveria escrever3.
Um pequeno parêntesis: há anos mantenho um sistema de Zettelkasten utilizando o Obsidian (assunto para outro dia). A ideia é criar e conectar notas oriundas de estudos, leituras, e pensamentos. Um belo dia, quis pesquisar sobre o existencialismo. Perguntei para o ChatGPT, cuja resposta julguei ser tão boa que criei uma nota com seu conteúdo. Resultado? Não retive absolutamente nada do que li, é uma nota inútil, pois como não a escrevi não precisei pensar sobre o assunto (e escrever é um meio de criação, não uma forma de registrar pensamentos prontos).
Voltemos ao problema. Um estudo publicado em junho desse ano sob o título de Your Brain on ChatGPT: Accumulation of Cognitive Debt when Using an AI Assistant for Essay Writing Task reportou o seguinte experimento: participantes foram separados em três grupos com diferentes ferramentas disponíveis. O primeiro grupo poderia utilizar um LLM (ex: ChatGPT). O segundo grupo poderia utilizar uma search engine (ex: Google). O terceiro grupo não podia utilizar nada além do próprio cérebro. Não deveria ser surpresa para ninguém que a atividade cerebral observada nos participantes do grupo do LLM foi menor que no da search engine, que por sua vez foi menor que no grupo dos que não utilizaram nenhuma ferramenta.
Talvez um dos resultados mais reveladores tenha sido que, ao trocar os participantes do grupo que podia usar o LLM com os que não podiam usar nenhuma ferramenta, aqueles habituados ao suporte da IA apresentaram um engajamento cerebral inferior uma vez desprovidos dela. Já os que passaram a ter acesso à IA depois de "treinarem" sem nenhuma ferramenta observaram uma maior ativação do córtex pré-frontal, responsável direto por funções cognitivas como raciocínio lógico, tomada de decisões e memorização.
Isso é ruim, mas esperado. É evidente que quanto menos se usa algo, mais rápido você a esquecerá (vemos isso com clareza ao deixarmos de praticar um idioma). A questão então passa a ser: sabendo que esse efeito acontecerá, ainda assim vale a pena pagar o preço?
Existem casos onde a conveniência da tecnologia é tão grande que justifica um certo grau de "atrofia cognitiva". Considere o GPS. Quando ele se popularizou, muito se discutiu sobre a perda da memória espacial, nossa capacidade de lembrar de lugares, caminhos e estradas. Isso também deveria ser óbvio: perdemos esse reconhecimento espacial se viramos dependentes do Google Maps. Ainda assim, quem de nós proibiria alguém que está começando a dirigir de utilizar o GPS? Parece algo um tanto excessivo.
Logo, creio devemos afastar a ideia de que "IA para iniciantes é ruim" sob o mesmo argumento: é uma tecnologia tão disruptiva que precisamos aprender a termos um relacionamento saudável com ela, não negá-la completamente.
Passemos então à discussão de "quanto de IA é adequado para cada um". Evidentemente não existe um número mágico nem uma receita, mas devemos ser capazes de fazer uma autoavaliação se entendermos que vibe coding é um espectro. Aqui é importante fazer uma distinção: estou utilizando o termo "vibe coding" como "código gerado inteiramente pela IA".
Considere o gráfico abaixo retirado do artigo Vibe code is legacy code:
Quanto maior for o entendimento do código, menos vibe coding ele é. Ora, para todos os efeitos código é código, independente de quem escreveu. Se você é capaz de fazer um juízo crítico, apontar suas falhas e preencher as lacunas, você tem o domínio completo do que está sendo feito e não pode ser “acusado” de vibe coding.
Por outro lado, se você é indiferente ao código, ou simplesmente não entende o que está acontecendo, você está maximizando o modo vibe. Isso é ruim? Depende. Qual seu objetivo com o código? Aprendizado? Diversão? Você pretende mantê-lo ou é um programa descartável, usado como experimento ou como uma gambiarra pessoal pelo simples prazer de construir algo?
De modo geral, quando geramos um código que não entendemos, ou não utiliza-se das melhores práticas, estamos incorrendo em tech debt. Porém, tanto na programação quanto na vida, só é uma dívida se pretendemos pagá-la! Se o código é descartável, se não pretendo mantê-lo, que mal há em não entendê-lo? No entanto, se é algo que desejo gerenciar, expandir, então estarei acumulando uma dívida que precisará ser paga com juros.
Entendendo que vibe coding é um espectro, proponho então uma heurística: utilize a IA proporcionalmente ao seu entendimento do código (a menos que seu objetivo seja recreativo). Iniciantes devem aproximar-se da IA com cautela, não amedrontados, mas buscando nela uma companheira que ajude-o a entender o que está fazendo. Com o tempo, mais familiarizado com o código, poderá dar-lhe mais liberdade para escrever. A qualquer momento que algo feito não estiver claro, é necessário interromper imediatamente e só prosseguir quando aquele conhecimento estiver solidificado. Se possível mantenha um caderno, um bloco de notas, escreva fisicamente o que está aprendendo. Quanto mais tempo se passar em um estado de passividade, mais lentamente irá se progredir no eixo do understanding.
Sou um defensor de se tratar adultos como adultos. A Inteligência Artificial é uma ferramenta poderosa demais para que finjamos que ela não exista. O iniciante ideal é aquele que reconhece o seu valor, mas não a deixa dominá-lo. Ele se esforça ao máximo para entender o que está sendo feito e como deve prosseguir, pois tem consciência de que progredirá mais rápido tanto maior for seu conhecimento. O entendimento do código passa a ter um componente exponencial: quanto mais entendemos, mais delegamos, e mais construímos.
Esse artigo foi publicado originalmente em inglês no dia 11 de Novembro de 2024 sob o título Are AI assistants make us worse programmers?
Para uma expansão desse pensamento, ver meu artigo Nem todo programador precisa ser profissional.



