- Diante da aceitação entusiasmada da indústria pelas ferramentas de geração de código com LLM, este texto enfatiza a importância do pensamento no desenvolvimento de software
- Código gerado automaticamente é não determinístico (non-deterministic) e seu funcionamento interno é opaco, sendo, em essência, diferente da mecanização que garante o mesmo resultado todas as vezes
- Os LLMs aprendem com código existente de baixa qualidade, repetem os mesmos erros e depois reaprendem isso novamente, criando o problema da "epistemologia da centopeia humana (human centipede epistemology)"
- Quando a geração de código é delegada a agentes, o contexto compartilhado e a responsabilização durante a revisão de PRs enfraquecem, o que afeta negativamente a qualidade do software
- LLMs são úteis em usos limitados, como prototipagem, mas é arriscado para o desenvolvedor terceirizar o próprio ato de pensar, e sem compreensão não há manutenção possível
O desconforto com a geração de código por LLM
- Mesmo tendo acompanhado por muito tempo as tendências mais recentes do setor e compartilhado com colegas novidades de CSS e JS, houve uma sensação de estar ficando para trás com a rápida disseminação da geração de código baseada em LLM
- Copilot e Claude vinham sendo usados como "spicy autocomplete" e como ferramentas auxiliares de depuração, mas, quando recebem qualquer tarefa um pouco mais complexa, o resultado sai uma bagunça
- É preciso fornecer contexto suficiente, mas contexto demais causa sobrecarga, e surge a situação de escrever prompts longos para massagear o ego do LLM, como "você é um especialista em sistemas distribuídos"
- Em muitos casos, escrever o código diretamente é mais rápido do que gastar tempo refinando prompts
- Questiona-se o fenômeno de engenheiros quererem abandonar a parte divertida, que é programar, e ficar apenas com a parte tediosa, que é revisar
Contestando a ideia de que isso seria uma "reencenação da Revolução Industrial"
- Assim como a Revolução Industrial contribuiu para a mudança climática, vê-se um padrão semelhante no enorme consumo de energia dos data centers de IA
- Nem toda a eletricidade vem de combustíveis fósseis, mas ainda assim há um desperdício imenso de recursos para gerar coisas como imagens de "Jesus camarão"
- A mecanização tornou produtos mais baratos e difundidos, mas também levou à queda de qualidade, resultando numa realidade em que se pode comprar uma calça na SHEIN por menos do que o preço de um café
- Isso foi agravado pela erosão do trabalho qualificado, pela transferência de fábricas para países de baixos salários e pela exploração de trabalhadores
- Código gerado se parece com fast fashion: à primeira vista parece aceitável, mas com o tempo fica cheio de buracos, muitas vezes aproveita indevidamente código de outras pessoas e também prejudica o meio ambiente
- A diferença central: a mecanização produzia o mesmo resultado toda vez e, quando havia problema, era possível inspecionar o interior; já a saída de um LLM é não determinística e seu funcionamento interno é opaco
- Um processo mecanizado que entrega resultados diferentes a cada vez e ainda mistura alucinações (hallucinations) não seria útil
Contestando a ideia de que isso seria uma "nova camada de abstração"
- É verdade que, ao usar Java ou Go, deixou de ser necessário aprender assembly, e que o runtime lida com coleta de lixo e alocação de memória
- Porém, arquitetura de sistemas, impacto no caminho crítico, trade-offs entre manutenibilidade e velocidade de entrega, compatibilidade entre navegadores, acessibilidade, segurança e desempenho continuam sendo áreas em que o desenvolvedor precisa pensar por conta própria
- O ponto em que o LLM mais causa dano é quando o engenheiro terceiriza o próprio pensamento necessário ao desenvolvimento de software
- Como o LLM não tem capacidade de raciocínio, se o desenvolvedor não pensa e o LLM também não pensa, então ninguém está pensando
- Caso do escândalo Horizon: por causa de bugs no software dos Correios, funcionários inocentes foram presos, e 13 pessoas se suicidaram
- A responsabilização (accountability) sobre software é mais importante do que nunca
O problema fundamental é o código de baixa qualidade
- Desenvolvedores humanos também escrevem código com baixa acessibilidade, baixo desempenho e dependência excessiva de JavaScript
- Os LLMs são treinados com esse código de baixa qualidade como dado de treinamento (sem consentimento explícito) e passam a reproduzir os mesmos erros
- Forma-se um ciclo em que código ruim gerado por LLM é reaprendido por outro LLM, o que se chamou de "epistemologia da centopeia humana (human centipede epistemology)"
- Considerando usuários de tecnologias assistivas, usuários em condições precárias de internet e vítimas do racismo em softwares de reconhecimento facial, a qualidade atual do software está longe de ser suficiente
- Em vez de aprender e melhorar como humanos, estamos terceirizando nossos erros para algoritmos sem pensamento
Revisão de PR e enfraquecimento do contexto compartilhado
- Mensagem central da apresentação de Jessica Rose e Eda Eren na FFConf: "código que você não escreveu é código que você não entende, e código que você não entende não pode ser mantido"
- Um PR escrito por um colega carrega certo nível de confiança e processo de pensamento, mas um PR gerado por LLM não oferece essa garantia
- Maintainers de open source vêm enfrentando uma explosão de PRs de baixa qualidade gerados por LLM
- Algumas empresas usam um método em que pedem alterações de código ao Claude via chat no Slack, e a mesma pessoa aprova o PR gerado automaticamente
- Nesse caso, a responsabilidade fica concentrada em apenas um revisor, e perde-se um dos dois pares de olhos
- O contexto compartilhado (shared context) dentro da equipe também diminui
- Revisar PR não é só verificar bugs, mas também compartilhar entendimento sobre o código e as mudanças
Não é oposição ao progresso, e sim ao hype
- A oposição não é aos LLMs em si, e sim ao branding de "inteligência artificial"
- LLMs não são inteligentes; são uma forma de machine learning
- "IA generativa" é uma cadeia de Markov muito bem construída sobre a qual as pessoas projetam expectativas excessivas
- Usar isso para criar rapidamente protótipos, wireframes ou demos interativas é razoável
- O problema é acreditar que "vibe code" pode produzir software pronto para produção, ou delegar o próprio processo de pensamento por trás da programação
- Posição de Mikayla Maki no blog da Zed sobre programar com agentes: agentes devem ser tratados como contribuidores externos não confiáveis, usados apenas em tarefas cuja execução você já sabe como fazer, e entender o código é obrigatório
- O "spicy autocomplete" continuará sendo usado, mas pensar não será terceirizado, e é preciso lembrar por que esse trabalho era amado no começo
2 comentários
> Código gerado automaticamente é não determinístico (non-deterministic)
> Sou contra o branding de "inteligência artificial"
Realmente são as palavras mais importantes...
No GeekNews também tem gente que faz analogias com calculadora e câmera, mas se até os desenvolvedores têm essa percepção, parece sério pensar como deve ser para o público em geral.
Comentários no Hacker News
Enquanto a IA for vista não como uma “bicicleta para a mente”, mas apenas como um produto para maximizar os lucros das grandes empresas, é difícil justificar o estado atual da IA
Uma estrutura que raspa dados, os processa e os devolve sem um processo real de aprendizado é desfavorável ao crescimento mental humano
No fim, o essencial é estabelecer um modelo de receita; caso contrário, não dá para manter LLMs de alta qualidade
Agora eu quase não faço edição manual. Só de jogar a URL do ticket no Claude Code, ele resolve a maior parte de uma vez
Acredito que equipes que investirem nesse jeito de trabalhar terão uma produtividade muito maior do que as que não fizerem isso
LLM é uma tecnologia que proporciona experiências completamente diferentes para cada pessoa, e a liberdade de prompt é enorme
Quando é para implementar um design específico, muitas vezes escrever eu mesmo acaba sendo mais rápido
A frase “não consigo entender código que eu não escrevi” não é realista
O objetivo da revisão de código não é a identidade de quem escreveu, mas garantir a confiabilidade sistêmica
Tanto faz se foi um humano, uma IA ou até um golden retriever que digitou
Mas, em vez de gastar tempo tentando entender um PR feito por IA, sinto que é melhor eu mesmo mandar o prompt e obter o resultado
Se depender de LLM, o desenvolvedor perde a oportunidade de aprender a estrutura do projeto e acaba tratando o sistema como uma caixa-preta
Essa tendência transforma o desenvolvedor em um “prompt kiddie”
Eu concordo com a frase “em vez de desperdiçar tempo refinando prompt, prefiro escrever o código direto”
O problema não é a “geração”, mas a geração não estruturada
Em vez de prompts improvisados, é preciso abordar isso com uma composição em unidades claras de habilidade
Dizer para a IA “você é um especialista em sistemas distribuídos” é coisa da era do GPT-3
Hoje, graças a fine-tuning e técnicas de pós-processamento, esse tipo de prompt baseado em papel já não é necessário
Ao ver a febre da geração de código por LLM, fiquei ansioso pensando se eu não estava ficando para trás
Eu vinha usando Copilot e Claude apenas como assistentes de autocomplete, e código complexo continuava uma bagunça
Mas hoje em dia as ferramentas baseadas em agentes pesquisam no codebase, buscam material na web e ajustam o contexto por conta própria
No fim, o problema são “as pessoas que reclamam sem realmente entender a tecnologia”
Na prática, é bem possível que seja falta de habilidade com prompts
Só parece que “pensa” porque as ferramentas ao redor automatizam busca e execução
No fim, isso é automação, não inteligência
Hoje em dia, muitos posts e comentários no HN parecem ter sido escritos por LLM
Não têm nada de novo, e em sua maioria só repetem generalizações superficiais
Pelas notícias recentes, a IA ainda não amadureceu o suficiente
Ex.: Microsoft reduz meta de receita do Copilot e
problema de segurança do Moltbook
No fim, a maioria das pessoas não confia em IA
IA é útil para explorar ideias ou escrever boilerplate, mas capacidade de pensar continua sendo o principal
IA é a maior tentação para substituir o pensamento humano, mas no longo prazo pode enfraquecer os músculos do pensamento
Se, depois de um tempo usando isso, você voltar a programar com as próprias mãos, vai sentir que perdeu fluência
Pode ser que o Claude seja melhor que o Copilot, e o problema de segurança do Moltbook talvez seja o destino inevitável de serviços em fase inicial
No fim, o resultado vai aparecer na taxa de sobrevivência de empresas que adotam IA e das que não adotam
Eu também achava que “IA é uma caixa-preta burra”, mas nos últimos 6 meses minha visão mudou completamente
Se aprender direito, dá para obter resultados surpreendentes
Hoje vejo a IA como um amplificador e a uso como ferramenta para expandir minhas capacidades