Si vas a hacer vibe coding, ¿por qué no hacerlo en C?
(stephenramsay.net)- El vibe coding realmente funciona bien, pero al producir código que el propio autor no entiende por completo, reduce el placer esencial de programar
- Todos los lenguajes de programación son herramientas diseñadas no para la máquina, sino para la conveniencia humana, y ventajas como seguridad, abstracción y legibilidad son al final estructuras para ayudar a pensar a las personas
- Entonces, ¿de verdad hace falta un lenguaje amigable para humanos para el código que escribe la IA? Se propone VOPL (Vibe-Oriented Programming Language), un nuevo lenguaje amigable para la máquina y centrado en la IA
- Este lenguaje podría abarcar varias posibilidades: pseudocódigo ejecutable, una extensión de la programación literaria, o una forma basada en lenguaje natural con una gramática específica
- Como en los inicios de las computadoras de programa almacenado, la resistencia a nuevos paradigmas de cómputo es una historia que se repite, y el vibe coding podría ser la siguiente etapa de esa misma corriente
La tensión entre programar y el vibe coding
- Para mí, programar es un placer, no un trabajo, una pasión que se mantiene desde finales de los años 90
- Llevo 25 años enseñando programación y lo que más orgullo me da es convertir en programadores a personas que no venían de esta disciplina
- Cuando programo, valoro mucho el placer de entender por mí mismo el proceso de resolver problemas
- En cambio, el vibe coding es un proceso en el que la IA escribe el código en tu lugar, y eso lleva a un estado en el que quien lo creó no entiende del todo el resultado
- A veces se siente como si uno estuviera “haciendo trampa” (aunque no sea exactamente eso), pero cuesta describir con precisión por qué deja una sensación incómoda
- Parece quitarle gran parte de la diversión al acto mismo de programar
- Aun así, el vibe coding funciona lo suficientemente bien como para producir sistemas reales de alta calidad
- Va más allá de reemplazar búsquedas: también resuelve con precisión problemas que a uno le daría flojera resolver por su cuenta
- La IA es más hábil que los humanos para rastrear errores y gestionar memoria, y una y otra vez sorprende el resultado que produce cuando se le lanza una idea de programa
El lenguaje siempre fue una herramienta para humanos
- Como en Structure and Interpretation of Computer Programs de Abelson & Sussman, los lenguajes de programación son medios de expresión para los seres humanos
- El código es “para que lo lean las personas”, y las máquinas no necesitan legibilidad
- Todos los lenguajes de programación se diseñan como medios para ayudar al pensamiento y la expresión humanos
- La seguridad de Rust, la abstracción de C++ y la concurrencia de Go son funciones pensadas para la conveniencia humana, no para la máquina
- La gestión de memoria, la concurrencia y la seguridad de tipos no son más que abstracciones para apoyar la estructura del pensamiento humano
- Por eso, en una era en la que la IA escribe código, el diseño de lenguajes centrado en humanos podría dejar de ser necesario
Entonces, ¿la IA necesita este tipo de lenguaje? : el sentido de proponer “haz vibe coding en C”
- En el vibe coding, el humano ya desarrolla programas en un estado en el que no entiende completamente todo el código
- En esa situación, se debilita la razón para mantener una sintaxis amigable para personas
- En lugar de un lenguaje orientado a humanos, podría ser más racional escribir directamente en un lenguaje orientado a la máquina (C o ensamblador)
- La IA puede manejar con más precisión que los humanos cosas como el
undefined behaviorde C, la liberación de memoria y los errores off-by-one- Así como un compilador optimiza mejor, también muestra una capacidad más precisa de administrar la ejecución del código que un humano
- Entonces surge la pregunta: ¿no haría falta un lenguaje más adecuado para que lo use la IA?
- ¿Por qué hacer vibe coding precisamente en lenguajes “centrados en humanos” como Python, Rust o C++?
Propuesta de VOPL (Vibe-Oriented Programming Language)
- Si existiera un lenguaje pensado desde el inicio para el vibe coding, se podrían imaginar posibilidades como estas
- Un lenguaje de muy alto nivel cercano al pseudocódigo ejecutable
- Como una versión completa de la programación literaria, donde el humano solo describe y la IA genera el código máquina
- Una estructura que parece lenguaje natural, pero con ciertos “modismos” específicos
- Conceptos como una expresión de concurrencia basada en términos cotidianos (slang), en lugar de algo como “goroutine”
- La idea sería diseñar un sistema de expresión centrado en la máquina que permita a la IA entender con precisión los problemas y generar rápidamente código ejecutable
- Existe el problema de cómo entrenar a la IA en un lenguaje nuevo, pero ya hoy muchos desarrolladores le lanzan pseudocódigo y conversan con la IA para producir código, así que
es posible que alguna forma de VOPL ya se esté aprendiendo
El cambio en el acto de programar
- Es posible que “codificar a mano” en la educación de futuros vibe coders llegue a tratarse como una formación básica al estilo Montessori
- Igual que el entrenamiento de dibujo a mano antes de Photoshop, o practicar ecuaciones en papel incluso en la era de las calculadoras electrónicas, podría seguir existiendo como parte del proceso educativo
- La resistencia ante la llegada de nuevos paradigmas se ha repetido históricamente
- El rechazo inicial a la introducción de las computadoras de programa almacenado (ENIAC → EDVAC)
- También existe la historia de Grace Hopper enfrentando críticas que sostenían que “una máquina no puede escribir las instrucciones de otra máquina”
Mensaje final
- El vibe coding ya es una realidad, y el desarrollo del futuro podría exigir rediseñar el lenguaje mismo
- Es momento de discutir seriamente la posibilidad de pasar de lenguajes centrados en humanos a lenguajes centrados en la IA
“Same vibe, as the kids say.” — Como dirían los jóvenes: la misma vibra
4 comentarios
Creer que al programar con un modelo de lenguaje va a inventar por arte de magia expresiones cercanas a la máquina es tener mentalidad de abusivo.
Cuantas más restricciones haya, mejor trabaja dentro de esas restricciones.
Aunque la IA escriba el código, la responsabilidad por el servicio igual debería recaer en el desarrollador. No sé si uno realmente pueda hacerse responsable de un código que ni siquiera entiende.
"Incluso si haces vibe coding, deberías hacerlo en un lenguaje que conozcas bien para poder revisar el resultado"
Hay una frase muy importante en los comentarios.
Opiniones de Hacker News
Me hizo sentir de nuevo lo diverso que es el campo del desarrollo de software
Yo hago backend, sobre todo desarrollo de APIs, y el mayor cuello de botella de la productividad es que la mayoría de la gente no sabe definir bien los requisitos
Si le preguntas al PM, evade la respuesta, y el desarrollador frontend se queda esperando a que backend entregue la API
Al final, lo más difícil no es programar, sino el proceso mental de descubrir e interpretar los requisitos
La programación de verdad es el acto de implementar un sistema que uno mismo diseñó y darle vida
Si confundes eso con simplemente escribir código en una empresa y llamarlo ‘Programming’, se generan malentendidos
Aun así, da la impresión de que no tiene mucha experiencia en desarrollo de software comercial a gran escala
Su predicción sobre “el futuro de la programación” suena bien, pero en un contexto industrial puede tener ciertas limitaciones
(Referencia: Presentación de Stephen Ramsay)
Al final, lo importante es el mindset y cuánto estás expuesto a la tecnología
Los LLM han aumentado muchísimo mi productividad, especialmente porque tengo una forma de pensar arquitectónica
Ahora hago en unas horas lo que antes me tomaba meses
Últimamente estoy usando LLM para traducir viejo código de Shockwave Lingo a lenguajes modernos y restaurar juegos legacy
Al final, si el vibe coding es el futuro, eso implica asumir que la IA no es perfecta
En el momento en que uno fija arbitrariamente las capacidades y límites de una IA imaginaria, toda la discusión se vuelve ambigua
Hay que tener cuatro o cinco reuniones con los stakeholders para que quede claro
Probé hacer vibe coding en C, y aun así sigo odiando C
La IA, igual que una persona, se olvida de liberar memoria y luego lo corrige después
Cuando lo hice con Rust fue mucho más agradable, y entender el ecosistema de dependencias del lenguaje sí es una habilidad real
La IA ayuda a explorar rápido ese tipo de “conocimiento de libro”
En C había que revisar una por una si las liberaciones de memoria estaban bien, pero en Rust casi no tienes esa preocupación
Incluso para vibe coding, creo que Rust es mucho mejor por las barandillas de seguridad que trae el lenguaje
Las funciones amigables para humanos que tiene Python también ayudan a la IA
Ahora, gracias a la IA, es mucho más fácil crear directamente una UI o utilidades nuevas,
y también resulta simple implementar solo la parte crítica de rendimiento en C++
Si hubiera tenido que depurarlo yo mismo con GDB, me habría tomado mucho más tiempo
Me gusta que se encargue de las partes desagradables, como el manejo de cadenas o punteros
El código que genera el compilador siempre es más eficiente, pero estoy usando los errores de la IA como oportunidades de aprendizaje
Incluso con un LLM local puedes automatizar verificaciones como la liberación de memoria
Hace poco hubo una discusión titulada “Why AI Needs Hard Rules, Not Vibe Checks”
(enlace)
La razón por la que Rust encaja bien con el vibe coding es por sus validaciones gratuitas, como las garantías de tipos y lifetimes
Sin ese tipo de verificación, un LLM puede producir fácilmente código inseguro
La abstracción no solo la necesitan los humanos, también los LLM
Un lenguaje en el que haya que especificar estrictamente cada función, variable, tipo y excepción
Sería incómodo de escribir, pero fácil de leer y verificar
Trata la dificultad de traducir preservando la intención y no solo la ruta de ejecución del código
Herramientas como Shellcheck también convierten a un principiante en experto
Si quieres mejorarlo con RL, debes poder juzgar automáticamente la consistencia del código
Hace falta revalorar lenguajes basados en lógica como Prolog
Si un LLM produce código lleno de bugs, cambiar de lenguaje no necesariamente cambia mucho el resultado
Al principio el vibe coding me sorprendió, pero pronto ese bucle constante de correcciones me derritió la cabeza
Te roba la concentración como hacer scroll en un feed algorítmico
Ahora programo yo mismo y solo le dejo a ChatGPT las partes aburridas
Y además no aprendes nada
Así aclaras los requisitos y te resulta más fácil cambiar a otra IA después
Dudo que un LLM pueda generar código C sin fugas de memoria
Es un área en la que incluso los desarrolladores humanos se equivocan, y un LLM con datos de entrenamiento de baja calidad es todavía más riesgoso
Si haces vibe coding de un programa que termina con segfault, eso es solo una pérdida de tiempo
Casi nunca se rompe y siempre compila
Los humanos se cansan; el LLM no
Si se reentrenan con buen código C, hay margen de mejora
¿Que la IA evita el undefined behavior en C? Difícil de creer
Si el modelo está entrenado para equivocarse como un humano, es muy probable que produzca los mismos bugs
Como predicen los tokens más probables, cometen menos errores comunes
Y además detectó bien la causa del crash
Lenguajes modernos como Zig o Rust son muchísimo mejores
La razón por la que el vibe coding me incomoda no es simplemente que parezca “hacer trampa”
Programar es un arte con alma
Cada persona resuelve problemas de una manera distinta, y ahí está la creatividad
El vibe coding se siente como si la máquina absorbiera esa creatividad
Al final, la máquina piensa, decide y hasta se equivoca por ti
Hubo una propuesta de crear un “vibe-oriented programming language (VOP)”
Pero si fuera un lenguaje para LLM, en realidad tendría que ser estricto y verboso
No debería compilar a menos que se expliciten todas las condiciones y excepciones
Para los humanos sería incómodo, pero para un LLM tendría la ventaja de reducir la confusión
Hace falta una estructura donde el humano explique el concepto y la IA lo convierta en código
Una vez que compilaba, casi siempre funcionaba bien
Incluso si haces vibe coding, deberías hacerlo en un lenguaje que conozcas bien para poder revisar el resultado
Si no, quizá sea mejor experimentar directamente en brainfuck
A la pregunta de “¿entonces por qué no hacerlo en ensamblador x86?”,
respondió que no, porque debe poder revisarlo y extenderlo él mismo
El vibe coding puro es solo un experimento mental, no un objetivo realista
Tal vez algún día la IA pueda encargarse también del QA, pero por ahora siguen siendo indispensables los lenguajes seguros y la validación humana
Ya soy un desarrollador tan veterano que este tipo de discusiones ya hasta cansan