Uno de los conceptos con cierta 'tracción mediática', al menos en ambientes tecnológicos, y uno de los términos de surgimiento muy reciente es el de 'vibe coding'.
En este post busco sólo hacer una introducción rápida a la idea
Un inciso: lenguajes de programación y desarrollo de software
Probablemente muchos de los lectores de este blog conozcan cómo funciona el mundo del software, y además lo he abordado hace poco en el post titulado 'Exactitud vs. flexibilidad en modelos de inteligencia artificial (III): ingeniería software y 'vibe coding'' pero, no obstante, recuerdo alguna idea básica.
Como sabemos, los ordenadores digitales tratan todo, tanto información como algoritmia, en lenguaje binario (los famosos unos y ceros). Por tanto, para programar un ordenador, al final tenemos que darle el código binario que representa la lógica y los datos. Pero, claro, esto no es fácil ni práctico. Por ello hace ya muchos años, se inventaron primero los lenguajes ensambladores (que hacían una ligera abstracción de ese código binario) y no mucho después los entonces denominados 'lenguajes de programación de alto nivel', unos lenguajes de programación que, aunque son lenguajes formales, se aproximaban bastante más a cómo una persona se expresa y piensa desde un punto de vista lógico o matemático que le mero código binario o el ensamblador. Los lenguajes de programación de alto nivel incorporaron en seguida las buenas prácticas de la programación estructurada y unos años después de la programación orientada a objetos. Los lenguajes de programación más conocidos, y que se usan abundantemente hoy en día, son lenguajes de alto nivel donde encontramos nombres tan conocidos como C, C++, Java o python.
Con estos lenguajes, el trabajo del desarrollador, en buena medida, se centraba (y se sigue centrando en muchos casos) en traducir la lógica o el algoritmo que él/ella mismo/a ha pensado (o que le ha trasladado el analista que lo ha pensado) a los elementos e instrucciones que le proporciona el lenguaje de programación. Lo que escribe el desarrollador es un texto, un texto expresado en un lenguaje de programación y que se denomina código fuente. Ese texto se traduce luego a binario por medio de los programas compiladores o se ejecuta mediante los intérpretes.
Y, aunque en su visión más básica el desarrollo se puede acometer con poco más que un editor de texto para generar el código fuente y un compilador para traducirlo a binario, lo cierto es que existen muchas capacidades interesantes adicionales para ordenar el código fuente, depurarlo, compartirlo, etc, que lleva a la creación de los denominados IDE ('Integrated Development Environment'), aplicaciones completas con toda una suite de utilidades para uso por parte del desarrollador. De todas formas, en esencia, la parte nuclear del desarrollo sigue siendo el crear el código fuente para expresar una lógica o algoritmo.
Cierto es que desde hace unos años existen las plataformas de desarrollo 'low-code' que incluyen herramientas de aún más alto nivel para que los desarrolladores puedan expresar la mayoría de las veces la lógica que pretenden no como instrucciones de un lenguaje de programación sino como flujos, o diseños visuales y más cercanos a la aplicación final
El fundamento: grandes modelos de lenguaje y generación de código
Pues bien, lo que yo identifico como punto de partida del 'vibe coding' es la capacidad actual de los grandes modelos de lenguaje para generar código fuente.
Ya lo he comentado con cierta frecuencia pero recuerdo de nuevo que un lenguaje de programación es un lenguaje, como el humano, con sus reglas y sus gramáticas. Y digo que igual que el humano pero en realidad es más sencillo, acotado y formal, con las reglas mucho más claras que el lenguaje humano.
Y por ello, en seguida los grandes modelos de lenguaje se han adaptado para la generación de software, para la creación de código fuente. De forma similar a como le solicitas a un modelo generativo que, por ejemplo, te sugiera actividades para el fin de semana, le puedes pedir que te genere un software que haga algo.
Lo 'único' (y pongo 'único' con comillas a propósito) que tienes que hacer es explicarle al modelo de lenguaje en tu instrucción, en tu 'prompt', qué es lo que quieres que haga el programa.
Nótese lo siguiente: más arriba decía que el trabajo fundamental del desarrollador tradicional es traducir a las instrucciones de un lenguaje de programación la lógica que el desarrollador ha pensado o que ha recibido de un analista. Pues bien, cuando se utiliza un modelo generativo para crear el código, no es el desarrollador quien hace la traducción de la lógica a las instrucciones, es el propio modelo generativo quien lo hace.
Una explicación
Buscando profundizar en los planteamientos y herramientas del 'vibe coding' me encuentro finalizando la lectura del libro 'Beyond Vibe Coding: From Coder to AI-Era Developer' de Addy Osmani. En el primer capítulo, el autor expresa esta idea de la siguiente forma:
Imagine writing software by simply describing what you want it to do—almost like talking to a teammate—while an AI translates those ideas into code.
Ahí está el 'quid' de la cuestión: la IA (el modelo de lenguaje) traduce tus ideas en código. Acto seguido, el autor explica, casi define, de una manera un poco más formal, lo que es el 'Vibe coding'.
This is the essence of vibe coding, a prompt-first, exploratory approach where you describe what you want in natural language and let a large language model (LLM) fill in the blanks.
De nuevo se repite la idea: se comienza por un prompt ('prompt-first') en que se describe lo que se desea y es un gran modelo de lenguaje el que genera el código.
A lo mejor el lector avezado nota el uso de los términos 'exploratory' y 'fill in the blanks'.
Ese uso tiene 'más miga' de la que parece, pero de momento me abstendré de entrar en ello.
El origen del término
Esta nueva capacidad de los modelos generativos, de los grandes modelos de lenguaje, está con nosotros, aunque mejorando, desde hace unos años. Pero el término 'Vibe coding' como tal, fue acuñado hace unos meses, en Febrero de este 2025, por Andrej Karpathy, intuyo que sin ser consciente de que ese término iba a hacer fortuna, en un post en la red X en que comenzaba diciendo:
There's a new kind of coding I call "vibe coding", where you fully give in to the vibes, embrace exponentials, and forget that the code even exists. It's possible because the LLMs (e.g. Cursor Composer w Sonnet) are getting too good.
Es interesante la mención a que el desarrollador casi se olvida de que el código existe, puesto que es el LLM el que lo genera. Veremos que ese olvido del código fuente por parte del desarrollador, al menos hoy en día, no es realista del todo, pero como filosofía y aspiración esa es la idea: la inteligencia artificial, a través de uno o varios modelos de lenguaje seguramente especializados, se encarga de generar el código fuente.
Un poco más abajo en el mismo post en X, Karpathy dice:
The code grows beyond my usual comprehension, I'd have to really read through it for a while
De nuevo, como llamada de atención, como explicación de una sensación e, incluso, de una filosofía o una aspiración, la frase es muy interesante y descriptiva pero, de nuevo, veremos que un desarrollador responsable no puede permitirse demasiado que ese código generado por el LLM se escape a su comprensión.
Hasta dónde llega la IA en la generación de código
Dado que el término 'vibe coding' no tiene un origen académico ni mucho menos, ni siquiera es un término surgido de la un fabricante como Open AI o Google, o una gran consultora, su significado y fronteras son algo difusos.
Personalmente, y no sé si con acierto, tiendo a pensar en 'Vibe coding' cuando el LLM asume una gran parte, si no toda, de la generación de una aplicación, un escenario que aunque no es completamente impensable, pero que hoy día tiene serias limitaciones prácticas que ya veremos.
En el libro que mencionaba más arriba, el autor también tiende a reservar el término 'vibe coding' para las situaciones en que la IA se hace cargo de toda gran parte de la generación del código.
Cuando lo que hace la IA es estar integrada dentro de los entornos de desarrollo (los IDEs), y actuar como una suerte de ayudante (un copiloto) para generar pequeñas secciones de código, corregir o hacer sugerencias de corrección de errores, etc, este autor, Addy Osmani, opta por denominarlo una ingeniería de software asistida por IA. Ignoro si Karpathy estaría de acuerdo con esta diferenciación o si para Karpathy toda generación de código mediante una IA es 'Vibe coding'.
Lo de las vibraciones
Un punto que me resulta algo confuso es el por qué Karpathy utiliza este termino 'Vibe' que, creo que la traducción adecuada es 'vibración', pero no vibración en el sentido físico del término sino en el de un ambiente o una sensación (como cuando decimos que algo nos transmite 'buenas vibraciones' o 'buen rollo'). En alguna otra acepción, se podría quizá hablar de relax.
Creo, pero confieso que no estoy seguro, que lo que Karpathy quiere transmitir es que la IA, el LLM, está ahí para ayudarte y, sobre todo, que le pides más o menos (una aplicación completa o sólo una función o la corrección de un error) en función de cómo se encuentre el propio desarrollador.
Admito, no obstante, que no tengo claro cien por cien si ese es el sentido que Karpathy le ha querido dar. Espero averiguarlo en breve.
Conclusiones: la esencia del Vibe coding
En cualquier caso, y como ya decíamos, en la esencia del Vibe coding se encuentra en que la IA, a través de modelos de lenguaje más o menos especializados es ya capaz de asumir y con razonable eficacia muchas tareas de generación de desarrollo software y eso cambia, seguramente de forma radical e irreversible, la disciplina de la ingeniería de software y, sobre todo, la forma en que los desarrolladores tenían hasta ahora de ejercer su labor.
No se acaba aquí la disertación sobre 'Vibe coding'. En próximas fechas hay algún tema más relacionado con el 'vibe coding' y que querría publicar en este medio.