Cómo escribir código con Cursor
(arguingwithalgorithms.com)Qué es Cursor
- Cursor es un fork de Visual Studio Code (VS Code) con funciones basadas en Large Language Model (LLM) integradas en la UI principal
- Es un producto propietario y tiene un nivel gratuito y opciones de suscripción
- Funciones principales:
- Autocompletado con Tab: un modelo propietario ajustado específicamente para autocompletar código y avanzar a la siguiente acción sugerida, disponible solo para suscriptores
- Edición en línea: una interfaz basada en chat disponible para usuarios gratuitos y de pago, que edita el código seleccionado usando una vista diff
- Barra lateral de chat: una interfaz basada en chat disponible para usuarios gratuitos y de pago, que ofrece espacio para discusiones más largas
- Composer: una interfaz basada en chat diseñada para grandes refactorizaciones en múltiples archivos, disponible para usuarios gratuitos y de pago
Autocompletado con Tab
- Es la función más natural de usar al escribir código y la que más tiempo puede ahorrar
- No solo sugiere completados para una línea, varias líneas o funciones completas, sino también la siguiente línea a la que conviene moverse para la próxima edición
- Se puede presionar la tecla Tab repetidamente para autocompletar cambios relacionados en todo el archivo
- Puede usarse como herramienta de refactorización de código
- A veces incluso encuentra bugs por sí solo y propone correcciones
- Si se encierra una cadena entre comillas, escapa el contenido de forma adecuada
- Puede escribir una función completa solo con la firma de la función y un docstring opcional
- Las sugerencias de completado son muy rápidas
- Desventajas:
- Si no ves la sugerencia a tiempo y sigues escribiendo, la sugerencia de completado desaparece
- A veces, aunque se rechace intencionalmente un completado incorrecto, al aceptar después otro completado se aplica silenciosamente la sugerencia rechazada antes
Edición en línea, barra lateral de chat y Composer
- La interacción con el modelo base (principalmente Claude 3.5 Sonnet) es muy similar, y la diferencia está en la interfaz de usuario
- La edición en línea se invoca con Ctrl-K/Cmd-K, se escribe el cambio deseado y luego se obtiene un diff que puede aceptarse o rechazarse
- La barra lateral de chat se abre con Ctrl+L/Cmd+L y ofrece más espacio para conversar varias veces
- Composer está diseñado para refactorizaciones entre varios archivos y ofrece una mejor experiencia de usuario para revisar varios diffs de archivos, uno a la vez
Archivo .cursorrules
- El contenido del archivo .cursorrules ubicado en la raíz del espacio de trabajo siempre se incluye en varias modalidades de chat para aportar contexto adicional
- Se usa para informar al LLM sobre los estándares de codificación del repositorio, paquetes comunes y otra documentación
- Puede ayudar a resolver uno de los grandes obstáculos de Cursor: no seguir estilos y patrones de código a menos que ya existan en el archivo que se está editando
- Actualmente solo hay un archivo por espacio de trabajo, por lo que un monorepo con código en varios lenguajes es más difícil de configurar que un repositorio pequeño con un conjunto de código reducido y de estilo consistente
- El archivo .cursorrules solo se usa en las modalidades de chat, no en el autocompletado con Tab
Cambios en el flujo de trabajo
- Lo más interesante no es que se pueda escribir código más rápido
- En realidad, escribir código en sí no es el cuello de botella
- El verdadero valor está en cambiar la forma de escribir código
- Lo que cambió:
- Es mucho menos probable que busque nuevas librerías o frameworks
- Para utilidades pequeñas, suele ser más fácil hacer que el LLM escriba algo a medida para los requisitos específicos que importar una librería genérica
- Muchas librerías existen solo para reducir boilerplate, pero si el LLM puede hacerlo en su lugar, el costo ya no parece valer tanto la pena
- Me preocupa menos seguir estrictamente el principio DRY (Don't Repeat Yourself) en mi propio código
- Definir abstracciones demasiado pronto puede generar mucha deuda técnica más adelante
- Ahora se puede generar bastante código tomando como referencia otro código, sin necesidad de convertirlo de inmediato en funciones o clases, lo que da más flexibilidad
- Estoy mucho más dispuesto a usar lenguajes o frameworks con los que estoy menos familiarizado
- Por ejemplo, antes me costaba usar R, pero ahora basta con describir la visualización deseada para obtener la manipulación de datos correcta y una visualización con ggplot
- Estoy iterando rápidamente componentes pequeños antes de integrarlos en una base de código más grande
- Esto también ayuda a lidiar con las limitaciones del LLM, pero además abre una forma de trabajo interesante que antes no había considerado
- Es mucho menos probable que busque nuevas librerías o frameworks
Resumen
- Por ahora, Cursor es el mejor ejemplo de cómo se ve el potencial de un asistente de programación con LLM
- Si quieres explorar cómo podría aportar valor este tipo de herramienta, vale la pena probar Cursor
Opinión de GN⁺
- Cursor parece ser un buen caso que muestra el potencial de las herramientas de programación basadas en LLM
- En particular, la función de autocompletado con Tab resulta atractiva porque se usa de forma natural al escribir código y puede ahorrar mucho tiempo
- Las funciones basadas en chat también parecen útiles para refactorización, transformación de código y tareas similares
- Aun así, como todavía está en una etapa temprana, también parece tener limitaciones
- La dificultad para aplicar un estilo de código consistente
- Problemas de usabilidad en estructuras de proyecto complejas como monorepos
- Falta de claridad en las diferencias de funciones entre usuarios gratuitos y de pago
- Otras herramientas con funciones similares incluyen GitHub Copilot, Tabnine y Kite
- Como cada herramienta tiene pros y contras, conviene elegir según las características del proyecto o las preferencias personales
- Al adoptar herramientas de programación basadas en LLM, vale la pena considerar aspectos como:
- Aceptación del equipo de desarrollo: si existe o no resistencia a introducir una herramienta nueva
- Costo de aprendizaje: cuánto tiempo llevará aprender a usar la herramienta
- Mantenibilidad: si el código generado por la herramienta es fácil de entender y mantener
- Calidad del código: si realmente ayuda a mejorar la calidad del código
- Relación costo-beneficio: si la mejora de productividad compensa los costos de adopción y mantenimiento
6 comentarios
La clave es el chat de Cursor. Está muy cómodo para generar docstrings.
Después de usar Cursor, siento que el autocompletado de Copilot es demasiado lento. T_T
¿El autocompletado con Tab solo está disponible para quienes pagan?
Es cierto que es solo para suscriptores, pero hay una suscripción gratuita y ofrece 2000 autocompletados al mes. Yo la he estado usando así durante 3 meses.
https://www.cursor.com/pricing
Sí
Está escrito en el artículo, jaja.