Para conseguir uma explicação útil de um código com IA, diga quanto você já sabe, peça a explicação linha por linha e peça um rastreamento: uma tabela dos valores que cada variável guarda enquanto o código roda. Um simples "explique este código" traz um resumo escrito para um leitor médio imaginário, que costuma ser básico demais ou rápido demais para você.
Linha por linha, com um rastreamento dos valores
As duas abas perguntam sobre a mesma função curta. Compare o que cada resposta permite conferir.
def running_max(nums):
result = []
best = None
for n in nums:
if best is None or n > best:
best = n
result.append(best)
return result
print(running_max([3, 1, 4, 1, 5]))Esta função calcula o máximo acumulado de uma lista. Ela percorre os números, guarda em best o maior valor visto até ali e acrescenta esse valor a result em cada passo. A verificação best is None trata o primeiro elemento. A chamada imprime [3, 3, 4, 4, 5].
A função roda em tempo O(n), já que visita cada elemento uma vez.
A primeira resposta é correta, e só ajuda se você já sabe o que é um máximo acumulado. Ela ainda acrescenta uma nota sobre complexidade de tempo que ninguém pediu, o tipo de extra que aparece quando o modelo não sabe quem está lendo. A segunda resposta liga cada frase a uma linha que você pode apontar, e a tabela torna concreto o que o resumo só menciona de passagem: result.append(best) roda em toda volta, incluindo as voltas em que best não muda. É por isso que o 3 aparece duas vezes, e você vê isso na linha 2 em vez de deduzir de "em cada passo".
Uma tabela de rastreamento também confere a própria explicação. Você pode verificar cada linha rodando o código com um print(n, best, result) dentro do loop. Se uma linha discordar da saída real, a explicação está errada em algum ponto, e agora você sabe onde.
Explicado no seu nível
A linha mais útil de um prompt de explicação é o que você já sabe. Ela diz ao modelo quais linhas pular e em quais ir mais devagar. Uma frase de papel também pode ajudar ("Você é um tutor para pessoas no primeiro mês de programação"), mas funciona pelo mesmo mecanismo: diz ao modelo quem é o leitor. Prompt de papel mostra o que um papel muda e o que não muda.
Este bloco é uma versão reutilizável. Mude o nível, a parte que confunde ou o código, e a explicação muda junto.
text = "the cat and the hat"
counts = {}
for word in text.split():
counts[word] = counts.get(word, 0) + 1
top = sorted(counts.items(), key=lambda kv: kv[1], reverse=True)[:2]
print(top)O loop conta cada palavra: counts termina como {'the': 2, 'cat': 1, 'and': 1, 'hat': 1}.
Agora as duas últimas linhas, de dentro para fora:
counts.items()dá os pares('the', 2),('cat', 1),('and', 1),('hat', 1).lambda kv: kv[1]é uma funçãozinha sem nome. Ela recebe um par e retorna o segundo item, a contagem. Para('the', 2), retorna2.sorted(..., key=...)ordena os pares pelo que essa função retorna, ou seja, pela contagem.reverse=Truecoloca o maior primeiro. Palavras com a mesma contagem mantêm a ordem original.[:2]fica com os dois primeiros pares.
Então top é [('the', 2), ('cat', 1)], e é isso que é impresso.
"Palavras com a mesma contagem mantêm a ordem original" é o detalhe que uma explicação rápida deixa de fora, e é por isso que cat fica com o segundo lugar, e não and ou hat. O sorted do Python é estável, e reverse=True mantém essa estabilidade. Você não pensaria em perguntar isso, e pedir "o valor que cada peça produz para esta entrada" foi o que o trouxe à tona.
Pergunte sobre uma parte, não sobre o arquivo inteiro
Colar um arquivo de 500 linhas e perguntar "o que isto faz" traz um passeio pela estrutura do arquivo. Quando você está travado em uma função, cole essa função e as linhas que a chamam e pergunte sobre ela diretamente: "Por que esta função retorna cedo quando a lista está vazia?" ou "O que o yield faz na linha 12, e o que mudaria se fosse return?" Uma pergunta estreita traz uma resposta sobre o seu código; uma pergunta ampla traz uma resposta sobre um código parecido com o seu.
Para uma base de código grande e desconhecida, inverta: peça primeiro um mapa ("liste os módulos principais e a responsabilidade de cada um, uma linha por módulo") e depois pergunte sobre o módulo de que você precisa. Isso é um pequeno encadeamento de prompts, e cada etapa mantém a resposta do modelo curta o bastante para ser conferida.
Explicado a partir de uma linguagem que você conhece
Um código em uma linguagem desconhecida fica mais fácil de ler quando a explicação se ancora em uma que você conhece. Diga isso no prompt: "Eu sei Python. Explique esta função em Go e aponte cada lugar em que ela se comporta diferente do que um programador Python esperaria." As diferenças são onde moram os mal-entendidos: divisão inteira, valores zero em vez de None, um slice que compartilha memória com o array de onde veio. Uma explicação simples do código em Go descreveria essas linhas corretamente e nunca diria que os seus instintos sobre elas estão errados.
Confira se você entendeu
Uma explicação que você lê e com a qual concorda ainda pode deixar você sem conseguir escrever o código sozinho. Dois prompts fecham essa lacuna:
- Preveja primeiro. Antes de rodar o código ou pedir uma explicação, anote o que você acha que ele imprime. Depois peça ao modelo que explique só as linhas em que a sua previsão errou.
- Explique de volta. Escreva a sua própria explicação e peça ao modelo que aponte o que estiver errado ou faltando, sem reescrevê-la.
def running_max(nums):
result = []
best = None
for n in nums:
if best is None or n > best:
best = n
result.append(best)
return result
Me faça 3 perguntas que confiram se eu realmente entendi, uma por vez. Inclua uma pergunta em que eu precise prever a saída para uma entrada nova. Espere a minha resposta antes de fazer a próxima pergunta e diga se acertei e por quê.Pergunta 1 de 3: o que running_max([2, 7, 5, 9]) retorna? Descubra antes de rodar.
A mesma abordagem funciona quando um programa está se comportando mal, mas aí você quer a causa, não uma aula: veja prompts para depuração. Quando o código à sua frente foi escrito por uma IA, uma explicação linha por linha é um jeito rápido de revisá-lo antes de ficar com ele; prompts para escrever código lista as outras verificações a fazer.
Perguntas frequentes
Como peço ao ChatGPT ou ao Claude que explique um código?
Cole o código e diga três coisas: o que você já sabe, qual parte confunde você e em que forma você quer a explicação. "Explique cada linha em uma frase e depois mostre uma tabela das variáveis depois de cada volta do loop" traz uma resposta muito mais útil do que "explique este código".
O que é uma tabela de rastreamento?
Uma tabela de rastreamento (o famoso teste de mesa) acompanha um programa enquanto ele roda: uma linha por passo (muitas vezes uma volta do loop), uma coluna por variável e o valor de cada variável naquele ponto. Pedir uma transforma uma descrição abstrata em valores concretos que você pode conferir com o código. É um registro escrito do que um depurador mostra enquanto você avança pelo programa.
A IA consegue explicar código em uma linguagem que eu não conheço?
Consegue, e é uma das coisas mais úteis para pedir. Diga uma linguagem que você conhece e peça ao modelo que compare: "Eu sei Python; explique este código em Rust e aponte onde ele se comporta diferente do Python." Confira as afirmações sobre o comportamento da linguagem rodando exemplos pequenos, porque as explicações podem errar detalhes com toda a confiança.
Usar IA para explicar código atrapalha o aprendizado?
Depende do que você faz em seguida. Ler uma explicação e seguir em frente ensina pouco. Prever a saída antes de rodar o código, pedir ao modelo que faça um quiz com você ou explicar o código de volta e perguntar o que você errou fazem você pensar, e é aí que o aprendizado acontece.