TRILHA 1

🧠 Fundamentos Karpathy

Os quatro princípios que transformam um LLM de "estagiário ansioso" em "engenheiro disciplinado". Cada módulo destrincha um princípio com exemplos práticos de prompts e diffs.

4
Módulos
26
Tópicos
~2h
Duração
Básico
Nível

Mapa da trilha

Conteúdo detalhado

1.1 ~30 min

🧠 Pensar Antes de Codar

LLMs escolhem uma interpretação em silêncio e seguem. Este módulo ensina a forçar raciocínio explícito antes de qualquer linha de código.

O que é:

O LLM lê uma instrução ambígua, escolhe uma interpretação na hora e sai codando sem avisar você.

Por que aprender:

É a origem da maioria dos retrabalhos: você descobre a suposição errada só quando o PR chega.

Conceitos-chave:

Ambiguidade silenciosa; custo do retrabalho; loop confiança-cego.

O que é:

Antes de qualquer código, listar as suposições adotadas para que o usuário possa corrigi-las.

Por que aprender:

Custa 30 segundos do usuário e evita refazer 30 minutos de código.

Conceitos-chave:

"Assumindo X, Y, Z"; checkpoint pré-implementação; reversibilidade barata.

O que é:

Em vez de escolher silenciosamente, listar 2-3 interpretações possíveis e pedir confirmação.

Por que aprender:

Devolve o controle ao usuário sem travar o fluxo. Faz a ambiguidade virar uma decisão consciente.

Conceitos-chave:

Branching de interpretação; decisão informada; antiprasse de "achismo".

O que é:

Se o usuário pede algo subótimo e há um caminho mais simples ou seguro, o LLM deve apontar.

Por que aprender:

Concordância automática gera dívida técnica silenciosa. O LLM é coautor, não digitador.

Conceitos-chave:

Pushback construtivo; tradeoff transparente; senioridade simulada.

O que é:

Quando algo não fecha, o LLM deve nomear o que não está claro e perguntar, em vez de "preencher os buracos".

Por que aprender:

Confusão escondida vira bug semanas depois. Confusão explícita vira esclarecimento em segundos.

Conceitos-chave:

Nomear a confusão; parada cooperativa; custo do "achei que era X".

O que é:

Apresentar prós e contras de cada caminho antes de implementar, em vez de só executar.

Por que aprender:

Decisões cegas amarram o futuro. Tradeoffs explícitos viram decisões reversíveis.

Conceitos-chave:

Custo-benefício; reversibilidade; opções vs imposição.

1.2~30 min

✂️ Simplicidade Primeiro

Código mínimo que resolve o problema. Nada especulativo. Combatendo a tendência natural do LLM à superengenharia.

O que é:

A tendência do LLM a entregar 1000 linhas quando 100 bastam, com abstrações, factories e camadas que ninguém pediu.

Por que aprender:

Código inchado tem mais superfície de bug, mais leitura e mais custo de manutenção. Sempre.

Conceitos-chave:

Volume vs valor; complexidade acidental vs essencial; "performance teatral".

O que é:

Não adicionar funcionalidades "por via das dúvidas" ou "para o futuro" se o usuário não pediu.

Por que aprender:

Especulação inflada vira código morto. 90% nunca é usado, mas todos pagam o custo.

Conceitos-chave:

YAGNI; escopo fechado; valor por linha entregue.

O que é:

Não criar funções, classes ou hooks abstraídos quando há apenas um caller. Inline é mais legível.

Por que aprender:

Abstração prematura é dívida disfarçada de elegância. Espere o terceiro uso real.

Conceitos-chave:

Rule of three; abstração prematura; legibilidade > "limpeza".

O que é:

Não envolver código em try/catch ou validações para cenários que nunca podem acontecer naquele contexto.

Por que aprender:

Tratar o impossível esconde bugs reais e enche o código de ruído defensivo.

Conceitos-chave:

Defensive coding excessivo; "fail loud"; trust the boundary.

O que é:

Antes de entregar, perguntar: um engenheiro sênior olharia esse código e diria "isto pode ser metade do tamanho"?

Por que aprender:

É o checkpoint mais barato contra superengenharia. 30 segundos de reflexão evita 3 horas de refactor.

Conceitos-chave:

Self-review; readability test; razão linha/intenção.

O que é:

Identificar quando o primeiro draft pode ser comprimido em uma fração do tamanho sem perder clareza.

Por que aprender:

