Inteligencia Artificial

Experiencia con Copilot tras 8 meses de uso

El lanzamiento de Copilot generó bastante revuelo entre programadores. Tras meses de uso, tenemos una opinión más certera sobre su uso, ¿quieres conocerla?

Publicado el 04 de Noviembre de 2022
Compartir

Qué es Copilot y por qué usarlo

Copilot es una aplicación basada en servidor para el IDE VS Code ofrecida por el repositorio de Git más popular actualmente, Github, organización perteneciente a Microsoft, empresa más conocida por ser la creadora y desarrolladora del sistema operativo Windows.

El objetivo de Copilot es, a través de un modelo de lenguaje basado en el famoso GPT-3 y entrenado con el código disponible en la plataforma, ofrecer sugerencias durante el desarrollo de nuestro software, de forma que realmente tengamos la sensación de tener un “copiloto” humano que nos va guiando con ideas e incluso, en muchas ocasiones, fragmentos completos y perfectamente funcionales de código.

Dicho esto, hay que entender que Copilot no es capaz por sí mismo de “escribir nuestro código”, se basa en el contexto del código que generamos, los nombres de funciones y los comentarios, para producir sugerencias que pudieran sernos de utilidad y nos ahorraran tiempo, sobre todo en las tareas más frecuentes y anodinas.

Imagen 0 en Experiencia con Copilot tras 8 meses de uso

Por ejemplo, en el caso de la imagen anterior, Copilot nos sugiere (en gris) un código perfectamente válido para una función usada habitualmente, la función clamp, que dado un valor lo acota entre un valor mínimo y uno máximo, de forma que nunca supere ambos.

Incluso a veces, y para funciones más complicadas y específicas, podemos hacer una descripción de lo que debe recibir y devolver (en inglés siempre funcionará mejor) y Copilot en muchos casos nos ofrecerá una solución bastante funcional, que aun así será interesante revisar.

Imagen 2 en Experiencia con Copilot tras 8 meses de uso

En este caso por ejemplo le propongo que cree una función que genere un array de ruido coherente perlin dadas la anchura, altura, octavas y persistencia. El resultado, aun sin haber sido optimizado, es correcto y nos ofrece lo que necesitamos, lo que en muchos casos nos ahorrará tiempo para proyectos, sobre todo aquellos que se basen en pruebas y prototipado rápido.

Cómo funciona Copilot

Copilot tiene dos modos principales para ofrecer recomendaciones:

  • Recomendaciones mientras escribimos, las cuales pondrá en un overlay de color gris y que podremos aceptar simplemente pulsando el tabulador una vez.
  • Alternativas de recomendación, que podremos ver en un panel lateral al pulsar ctrl + enter, y que nos ofrecerá hasta 10 alternativas, de las cuales podremos aceptar la que más nos convenga:

Imagen 4 en Experiencia con Copilot tras 8 meses de uso

Para realizar las recomendaciones Copilot no sólo se basará en el comentario previo, sino que será capaz de extraer todo el contexto previo del archivo en el que nos encontremos, y también del propio workspace que estemos utilizando en VS Code, de forma que las recomendaciones no sólo serán genéricas, sino que intentarán incluir nuestras variables, conceptos e incluso trazas de nuestro propio estilo de programación.

Imagen 6 en Experiencia con Copilot tras 8 meses de uso

En la imagen anterior, por ejemplo, podemos observar como en un código de un proyecto propio, ha entendido que para cambiar una propiedad de la variable card es necesario usar el setter setCard y ha copiado el procedimiento usado en la función previa.

También es necesario aclarar que, pese a estar usando aquí código en Javascript, Copilot es capaz de entender y ofrecer recomendaciones en cualquiera de los lenguajes de programación disponible en su set de entrenamiento, esto es, cualquier lenguaje que sea usado en algún repositorio de Github. Por ejemplo, en la siguiente imagen podemos observar recomendaciones en C++ orientadas exclusivamente a desarrollo para Arduino:

Imagen 8 en Experiencia con Copilot tras 8 meses de uso

Ventajas del uso de Copilot

Después de estar usando esta aplicación profesionalmente y en proyectos personales durante ocho meses, las ventajas que he encontrado en mi experiencia han sido numerosas.

Es una ayuda rápida para tareas repetitivas

Debido a que es capaz de coger el contexto del archivo y del workspace en el que se encuentra resulta una herramienta increíble cuando es necesario realizar funciones auxiliares o rellenar templates de frameworks con referencias repetitivas a variables que se encuentren en nuestro archivo.

No sólo eso, sino que es capaz de entender que es necesaria cierta función que se encuentre fuera del propio archivo y que hayamos usado o definido previamente, pudiendo incluso referenciar a funciones de la API o auxiliares que se encuentren definidas en otras partes del proyecto.

Resulta muy útil para definir funciones habituales

Como vimos anteriormente con la función de clamp o la de ruido Perlin, Copilot es genial para definir rápidamente funciones que son utilizadas en prácticamente todos sitios, sin necesidad de importar librerías gigantescas con funciones auxiliares. Además, al ser funciones que generalmente se encuentran muy “trilladas”, el código que suele generar es por lo general muy eficiente y suele necesitar poca o nula revisión.

