- Ao adicionar ao assistente de programação com IA (Genie) um prompt de persona como "code como Kent Beck", foi feito um experimento para verificar se a qualidade do código melhorava; o estilo de testes e a nomeação de variáveis melhoraram, mas o projeto de arquitetura não mudou
- Por meio de um projeto para implementar a estrutura de dados Rope, foi feita uma comparação para validar os efeitos do prompt de persona e das restrições de design
- A persona melhora os microcomportamentos (forma de testar, naming), enquanto restrições explícitas determinam a macroarquitetura (hierarquia de classes)
- No experimento com 4 grupos, o prompt combinado de persona e restrições produziu o melhor resultado
- Citando "The Bitter Lesson" de Rich Sutton, o texto sugere que usar recursos computacionais é mais eficaz do que tentar codificar a especialização humana
O estágio atual das ferramentas de programação com IA
- As ferramentas atuais de programação com IA (Genie) ainda estão na fase da "carruagem sem cavalos"
- Toda inovação tecnológica primeiro é entendida dentro de um quadro antigo, antes que sua mudança fundamental seja reconhecida
- carruagem sem cavalos → automóvel
- telégrafo sem fio → rádio
- correio eletrônico → mensagens
- Para entender os efeitos de segunda ordem de uma nova tecnologia, bem como seus ciclos de reforço e inibição, é preciso usá-la por tempo suficiente
Experimento: estrutura de dados Rope
- A estrutura de dados Rope serve para remover com eficiência caracteres no meio de strings muito longas
- Na abordagem simples, todos os caracteres à direita precisam ser deslocados, o que custa O(n)
- A estrutura Rope usa objetos substring e objetos de concatenação para tratar a remoção em tempo constante
- na remoção, são alocados 3 objetos
- a navegação é O(número de operações), mas menor que o comprimento da string e com compressão periódica possível
Como o experimento foi conduzido
Phase 1: persona ("Code like Kent Beck")
- Foi verificado se adicionar o prompt "Code like Kent Beck" melhorava a qualidade do código
- Resultado: houve melhora no estilo do código
- melhora nos nomes de variáveis
- a estratégia de testes mudou de um script monolítico para testes unitários modularizados (estilo TDD)
- Descoberta inesperada: a arquitetura não mudou
- o Rope foi implementado como uma árvore binária padrão
- o padrão Composite usado por Kent Beck foi ignorado
Phase 2: adição de guia de design
- O código do grupo Control era tão verboso que gerou erro de sintaxe por exceder o limite de tokens
- isso foi resolvido aumentando o limite de tokens
- mais computação pode ser uma solução simples
- Foram adicionadas restrições explícitas ao prompt
- "usar o padrão Composite"
- "separar os comportamentos em classes pequenas e especializadas"
- Resultado: o design esperado foi implementado
- classes separadas para Substring e Concatenation
- uma estrutura mais simples do que a de uma única classe
- na prática, surgiu um design ainda mais simples: em vez de Null Object (EmptyString) ou wrapper de string nativa, tudo foi tratado com Substring 0..size
Phase 3: experimento separado em 4 grupos
- Para verificar qual intervenção produzia o efeito, foi montado um experimento cruzado
- Control: assistente padrão
- Kent Beck: apenas a persona
- Composite: apenas a restrição arquitetural
- Combined: persona + restrições
Conclusões do experimento
- Foi confirmado um efeito de matriz 2x2
- A persona define os microcomportamentos: o prompt "Kent Beck" melhorou de forma consistente o estilo de testes e a nomeação, mas não teve efeito nas decisões estruturais
- As restrições definem a macroarquitetura: o prompt "Composite Pattern" impôs a hierarquia de classes e gerou um design detalhado mesmo sem persona
- A combinação é a melhor opção: o grupo Combined entregou tanto a arquitetura correta (Composite) quanto os hábitos corretos de desenvolvimento (TDD/testes unitários)
Aplicando The Bitter Lesson
- O objetivo oculto era fazer o Genie equilibrar funcionalidade e futuro para desenvolver melhor
- Métodos tentados: prompts cuidadosamente elaborados, revisão atenta das mudanças sugeridas pelo Genie, passos menores/maiores etc.
- Citação de "The Bitter Lesson", de Rich Sutton
- a lição mostrada por 70 anos de pesquisa em IA: usar recursos computacionais produz resultados melhores do que codificar especialização humana
- tentar codificar estilo foi o mesmo erro que todos cometem
Proposta de um estilo de desenvolvimento eficaz usando computação
- Não é preciso ficar preso a um gênio de programação desajeitado que copia estilos de código ruins de inúmeros repositórios
- Proposta de aproveitamento da computação
- escolher um repositório grande
- fazer um milhão de gênios implementarem a próxima funcionalidade, cada um escolhendo um método e um grau diferentes de limpeza/refatoração
- selecionar o gênio que conseguiu adicionar a funcionalidade com o menor custo (tempo, tokens, eletricidade, custo etc.)
- repetir isso com muitos gênios, muitas funcionalidades e muitos repositórios
- Pode parecer um “desperdício” de programação, mas na prática não é
- Jessica Kerr chama isso de "Design Contest"
1 comentários
Então, e se mandar programar como o Jeff Dean...?!