Dev.to WebDev 🛠 Dev 👁 0 📖 5 min read

Estamos treinando nossa própria substituição (e ninguém tem um plano B)

Semana passada passei três horas debugando um bug que o Copilot gerou. Não foi a primeira vez. E provavelmente não será a última. O que me fez pensar: estamos mesmo construindo ferramentas para nos substituir, ou apenas

Semana passada passei três horas debugando um bug que o Copilot gerou. Não foi a primeira vez. E provavelmente não será a última. O que me fez pensar: estamos mesmo construindo ferramentas para nos substituir, ou apenas mudando o tipo de problema que resolvemos?

A promessa que não chegou

Lembra de 2022? GPT-3 saindo, todo mundo dizendo que programadores iam virar "prompt engineers" e que código ia sumir. Três anos depois, continuo escrevendo código. Muito código. Só que agora também corrijo o que a IA gera.

A verdade é que IA não está nos substituindo — está redistribuindo nosso tempo. Menos tempo escrevendo boilerplate, mais tempo fazendo code review de máquina. Menos tempo no Stack Overflow, mais tempo refinando prompts. O trabalho mudou, não sumiu.

O que realmente acontece no código

Vou te mostrar um exemplo real. Pedi para o GPT-4 gerar um hook React para debounce de busca:

// O que o GPT-4 gerou
function useDebounce(value, delay) {
  const [debouncedValue, setDebouncedValue] = useState(value);

  useEffect(() => {
    const handler = setTimeout(() => {
      setDebouncedValue(value);
    }, delay);

    return () => {
      clearTimeout(handler);
    };
  }, [value, delay]);

  return debouncedValue;
}

Funciona. Até funciona bem para 80% dos casos. O problema está nos 20% que a IA não vê:

// O que você realmente precisa em produção
function useDebounce(value, delay, options = {}) {
  const [debouncedValue, setDebouncedValue] = useState(value);
  const { leading = false, maxWait } = options;

  useEffect(() => {
    if (leading && !maxWait) {
      setDebouncedValue(value);
    }

    const handler = setTimeout(() => {
      setDebouncedValue(value);
    }, delay);

    const maxHandler = maxWait ? setTimeout(() => {
      setDebouncedValue(value);
    }, maxWait) : null;

    return () => {
      clearTimeout(handler);
      if (maxHandler) clearTimeout(maxHandler);
    };
  }, [value, delay, leading, maxWait]);

  return debouncedValue;
}

Isso você não consegue com um prompt simples. Você precisa saber que existe leading, que pode precisar de maxWait, que há edge cases em formulários complexos. A IA gera código que compila — você adiciona código que sobrevive em produção.

O jogo mudou, não acabou

Converso com desenvolvedores sênior e a história se repete: ninguém foi substituído, mas todo mundo mudou de função. O junior que antes copiava do Stack Overflow agora copia do ChatGPT (e continua não entendendo closure). O pleno que antes escrevia CRUD manualmente agora revisa CRUD gerado. O sênior que antes arquitetava sistemas agora também valida se a arquitetura sugerida pela IA faz sentido no contexto real.

Três habilidades que cresceram em importância:

1. Code review virou skill primária

Antes você revisava código de humanos duas vezes por semana. Agora revisa código de IA vinte vezes por dia. E código de IA é traiçoeiro — parece certo, tem a estrutura certa, usa os padrões certos, mas tem sutilezas erradas.

// IA adora gerar isso
const data = await fetch('/api/users')
  .then(res => res.json())
  .catch(err => console.error(err));

// Mas você precisa disso
const data = await fetch('/api/users')
  .then(res => {
    if (!res.ok) throw new Error(`HTTP ${res.status}`);
    return res.json();
  })
  .catch(err => {
    logger.error('Failed to fetch users', { error: err });
    throw err; // re-throw ou trate, não engula
  });

A IA não sabe que seu logger customizado existe. Não sabe que você trata 4xx diferente de 5xx. Não sabe que console.error não chega no seu monitoring. Você sabe.

2. Context é o novo código

Quanto melhor você documenta intenção, requisitos, constraints, melhor a IA performa. Aprendi a escrever comentários melhores não para humanos, mas para aumentar a chance da IA gerar algo útil:

/**
 * Busca usuários com debounce de 300ms.
 * 
 * CONSTRAINTS:
 * - Não fazer request se query < 3 chars
 * - Cancelar requests pendentes (AbortController)
 * - Logar falhas no Sentry, não no console
 * - Retornar [] em caso de erro, nunca null
 * 
 * CONTEXT: usado em autocomplete, usuário pode digitar rápido,
 * API tem rate limit de 10 req/s por IP.
 */

Isso não é documentação — é prompt engineering disfarçado de comentário.

3. Conhecer limites da ferramenta

IA é ótima para: boilerplate, conversão de formato, testes unitários simples, refatoração mecânica.

IA é péssima para: decisões de arquitetura, trade-offs de performance, integrações complexas, qualquer coisa que dependa de context não-escrito.

Saber quando usar é mais importante que saber usar.

O que não te contam

Três verdades inconvenientes que descobri trabalhando com IA no dia a dia:

Débito técnico gerado por IA é mais difícil de pagar. Quando você escreve código ruim, você sabe onde está ruim. Quando a IA gera código "quase certo", você demora mais para achar o problema porque parece profissional.

IA padroniza para a mediana. Todo código gerado parece código de tutorial. Isso é ótimo para começar, terrível para escalar. Você acaba com 50 arquivos que seguem o mesmo padrão genérico, quando seu caso de uso pedia algo específico.

O custo cognitivo não sumiu, mudou de lugar. Antes: pensar em como escrever o código. Agora: pensar em como descrever o que você quer, validar se o que veio é o que você pediu, debugar quando não é. Diferente, não mais fácil.

Então qual é o plano?

Se você está começando agora: aprenda a programar de verdade antes de usar IA como muleta. Você precisa ser capaz de ler o código que a máquina gera e saber se está certo. Isso exige base.

Se você já programa: invista em habilidades que IA não replica fácil. Entender o domínio do negócio. Comunicação com stakeholders. Debugging de sistemas distribuídos. Arquitetura de longo prazo. Code review criterioso.

Se você lidera: repense suas contratações. Junior que só sabe usar Copilot não é junior, é risco. Sênior que ignora IA também é risco. Procure quem entende código E sabe usar ferramentas.

TL;DR

  • IA não está substituindo desenvolvedores, está mudando o tipo de trabalho que fazemos
  • Código gerado por IA funciona, mas raramente está pronto para produção sem ajustes
  • Code review virou habilidade primária — você revisa máquina mais que humano
  • Contexto e documentação viraram ferramentas de produtividade (são prompts disfarçados)
  • Débito técnico de IA é mais traiçoeiro que débito humano
  • O plano: aprender fundamentos, dominar code review, focar em skills que IA não replica
📰 Read the original article on Dev.to WebDev

Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.