Há mais de um ano, inteligência artificial faz parte do meu dia a dia na minha carreira como desenvolvedor de software. Seja no código que eu escrevo e reviso no trabalho ou nos meus projetos pessoais, IA virou uma ferramenta constantemente presente. Já passei por fases de amor e ódio com ela. Habilitei, desabilitei e habilitei novamente o Copilot. Assinei e cancelei a assinatura da OpenAI. Pedi para o Devin refatorar código e testei o Cursor.
Como sempre na internet, as coisas parecem ser preto e branco. Os AI enjoyers acham que amanhã o Sam Altman vai anunciar um modelo AGI e ele vai "one-shot vibe code" um SaaS para nunca mais ter que trabalhar na vida.
Os haters acham que tudo não passa de hype para pegar dinheiro de VC. A OpenAI vai falir, o mercado de GPUs vai voltar ao normal, e ele finalmente vai conseguir comprar uma 4090 para jogar Cyberpunk no ultra high.
Já eu sou apenas um chill guy que entende que existe nuance nessa conversa e que, no mundo real, as coisas estão mais para cinza do que preto e branco. Por isso, decidi escrever este texto compartilhando a minha experiência com inteligência artificial: o lado bom e o lado ruim.
O Bom
Produtividade
Mês passado, participei de uma hackathon e fiquei encarregado do frontend. Eu trabalho como backend, mas me viro com SvelteKit. Já no CSS, sou um zero à esquerda. A velocidade com que consegui entregar um design decente para o projeto da hackathon me deixou impressionado. Não perdi uma hora de sono e ainda ficamos em terceiro lugar entre 26 equipes. Não fosse o Claude, eu provavelmente teria virado a noite e não teria chegado nem perto do design gerado por ele.
Claro, uma hackathon é diferente da codebase do meu trabalho, mas também tive ganhos de produtividade por causa da IA no meu dia a dia. Eu programo em Rust, uma linguagem extremamente verbosa. O Copilot aumentou consideravelmente minha velocidade, principalmente porque comecei a usá-lo mais como um "autocomplete on steroids" do que como uma ferramenta para solucionar problemas e escrever a lógica de negócio para mim.
Ainda no contexto do meu trabalho, uso IA em algumas situações específicas. Às vezes, para ajudar a escrever uma query mais complexa, achar algum bug ou me explicar algum conceito de uma ferramenta que utilizamos no trabalho e que ainda não entendo tão bem. Por algum motivo, meu uso de IA no trabalho era muito maior há um ano do que hoje. Não sei exatamente o porquê. Tenho a impressão de que a qualidade dos serviços piorou e que eu melhorei como desenvolvedor.
Ferramenta de Estudo
Já fora do meu trabalho, meu último projeto foi montar um cluster de Raspberry Pis powered by Kubernetes. Eu gosto de fazer self-host de aplicações, e a gente usa Kubernetes no trampo. Eu não entendia nada de Kubernetes, então decidi juntar o útil ao agradável e montar esse homelab para aprender mais sobre as techs que usamos na empresa. O ChatGPT foi essencial para explicar o básico e me apontar na direção dos recursos que eu precisava para fazer o que queria.
Por exemplo, eu queria self-host meu site no meu cluster, mas havia várias coisas que eram incógnitas para mim. Como consigo um IPv4 para o meu site? O que é CGNAT? Que alternativas posso usar se meu provedor de internet não me fornece um IPv4? O que devo estudar para garantir a segurança do meu homelab? Como o TLS funciona? Essas foram algumas das perguntas que o ChatGPT me ajudou a responder. Eu demorei muito menos do que esperava para pelo menos entender o mínimo do que precisava para botar esse site no ar.
O ruim
Eu tenho bastante a dizer sobre o lado ruim de usar ferramentas de inteligência artificial para programar, mas acho que o cerne do problema, na verdade, não tem a ver com IA. O mesmo já acontecia quando o Stack Overflow ainda era a fonte primária para resolver bugs.
O problema é não entender o que você está fazendo
Atire a primeira pedra quem nunca copiou um trecho de código do Stack Overflow que arrumava um bug e simplesmente seguiu com a vida, sem nem ao menos ler direito o que o código estava fazendo.
Eu me lembro especificamente de um pair review que estava fazendo com um dev mais sênior no trabalho. Ele me perguntou: “Como esse código funciona?”. Houve um silêncio constrangedor de alguns segundos antes de eu responder: “Eu não sei, copiei de um post do Stack Overflow”.
“A gente não faz as coisas assim por aqui. Se você não entende o que está fazendo, o código não pode subir para produção”, meu colega respondeu.
Esse é o maior problema de usar IA para codar: ela facilita muito o uso de código que o dev não entende. Nos tempos do Stack Overflow, ainda era necessário ler a pergunta para entender se ela estava relacionada ao seu problema e compreender o mínimo do código da resposta para saber se era necessário alguma adaptação ao seu contexto. Em um ChatGPT da vida, nem isso é necessário. Basta copiar seu código, colar o log de erro do terminal, esperar a IA gerar o código e aceitar a alteração.
Claro, existe contexto e nuance nisso. Jogar um código gerado por IA em um script que você vai usar uma vez para algo low-stakes é diferente de usar o código no meio de uma feature da codebase em que você trabalha. Eu vou presumir que o leitor tem QI suficiente para distinguir esses contextos.
Delegando raciocínio
Falando em QI, outro problema da IA é quando você delega o "raciocínio" e a solução de problemas para ela. Eu odeio trazer a má notícia para você, mas a ferramenta de trabalho do desenvolvedor é o cérebro. Se você quer ser algo além de um pedreiro de código ou encanador de API, vai ter que usar a cabeça. IA não raciocina, IA não pensa. Delegar o raciocínio para a IA geralmente leva a soluções ruins e incompletas, especialmente quando o problema é complexo.
“Ah, mas eu vou ler o que a IA me recomendou, avaliar e adaptar se necessário.”
Ok, mas você já vai estar enviesado pela resposta da IA. Faça o experimento você mesmo: na próxima vez que precisar resolver um problema no trabalho, pense alguns minutos sobre a solução e só depois peça para a IA resolver. Se você é bom, a sua solução vai ser melhor modelada do que a da IA.
Rapidez?
“Ah, a solução da IA pode não ser a melhor, mas pelo menos eu entrego a feature muito mais rápido.”
Isso me leva ao meu último ponto: sim, você vai entregar a feature rápido, mas provavelmente vai ter que voltar para arrumar alguma coisa tão rápido quanto entregou. Código gerado por IA geralmente vive menos tempo na codebase. Para você, que entregou a feature, é uma maravilha, mas para quem mantém, nem tanto.
Em outras palavras: vibe coding é good vibes para o criador, mas bad vibes para o mantenedor.
A velocidade, na grande maioria das vezes, parece ser apenas uma ilusão momentânea. Como ter um carro de Fórmula 1 que é rápido nas retas, mas extremamente lerdo nas curvas. No final de uma volta, o tempo ainda é pior ao dos outros carros que não são tão rápidos nas retas, mas performam bem nas curvas.
Concluindo
Inteligência Artificial parece ser ótima como uma ferramenta para coisas pequenas, como hackathons e projetos pessoais, onde você está trabalhando sozinho ou em um time pequeno. O ganho de produtividade realmente parece ser de ordens de grandeza. Também é uma ótima ferramenta para explicar o básico sobre conceitos que você não entende ou apontar para a direção correta em algum tópico que deseja se aprofundar. Como o professor da faculdade, que tem uma bibliografia para te recomendar e consegue te explicar conceitos simples que você ainda não entende.
Já no meu trabalho, IA ainda está longe de me proporcionar o mesmo ganho de produtividade que proporciona em projetos pequenos. Na verdade, quanto mais deleguei para a IA, pior ela performou. Quando testei o Cursor, pedi para ela realizar uma tarefa simples e tive que ficar brigando com o código gerado. O mesmo aconteceu com o Devin. Se IA é um estagiário, ela ainda está no nível de um estagiário burro que não tem a mínima ideia do que está fazendo. Se eu preciso ficar brigando com a IA, escrevendo prompts para ela arrumar o código, prefiro escrever eu mesmo.
Profissionalmente, os maiores benefícios que a IA me proporcionou foram o "autocomplete on steroids" e o auxílio para escrever SQL queries mais complexas, o que eu acho que diz muito mais sobre a minha habilidade com SQL do que sobre a proficiência da Inteligência Artificial. Se você tem mais de um ano de experiência profissional e sente que IA pode te substituir facilmente, isso parece dizer muito mais sobre você do que sobre IA. Skill issues, como diz o Primeagen.
Request For Comments
Esse texto foi produzido baseado na minha experiência pessoal com IA. Eu uso Rust no meu trabalho e tenho plena consciência de que essa não é a linguagem mais “LLMizável”. Além disso, eu uso nvim como editor há mais de 5 anos (obrigado Lucas da Costa). Eu me sinto “fora de casa” editando em qualquer outra coisa que não seja o meu nvim com as minhas configs. Isso me faz pensar que tenho um viés negativo com essas IDEs AI-friendly. Finalmente, eu sou apenas um dev pleno com muito para aprender ainda.
Por isso, eu queria saber a opinião de vocês, ó sábia comunidade dev. Queria saber se a experiência é a mesma para os devos e devas que trabalham com linguagens mais familiares para as LLMs, como o nosso tão amado Javascripto. Se vocês sentem que IA para o trabalho é bem diferente de IA para projetos pessoais, como eu senti. Ficaria bem feliz se algum dev youtuber, como Lucas Montano, do canal Lucas Montano lesse esse texto em seu canal para movimentar a discussão nessa comunidade. Quem sabe eu estou fazendo tudo errado e, em um ano, vou virar marceneiro?
Ultimamente eu tenho percebido que tenho usado LLMs meio que como bibliotecas. Basicamente fico chamando funçãoQueFazIssoIssoEAquilo() mas em texto.