Skip to main content

Vibe Coding

· 13 min read
David Puziol Prata
DevSecOps at @ dLocal

Si ya te viste atrapado en el ciclo frustrante de alternar entre tu editor de código y una pestaña del ChatGPT, entiendes la principal limitación de la IA generativa convencional. El proceso de copiar, pegar y adaptar un código generado sin contexto no es apenas tedioso — es ineficiente y rompe el flujo creativo del desarrollo. La IA, en ese modelo, es una espectadora inteligente, pero nunca una participante real de tu proyecto.

Es aquí donde una nueva filosofía, bautizada de "Vibe Coding", promete redefinir el paradigma. Se trata de una técnica de programación donde la interacción con la IA acontece de forma nativa y contextual. El desarrollador describe el resultado esperado en lenguaje natural, y la inteligencia artificial, inmersa en el código fuente, genera las soluciones directamente, como un verdadero compañero de programación.

Este cambio transforma fundamentalmente el papel del desarrollador. Dejamos de ser apenas "escritores de código" para volvernos "arquitectos de intención" o "directores de orquesta". El foco migra de la microgestión de la sintaxis para la macrogestión de la lógica, permitiendo una velocidad de prototipado y experimentación antes inimaginable y acelerando el futuro de la creación de software.

¿Pero será que eso funciona realmente? Si no sabes nada de desarrollo de software y experimentas eso, me dirás que sí, ¿pero será realmente? Vamos a hacer un análisis rápido antes de la conclusión.

La Relación con el "Cursor"

El Cursor es un fork del VS Code. El equipo del Cursor tomó el código fuente open source del Visual Studio Code (VS Code), que es mantenido por Microsoft, y creó una versión modificada de él.

Muchos desarrolladores ya son muy familiarizados con VS Code lo que facilita mucho la nueva experiencia con el Cursor.

  • Base familiar
  • Compatibilidad con Extensiones
  • Foco en IA

Si ya tuviste alguna experiencia en VS Code intentando usar extensiones para añadir una IA, con certeza irás a adorar el Cursor. Inclusive al instalar el Cursor él ya te pregunta si quieres importar todas tus configuraciones que ya están definidas en el VS Code.

La experiencia es notablemente diferente, aunque el Cursor sea construido sobre la base del VS Code. La principal diferencia reside en la profundidad y en la forma como la inteligencia artificial es integrada a la experiencia de desarrollo.

La conexión entre "vibe coding" y "Cursor" es directa y fundamental. Cursor es un editor de código proyectado específicamente para facilitar y potencializar la práctica del "vibe coding". Se autodenomina un "Editor de Código de IA" e integra funcionalidades de inteligencia artificial directamente en su ambiente de desarrollo.

Lo que tenemos de mejoras usando el Cursor:

  • Consciencia Total del Proyecto (Codebase-Aware): Este es el principal diferencial. Antes de cualquier interacción, el Cursor puede indexar todo tu proyecto, cada archivo, dependencia y definición de función. Cuando pides para refactorizar un código, la IA no está viendo apenas aquel trozo aislado; sabe cómo ese cambio impactará en varios lugares. Eso resulta en refactorizaciones mucho más inteligentes que consideran la arquitectura de software como un todo, y no apenas un archivo.

  • Edición Conversacional e Inmersiva (Inline AI): La interacción no acontece primariamente en un panel de chat, sino directamente en el código. Al seleccionar un bloque, abres un prompt en el lugar de tu código. No estás pidiendo para generar un nuevo código en otro lugar, estás mandando la IA esculpir y modificar el código existente en tiempo real. La sensación es la de estar programando en dupla con la IA, moldeando la lógica con comandos en lenguaje natural, lo que elimina la ruptura de contexto del "copiar y pegar".

  • Chat que "Lee" Tus Archivos: Incluso el panel de chat del Cursor es más inteligente. En vez de pegar trozos de código para dar contexto, puedes simplemente digitar @ y mencionar archivos de tu proyecto y la IA instantáneamente carga aquel contexto completo para la conversación, permitiendo que hagas preguntas mucho más complejas.

