55 pontos por GN⁺ 2025-10-31 | Ainda não há comentários. | Compartilhar no WhatsApp
  • Addy Osmani, líder de engenharia que trabalhou por 13 anos na equipe do Google Chrome, apresenta uma metodologia de desenvolvimento baseada em IA para engenheiros de software profissionais
  • O vibe coding é útil para prototipagem rápida, mas para o desenvolvimento de software com qualidade de produção, princípios de engenharia e supervisão humana são indispensáveis
  • Ao usar ferramentas de IA, é preciso garantir a qualidade por meio de desenvolvimento guiado por especificação, escrita de testes e compreensão do código, além de revisar o processo de raciocínio do modelo para entender completamente o código gerado
  • LLMs conseguem gerar rapidamente cerca de 70% de uma aplicação, mas para garantir a qualidade dos 30% restantes, bem como segurança e manutenibilidade, a expertise de engenheiros seniores se torna ainda mais importante
  • Estão surgindo novos fluxos de trabalho de desenvolvimento, como agentes assíncronos em segundo plano e programação paralela, e os engenheiros precisam se tornar aprendizes ao longo da vida que usam IA sem perder o pensamento crítico e a capacidade de compreender código

Diferença entre Vibe Coding e engenharia assistida por IA

  • Vibe coding é uma forma de mergulhar totalmente no fluxo criativo com a IA, focando em prompts de alto nível e praticamente esquecendo o código em si
    • Aceita sugestões da IA sem revisão profunda e se concentra em experimentação iterativa rápida
    • É útil para protótipos, MVPs e aprendizado, priorizando velocidade e exploração acima de precisão e manutenibilidade
  • Engenharia assistida por IA é uma abordagem que usa a IA como uma colaboradora poderosa, sem substituir os princípios de engenharia
    • A IA atua como multiplicadora de força em todo o ciclo de vida do desenvolvimento de software, ajudando com boilerplate, depuração, deploy etc.
    • O engenheiro humano continua responsável pelo desenho da arquitetura, revisão do modelo e compreensão de todo o código gerado
    • Garantir a segurança, escalabilidade e manutenibilidade do produto final continua sendo tarefa do engenheiro
  • Quanto maior a especialização em engenharia de software, melhor tende a ser a qualidade dos resultados obtidos com LLMs
  • Para programação com qualidade de produção, só se deve fazer commit no repositório de código totalmente explicável para outra pessoa

Como Addy usa ferramentas de IA

  • Abordagem centrada em desenvolvimento guiado por especificação (spec-driven development)
    • O essencial é definir um plano claro sobre o que será construído
    • O vibe coding é usado para ferramentas pessoais, projetos descartáveis e visualização de ideias
    • Depois de esclarecer a visão com um protótipo, documentar os requisitos reais ajuda a induzir resultados de alta qualidade do LLM
  • Escrita de testes para reduzir risco
    • Até modelos recentes às vezes geram código complexo ou incorreto
    • Testes comprovam o funcionamento e permitem identificar claramente problemas quando eles surgem
  • Uso do Chrome DevTools MCP
    • Dá ao LLM uma espécie de “visão” do navegador para detectar renderização, erros de console, avisos etc.
    • Colocar o navegador no loop melhora o ciclo de feedback
  • Experimentação contínua com novos modelos, ferramentas e plataformas, além de compartilhamento de insights entre equipes
    • Construir uma cultura de aprendizado conjunto com segurança psicológica

Observações e aprendizados sobre ferramentas de IA no Google

  • Os princípios comprovados de engenharia de software do Google continuam válidos na era da IA
    • A preocupação com qualidade e diligência continua importante
  • A importância de prompt engineering e context engineering
    • Montar os “encantamentos” certos para obter os melhores resultados dos LLMs
    • Otimizar a janela de contexto aumenta a chance de resultados de alta qualidade
    • Incluir conteúdo que não está nos dados de treinamento do LLM, como descrições específicas do projeto, detalhes, arquivos e exemplos
  • Acelerar a transição para o engenheiro AI native
    • Treinar a mentalidade de deixar a IA tentar primeiro antes de resolver um problema
    • Construir expertise em IA com benchmarks de avaliação, RAG vs. fine-tuning etc.
  • A importância da supervisão humana
    • Se a IA escrever e revisar o código ao mesmo tempo, fica incerto o que de fato está sendo colocado em produção
    • Com o aumento da velocidade dos PRs, a revisão humana passa a ser um gargalo
    • As melhores práticas de code review ainda estão evoluindo

Ferramentas preferidas pelo Addy

  • Usa principalmente Klein no VS Code
    • Cursor e GitHub Copilot também oferecem muitos recursos
  • Revisa o processo de raciocínio (thinking log) mostrado pelas ferramentas
    • Verifica as decisões do modelo e o código gerado durante a construção da solução
    • Revisa o código antes do PR para garantir manutenibilidade futura
  • Mantém a capacidade de depurar por conta própria quando o LLM falha em resolver um problema
    • Se você não entende como o código funciona, parece que foi jogado na selva
  • Diferença entre engenheiros profissionais e leigos
    • Qualquer pessoa pode apenas digitar prompts
    • Entender como o código funciona, conseguir corrigir falhas do modelo e explicar tudo claramente em reuniões é o diferencial