Es una fuente inestimable de ideas felices

Otra de las grandes ventajas que he encontrado a la hora de usarlo es la increíble fuente de ideas e incluso de funciones, características del lenguaje y similares que me ha aportado. Dado que el código del que ha aprendido ha sido aportado por desarrolladores, a veces, aunque la sugerencia termine siendo ineficiente o inexacta, las ideas que proporciona en muchos casos suelen ser muy útiles y formadoras a un nivel de desarrollo profesional.

Nos desafía a ser mejores programadores

Relacionado con la anterior ventaja, el hecho de que proporcione nuevas ideas, o que genere un código que tengamos que examinar detenidamente para entender si tiene sentido, o por qué tiene sentido, nos fuerza en cierta manera a intentar llegar a soluciones ingeniosas que utilicen los mismos conceptos, y en cierta manera nos hace replantearnos el código utilizado en funciones similares que hayamos podido definir previamente.

Desventajas del uso de Copilot

Como no es oro todo lo que reluce, Copilot también puede ser un arma de doble filo, sobre todo en el momento en el que decidamos darle más control que al que un mero asistente deberíamos de dar.

En ocasiones el código no tiene sentido

No tiene sentido pero “inventa” una llamada a una función inexistente que haga parte del trabajo, sin ofrecer luego una definición a la misma. Esto, aunque no ocurre con mucha frecuencia, hace que toda la sugerencia sea inútil, ya que al delegar este trabajo en dicha función nos termina obligando a crearla igualmente.

Puede generar código innecesariamente sintético o peligroso

Como ha aprendido de programadores reales, en ocasiones genera un código tan sintético que, aún funcionando, puede resultar altamente ilegible y poco mantenible y, en algunas ocasiones, puede incluso contener operaciones bastante inseguras para asegurar dicho funcionamiento.

Es posible perder el control sobre el código

Justo por lo descrito anteriormente, es muy fácil perder el control sobre nuestro código si dependemos excesivamente de la “magia” de algunas de las soluciones de Copilot. Además, es posible que la sugerencia nos ofrezca una solución que, aunque funcionando de manera general, no incluya los casos límites que nos interese, y en estas ocasiones modificarlo para incluirlos puede ser mucho más costoso que una reescritura de cero.

Es mejor entender el código antes de aceptarlo como si de un milagro se tratara.

Copilot siempre opina, aunque no deba opinar

Cuando el código es altamente contextual y pretende introducir una mecánica altamente específica para un proyecto dado, existen muchas posibilidades de que Copilot genere un código totalmente inusable.

Es gracioso observar como Copilot siempre intenta generar contenido, tenga o no tenga claro el objetivo, siempre tiene la confianza suficiente para ofrecerte una recomendación. Como en el siguiente ejemplo en el que intenta completar una canción de Barón rojo a modo de comentario:

Imagen 10 en Experiencia con Copilot tras 8 meses de uso

Por tanto, es necesario revisar con atención las recomendaciones, pero sobre todo cuando lo que intentemos crear sea algo poco genérico y muy contextual.

Copilot es ahora de pago

Aunque era de esperar, aquellos que recibimos una demo técnica fuimos unos meses después notificados del cambio a plan de pago de Copilot, aunque con un precio de 10 dólares al mes o 100 dólares al año, lo cual a mi parecer está bastante justificado por el tiempo que ahorra al programador.

Sin embargo, es necesario también aclarar que para los estudiantes que puedan acreditar su status como tales Copilot es totalmente gratuito hasta que finalicen sus estudios.

Valoración personal

Ha habido mucha polémica con el uso de la inteligencia artificial en numerosos campos tanto técnicos, como Copilot u otras aplicaciones de pair programming, como artísticos, como el reciente DALL-E 2 o Midjourney, capaces de generar imágenes fotorealistas o con estilos de dibujantes y pintores famosos. Sin embargo, es necesario entender que sólo nos encontramos ante una tecnología consistente en un modelo de lenguaje, para poder entender el input en un lenguaje natural, y un aprendizaje basado en las propias creaciones humanas.

Ni Copilot ni DALL-E pueden a día de hoy sustituir la creatividad, iniciativa y especificidad en el trabajo de un ser humano, como se propone de una manera apocalíptica últimamente en redes sociales, y son sólo herramientas que bien usadas pueden ayudar al propio profesional en su trabajo diario.

Pienso que es importante por tanto no caer en ninguno de los dos precipicios en esta discusión. Por una parte, pensar que estas herramientas son un sustituto perfecto del trabajo de un experto en la materia, y como profesional caer en el ludismo digital y rechazar su uso. Y por otro pensar que son humo o modas pasajeras que no resultan una ayuda y que por tanto es necesario ignorarlas.


Compartir este post

También te puede interesar...

Tecnología

GitHub Copilot: Qué es y primeras impresiones

27 Septiembre 2021 Pablo Huet
Tecnología

Inteligencia Artificial, ¿un riesgo para los programadores?

29 Diciembre 2021 Alfredo Barragán
Artículos
Ver todos