El Cursor es la herramienta que operacionaliza el concepto de "vibe coding". Mientras "vibe coding" es la metodología o la filosofía de desarrollo.

Codificando con el Cursor

Para colocar el Cursor a prueba, decidí embarcar en un proyecto clásico: crear un juego Tetris desde cero, utilizando apenas la versión gratuita de la herramienta. Mi intención era entender hasta dónde la IA conseguiría llevarme sin costos.

La Barrera del Plan Gratuito

Los primeros 40 minutos fueron una mezcla de productividad y frustración. La IA inicial generó la estructura básica del proyecto, separando el HTML, CSS y JavaScript. Sin embargo, a medida que la lógica se volvía más compleja, el sistema comenzó a patinar. Llegó un momento en que la IA introdujo un bug y simplemente no conseguía más salir del lugar.

Por más que explicaba el error, apuntaba la función problemática y sugería diferentes abordajes, las respuestas eran repetitivas o generaban nuevas fallas. La IA quedó presa en un loop, incapaz de resolver los problemas que ella misma había creado. Fue el límite claro del modelo de IA disponible en el plan gratuito.

El Punto de Viraje: El Upgrade para la Cuenta Paga

Cansado de luchar contra la máquina, pues no quería colocar la mano en el código, decidí hacer el upgrade para el plan Pro. ¡Y el resultado fue inmediato. Bum! En la primera tentativa, describí el mismo problema que me trabó por más de media hora. La respuesta de la IA paga fue diferente: no apenas encontró el bug, como también explicó la causa raíz y aplicó la corrección de forma precisa. La diferencia en la capacidad de raciocinio fue gritante.

Con el principal obstáculo resuelto, aproveché para cuestionar la arquitectura del código. Inicialmente, la IA había colocado toda la lógica del juego en un único archivo JavaScript. Al pedir por mejoras, rápidamente sugirió e implementó una refactorización, separando el código en módulos más organizados y cohesivos.

Aquí el Cursor ya con una mejora de tema el Drácula.

alt text

Y nuestro resultado simple, pero vale recordar que no coloqué ni la mano en el código.

alt text

Si no quieres pasar rabia, es bueno pagar, la experiencia fue mucho mejor.

Para desbloquear todo el potencial del Cursor, con acceso a los modelos de IA más poderosos, existen dos caminos principales: asignar el plan Pro del propio editor o configurar tu llave de API de un servicio que ya pagas.

  • La Asignación Cursor Pro (El Plan Integrado): Esta es la opción más simple y, para la mayoría de los desarrolladores, la más ventajosa. Por una tasa fija mensual (actualmente $20), obtienes acceso ilimitado y sin preocupaciones a los mejores modelos del mercado, como el GPT-4o y, crucialmente, el Claude 4. Es la experiencia "todo incluido", ideal para quien usa la IA intensivamente y no quiere preocuparse con el consumo de tokens.

  • Usando Tu Propia Llave de API (Bring Your Own Key - BYOK): Si ya posees créditos en plataformas como la de OpenAI o Google AI, el Cursor permite que insertes tu llave de API y pagues por uso (pay-as-you-go). Esta puede ser una alternativa para quien usa la IA de forma muy esporádica.

¡Quédate Atento!

Con todo ese poder de generación de código al alcance de los dedos, la tentación de acelerar sin mirar para los lados es grande. Es aquí que entra la principal habilidad del desarrollador moderno: el escepticismo productivo. ¡Por eso, Quédate Atento!

Simplemente pedir lo que se quiere a la IA y aceptar el resultado porque "parece funcionar" es una trampa peligrosa para aplicaciones reales.

Para prototipos, pruebas de concepto o scripts simples, esa velocidad es transformadora.

Sin embargo, cuando la aplicación es real, crítica, con datos de clientes, requisitos de performance, seguridad y un ciclo de vida de mantenimiento (SDLC) "codificar por la vibe" se vuelve peligroso. La IA generativa es un copiloto, no el piloto. Y un copiloto solo es útil si el piloto sabe volar el avión, entender los instrumentos y es el responsable final por la seguridad del vuelo.

