GitHub Copilot: Qué es y primeras impresiones
Copilot ha sido uno de los lanzamientos más importantes de los últimos tiempos. Lo hemos probado y te contamos qué es y...
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?
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.
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.
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.
Copilot tiene dos modos principales para ofrecer recomendaciones:
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.
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:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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:
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.
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.
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.
También te puede interesar
Copilot ha sido uno de los lanzamientos más importantes de los últimos tiempos. Lo hemos probado y te contamos qué es y...
¿Eres programador y alguna vez te has planteado si el incremento del uso de la IA puede dejarte sin trabajo en un...