- Published on
La IA no programa por vos, programa con vos
- Authors
- Name
- Sandy Veliz
- @sandy_veliz
En los últimos años, el avance de la inteligencia artificial ha cambiado radicalmente la forma en la que programamos. Ya no se trata simplemente de escribir código línea por línea, sino de colaborar con una IA, entender sus sugerencias y tomar decisiones informadas. Esta nueva era nos obliga a balancear performance, legibilidad, y alineación con el equipo o el proyecto.
Pero… ¿qué pasa cuando le pedís algo simple a la IA, como agrupar y ordenar una lista de objetos por categoría y fecha?
El pedido
Le pedí a una IA que me ayudara a agrupar un array de objetos por categoría, y ordenar cada grupo por fecha descendente. Esto fue lo que propuso inicialmente:
reduce()
:
Opción 1 – Con const grouped = items.reduce((acc, item) => {
const key = item.category;
acc[key] = acc[key] || [];
acc[key].push(item);
return acc;
}, {} as Record<string, Item[]>);
for (const key in grouped) {
grouped[key].sort((a, b) => new Date(b.date).valueOf() - new Date(a.date).valueOf());
}
Opción 2 – Con for:
const grouped: Record<string, Item[]> = {};
for (const item of items) {
const key = item.category;
if (!grouped[key]) {
grouped[key] = [];
}
grouped[key].push(item);
}
for (const key in grouped) {
grouped[key].sort((a, b) => new Date(b.date).valueOf() - new Date(a.date).valueOf());
}
A simple vista, ambas opciones cumplen el objetivo. Pero la IA no se quedó ahí. Analizó cada una:
Análisis de la IA 🔍 Legibilidad: El enfoque con for es más fácil de entender, especialmente para desarrolladores que no están familiarizados con métodos funcionales como reduce.
⚙️ Performance: Ambos tienen un rendimiento muy similar. Aunque reduce introduce una capa extra de funciones, la diferencia es mínima.
🛡️ TypeScript: Ambos pueden tiparse correctamente.
✅ Recomendación: La IA optó por el for-loop, al ser más claro, mantener la intención del código más visible, y evitar errores sutiles en estructuras más complejas.
Pero hay más… La IA fue un paso más allá. Como en mi proyecto usamos dayjs para manejar fechas, sugirió mejorar también el parseo de las fechas y el ordenamiento. Acá va su versión final:
💡 Versión sugerida por la IA
import * as dayjs from 'dayjs';
interface Item {
id: number;
category: string;
date: string; // o Firebase.Timestamp
}
const grouped: Record<string, Item[]> = {};
for (const item of items) {
const key = item.category;
if (!grouped[key]) {
grouped[key] = [];
}
grouped[key].push(item);
}
for (const key in grouped) {
grouped[key].sort((a, b) => {
const dateA = a.date?.toDate ? a.date.toDate() : dayjs(a.date).toDate();
const dateB = b.date?.toDate ? b.date.toDate() : dayjs(b.date).toDate();
return dayjs(dateB).valueOf() - dayjs(dateA).valueOf();
});
}
✅ Esta versión:
Usa dayjs como estándar de fechas del proyecto.
Soporta timestamps de Firebase sin romperse.
Es clara, fácil de testear y mantener.
Evita crear Date nativos directamente.
PD: legible no siempre es igual a mejor Que el código sea más o menos legible es un problema del humano, no de la IA. Pero si aún así preferís que sea más legible para personas, también se lo podés pedir… o pedirle que lo explique.
Elegir legibilidad o rendimiento no es una decisión de la IA, es una decisión de diseño nuestra, como equipo. Dependerá del modelo que usemos, del tipo de aplicación, y de muchos otros factores que se pueden evaluar caso por caso.
🧠 Takeaway La IA no programa por vos, programa con vos.
Vos decidís los estándares, los criterios, los límites. La IA te propone caminos, pero vos elegís el más apropiado. Y si no sabés cuál elegir, también te lo puede explicar. Esa es la verdadera colaboración entre humanos y máquinas.
Estamos entrando en la era del Vibe Coding: no todo se trata de cuántas líneas escribís, sino de cómo guías a la IA, cómo revisás lo que genera, y cómo mantenés el control creativo de tu código.
No se trata de codear menos. Se trata de pensar mejor.