A essência do problema dos 70%

  • LLMs conseguem gerar muito rapidamente cerca de 70% de uma aplicação funcional, mas têm dificuldade com os 30% restantes
  • Componentes desses 30% finais
    • Padrão “two steps back”: um prompt faz a IA reescrever completamente a UI ou uma funcionalidade, indo na direção errada
    • Custos ocultos de manutenção: delegar responsabilidade ao LLM com especificações pouco claras reduz retorno
    • Vulnerabilidades de segurança: exposição de chaves de API, problemas de XSS e outros erros causados por falta de visão sistêmica
  • Um PoC feito com vibe coding precisa ser reescrito antes de ir para produção
    • Em uma base de código com usuários reais, segurança e qualidade são indispensáveis
  • Engenheiros experientes conseguem concluir muito mais facilmente os 30% finais
    • Engenheiros juniores muitas vezes não sabem qual é o próximo passo além de continuar repropondo prompts ao LLM
    • Isso reforça a importância de pensamento crítico e mentalidade de resolução de problemas
  • A disciplina de ler o código, entender o sistema e compreender como todas as partes se conectam continua indispensável

Táticas para usar LLMs com eficiência

  • Adotar uma mentalidade de gerente de projeto
    • Quebrar o trabalho em unidades pequenas e verificáveis
    • Jogar todos os requisitos de uma vez não é eficaz
    • Definir expectativas claras e se preparar para iterar com a IA
  • Escrever código modular e testável
    • Boas práticas de engenharia de software, como code review, continuam válidas na era da IA
  • Considerar restrições de entrada e saída e fornecer contexto suficiente
    • É um hábito novo, mas pode gerar bons resultados
  • Manter a disciplina de incluir humanos no loop é a chave do sucesso
    • Quanto mais responsabilidade se passa ao LLM, maior o risco de problemas

Agentes autônomos e novos fluxos de trabalho

  • Surgimento de agentes de programação assíncronos em segundo plano
    • Ferramentas como Jewels, Devin, Codex e experimentos do GitHub
    • A ideia é delegar parte do backlog e deixar a implementação acontecer de forma assíncrona
  • Estado atual
    • Já são eficazes em escrever/atualizar testes e migrar versões de bibliotecas
    • Adequados para delegar mudanças pequenas, como adicionar modo escuro
  • Desafios de gestão
    • É preciso uma interface adequada para gerenciar tudo como maestro de uma orquestra
    • Considerar um número realista de tarefas que podem ser gerenciadas ao mesmo tempo
    • Como a atenção humana é finita, só dá para lidar com algumas tarefas em paralelo se a revisão de código for realmente minuciosa
  • Evolução do vibe designing
    • O MCP do Figma fortalece a colaboração entre designers e desenvolvedores
    • Designers podem transformar a visão em protótipos funcionais, chegando mais perto de código pronto para produção

Mudanças nos papéis de EM e PM

  • Papel do PM
    • Mais tempo investido em enquadramento do problema, métricas e políticas para agentes
  • Papel do EM
    • Avaliações (evals), revisão de segurança e apoio para que a equipe use IA com confiança
  • A responsabilidade pelo resultado não muda
  • A importância de taste em engenharia de produto
    • Como qualquer pessoa pode criar recursos parecidos com prompts, o diferencial passa a ser o taste
  • Júnior vs. sênior
    • A IA eleva o piso, mas também eleva o teto
    • Juniores conseguem começar mais rápido
    • Sêniores com habilidade de escrever especificações, decompor tarefas, entender arquitetura de sistemas e revisar com eficácia se tornam ainda mais valiosos
    • Os 30% finais não são trabalho braçal, e sim alavancagem

Novos papéis e mudanças na formação de desenvolvedores

  • Surgimento de novos papéis, como forward deployed engineers
    • Trabalham mais de perto com clientes, constroem recursos rapidamente com IA e devolvem feedback sobre requisitos
    • Pode haver borramento das fronteiras entre os papéis de desenvolvedor, PM e designer
  • Educação em AI engineering
    • Necessidade de ensinar boas práticas de prompt e context engineering no ensino médio e na universidade
    • Buscar formas de preservar a mentalidade de design de sistemas e engenharia
  • Programação em trio
    • Júnior, sênior e IA trabalhando juntos
    • O sênior pode pedir que a IA explique o código gerado ou como ele se conecta a outras partes do sistema

