Trabalho

Prompt para programar: como pedir código que você consegue revisar

Stack, contrato de entrada e saída, caso de borda e teste. O que colocar no prompt para não receber cem linhas que você não sabe conferir.

Prompt para programar: como pedir código que você consegue revisar

Pedir código para IA é fácil. O difícil é receber código que você consegue conferir. Cem linhas que rodam e que você não entende são um problema que vai aparecer daqui a três semanas, quando quebrar.

O que faz diferença no prompt é dizer onde esse código vai morar e o que ele precisa aguentar.

O contexto que falta em quase todo pedido

Stack: {{linguagem e versão}}, {{framework e versão}}
Onde vai morar: {{arquivo ou camada, e o que já existe perto}}
Padrão do projeto: {{ex: sem classe, função pura, erro por exceção}}
Entrada: {{formato exato, com um exemplo real}}
Saída: {{formato exato, com um exemplo real}}
O que já tentei: {{o que não funcionou e o erro que deu}}

O campo de entrada e saída com exemplo real vale mais que qualquer descrição. Ele elimina a rodada em que você descobre que a função devolve um formato que não serve.

Peça o contrato antes do código

Em qualquer coisa que passe de vinte linhas, duas rodadas ganham de uma.

Antes de escrever código: descreva a assinatura da função, o que entra, o que sai, e os casos de borda que ela precisa tratar. Liste as decisões que você teria que tomar e onde tem mais de um caminho possível.

Não escreva a implementação ainda.

Você lê dez linhas, corrige o que estiver errado e só então pede o código. Corrigir o contrato custa uma frase, corrigir a implementação custa a implementação inteira.

Casos de borda, escritos por você

A IA cobre os casos de borda que costumam aparecer. Ela não cobre os do seu domínio, porque não os conhece.

Trate estes casos:
- lista vazia
- valor nulo em {{campo}}
- data no futuro
- duas linhas com o mesmo {{identificador}}
- número negativo em {{campo}}

Para cada um, diga o que a função faz: retorna vazio, lança erro ou ignora a linha.

Escolher entre retornar vazio e lançar erro é decisão de projeto, não de quem escreve a função. Se você não decidir, a IA decide por você.

Peça o teste junto, e leia o teste primeiro

Escreva a função e os testes.
Os testes devem cobrir: o caminho feliz, cada caso de borda listado acima e um caso que deve falhar.
Nomeie cada teste com a frase do que ele garante.

Ler o teste antes do código é o atalho: se o nome do teste descreve o comportamento que você quer, o código provavelmente está certo. Se o teste testa o que o código faz, e não o que deveria fazer, você acabou de encontrar o problema.

Revisão de código que você não escreveu

Revise o código abaixo. Responda em três blocos:

1. O que ele faz, em 3 linhas, sem repetir o código.
2. Onde ele quebra: entrada que causa erro, condição não tratada, suposição escondida.
3. O que eu preciso saber antes de colocar isso em produção.

Não reescreva o código. Não sugira melhoria de estilo.

---
{{codigo}}

O bloco 1 é o mais importante e o que ninguém pede. Se a explicação do que o código faz não bater com o que você queria, o resto não interessa.

Depurar

Erro: {{mensagem completa, com a pilha}}
O que eu esperava: {{comportamento}}
O que aconteceu: {{comportamento}}
O que muda entre funcionar e não funcionar: {{entrada, ambiente, versão}}

Liste 3 causas possíveis, da mais provável para a menos, e diga como eu testo cada uma em menos de um minuto.

Não me dê o código corrigido ainda.

Pedir hipóteses testáveis em vez de correção direta evita o ciclo em que você aplica um conserto, o erro muda de lugar e você perde a linha do que estava investigando.

A regra que vale para tudo

Não aceite código que você não conseguiria explicar para outra pessoa. Se não conseguir, peça assim:

Explique a linha {{n}}. Por que ela precisa existir e o que quebra se eu tirar.

Leia também