Codificación Vibe
Sobre el poder y el peligro de programar con IA
- Publicado
- Actualizado
- (creado )
- Escrito por
- Willem L. Middelkoop
- Temas
- AI · juego · programación · trabajo
- Versión humana de este artículo
- https://willem.com/es/2025-04-15_codificacion-vibe/
- English
- Vibe Coding
- Nederlands
- Vibe Coding
- Deutsch
- Vibe Coding
- Français
- Vibe coding
- Italiano
- Vibe Coding
- Português
- Vibe Coding
- Papiamentu
- Vibe Coding
- Frysk
- Vibe Coding
- Idiomas
- Traducido del original en inglés por un modelo de lenguaje en dos pasadas (traducción y corrección) con un glosario y un corrector ortográfico; aún no revisado por un hablante nativo.
Resumen
Con más de 48.000 $ de ingresos al mes, el simulador de vuelo de Pieter Levels provocó una auténtica oleada de innovación. Sin conocimientos detallados de motores de juegos 3D, hizo 'vibe coding' de su juego con ayuda de la IA. Los críticos señalaron problemas de seguridad y escalabilidad, mientras que los defensores aplaudieron el resultado asombroso. ¿Qué podemos aprender de todo esto?
Texto completo
Vibe coding
El vibe coding es un método de programación impulsado por IA en el que describes un problema en unas pocas frases, a modo de prompt, para un modelo de lenguaje ajustado para programar. El modelo genera el software y el papel del programador pasa a ser guiar, probar y pulir el resultado. Sus defensores sostienen que permite a programadores novatos crear programas sin mucha formación ni conocimientos de ingeniería de software.
Pieter Levels creó el juego fly.pieter.com. En las redes sociales mantuvo un registro abierto de su trabajo: desde la idea inicial hasta la publicación. Atrajo patrocinadores para anuncios dentro del juego y vende mejoras premium (como aviones especiales), con lo que ingresa miles de dólares cada mes.

Su historia de éxito planteó preguntas sobre el futuro de la programación de juegos, o incluso de la programación en general. Si un tío con un portátil puede crear un bombazo como este, ¿para qué hacen falta estudios con grandes presupuestos? O, a la inversa: ¿qué pasaría con esos estudios si adoptaran un enfoque parecido de 'vibe coding' en su producción?
Probarlo yo mismo
Como tengo algo de experiencia desarrollando un juego (Snake 97, más de 40 millones de descargas), la historia de Pieter me animó a investigar la tecnología 3D que usó para el suyo: ThreeJS. Hacer un juego es difícil, y hacerlo en 3D lo es todavía más. Las matemáticas que sostienen un mundo en tres dimensiones añaden un reto enorme. En muchos sentidos no se parece a los programas normales ni a los juegos sencillos en dos dimensiones. Aunque ya había experimentado un poco antes, la curva de aprendizaje de las matemáticas 3D me pareció bastante empinada. Ahí es donde la IA puede ayudar.

Para la app Gran Fondo usé la IA para generar una presentación tridimensional de una actividad de carrera grabada. Formulé mi objetivo en lenguaje llano y el modelo de IA generó el código necesario para mostrar mi entrenamiento con ThreeJS en un panel giratorio. Los primeros resultados no eran buenos, pero entendía lo bastante del código generado como para seguir pidiendo mejoras concretas. Unas horas después tenía algo que me gustaba y, además, sentía que había aprendido mucho sobre la viabilidad de mi concepto inicial. La IA me permitió aprender más rápido.

Decidí explorar otra idea que llevaba tiempo aparcada: un juego sobre partículas de colesterol bueno y malo en el torrente sanguíneo de una persona. Con elementos de un juego de carrera infinita, me pareció una buena forma de seguir experimentando, porque en estos juegos los niveles los genera el ordenador. Construir un generador automático de niveles me pareció algo con lo que la IA podría ayudarme.
Aprovechando las nuevas posibilidades del 3D, pensé que el juego debía transcurrir por las arterias, en lugar de moverse lateralmente como en los juegos 2D clásicos. Eso trae retos como el recorte visual y los gráficos distorsionados por tener la cámara fuera de la escena 3D. Otro reto es que se complica la detección de colisiones entre los elementos del juego, imprescindible para la mecánica. El código que generaba el modelo de IA crecía y crecía con cada iteración.

