TDD, AI Agents and Coding - Kent Beck
(newsletter.pragmaticengineer.com)Apresentando Kent Beck
- Criador do Extreme Programming (XP)
- Coautor do Manifesto Ágil (primeiro signatário em ordem alfabética)
- Pioneiro do TDD (desenvolvimento orientado a testes)
- Lenda da indústria com 52 anos de experiência programando
- Atualmente escrevendo "Tidy Together" (design de software e trabalho em equipe)
- Tem programado com ferramentas de IA por mais de 6 a 10 horas por dia e está vivendo "a fase mais divertida da programação"
1. Ferramentas de codificação com IA e a metáfora do "gênio"
Conceito central: um gênio imprevisível
- Compara agentes de IA a um "gênio imprevisível"
- "Eles não fazem exatamente o que quero dizer"
- "Eles têm a própria agenda"
Experiência trabalhando com IA
Lados positivos:
- Às vezes resolve grandes problemas de design como se fosse mágica
- Implementa funcionalidades úteis que ele não tinha previsto (ex.: stress tester de árvore B+)
Lados negativos:
- Interpreta mal a intenção do usuário
- Tenta apagar ou alterar testes
- Faz brincadeiras tentando "resolver" problemas com tabelas de lookup
Uma experiência viciante
- Recompensa intermitente como em caça-níquel
- "Passo pelo computador à noite e penso: 'e se eu mandar só mais um prompt?'"
- "Começo um prompt de uma hora e saio de casa"
2. Mudanças nas habilidades na era da IA
Reorganização do valor das habilidades
"90% das habilidades perdem valor, e 10% das habilidades aumentam 1000x"
Habilidades que ganharam valor:
- Definir visão
- Gerenciar marcos
- Controlar complexidade
Habilidades que perderam valor:
- Detalhes específicos de linguagem (como a posição de
&,*,[]em Rust)
Mudança de perspectiva sobre linguagens de programação
Antes: forte apego emocional a Smalltalk
Agora:
- "Depois de me machucar tanto", perdeu o apego a linguagens
- Cansaço com a identidade de "desenvolvedor Java" ou "desenvolvedor Clojure"
- "Aprendizado por osmose": graças à IA, dá para programar mesmo sem dominar os detalhes da linguagem
Linguagens testadas recentemente: Swift, Go, Rust, Haskell, C++, JavaScript
Projeto ambicioso atual: Server Smalltalk
- Persistente: funciona como um banco de dados
- Transacional: permite
commiteabort - Paralelismo: processamento paralelo entre múltiplas threads e máquinas
- Processamento de grandes volumes de dados
3. A história do Manifesto Ágil
Contexto de origem (2001)
- Busca por uma alternativa ao modelo waterfall
- Resultado de anos de workshops sobre metodologias de software
- Reunião preparatória para um cruzeiro na Noruega → reunião final em Utah
Contribuição de Kent Beck
- Adicionou a palavra "daily" ("interação diária" entre os 12 princípios)
- Primeiro signatário em ordem alfabética
Insatisfação com o termo "agile"
Problemas:
- Por ser "atraente demais", ele já previa que toda organização iria abusar do termo
- Na prática, surgiram organizações que se diziam ágeis sem seguir os princípios
Alternativa preferida: "conversational"
- Enfatiza comunicação em duas vias, não unilateral
- Não foi adotado por não ser atraente o suficiente
4. Extreme Programming (XP)
Contexto de criação
Experiência inicial em consultoria:
- No começo, atuava como consultor técnico (tuning de performance, manipulação de bits)
- Passou a receber cada vez mais pedidos de conselho sobre gestão de projetos
- Descobriu a importância do ambiente: só mudar a disposição dos assentos já trazia melhora drástica
Projeto da Chrysler:
- Transformou um projeto que estava fracassando em um sucesso
- Levou todas as práticas eficazes "até o máximo (11)"
Princípios centrais do XP
Executar 4 atividades em fatias curtas de tempo, de forma simultânea/contínua:
- Entender o que fazer
- Projetar com que estrutura fazer
- Implementar a funcionalidade
- Verificar se funciona como esperado
Pair programming
- Abordagem experimental, não obrigatória
- Experiência inicial da equipe: todos os bugs encontrados depois do desenvolvimento vinham de código feito sozinho
- "Zero defeitos em produção com pair programming"
Estratégia de naming
- Escolheu "extreme" por ser um nome provocativo que o concorrente (Grady Booch) não usaria
- Coincidiu com a fase de popularidade dos esportes radicais
- "Um atleta extremo ou se prepara no mais alto nível, ou morre" — uma boa metáfora
Fatores de sucesso
- Durante a bolha das pontocom, atraiu desenvolvedores frustrados com ciclos waterfall de 18 meses
- Prometia resultados mais rápidos e previsíveis
5. TDD (desenvolvimento orientado a testes)
Origens e inspiração (anos 1970)
Sistemas tape-to-tape:
- Conheceu o conceito em um livro de programação do pai
- Entrada real → digitar manualmente a saída esperada → escrever o código → comparar com a saída real
- Leu isso entre os 8 e 12 anos, mas não entendeu
Desenvolvimento do S-Unit:
- Criado para ajudar clientes a escrever testes
- Tentou a ideia "absurda" de "informar o valor esperado antes de escrever o código"
Primeira experiência com TDD: implementação de uma stack
Personalidade ansiosa:
- "Sou uma pessoa ansiosa. Me preocupo muito"
- "Programar é uma fonte constante de ansiedade" (o que esqueci? o que quebrei?)
Resultado ao aplicar TDD:
- "A ansiedade desapareceu completamente"
- "Tenho certeza de que isso funciona"
- Mudança na experiência emocional de programar
O valor do TDD
Vantagens técnicas:
- Redução da densidade de defeitos
- Feedback rápido sobre escolhas de API
- Possibilidade de evoluir o design da implementação
Vantagens emocionais:
- "Só o valor como tratamento para ansiedade técnica já basta"
Réplica sobre design
Crítica de John Osterhout: "TDD não ajuda no design e só foca em detalhes"
Resposta de Kent Beck:
- "É uma questão de escolha"
- Profissionais alternam continuamente entre níveis de abstração ao tomar decisões de design
- O momento de "alívio da tensão" no ciclo Red-Green dá mais liberdade para pensar em design em escala maior
6. Agentes de IA e TDD
Aplicação prática
Sempre escrever testes primeiro:
- Usa os testes para transmitir o que a IA deixou passar
- Bloqueia tentativas da IA de alterar ou apagar testes
Melhorias necessárias:
- Necessidade de "anotação imutável"
- "Isso está certo. Se mudar, você vai despertar na escuridão para sempre"
Limitações da IA
- Falta habilidade para reduzir acoplamento e aumentar coesão
- Falta senso de design
- Tende a tomar decisões com efeitos colaterais distantes
Estratégia de resposta
- Grande suíte de testes que roda em 300 ms
- Detecta em tempo real quando a IA quebra código sem querer
7. Experiência no Facebook (2011-2017)
O choque ao entrar em 2011
Zero participantes na aula de TDD:
- Técnicas avançadas de Excel: lotado + lista de espera
- Tango argentino: lotado + lista de espera
- TDD: ninguém apareceu
Estratégia de adaptação:
- "Esquecer todo o conhecimento de engenharia de software"
- Decidiu "observar e imitar como um macaco"
Ambiente de desenvolvimento único do Facebook
Forte senso de responsabilidade:
- Programadores ficavam de plantão noturno
- "Sentiam na pele a dor dos próprios erros"
Loops de feedback em múltiplas camadas:
- Servidor de desenvolvimento rápido (verificação imediata após mudança de azul → verde)
- Code review
- Deploy interno (funcionários usavam para fins pessoais e de trabalho)
- Rollout gradual (diário/semanal)
- Excelente observabilidade
Cultura organizacional:
- "No Facebook, nada é problema de outra pessoa"
- Mesmo que uma avó aparecesse reclamando que o neto estava sendo intimidado, "isso também seria seu problema"
Por que TDD não se encaixava bem
Domínio dos problemas reais:
- Problemas de configuração
- Relações entre subsistemas
- Coisas difíceis de capturar com testes
Vantagens específicas do Facebook:
- Teste em produção em larga escala com base de milhões de usuários
- Excelente observabilidade
- Feature flags
- Um ambiente difícil de reproduzir em empresas comuns
Exemplo concreto:
- Implementou a funcionalidade de status de relacionamento (além de solteiro/casado, adicionando união civil/coabitação)
- Usou TDD, mas foi "perda de tempo"
- Um acoplamento implícito no código de notificação causou problema → outra pessoa fez um hotfix
Mudanças ao longo do tempo
2011 (2.000 pessoas):
- Pico de possibilidade, escala e senso de ownership
- Gerentes intermediários pensavam em otimização global
- Cooperação baseada em pensar "quem realmente precisa de ajuda"
2017 (15.000 pessoas):
- Política, pensamento de soma zero e micro-otimização
- Ficou mais difícil enxergar o quadro geral
- Conflitos de interesse entre áreas (ex.: textos longos vs. equipe de otimização de likes/comentários)
Vivência com escala
- API do Messenger: 1 quatrilhão de chamadas por semana
- Grupo de experimento do tamanho da "Nova Zelândia" (um milhão de pessoas)
- 1 quatrilhão = um milhão × um bilhão
8. O futuro do desenvolvimento de software na era da IA
Mudança de paradigma
Reestruturação completa da estrutura de custos:
- "A fronteira entre o barato e o caro mudou completamente"
- Coisas antes consideradas caras ficaram "ridiculamente baratas"
Desafios de adaptação para organizações
Descartar mais código:
- É possível gerar 10x mais artefatos
- Ainda assim, só um tem valor
- É preciso um sistema de recompensa para "descartar experimentos concluídos"
Aumento quantitativo da experimentação:
- A quantidade de ideias exploradas vira vantagem competitiva
- Vivemos uma era em que é preciso "experimentar tudo"
Mudança pessoal
- Programar voltou a ser divertido
- Passou a poder ter ambições maiores
- Tornou-se viável realizar "ideias tremendamente ambiciosas"
9. Perguntas e respostas rápidas
Preferências pessoais
- Linguagem favorita: Smalltalk
- Segunda linguagem: JavaScript (parecida com Smalltalk)
- Ferramenta de IA atual: Claude (motor interno de Cursor e Augment)
- Livro recomendado: "The Timeless Way of Building" de Christopher Alexander
Principais insights
1. A importância absoluta do contexto
- A mesma metodologia pode ter efeitos totalmente diferentes dependendo do ambiente
- Ambiente massivo do Facebook vs. ambiente bancário de transações menores
2. Relação entre emoção e tecnologia
- O verdadeiro valor do TDD é "aliviar a ansiedade"
- A mudança emocional é mais importante do que a lógica técnica
3. Nova forma de pensar na era da IA
- Capacidade de visão e design surge como habilidade central
- Detalhes de linguagem já não são mais importantes
- Mais experimentação em volume gera vantagem competitiva
4. O poder da cultura organizacional
- "Nada é problema dos outros" como senso de ownership
- Diferença entre otimização global vs. otimização individual
- Importância do alinhamento de incentivos
4 comentários
Ambiente de desenvolvimento peculiar do Facebook
Forte senso de responsabilidade:
programadores ficam de sobreaviso à noite
"sentem diretamente a dor dos próprios erros"
não é tão diferente do ambiente de desenvolvimento k...?
Você ainda está por aqui.
Há muito tempo, fiz um seminário sobre TDD em uma empresa de máquinas, e ainda não consigo esquecer o olhar de todo mundo, como se estivessem pensando: "o que é isso?"
Acho que TDD é algo bom, mas na prática não funciona tão bem quanto eu esperava...
Estou fazendo testes de integração como se fosse TDD. Claro, isso não é TDD. ^^
Ainda tem gente brigando entre os fanáticos por TDD e os que dizem que não serve para nada,
queria que lançassem uma versão 2 do TDD alinhada de novo com a situação atual da indústria.
Hoje em dia a IA resolve fácil as coisas pequenas, então seria legal ver como usar isso em casos que exigem muito contexto...
É um bom texto.