~/VibeHandbook
PDF grátis

Capítulo 06 · 03

O ciclo: intenção → gerar → revisar → refinar

Tudo neste livro volta a um único ciclo. Internalize-o.

O ciclo gira até que o resultado atinja o seu padrão — e a revisão é o portão pelo qual ele precisa passar toda vez:

   ┌──────────────────────────────────────────────┐
   │                                               │
   ▼                                               │
┌────────┐    ┌──────────┐    ┌────────┐    ┌──────────┐
│ INTENT │ ─▶ │ GENERATE │ ─▶ │ REVIEW │ ─▶ │  REFINE  │
│ (spec) │    │  (AI)    │    │ (you)  │    │  (you)   │
└────────┘    └──────────┘    └───┬────┘    └──────────┘
                                  │
                            pass? ▼
                            ┌──────────┐
                            │   SHIP   │
                            └──────────┘
  1. Intenção. Declare o que você quer e as restrições que importam — entradas, saídas, casos de borda, a stack, o estilo. Intenção vaga gera código vago.
  2. Gerar. Deixe o modelo escrever a implementação. Não fique guiando a sintaxe passo a passo; descreva o comportamento.
  3. Revisar. Leia o que voltou. Ele realmente faz o que deveria? Ele trata a lista vazia, o nulo, a chamada de rede que falha? É a versão mais simples que funciona?
  4. Refinar. Aponte o que está errado, dê uma correção concreta e gere novamente. Repita até atingir o seu padrão.

A maioria dos iniciantes pula o passo 3. Eles geram, roda, e seguem em frente. Aí quebra em produção no caso que nunca foi descrito. O passo de revisão é onde a engenharia acontece de fato.

Veja como é um bom primeiro nesse ciclo:

Write a TypeScript function `parseDuration(input: string): number`
that converts strings like "1h30m", "45s", "2d" into total seconds.

Requirements:
- Support units: d (days), h (hours), m (minutes), s (seconds).
- Multiple units can combine: "1h30m" = 5400.
- Reject invalid input (empty, unknown units, negative) by throwing
  an Error with a clear message.
- No external libraries. Include 5 unit tests covering the edge cases.

Show the function and tests only.

Repare na estrutura: uma assinatura precisa, regras explícitas, os casos de borda apontados, as restrições declaradas e um pedido de testes. Você não está torcendo para que o modelo acerte no chute — você está eliminando a ambiguidade que produz chutes ruins.

O passo de refinar é uma habilidade tão importante quanto o primeiro prompt. Feedback vago gera correções vagas. Compare estas duas correções:

Bad:  "this is wrong, fix it"

Good: "parseDuration('1h30m') returns 90 instead of 5400 — you're
       summing the numbers but ignoring the unit multipliers. Multiply
       each value by its unit's seconds (d=86400, h=3600, m=60, s=1)
       before summing. Also add a test for the combined case '2d3h'."

A boa versão nomeia o sintoma, a causa e a correção. Você está revisando como faria com o de um colega — e quanto mais preciso for o seu apontamento, menos rodadas você gasta. Cada ciclo deve convergir. Se você se pegar girando em círculos, esse é um sinal de que sua intenção estava subespecificada; pare de gerar de novo e reescreva a especificação em vez disso.

Quer offline?

Baixe o livro inteiro em PDF ou EPUB — grátis.