Código menor tem menos bugs por construção. A segunda versão quase sempre é a boa.

Conceitos-chave:

Compressão por reescrita; segundo draft; eliminar intermediários.

1.3~30 min

🔪 Mudanças Cirúrgicas

Toque só no necessário. Cada linha alterada deve rastrear diretamente ao pedido. Fim do refactor drive-by.

O que é:

Mesmo que o LLM ache que pode "melhorar" código adjacente, não deve tocar. Foco é o pedido.

Por que aprender:

Mudanças não solicitadas inflam diffs, dificultam review e introduzem regressões fantasmas.

Conceitos-chave:

Scope creep; respeito ao diff; "no surprises".

O que é:

Seguir convenções do projeto (nomes, padrões, estilo) mesmo que o LLM preferisse de outro jeito.

Por que aprender:

Inconsistência estilística é dívida cognitiva. Código uniforme se lê em metade do tempo.

Conceitos-chave:

Style mimicry; convenção sobre opinião; integração silenciosa.

O que é:

Se o LLM encontra código não usado fora do escopo da tarefa, deve apenas avisar o usuário, não apagar.

Por que aprender:

"Não usado" pode ser usado por outro time, build flag ou ferramenta externa. Deletar = bomba-relógio.

Conceitos-chave:

Dead code aparente; consentimento explícito; janela de blast radius.

O que é:

Quando uma mudança deixa imports, variáveis ou funções sem uso, o LLM remove. Se o órfão é pré-existente, deixa.

Por que aprender:

Bagunça gerada pela própria mudança é responsabilidade dela. Bagunça herdada não.

Conceitos-chave:

Cleanup proporcional; ownership da bagunça; cargo de cada PR.

O que é:

Não "melhorar" comentários, espaçamento ou ordem de imports fora da área da mudança.

Por que aprender:

Mudanças cosméticas ofuscam mudanças reais no diff. O reviewer perde o sinal no ruído.

Conceitos-chave:

Diff signal-to-noise; mudança cosmética; respeito ao git blame.

O que é:

Antes de entregar o diff, conferir que cada linha mudada justifica-se diretamente pelo pedido do usuário.

Por que aprender:

É o critério mais simples para descartar mudanças que se infiltraram sem intenção.

Conceitos-chave:

Trace-back por linha; diff defensivo; auditoria pré-PR.

1.4~30 min

🎯 Execução Orientada a Meta

Transforme comandos imperativos em critérios verificáveis. Critérios fortes deixam o LLM iterar sozinho até bater a meta.

O que é:

A diferença entre "implementa validação" (imperativo) e "esses testes devem passar" (declarativo).

Por que aprender:

Declarativo dá ao LLM um critério de parada. Imperativo gera entrega sem certeza.

Conceitos-chave:

Critério de aceitação; fim explícito; meta-driven prompting.

O que é:

Pedir os testes antes da implementação. O LLM escreve teste, vê falhar, depois implementa até passar.

Por que aprender:

É a forma mais barata de garantir que o entregue resolve o que foi pedido.

Conceitos-chave:

Red-Green-Refactor; spec executável; verificação automática.

O que é:

Com critério verificável, o LLM pode rodar testes, ajustar, rodar de novo — sem intervenção a cada passo.

Por que aprender:

Karpathy: "LLMs são excepcionalmente bons em looping até bater uma meta específica."

Conceitos-chave:

Self-correction loop; agente autônomo; convergência por feedback.

O que é:

"Faz funcionar" é fraco. "Comando X retorna Y em menos de 200ms para input Z" é forte.

Por que aprender:

Critério fraco gera entrega ambígua. Critério forte permite verificação objetiva.

Conceitos-chave:

Definition of done; SMART criteria; mensuração binária.

O que é:

Para tarefas com múltiplos passos, cada passo tem um critério de "passou" antes de seguir adiante.

Por que aprender:

Sem checkpoints, erros se acumulam silenciosamente até o fim. Com checkpoints, falham cedo e barato.

Conceitos-chave:

Step-verify-step; fail-fast; controle granular.

O que é:

Para corrigir bug: primeiro escrever teste que reproduz, depois fazer passar. Garante que o bug não volta.

Por que aprender:

É a forma mais robusta de provar que o bug foi corrigido — e prevenir regressão futura.

Conceitos-chave:

Regression test; reprodução isolada; bug-driven test.

← Voltar para Início Começar Módulo 1.1 →