Unidade 3 / 12

Codificação e programação em pares com IA

Ganhos:

  • Capacidade de escrever funções, classes e módulos para IA com definições claras de entrada-saída e restrições
  • Capacidade de usar a IA como parceira de programação em pares e progredir passo a passo, em pequenos pedaços verificáveis
  • Capacidade de detectar erros lógicos e extremos compilando o código gerado pela IA e executando-o com pequenos exemplos

A programação em pares ocorre quando dois desenvolvedores trabalham no mesmo problema, com um escrevendo e o outro revisando. Codificar com IA é a versão digital dessa mesma relação: você define a direção, as restrições e os critérios de aceitação; AI produz rascunhos rápidos; Você verifica cada etapa compilando-a e testando-a. A maior armadilha aqui é dizer à IA “escreva-me este aplicativo do início ao fim” e aceitar cegamente um bloco de 200 linhas. Uma boa programação em pares ocorre em pequenos passos: cada passo deve ser compreensível, testável e reversível.

Nesta unidade você aprenderá como imprimir funções, classes e módulos com um contrato claro de entrada-saída; Como guiar a IA passo a passo; e veremos como capturar erros de lógica e casos extremos executando o código que ele produz com pequenos exemplos. O objetivo não é a velocidade, mas a velocidade verificada.

Conceitos: Contrato de entrada-saída: Uma definição clara de qual entrada uma função recebe e qual saída e comportamento de erro ela promete. Caso extremo: entrada que não é comum, mas pode realmente ocorrer (vazia, zero, negativa, muito grande, nula). Desenvolvimento incremental: Proceder com peças pequenas e funcionais e validar cada etapa.

Imprimindo código com contrato líquido

A base do código de qualidade é definir exatamente “o que você deseja” antes de iniciar o trabalho. Ao escrever uma função para IA, forneça cinco coisas: idioma e versão, tipos e significados de entrada, saída, condições de erro e restrições (desempenho, proibição de biblioteca externa, estilo). Isso evita que a IA adivinhe.

  1. Escreva o contrato. Entrada, saída, erro, restrição.
  2. Peça uma unidade pequena. Uma função com uma única responsabilidade; Não é um módulo enorme.
  3. Solicite um bloco de teste. Adicione alguns exemplos de execuções/testes ao lado do código.
  4. Compile e execute. Experimente com casos extremos, verifique a saída visualmente.
  5. Vá para a próxima etapa. Assim que uma peça for confirmada, desenvolva-a.

Prompt de função contratada: "Escreva uma função para TypeScript 5. Objetivo: calcular a quantidade total de itens em um carrinho de compras. Entrada: {preço: número, quantidade: número }[] matriz. Saída: número (total). Regras: lançar erro se a quantidade ou preço for negativo; retornar 0 para matriz vazia; arredondar o valor para 2 casas decimais para erro decimal. Não usar biblioteca externa. Adicione 5 casos de teste abaixo da função (normal, vazio, quantidade negativa, preço decimal, item único)."

Guiando a IA como um par

Um bom progresso na programação em pares é um diálogo e não um grande pedido. Primeiro, solicite o esqueleto e execute-o; em seguida, adicione um estado de borda; então conserte um bug. Essa abordagem mantém o código compreensível e coloca você no controle de cada etapa.

Prompt de progresso incremental: "Escreveremos um leitor que lê um arquivo CSV e converte as linhas em um objeto. Vamos PASSO A PASSO, passando para a próxima etapa sem que eu confirme cada etapa. Etapa 1: basta escrever o esqueleto que divide o arquivo em linhas e separa a linha do cabeçalho. Não adicione conversão de tipo ou tratamento de erros ainda. Seja breve, explique."

Explique e justifique o prompt do código: "Explique a função que você acabou de escrever, não linha por linha, mas decisão por decisão: qual decisão de design você tomou e por quê, qual caso extremo você tratou e como, quais casos você excluiu deliberadamente? Liste 3 suposições no código que não devo perder. "

Dica: não aceite o código gerado pela IA sem entendê-lo. “Explique isso para mim, que suposições você fez?” A pergunta revela erros ocultos e permite defender esse código, já que o código permanece de sua responsabilidade. Colocar em produção um código que você não entende é como enviar um contrato sem assiná-lo.

Alerta Fraco/Prompt Forte