La verdad es que, para usar el Cursor en desarrollo profesional, o cualquier otro sistema con IA, es necesario ser aún más competente que antes. La IA no disminuye la necesidad de conocimiento; la amplifica. El foco apenas cambia: de escribir código línea a línea para revisar, arquitectar y validar el código en un nivel más alto.

Dominio Profundo de los Fundamentos de Programación y del Lenguaje

La IA puede generar un código que funciona, pero que puede ser ineficiente, no idiomático o simplemente malo. Sin un conocimiento sólido, no sabrás la diferencia.

  • ¿Qué hizo la IA?: Necesitas ser capaz de leer y entender cada línea de código que la IA generó o propuso alterar. Si no consigues explicar por qué la IA escogió un abordaje en vez de otro, estás trabajando con una "caja negra" de código.

  • Performance: La IA puede generar un algoritmo con complejidad mucho mayor de lo necesario. Apenas un desarrollador con experiencia de estructuras de datos y algoritmos puede identificar y corregir eso.

    Un desarrollador puede pedir una función para ver si una lista tiene duplicados y recibir eso.

    def tem_duplicatas_forca_bruta(lista):
    """
    Verifica si la lista contiene duplicados comparando cada elemento
    con todos los otros.
    """
    for i in range(len(lista)): # 2 Fors aquí.
    for j in range(i + 1, len(lista)):
    if lista[i] == lista[j]:
    return True # ¡Encontró un duplicado!
    return False # Ningún duplicado encontrado.

    Funcionar funciona, pero vamos a hacer un análisis.

    • Para una lista de 10 ítems, hace cerca de 10×10=100 comparaciones.
    • Para una lista de 1.000 ítems, hace cerca de 1.000×1.000=1.000.000 comparaciones.
    • Para una lista de 100.000 ítems (común en un e-commerce), hace 100.000×100.000=10.000.000.000 (10 billones) de comparaciones!

    Mientras que en verdad una función así sería mucho más performática.

    def tem_duplicatas_otimizado(lista):
    """
    Verifica si la lista contiene duplicados usando un conjunto (set)
    para tener una búsqueda casi instantánea.
    """
    itens_vistos = set() # Crea un conjunto vacío.
    for item in lista:
    if item in itens_vistos:
    return True # El ítem ya fue visto, ¡es un duplicado!
    itens_vistos.add(item) # Añade el ítem al conjunto de ítems ya vistos.
    return False # Ningún duplicado encontrado.
    • Para una lista de 10 ítems, hace 10 operaciones.
    • Para una lista de 1.000 ítems, hace 1.000 operaciones.
    • Para una lista de 100.000 ítems, hace 100.000 operaciones.
  • Idiomas del Lenguaje (Idiomatic Code): Una IA puede escribir un código Python que parece Java, o un JavaScript que ignora las mejores prácticas del ES6. Eso mejoró bastante desde que sepas pedir.

    Una IA podría hacer eso.

    # Funciona, pero no es como se escribe en Python.
    # Parece una traducción directa de Java/C++.
    frutas = ["manzana", "banana", "naranja"]
    i = 0
    while i < len(frutas):
    print(frutas[i])
    i += 1

    Es verboso, exige el gerenciamiento manual del índice i y hay un pequeño riesgo de errores lógicos.

    Pero un desarrollador experimentado haría eso, que es más seguro y universalmente entendido por cualquier programador Python.

    # El modo Python de hacer las cosas.
    # Directo, legible y seguro.
    frutas = ["manzana", "banana", "naranja"]
    for fruta in frutas:
    print(fruta)

Conocimiento Sólido de Arquitectura de Software y Design Patterns