Tras unas 800 líneas de código empecé a notar las limitaciones del modelo: cometía errores y fallos que ya había resuelto en iteraciones anteriores. Cada iteración nueva traía problemas nuevos y el modelo se olvidaba de las mejoras y correcciones que había aplicado antes. Se debe a los límites de contexto (tokens de entrada) con los que trabajan los grandes modelos de lenguaje. En pocas palabras: no puede recordar lo suficiente como para seguir iterando sobre el conjunto entero a la vez.

Dejé de desarrollar el motor del juego con IA tras unos días de experimentación intensiva. Llegué a un punto en que dedicaba más esfuerzo a manejar el modelo de IA que al motor del juego en sí. Me pareció que sería mejor conseguir algunos libros sobre esas tecnologías, leerlos, dominarlas yo mismo y construir el motor a mano. Cuando las cosas se complican, nuestro cerebro humano parece capaz de concentrarse en partes concretas de una tarea compleja sin perder de vista el conjunto.
Sobre la insensatez de la "programación en lenguaje natural"
Además de los límites del contexto que puede abarcar un modelo de IA, creo que hay un problema de ambigüedad. Te recomiendo leer lo que escribió Edsger Wybe Dijkstra sobre la insensatez de la "programación en lenguaje natural" en su EWD667. Una descripción inequívoca, libre de pensamiento confuso, es la base del código fiable. Pero nuestra lengua materna deja demasiado margen para todo tipo de disparates y errores. En cambio, deberíamos dominar nuestras palabras, pensar con precisión y especificar con valentía.
Un lenguaje formal, como un lenguaje de programación, un modelo matemático o una especificación exhaustiva de entradas y salidas, puede ser una herramienta eficacísima para eliminar la ambigüedad y los errores. En pocas palabras: obtendrás la mejor salida si le das la mejor entrada.
Dar instrucciones a la IA con código
Para comprobar si la IA me daría mejor código, decidí cambiar mi forma de pedir. En lugar de describir lo que quería en lenguaje natural, subí un fragmento de código que había escrito antes, con unas características muy concretas:
- el código venía de un sistema en producción, así que sabía que funcionaba bien
- contenía varias instrucciones de gestión de errores, lo que lo hacía más robusto
- no tenía errores de sintaxis y usaba variables y funciones con nombres lógicos
- tenía un alcance muy específico, con interfaces claramente definidas hacia el mundo exterior
Además del código, le pedí a la IA que cambiara un aspecto concreto. Tenía que quitar el uso de un programa externo (el módulo NodeJS 'lwip') y sustituirlo por otro (ImageMagick). Como tanto lwip como ImageMagick son código abierto, el modelo de IA conoce bien ambos programas. Le di la receta perfecta para cocinar.
El código que me devolvió la IA era un sustituto perfecto al 99 % de mi propio código. Tenía un fallo que hacía que algunos parámetros no se escaparan bien, y eso provocaba un cuelgue. Pude localizar el error y corregirlo a mano, porque conocía este software a fondo y me movía con total comodidad en su contexto. Tras algunas pruebas más, decidí poner en producción el código generado por la IA, porque la nueva biblioteca rendía mucho mejor que la anterior.
Conclusión
El vibe coding con IA permite crear prototipos y aprender con rapidez, como demuestra el éxito de Pieter Levels, pero flaquea en proyectos complejos que exigen precisión. Plantea una pregunta: ¿la IA amplía nuestro potencial o nos encierra en sus restricciones? La maestría combina el pensamiento humano con la potencia de la IA. Reflexiona sobre el oficio: ¿cuándo te afilan las herramientas la destreza y cuándo pueden embotártela?