Con la aparición ya hace unos años de la inteligencia artificial, sobre todo de chatGPT, muchos nos preguntamos cómo nos ayudaría en nuestro día a día, especialmente en el desarrollo de software o programación.
Muchos tuvieron, y aún tienen miedo, de que la inteligencia artificial les va a quitar su trabajo, y podría ser posible en un futuro lejano, pero no aún, y probablemente queden muchos años para eso, aunque, ¿quién sabe?
Lo que si sabemos es que los profesionales que no abracen y usen la inteligencia artificial se van a quedar atrás, eso es un hecho. Y en el desarrollo de software ocurre lo mismo.
En un inicio, se empezó usando chatGPT, donde había que copiar y pegar código al chat, y además teníamos restricciones en cuanto al número de tokens. Esto es un proceso tedioso. Para algo concreto funciona bien, le das un trozo de código, le preguntas algo sobre ello y te da la respuesta, iteras sobre el prompt y obtienes un resultado.
Esto se ha mejorado un poco mas (modelo claude y su chat), pero aún asi no es lo mas amigable y eficiente estar copiando y pegando código a un chat externo en nuestro navegador u otra aplicación. Como desarrolladores sabemos que no siempre es tan simple.
Normalmente tenemos nuestros IDEs, o entornos de desarrollo, donde nuestros proyectos se componen de cientos o miles de archivos y líneas de código. Uno de los más populares es VSCode, desarrollado por Microsoft, seguro que muchos lo conocen y utilizan.
Dentro de los IDEs, podemos instalar plugins para extender sus funcionalidades, y para el caso de plugins de AI, tenemos muchos. El más conocido es Github Copilot, desarrollado también por Microsoft, muy potente y poderoso. Y era uno de los reyes incuestionables en cuanto a integrar AI en el mismo espacio donde el código vive, pero…
Un equipo empezó el desarrollo de un nuevo IDE, llamado Cursor. Pero no es un IDE desarrollado desde 0, es un fork o proyecto derivado de VSCode, porque VSCode es de código libre, y cualquiera puede acceder a su código fuente.
Esto hace que por defecto tengamos todo lo que ya tiene VSCode, incluyendo todos sus plugins. Pero Cursor viene con una integración que pone a nuestra disposición diversos LLMs y así utilizar el que más se adapte a nuestra necesidad puntual, volviéndolo mucho mas amigable y fácil de usar que con los plugins que se pueden instalar en VSCode.
Evidentemente, existen otros muchos IDEs en el mercado con integración de AI, como PyCharm de JetBrains que es muy potente también como IDE. Pero aquí te hablaremos sobre Cursor y alguna de sus peculiaridades que lo están convirtiendo en una tendencia entre los desarrolladores.
Cursor es un IDE, originalmente un fork de VSCode como ya dijimos, para que en nuestro proceso de desarrollo de software nos ayude a integrarnos con las herramientas de inteligencia artificial sin salir del entorno. Es compatible con cualquier lenguaje de programación, tiene funciones como autocompletado y generación de código, y hace mucho mas fácil nuestro trabajo.
En todos lados se está hablando de Cursor, y seguramente ya lo conozcas, pero quiero enseñarte más a detalle qué podemos hacer con él.
Primero, para instalar Cursor. No voy a entrar en el detalle, pero solo necesitas descargar el instalador desde su página web oficial.
Al hacer clic en el botón “Download for Free”, detectará automáticamente tu sistema operativo (tiene versión en Windows, Linux y MacOS) y descargará el instalador que necesites. Finalmente ejecuta el instalador, sigue los pasos, y completa la instalación.
Una vez instalado, al abrirlo podrás importar toda la configuración que ya tenias en VSCode si lo deseas. Por defecto se puede usar sin necesidad de pagar, gratis, pero si quieres usar algunas funciones avanzadas, necesitas una cuenta y pagar la suscripción.
La suscripción Pro cuesta $20 dólares por mes. Ademas existe la suscripción Business, donde el costo dependerá del número de empleados ($40 por usuario por mes). Algo importante es que Cursor puede usar diferentes LLMs, convirtiéndolo actualmente en la opción más versátil, ya que puedes escoger el LLM que más se adapte a ti, o directamente un mix de todos, esto se hace desde los settings. Una vez instalado puedes abrir la configuración de Cursor.
Ahora te estarás preguntando, ¿cuáles diferencias hay entre Cursor y Github Copilot? ¿Parece que hacen lo mismo, no?
Bueno realmente Github Copilot, para el caso de VSCode, es un plugin, mientras que Cursor es un fork completo de VSCode, modificado por su propio equipo de desarrollo, y eso va a hacer que tenga todo lo que ya tiene VSCode, además de la integración para el uso con AI como ya comentamos.
Si no usásemos ningún IDE, sea VSCode, CursorAI, Pycharm etc, entonces tendríamos que estar copiando y pegando código e irnos a un chat, sea chatGPT, Claude, o cualquier otro. Esto hace engorroso el proceso. Es mucho más cómodo tener ya nuestro IDE con la AI integrada.
Cursor además tiene otra ventaja importante, y es que podemos seleccionar cuál LLM usar, ya vimos cómo podemos hacerlo, no estamos atados a uno solamente. En el día en que se escribe este artículo, el mejor modelo en general para desarrollo de software es Claude Sonnet 3.5, y Cursor nos deja seleccionar este último.
Si no pagamos la suscripción, tenemos alternativas de modelos gratuitos, como chatGPT 3.5 o cursor small. De todas formas tenemos un trial de 2 semanas para probarlo.
En algo que pudiera ser un defecto, es que los modelos que el propio Cursor llama “premium”, solo tenemos 500 requests por mes en el plan Pro. Pero en principio es suficiente y no deberiamos tener problemas con ello, aunque ya depende de cada persona y el uso que haga mensualmente en peticiones.
La integración de Cursor es mejor que VSCode con plugins, y más fácil de usar. Vamos a los ejemplos para que veas lo que podemos hacer.
Tenemos varias formas de usarlo, vamos a verlas.
Similar a GitHub Copilot, Cursor ofrece autocompletado en tiempo real mientras escribes código. Si en python queremos escribir una función para sumar dos números, en cuanto escribimos el inicio de la función, Cursor automáticamente nos sugiere el resto del nombre y parámetros de la función:
Si pulsamos tab, nos autocompleta lo sugerido. En mi caso al completar el nombre y parámetros, me volvía a sugerir el cuerpo de la función, al volver a pulsar tab automáticamente genera todo el código.
Supongamos que queremos introducir type hints. Podemos escribir comentarios y el propio Cursor nos a va sugerir los cambios necesarios:
De nuevo pulsando tab autocompleta el código. Like magic 🪄
Puedes seleccionar un fragmento de código y pedirle a CursorAI que lo explique, lo arregle, mejore, etc. lo que necesitemos. Usemos algo más complejo, en este caso typescript, por ejemplo este archivo utils.ts
Primero vamos a preguntarle qué hace el código. Para ello vamos a seleccionar la función copyUsingModernAPI
y pulsamos CMD+K
Como vemos en el pequeño popup que se abre y donde podemos preguntarle lo que necesitemos, podemos darle contexto, por defecto está usando el archivo test.ts (así le puse de nombre al archivo en mi local), y además las líneas seleccionadas.
Pero si por ejemplo ese método hiciera una llamada o usara algo de otro archivo, pulsando sobre el botón +
podemos darle ese otro archivo como contexto, lo cual lo hace muy potente y sencillo de usar desde la interfaz.
Podemos indicarle el modelo a usar, en este caso estoy usando Claude Sonnet 3.5. Si lo intentas podría darte algo diferente en la forma de expresarlo, pero siempre acaba explicando el código de un modo u otro.
Y como habrás notado, le he preguntado en español, ya que la mayoría de LLMs soportan el idioma perfectamente.
Ahora le pido si puede mejorar el código:
Y la respuesta es:
Nos genera una respuesta bastante extensa, definiendo variables, y reorganizando código. Quizás para un archivo utils sea demasiado hacer todo eso, pero aquí ya entramos nosotros en decidir qué queremos, ya que finalmente somos quienes tenemos el control.
Aqui, tambien similar a Copilot Chat, podemos preguntarle diferentes cosas de nuestro código. Cursor de nuevo, es mucho más amigable en la forma en la que tenemos de darle el contexto de nuestro código.
Simplemente podemos seleccionar el código y al escribir ya va a tener ese contexto de las líneas seleccionadas. Tambien podemos seleccionar cuáles archivos queremos que tenga en cuenta para respondernos. Esto es muy poderoso, porque no es necesario que tenga el contexto completo de nuestro proyecto.
Muchas veces solo son 2 o 3 archivos, y sobre esos queremos hacer un fix, o agregar una nueva funcionalidad, y con eso le es más sencillo hacerlo. Sobre el código anterior, vamos a pedirle que genere los tests unitarios necesarios para las 3 funciones.
Y por supuesto nos da la respuesta. Aquí podemos usar el botón de Apply para que nos genere el nuevo archivo con los tests.
Y por cierto, si abrimos una terminal en Cursor y empezamos a escribir algo, al abrir el chat es capaz de obtener el contexto de lo que estabas escribiendo, y tambien podemos preguntarle sobre ello.
Sigamos con más ejemplos de cosas que tenemos en Cursor. También podemos buscar algo sobre nuestro código. Cursor guarda nuestro código localmente usando embeddings, y de ahí podemos buscar de manera muy eficiente cualquier cosa en nuestro proyecto.
Usando el código de django (django es software libre y su codigo es accesible a cualquiera, y lo puede leer quien quiera e incluso proponer cambios 😊 ), voy a buscar la parte donde ocurre la validación de seguridad al establecer una nueva contraseña. Nótese en la imagen que el proyecto aún no estaba completamente indexado, estaba a un 58.4% y me indica que cuando esté completamente descargado será aún mas rápido y mejor en la búsqueda, para eso son los embeddings.
Ya hemos visto que tenemos el @ para poder especificar archivos o código específico, pero también podemos indicarle que haga una búsqueda en web para algo en concreto. Por ejemplo, sobre el código de django, le pregunto cuáles frameworks de authorization existen en django, y obviamente el más conocido y usado es django rest framework. Aqui fíjate que escribí mal authorizationon y exiten, y aún asi me entendió y buscó en internet lo que le estaba pidiendo, todo sin salir del IDE.
Ahora podemos añadir una documentación, con Docs, añadí el link a la documentación de django rest framework que queda en los settings:
Y automáticamente me deja preguntarle sobre la propia documentación, en este caso cómo puedo implementar un action, y me dice como dandóme un ejemplo. Esto es mágico, ya no tenemos que estar leyendo documentación, y además lo podemos integrar sobre nuestro proyecto, donde apoyándose sobre la documentación agregue o cambie alguna cosa.
Vamos a hacer algo más. Sobre el proyecto de django, vamos a pedirle que en el archivo de password validators agregue un nuevo validador.
Le damos a Apply y ya tenemos nuestro validador. Por supuesto podemos pedirle también que cree los tests necesarios para ese validador.
Pero vamos a usar el mention a git con el @ para que nos ayude a visualizar el diff actual. Además podemos ver commit anteriores y ramas, visualizar los cambios, y preguntarle sobre esos cambios para entender qué es lo que ocurre 😮
Esto es un aspecto muy personal, pero desde mi punto de vista si, totalmente, o al menos darle una oportunidad. Si ya eres usuario de VSCode es un must que lo pruebes y veas por ti mismo de lo que es capaz.
La pregunta que nos queda ahora es, ¿hasta dónde llegaremos? pues seguramente nuestra imaginación sea el límite. Hace sólo unos días (desde la fecha en que se escribió este artículo) Anthropic anunció algo que ellos llaman computer use que básicamente es que la intelegencia artificial controle tu computador, tu simplemente le mandas un acción y ya solo hace lo necesario. Aquí el anuncio con un vídeo de ejemplo.
Esto suena fascinante, ya me imagino las nuevas herramientas con AI para desarrolladores, donde dejemos de usar un chat, y simplemente sea como hacer pair programming, con alguien a tu lado comentando y sugiriendo cambios, errores etc, simplemente con darle contexto de lo que se quiere realizar…
Si quieres seguir estando en este cresta de la ola, no olvides tu suscripción a Platzi, y puedes empezar por nuestro curso de chatGPT