La IA es excelente en tareas tácticas (crear una función), pero limitada en decisiones estratégicas (estructurar el sistema).

  • Visión Macro vs. Micro: ¿Dónde ese nuevo componente debe vivir en la arquitectura? ¿Debe ser un servicio separado? ¿Cómo se comunica con el resto del sistema? La IA no tiene el contexto del negocio o los objetivos de largo plazo para tomar esas decisiones. Esa continúa siendo una responsabilidad puramente humana.

  • Aplicación de Principios: Necesitas entender principios como SOLID, DRY (Don't Repeat Yourself) y KISS (Keep It Simple, Stupid) para orientar la IA. Puedes pedir al Cursor: "Refactoriza esta clase para seguir el Principio de Responsabilidad Única", pero necesitas saber lo que es ese principio para validar si el resultado está correcto.

Mentalidad de Seguridad (Security Mindset)

Esta es tal vez el área más crítica. La IA es entrenada con un vasto cuerpo de código de internet, que incluye innúmeros ejemplos de código vulnerable.

  • Validación de Entradas: La IA puede olvidarse de validar y sanear inputs del usuario, abriendo puertas para ataques de SQL Injection o Cross-Site Scripting (XSS).

  • Gerenciamiento de Secretos: La IA puede accidentalmente sugerir que una llave de API o contraseña sea colocada directamente en el código. Un desarrollador experimentado sabe que eso debe ser gestionado a través de variables de ambiente o un servicio de secretos.

  • Elección de dependencias: La IA puede sugerir una biblioteca por ser popular en sus datos de entrenamiento, sin saber que posee vulnerabilidades conocidas (CVEs), está depreciada o tiene un mantenedor poco confiable, introduciendo un riesgo de seguridad en toda la cadena de suministros de software

Habilidades de Debugging y Análisis Crítica

Cuando el código generado por la IA falla, la responsabilidad de encontrar y arreglar el bug es 100% tuya.

  • Causa Raíz: Si no entiendes el código, no consigues usar un debugger de forma eficaz para trazar la ejecución y encontrar la causa raíz del problema. Quedarás preso en un ciclo de tentativa y error, pidiendo a la IA para "intentar arreglar", sin un diagnóstico real.

  • Cuestionamiento Activo: La habilidad más importante se vuelve la capacidad de cuestionar la IA. "¿Por qué usaste esa biblioteca?", "¿Existe una manera más performática de hacer eso?", "¿Cuál el trade-off de ese abordaje?"


Conclusión: Asustado, No Impresionado

Al final de esta experiencia, la sensación predominante no es de impresión, sino de un cierto recelo. Quedé asustado con la facilidad con que un desarrollador podría caer en la ilusión de productividad, cuando en verdad está apenas cambiando una tarea (escribir código) por otra, aún más cara: la de ser un supervisor constante. Si sumamos el tiempo gastado analizando código generado, pidiendo incontables refactorizaciones, debugueando lógicas obscuras y corrigiendo decisiones arquitectónicas malas, la promesa de economía de tiempo se deshace.

Cuando dejamos la IA muy autónoma perdemos completamente el control, pues el proyecto crece exponencialmente en términos de complejidad y mirar para todo eso queda insostenible viniendo a la conclusión de que "era mejor haber hecho desde cero para tener total control y conocimiento". El tiempo de debuguear un código que no fue escrito por mí es mucho mayor. Necesito parar para analizar y entender la lógica, mientras que si yo hubiera hecho ya sabría de qué se trataba.

Pero esa visión es incompleta. Sí, veo un valor inmenso en herramientas como el Cursor, pero no como el responsable por "codear". Su verdadero poder surge cuando lo vemos como un consultor omnipresente: un compañero que ya leyó todo tu proyecto, entiende el contexto y está listo para responder a una pregunta o sugerir una mejora sin que yo necesite copiar y pegar código en otra ventana. El valor no está en delegar la tarea, sino en eliminar la fricción para obtener ayuda calificada.

Para tareas simples y ayudarme a debuguear algo puede hacer sentido, pero dejarlo estructurar las cosas aún está bien lejos.

No entendí el término Vibe. Eso para mí parece más un sufrimiento que una Vibe. ¡Vibe es para ser feliz! Vibe coding es buscar sarna para rascarse. Si un día eso prospera de verdad tendremos el famoso Prompter Engineer siendo contratado.