A importância do pensamento crítico ao trabalhar com IA

  • Risco de queda no pensamento crítico por causa da facilidade de aceitar o que as ferramentas de IA sugerem
    • Em tarefas pouco importantes, surge a tendência de apertar Tab/Accept e aceitar tudo
    • À medida que a confiança cresce, a revisão crítica diminui
  • Gargalo em code review
    • O aumento da velocidade do código gerado por IA torna a revisão humana o gargalo
    • Há risco de banalização do LGTM (Looks Good To Me)
  • Estratégias de resposta
    • Em certas funcionalidades ou em certos dias da semana, trabalhar deliberadamente sem IA para preservar o pensamento crítico
    • Pensar no que aconteceria se todos os principais provedores de LLM ficassem fora do ar
  • Escrever código vs. ler código
    • Quando você digita o código por conta própria, já acontece uma autorrevisão, e outros sabem quem escreveu para revisar
    • Na era da IA, ler e revisar passam a ocupar uma parcela maior
  • Usar IA em code review
    • A “aprovação” da IA é apenas um sinal
    • Assim como passar no CI/CD e nos testes, ainda é necessária uma visão pessoal sobre a qualidade
  • Ainda vale a pena fazer 20% a 30% do trabalho sem IA para continuar exercitando o cérebro

LLM como ferramenta de aprendizado

  • Ferramenta poderosa para entender uma nova base de código
    • A primeira tarefa não deveria ser pedir um novo recurso para gerar valor, e sim aprender como a base de código funciona
  • Útil para entender conceitos de programação, frameworks e padrões de arquitetura
  • Essencial ao transferir funcionalidades entre bases de código escritas em linguagens diferentes
  • Construção de cultura de equipe
    • Espalhar a percepção de que usar IA como ferramenta de aprendizado é algo positivo
    • Incentivar regularmente experimentação e compartilhamento de boas práticas
  • Onboarding mais rápido de novos integrantes
    • Ferramentas de IA funcionam como mentores confiáveis 24/7
    • Dá para aprender sem o peso de passar o dia inteiro fazendo perguntas a engenheiros seniores
  • Modo de aprendizado do Claude Code
    • Oferece modo de explicação e modo de aprendizado
    • Faz pausas e pede ao usuário que execute certas partes por conta própria

Evolução das ferramentas de IA e definição de expectativas

  • Histórico da evolução das ferramentas
    • Download de templates → CLI e scaffolding → bootstrap com IA
    • Em cada etapa, a experiência do desenvolvedor melhorou um pouco
  • Reconhecer os limites dos dados de treinamento
    • Baseados em código do GitHub com licenças permissivas ou em padrões da web aberta
    • Podem refletir padrões de mínimo denominador comum (lowest common denominator)
    • Não garantem o mais alto nível de segurança, performance ou acessibilidade
  • Semelhança com copiar e colar do Stack Overflow
    • Antes: copiava-se algo como regex de validação de e-mail do Stack Overflow
    • Agora: o LLM gera padrões parecidos, mas ainda pode haver edge cases ou problemas de segurança
  • Bibliotecas de terceiros vs. implementação própria
    • Com LLM, é possível implementar internamente uma versão pequena, mas isso traz o peso da responsabilidade de manutenção
    • Bibliotecas permitem correções centralizadas para problemas de segurança etc.
    • É preciso considerar os trade-offs de cada escolha
  • O essencial é manter expectativas baixas e alto controle

Mudança na definição de um excelente engenheiro de software

  • A importância do aprendiz ao longo da vida (lifelong learner) continua inalterada
    • Mesmo com a evolução de frameworks, ferramentas e da indústria, continua sendo essencial estar aberto a aprender coisas novas
  • Mentalidade de crescimento (growth mindset)
    • Disposição para testar novos modelos, ferramentas e plataformas
    • Aprender com fracassos e entender restrições
  • Papel da liderança
    • Quando líderes mostram abertura ao aprendizado, criam segurança psicológica para a equipe
    • Addy escreve uma newsletter interna da equipe toda segunda-feira
      • Compartilha projetos pessoais, textos e ideias
      • Faz curadoria de atualizações importantes sobre IA e engenharia de IA
      • Outros executivos também acham útil
  • Curadoria na era da sobrecarga de informação
    • Nas redes sociais, parece que mudanças fundamentais acontecem a cada hora
    • Cabe aos líderes selecionar o que realmente importa e orientar a equipe
  • Manter a competência técnica
    • Ler e assistir continuamente papers, whitepapers, blogs, vídeos e aulas
    • Guiar a equipe sobre onde vale a pena investir tempo
  • Conexão com desenvolvimento de produto
    • Melhorias no fluxo de trabalho de programação também contribuem para melhorar a experiência do cliente do produto

Ferramentas favoritas e recomendações

  • Linguagem de programação favorita: JavaScript
    • Não tanto por preferência pessoal, mas pela abertura de permitir que qualquer pessoa construa e publique na web
    • Oferece uma sensação de liberdade sem gatekeepers
  • Ferramenta favorita no momento: Bolt
    • Ferramenta de scaffolding para vibe coding
    • Recentemente adicionou suporte a agentes personalizados (como Claude Code)
    • Resultados de alta qualidade e ótimo design
    • Recursos de automação de integrações com Supabase, provedores de autenticação etc.
    • Foco em eliminar atrito de configuração
  • Livros recomendados
    • "The Software Engineer's Guidebook"
    • "AI Engineering", de Chip Huyen — livro para aprender os aspectos fundamentais da engenharia de IA

Ainda não há comentários.

Ainda não há comentários.