paint-brush
Esto es lo que tu código generado por IA no te dicepor@tirtha
781 lecturas
781 lecturas

Esto es lo que tu código generado por IA no te dice

por Tirtha Sarker5m2025/03/26
Read on Terminal Reader

Demasiado Largo; Para Leer

Los IDEs impulsados por IA están cambiando nuestra forma de programar. Pero hay una realidad técnica que debemos abordar: la IA no solo acelera la programación, sino que también acelera la detección de errores.
featured image - Esto es lo que tu código generado por IA no te dice
Tirtha Sarker HackerNoon profile picture
0-item


Los IDEs basados en IA están cambiando nuestra forma de programar: desarrollo más rápido, menos problemas con el código repetitivo y sugerencias instantáneas. Pero existe una realidad técnica que debemos abordar:


La IA no solo acelera la codificación , también acelera los errores . 💥


Tras trabajar con Cursor, Copilot y Windsurf en diferentes entornos, he observado que la IA no suele generar código incorrecto. En cambio, genera soluciones técnicamente correctas que ignoran el contexto empresarial y el conocimiento del dominio cruciales.

Esto es lo que los asistentes de codificación de IA generalmente hacen mal:

1. La IA presenta problemas de rendimiento sutiles y difíciles de detectar

❌ Sugerencia de IA: Parece eficiente pero tiene un sutil problema 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; };

✅ Mejor solución: consulta única y eficiente con relaciones adecuadas

 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. La IA no tiene en cuenta las restricciones contextuales al integrarse con 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(); };

✅ Mejor solución: seguir patrones de aplicación establecidos

 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. La IA hace suposiciones razonables pero no cumple con los requisitos específicos del dominio.

❌ Sugerencia de IA: Cálculo de descuento técnicamente correcto

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

✅ Mejor solución: Incorpora reglas comerciales y formato

 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)); };

¿La verdad? La IA no escribe código malo, simplemente no puede leer tu mente.

El patrón es claro: la IA destaca por generar código sintácticamente correcto y algorítmicamente sólido. Lo que constantemente falla es:

  1. Contexto empresarial y reglas de dominio : no puede conocer las políticas específicas de su empresa
  2. Convenciones específicas del proyecto : tiene una comprensión limitada de los patrones de su base de código
  3. Implicaciones arquitectónicas : se centra en la función en cuestión, no en el sistema en su conjunto
  4. Rendimiento a escala : optimizaciones que importan en entornos de producción

✅ Cómo utilizar herramientas de IA de forma eficaz

1. Reserve la IA para el código repetitivo, pero revise los puntos de integración con cuidado : la IA se destaca en generar patrones repetitivos, pero a menudo pasa por alto cómo se conectan los componentes en sistemas más grandes.

2. Elabora indicaciones precisas y contextualizadas .

  • 🚫 “Generar un gancho de TypeScript React para la obtención de datos”
  • “Generar un enlace de TypeScript React para la obtención de datos que siga nuestro patrón de manejo de errores existente, incluya limpieza al desmontar y gestione solicitudes obsoletas”

3. Verifique los casos extremos que la IA podría pasar por alto.


 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(); }); });


Estos no son “errores” en el sentido tradicional, sino más bien una limitación fundamental: la IA no puede comprender el dominio de su negocio, los estándares de la empresa o el contexto completo de la arquitectura de su aplicación como lo haría un miembro experimentado del equipo.


En resumen, la IA es una herramienta poderosa, pero no es tu director de tecnología. Piensa críticamente. Revisa con ahínco. Programa con inteligencia.


📢 “El Diario del Ingeniero” es donde desciframos el mundo de la IA, la Web3 y la ingeniería de software, sin rodeos. Suscríbete para obtener información detallada, mejores prácticas de programación y experiencias reales de depuración.

🛠 Suscríbete al boletín → Bitácora del Ingeniero