FRACO:"Escreva uma função de classificação."(Resultado: qual linguagem, o que está sendo classificado, é estável, qual é a restrição de desempenho, código que é vago e provavelmente não atende ao requisito.)FORTE:"Para Java 17, escreva um método que classifica um objeto List<Employee> primeiro por departamento (em ordem alfabética), depois por salário (decrescente). NÃO SUBSTITUA a lista original, retorne a nova lista. Deixe o departamento nulo vir por último. Explique a complexidade do método em a linha de comentário. especifique adicionar um bloco de teste principal com 4 amostras."

Alerta poderoso; Inclui critério de classificação (dois níveis), regra de efeito colateral (substituindo o original), comportamento nulo e expectativa de teste. Sem estes detalhes, a IA produz uma solução plausível mas incorreta; por exemplo, pode corromper a lista original e isso levará a um erro silencioso em outro lugar.

Validação com casos extremos e pequenas amostras

O código que funciona no cenário feliz não é o código correto. Force conscientemente cada função produzida:

Tipo de caso extremo

entrada de amostra

comportamento esperado

entrada em branco

Matriz/string vazia

Não é um erro, resultado lógico vazio

Zero/negativo

0, -1

Comportamento definido e correto

ótimo valor

Milhões de registros

Controle de estouro/desempenho

nulo/indefinido

faltando espaço

Erro controlado ou padrão

Duplicado/incomum

ordem repetitiva e inversa

resultado correto

Mini-casos

Caso 1 — Erro de arredondamento silencioso. AI escreve uma função que coleta dinheiro com tipos decimais (float); 0,1 + 0,2 dá 0,30000000000000004. O erro é resolvido quando o engenheiro adiciona a regra “Arredonde para 2 dígitos e use centavos inteiros”. Uma regra de 3 linhas evita milhares de centavos de variação na reconciliação mensal.

Caso 2 — Armadilha de efeito colateral. A IA escreve um método que “classifica” uma lista, mas modifica a lista original no local. O comportamento inesperado ocorre porque outro módulo usa a mesma lista. Se a restrição "alterar original" estivesse no prompt, o erro nunca ocorreria; fica preso na revisão do código e evita 2 horas de depuração.

Caso 3 — Ganhos passo a passo. Um desenvolvedor imprime um módulo de importação de 150 linhas de uma só vez; Quando ele encontra um erro, ele não consegue descobrir de onde ele veio. Outro desenvolvedor divide o mesmo trabalho em 5 pequenos passos, testa cada passo em 2 minutos e detecta o erro imediatamente no 3º passo.

Erros comuns

  • Imprimindo grandes blocos em uma única solicitação. Nasce um código arriscado, difícil de entender e depurar.
  • Pedir um código sem dar um contrato. Se o erro de entrada-saída for ambíguo, a IA adivinhará e estará errada.
  • Apenas testando o cenário feliz. Se a entrada vazia, nula, negativa e grande não for tentada, o erro será deixado para a produção.
  • Aceitar sem entender. O código que você não divulga é uma dívida que você não pode defender.
  • Ignorando tipos sensíveis como efeitos colaterais e dinheiro/data. Dinheiro flutuante com história atemporal é uma fonte clássica de erro.

Em resumo

Escrever código com IA é uma programação disciplinada em pares: contrato claro, pequenas etapas, construção e teste em cada etapa. Fornecer o quarteto entrada-saída-erro-restrição desde o início determina a qualidade do código. Explicar o código que ele produz e forçá-lo com casos extremos traz à tona os erros ocultos no cenário feliz. A fonte da velocidade não é a aceitação cega; é um rascunho rápido e uma verificação rápida.

Tarefa de aplicativo

Escolha uma função pequena, mas real (por exemplo, total do carrinho, diferença de data, análise de texto). Imprimir usando o prompt da função contratada; Adicione pelo menos 5 cenários de teste próximos a ele. Execute o código e tente 5 casos extremos conscientemente, usando a tabela como guia. Encontre um bug em pelo menos um caso extremo (se não, projete uma nova entrada para forçar a função), corrija-o com IA e verifique testando novamente se a correção funcionou.

lista de verificação

  • [] Escrevi um contrato que inclui entrada, saída, erros e restrições.
  • [] Gerei o código em pequenos passos em vez de um grande bloco.
  • [] Adicionei um bloco de execução de teste/amostra próximo ao código.
  • [] Eu testei conscientemente pelo menos 5 casos extremos.
  • [] Expliquei o código para a IA e revisei suas suposições.
  • [] Corrigi o erro encontrado e confirmei a correção testando novamente.