Game Game Kata, feito em par com o GitHub Copilot, para aprimorar minhas habilidades de engenharia imediata e refletir sobre os padrões de comunicação a adotar ao combinar com uma ferramenta de codificação assistida por AA? ...
Tudo começou com o seguinte prompt:
Eu gostaria de fazer um kata de codificação com você, para praticar TDD juntos, refatorar e design de software. Vamos tentar seguir o TDD e seus passos de maneira bastante estritamente. Vamos codificar o Kata em Kotlin, usando uma configuração simples de projeto em Gradle. O kata é o seguinte: https://github.com/xpeppers/goose-game-kata. Começaremos com o primeiro recurso, com o ciclo TDD de adicionar um teste, fazer com que ele passe, refatore o código e repita. Trabalharemos em pequenos passos, iterativamente.
O primeiro recurso é o seguinte:
1. Adicione jogadores
Como jogador, quero me adicionar ao jogo para poder jogar.
Cenários:
- Adicione o jogador
If there is no participant
the user writes: "add player Pippo"
the system responds: "players: Pippo"
the user writes: "add player Pluto"
the system responds: "players: Pippo, Pluto"
- Jogador duplicado
If there is already a participant "Pippo"
the user writes: "add player Pippo"
the system responds: "Pippo: already existing player"
Você vai escrever o primeiro teste e depois darei feedback sobre sua qualidade. Se o teste for bom para mim, seguiremos para implementar o código do aplicativo que faremos com que o teste passe. Em seguida, procuraremos qualquer oportunidade de tornar o código mais claro, mais fácil de entender, refatorando -o.
Juntamente com o código, você pode encontrar os avisos que eu costumava orientar a sessão de programação de pares nos prompts
> mais antigo. Criei um novo arquivo de prompt para cada nova etapa que fizemos. Coloquei mais prompts no mesmo arquivo, separados por ---
linha, quando um único prompt não resultou em todos os testes que passavam.
Meu feedback sobre como executar este kata com copiloto
- Sinto que estou menos focado no código resultante, mais focado no prompt correto e se a resposta "funciona" ou não
- Percebi que às vezes me concentro mais na forma do prompt e se as compilações de código e os testes ainda passam, em vez da forma do código ... às vezes isso nos levava a um beco sem saída, e tivemos que reverter as mudanças e comece de novo.
- Não está claro o quão sensível o copiloto é o que é melhor fazer após a refatoração: refator à vontade? Quando faz sentido passar para o próximo teste?
- Freqüentemente, as "especificações" são inerentemente ambíguas (o que "o jogo rola os dados" significa?) => Diante dessa ambiguidade, é muito provável que a resposta do modelo não seja a "certa", a menos que reduzamos a ambiguidade no rápido (assumindo assim o papel dos "desambiguadores", de "cliente")
- Às vezes, as respostas do modelo me surpreendem (por exemplo, ele consegue entender bem o contexto e modificar o código para respeitar o estilo e a forma do código existente), outras vezes cometem erros que parecem "erros de distração" como nós humanos?
- A Copilot tem uma excelente janela de contexto, pode lembrar que as coisas diziam várias instruções antes.
- Quando refatora ou propõe alterações, não percebe que também precisa corrigir os testes ... quase sempre se concentra apenas no código do aplicativo?
- Quando o código precisa de refatoração preparatória para acomodar o próximo recurso (o clássico “Primeiro, facilitar a mudança e depois facilitar a mudança”), copilot luta:
- Não parece não conseguir enfrentar esse tipo de raciocínio (como em "Precisamos dar um passo atrás e revisar as coisas estrategicamente")
- Ele não consegue identificar cheiros "complexos" quando a lógica necessária para o próximo recurso está espalhada por várias classes, por isso precisamos dar um passo atrás antes de avançar.
- Mesmo se você disser para começar do zero, jogando fora todo o código produzido a partir do teste que permaneceu em barras vermelhas, muitas vezes simplesmente repete os mesmos etapas, mesmo que você diga "vamos tentar uma nova abordagem" ou "vamos fazer coisas em pequenos passos ”.
Veja também minhas reflexões aqui (italiano)