paint-brush
Aqui está o que seu código gerado por IA não está lhe dizendopor@tirtha
781 leituras
781 leituras

Aqui está o que seu código gerado por IA não está lhe dizendo

por Tirtha Sarker5m2025/03/26
Read on Terminal Reader

Muito longo; Para ler

IDEs com tecnologia de IA estão mudando a forma como codificamos. Mas há uma realidade técnica que precisamos abordar: a IA não acelera apenas a codificação — ela também acelera bugs.
featured image - Aqui está o que seu código gerado por IA não está lhe dizendo
Tirtha Sarker HackerNoon profile picture
0-item


IDEs com tecnologia de IA estão mudando a forma como codificamos — desenvolvimento mais rápido, menos dores de cabeça com boilerplate e sugestões instantâneas. Mas há uma realidade técnica que precisamos abordar:


A IA não acelera apenas a codificação — ela também acelera bugs . 💥


Depois de trabalhar com Cursor, Copilot e Windsurf em diferentes ambientes, percebi que a IA normalmente não produz código “errado”. Em vez disso, ela gera soluções tecnicamente corretas que perdem o contexto empresarial crucial e o conhecimento do domínio.

Veja aqui o que os assistentes de codificação de IA geralmente erram:

1. A IA introduz problemas de desempenho sutis e difíceis de detectar

❌ Sugestão de IA: Parece eficiente, mas tem um problema sutil de consulta N+1


 const getUsersWithOrders = async (): Promise<UserWithOrders[]> => { // Fetch all users - seems reasonable const users = await prisma.user.findMany({ where: { status: 'ACTIVE' } }); // For each user, get their orders - the subtle N+1 query issue const usersWithOrders = await Promise.all( users.map(async (user) => { const orders = await prisma.order.findMany({ where: { userId: user.id }, orderBy: { createdAt: 'desc' }, take: 5 // Just get recent orders }); return { ...user, orders }; }) ); return usersWithOrders; };

✅ Melhor solução: consulta única e eficiente com relações adequadas

 const getUsersWithOrders = async (): Promise<UserWithOrders[]> => { // One efficient query with proper inclusion of related data const users = await prisma.user.findMany({ where: { status: 'ACTIVE' }, include: { orders: { orderBy: { createdAt: 'desc' }, take: 5, } } }); // Server-side data transformation if needed return users.map(user => ({ ...user, orders: user.orders, // Transform any data if required totalSpent: user.orders.reduce((sum, order) => sum + order.total, 0) })); };

2. A IA não percebe restrições contextuais ao integrar com bases de código existentes

 interface User { id: string; name: string; email: string; } const getUserDetails = async (userId: string): Promise<User> => { const response = await fetch(`/api/users/${userId}`); if (!response.ok) throw new Error('Failed to fetch user'); return await response.json(); };

✅ Melhor solução: seguindo padrões de aplicação estabelecidos

 import { ApiService } from '@/services/api'; import { User } from '@/types/user'; import { handleApiError } from '@/utils/error-handling'; export const getUserDetails = async (userId: string): Promise<User> => { try { return await ApiService.get<User>(`users/${userId}`); } catch (error) { return handleApiError(error, 'Failed to fetch user details'); } };

3. A IA faz suposições razoáveis, mas ignora requisitos específicos do domínio

❌ Sugestão de IA: Cálculo de desconto tecnicamente correto

 const calculateDiscount = (price: number, discountPercent: number): number => { const discountAmount = price * (discountPercent / 100); return price - discountAmount; };

✅ Melhor solução: incorpora regras de negócios e formatação

 const calculateDiscount = (price: number, discountPercent: number): number => { // Company policy: Maximum discount is 40% unless approved const effectiveDiscount = Math.min(discountPercent, 40); // Business rule: Discounts are calculated after tax in our system const priceWithTax = addTax(price); const discountAmount = priceWithTax * (effectiveDiscount / 100); // Format to company standard: always round to nearest cent return Number((priceWithTax - discountAmount).toFixed(2)); };

🚀 A verdade? A IA não escreve códigos ruins — ela simplesmente não consegue ler sua mente

O padrão é claro: a IA se destaca na geração de código sintaticamente correto e algoritmicamente sólido. O que ela sempre deixa passar são:

  1. Contexto empresarial e regras de domínio — ele não pode conhecer as políticas específicas da sua empresa
  2. Convenções específicas do projeto — tem compreensão limitada dos padrões da sua base de código
  3. Implicações arquitetônicas — concentra-se na função em questão, não no sistema como um todo
  4. Desempenho em escala — otimizações que importam em ambientes de produção

✅ Como usar ferramentas de IA de forma eficaz

1. Reserve a IA para padrões padronizados, mas revise os pontos de integração cuidadosamente — a IA é excelente em gerar padrões repetitivos, mas muitas vezes não percebe como os componentes se conectam em sistemas maiores.

2. Crie prompts precisos com contexto

  • 🚫 “Gerar um gancho TypeScript React para busca de dados”
  • “Gerar um gancho TypeScript React para busca de dados que siga nosso padrão de tratamento de erros existente, inclua limpeza na desmontagem e lide com solicitações obsoletas”

3. Verifique casos extremos que a IA pode deixar passar.


 describe('calculateDiscount', () => { it('correctly calculates a 20% discount on $100', () => { expect(calculateDiscount(100, 20)).toBe(80); }); it('handles zero price', () => { expect(calculateDiscount(0, 15)).toBe(0); }); it('handles zero discount', () => { expect(calculateDiscount(50, 0)).toBe(50); }); it('handles decimal precision correctly', () => { expect(calculateDiscount(9.99, 10)).toBe(8.99); }); it('rejects negative prices', () => { expect(() => calculateDiscount(-10, 20)).toThrow(); }); it('rejects invalid discount percentages', () => { expect(() => calculateDiscount(100, 101)).toThrow(); expect(() => calculateDiscount(100, -5)).toThrow(); }); });


Esses não são "bugs" no sentido tradicional, mas sim uma limitação fundamental: a IA não consegue entender seu domínio de negócios, os padrões da empresa ou o contexto completo da arquitetura do seu aplicativo da mesma forma que um membro experiente da equipe.


🚀 Resumindo? A IA é uma ferramenta poderosa, mas não é seu CTO. Pense criticamente. Revise agressivamente. Codifique de forma inteligente.


📢 “The Engineer's Log” é onde decodificamos o mundo da IA, Web3 e engenharia de software — sem a BS. Inscreva-se para mergulhos profundos, melhores práticas de codificação e histórias de depuração do mundo real.

🛠 Inscreva-se na newsletter → O diário do engenheiro