¿Puede una máquina programar sola? La respuesta hasta no hace mucho era un rotundo no, pero eso ya no es tan cierto, y lo demuestra GitHub Copilot, un sistema capaz de generar código de forma autónoma y ayudar así a los desarrolladores a ahorrar tiempo y ser más eficientes.
La pregunta, claro, es hasta dónde puede llegar Copilot. Para responderla hemos contactado con cuatro desarrolladores españoles que nos dejan clara una cosa: esto no les va a quitar el trabajo, pero puede llegar a ayudarles notablemente.
Un prodigio descendiente de GPT-3
La capacidad de ChatGPT para sorprendernos parece ilimitada. Este sistema que genera texto a partir de un entrenamiento previo ya ha demostrado que es capaz de conversar y escribir de forma sorprendentemente convincente, y su aplicación a cosas como hacer nuestras compras de forma automática también parece más que probable a corto o medio plazo.
Sus posibilidades han sido aprovechadas ahora para algo que de hecho ya parecía inevitable: que escribiera código de forma autónoma y a partir de una pequeña entrada por parte del desarrollador.
Microsoft ya avanzó datos sobre su integración en sus herramientas de desarrollo en su conferencia BUILD 2021, y ahora eso se complementa con el lanzamiento de GitHub Copilot, un sorprendente servicio capaz de asistir a los desarrolladores escribiendo porciones de código y sugerencias que les ayuden en su día a día.
El sistema de Microsoft y GitHub no tiene como objetivo reemplazar a los desarrolladores, sino ser un asistente para que puedan trabajar de forma más ágil evitando la carga de algunas tareas repetitivas.
El sistema está basado en Codex, un nuevo sistema de inteligencia artificial creado por OpenAI, que es la misma organización que se encargó de desarrollar el motor GPT-3. Codex funciona de forma similar, y como explican sus responsables "entiende significativamente más contexto que la mayoría de asistentes de código" y "sintetiza código" a partir del contexto proporcionado por el programador.
De hecho es capaz de convertir comentarios en código: el programador puede describir la lógica que desea implementar, y GitHub Copilot se encargará de generar el código necesario para implementarla.
También puede "autorellenar" cuando es necesario programar código repetitivo a partir de algunos ejemplos o mostrar alternativas al código que el desarrollador ha preparado por si alguna de ellas es más eficiente.
Hablando de GitHub Copilot con los desarrolladores
En Xataka nos hemos puesto en contacto con varios desarrolladores españoles para hablar de GitHub Copilot y su impacto en el presente y futuro de su trabajo.
MADRE MÍA. 🤯
— Miguel Ángel Durán (@midudev) June 30, 2021
GitHub Copilot creando un componente ENTERO de React sólo indicando su nombre y sus props.
OMG. ⬇️ pic.twitter.com/7yxjso7rZk
El revuelo con esta plataforma es llamativa en redes sociales como Twitter, y allí varios de ellos compartían pequeños clips de vídeo en los que se podía ver cómo efectivamente el sistema generaba código de forma casi mágica.
Brais Moure (@MoureDev), desarrollador Full-Stack freelance, nos hacía una importante introducción antes siquiera de comenzar a hablar de esta tecnología:
"Personalmente creo que el buen programador no es el que mejor conoce el lenguaje “x”, si no el que tiene la capacidad para saber exactamente cuál es el mejor camino a seguir para escribir el código que resuelve el problema. Si el argumento de un libro escrito originalmente en inglés es muy bueno, seguramente resultará igual de atractivo en castellano. Con esto quiero decir que para mí la parte compleja está en saber que a nivel conceptual un planteamiento es correcto, sin importar en primera estancia cómo he de codificarlo.
Con eso, y que no sorprenda, los programadores pasamos una buena parte de nuestro tiempo “googleando” código que sabemos que se corresponde con ese “argumento” de buen libro pero que no recordamos exactamente las palabras con el que estaba escrito y resultaba tan potente para el lector (en este caso para añadirlo a nuestro programa)".
A partir de ahí, las dos primeras preguntas eran obvias: ¿qué esta pasando el en vídeo? ¿Realmente el sistema "programa solo" y sin apenas ayuda del programador?
Como explicaba Moure, "lo que está pasando es en vídeo es, que de una manera automática, nuestro editor de código está analizando el texto que llevamos escrito hasta el momento y proponiéndonos cómo podría ser el resto de código que mejor se adapta a la premisa que estamos planteando".
De hecho este desarrollador hacía una analogía con esa introducción que nos había dado: "Volviendo al argumento de libro. Imagínate que empezamos a escribir: “Relato de una historia de un joven personaje que se convertirá en un héroe”, y de repente aparece ante nuestros ojos “Un granjero se acaba convirtiendo en Jedi y descubriendo que su mayor enemigo es su padre….”".
Eso sería básicamente lo que está pasando con este sistema, que "realmente sí programa solo y sin ayuda directa del programador". Con GitHub Copilot "se nos ahorra el tiempo de “googlear” esa sintaxis de código complejo que no tenemos porqué recordar letra por letra", pero cuidado, porque ahí no se acaba el trabajo.
Como destaca Moure, a partir de ahí "nos corresponde a nosotros saber si realmente soluciona el problema planteado en la premisa, si deberemos adaptarlo o si simplemente no es lo que buscábamos. Con esto quiero decir que no es una herramienta para no programadores, es una herramienta para que los programadores podamos llegar a trabajar más rápido y de forma más eficiente".
Es curioso, pero David Arcos (@DZPM), CTO de QIDAcare y profesor asociado en ESADE, también nos planteaba (sin que se lo hubiésemos sugerido) que era importante "matizar qué entendemos por 'programar', especialmente por 'programar bien'. El programador escribe la primera línea (nombre de la función y parámetros). A partir de ahí, Copilot hace una sugerencia de cómo se implementaría esa función. El programador puede usar esa función, tal cual, o puede ajustarla".
La propia FAQ de GitHub Copilot, explicaba David, se indica cómo la fiabilidad del sistema es aún discreta. En uno de los ejemplos de hecho destacaban cómo "el modelo acertó el 43% del tiempo a la primera, y el 57% cuando se le permitió hacer 10 intentos". Está claro que el sistema no es perfecto, y los propios responsables del algoritmo recuerdan que "el código sugerido por GitHub Copilot debe ser cuidadosamente probado, revisado y vetado, como cualquier otro código".
Para este experto "todos los programadores cometen errores", y se preguntaba algo importante: la cuestión era "si Copilot generará más bugs (y más peligrosos) que un desarrollador. Tal vez sustituya a un perfil específico de desarrollador 'poco competente' (el que copia y pega código de StackOverflow, sin aportar valor añadido)".
De hecho para él era también clave perguntarse "¿hasta qué punto el desarrollador va a cuestionar lo que le sugiera su ordenador?" El programador incluso "tal vez no sea capaz de encontrar los errores, porque depurar código es un orden de magnitud más difícil que implementarlo".
Carlos Azaustre (@carlosazaustre), divulgador de programación y desarrollo web y director del Master Fullstack Web Dev en la Universidad Europea también compartía hace unas horas un pequeño vídeo mostrando la potencia de GitHub Copilot con temas como el de las (a menudo complejas) expresiones regulares.
¿Expresiones Regulares?
— Carlos Azaustre 💻 (@carlosazaustre) July 1, 2021
GitHub Copilot te ayuda 👀 pic.twitter.com/HurilGW2wO
Como indicaba este experto, en ese vídeo lo que pasaba es que a partir del comentario ("en inglés, eso sí"), le indicaba que quería quitar los espacios en blanco de la variable "text". ¿Qué más necesita Copilot? Nada. "Al darle intro, Copilot entra en acción y me sugiere el código que hace eso. Le das a tab y te autocompleta."
Para Txema Rodríguez (@durbon), Android Team Lead en Jobandtalent, GitHub Copilot "es mucho más que un plugin para autocompletar código. Lo que hemos podemos ver en los vídeos de ejemplo va más allá de sugerir un par de comandos o nombre de variables se lanza a crear de cero la función que estamos desarrollando basándose en el nombre de la función o en un comentario".
Aún así avanzaba algo que todos nuestros protagonistas tenían muy claro: "Por supuesto, no programa en solitario, ya que necesita que un desarrollador vaya dictando lo que quiere hacer y decidir si esa sugerencia es correcta modificando las partes especificas para que el programa funcione. Tal como explican en las preguntas frecuentas de sus documentación: hay muchas veces que el código sugerido necesita optimizaciones o incluso no tendrá sentido".
Cómo funciona GitHub Copilot
Como explicaba Brais Moure, todo este sistema se beneficia de una de las grandes virtudes de la comunidad de desarrolladores: "continuamente estamos compartiendo nuestra experiencia y cómo hemos solucionado cierta necesidad del proyecto de turno".
De ello se nutre mucho y bien GitHub, que sirve como gigantesco repositorio de código en diversos lenguajes. Todo ese código es una fantástica forma de entrenar a sistemas de inteligencia artificial como el desarrollado por OpenAI, y a partir de ahí integrarlo en otras plataformas.
David Arcos destacaba cómo Codex "ha sido entrenado con un dataset enorme de Software Libre, incluyendo código publicado en GitHub". Aquí venía otro detalle importante de todo sistema de inteligencia artificial: ese dataset con el que se entrene "es importantísimo, ya que el modelo refleja todos sus sesgos (ver ejemplos de sesgos de racismo, machismo, etc, en la AI)".
De hecho, añade, "otro punto muy importante son las implicaciones legales (¿de quien es la autoría? ¿se aplica la viralidad de las licencias copyleft, y el resultado tiene que ser libre?). Precisamente este experto realizaba una reciente reflexión en Twitter sobre ese pequeño dilema.
Es lo que se ha hecho con GitHub Copilot, que como explicaba Brais Moure: "Funciona como plugin en el editor Visual Studio Code y con los lenguajes de programación Python, JavaScript, TypeScript, Ruby y Go (por el momento)". El proceso es el siguiente, como explica este experto:
- Tú comienzas a escribir código en el editor.
- Ese código proporciona un contexto a Copilot de lo que queremos llegar a conseguir.
- La IA especializada nos proporciona sugerencias basadas en código y texto público (del propio GitHub en gran parte) de internet que aparentemente se adapta a nuestro contexto.
- Tendremos una respuesta que la IA interpreta como ideal, pero también se nos proporcionarán alternativas.
Carlos Azaustre nos recuerda que Microsoft "es propietaria de GitHub e invirtió bastante en OpenAI, así que estos son los resultados". En su opinión GitHub Copilot "es de gran ayuda. Ya existen plugins como Tabnine que te ayudan a autocompletar código y al final del día es un ahorro de tiempo en tareas muy repetitivas. Es como el autocompletado que tiene Gmail por ejemplo a la hora de escribir emails, pero aplicado al campo de la programación."
Brais Moure añade además algo importante de GitHub Copilot, y es que "es capaz de interpretar la confiabilidad del código sugerido. Los programadores también estamos acostumbrados a que, durante nuestro propio proceso de búsqueda, las soluciones que la comunidad ha dado puedan no ser correctas o poseer errores. Codex se enfoca en código seguro y efectivo (o por lo menos esa es su intención)".
La propuesta de Microsoft, GitHub y OpenAI podría ser una verdadera ayuda para los programadores, confirman estos expertos. Para Brais Moure este "es un primer paso, pero creo que uno de los grandes. La IA no está inventando código, si no utilizando el que otros desarrolladores (de carne y hueso) ya han escrito previamente y que ha sido ratificado por la comunidad. En ningún momento quiero restarle importancia, pero como ya he dicho, simplificando muchísimo (mucho, mucho, mucho), lo que está haciendo GitHub Copilot es googlear y tomar decisiones por nosotros".
A partir de ahí, insistía, es importante que el programador analice ese código autogenerado y decida si se adapta o no a sus necesidades. Lo cierto, explica Moure, es que "si estamos dando los primeros pasos nos ahorrará tener que tomar ciertas decisiones sobre la eficiencia del código."
Txema Rodríguez recordaba cómo ese entrenamiento de Codex con los repositorios de código de GitHub "permite que el sistema identifique patrones que se repiten: es el conocido boilerplate repetitivo".
"Es fácil entender que muchos de los patrones se repiten", continuaba este experto, "y es bastante obvio que los desarrolladores escribimos todos los días las mismas estructuras de código. Hay muchos boilerplate en nuestro trabajo. Así que si Github Copilot es capaz de identificarlas, categorizarlas y sugerirlas en tiempo real es una ayuda fantástica para todos los desarrolladores. ¿Quién no ha buscado en Stackoverflow cómo se hacia algo y lo ha copiado tal cual modificando los elementos específicos? Básicamente, así es como definiría lo que hace internamente".
De quitarle el trabajo a los desarrolladores, nada
Para estos expertos lo que parece claro es que GitHub Copilot no amenaza sus trabajos: lo que sí tiene es un enorme potencial para que la parte más repetitiva de esos trabajos se alivie de forma notable.
Brais Moure destacaba cómo ha cambiado el flujo de trabajo respecto a los programadores de hace décadas, y "el programador actual no hace las cosas de la misma manera, pero en esencia su finalidad es la misma, hacer que un software funcione y resuelva una necesidad dentro de un hardware".
Esta herramienta es sin duda prometedora, pero Moure lo dejaba claro: "personalmente creo que no nos veremos nunca amenazados (no a nivel cinematográfico). Detrás de una tecnología siempre hay un programador, da igual que haga cosas tan sorprendentes como estas o los famosos deepfakes. Un humano ha marcado el camino a seguir".
De hecho, añadía, "la figura del programador evoluciona continuamente de la mano de los avances tecnológicos. Por suerte sigue siendo una de las profesiones más demandadas y con mejor trayectoria y oportunidades de futuro".
Para David Arcos GitHub Copilot "es muy prometedor, y estoy seguro de que a la larga se va a usar mucho. Lo que hemos visto ahora es apenas la primera versión. He usado GPT-3, y los resultados son alucinantes". De hecho con su acceso a este motor David hizo algunas pruebas simpáticas que por ejemplo declaraban que "la pizza con piña debería ser ilegal" ([Nota del editor: eso jamás]).
De momento, eso sí, "está limitado", apunta Arcos. "todavía no es el 100% de lo que prometen, pero eso es normal. Aun así, es útil, tiene aplicaciones reales, y cada día van a salir más. Se me ocurre la comodidad de que te genere la estructura básica, el 'boilerplate'. Para prototipar, si no necesitas un código sin bugs. Y se podría usar para 'mutation testing'". Este experto tiene claro que la IA, que cada vez se usa cada vez más en muchos escenarios, también se aplicará de forma notable en el ámbito de la programación.
Aún así, concluye, "esto no amenaza el futuro de los desarrolladores, es una herramienta más que facilita mucho algunas partes del trabajo y les permite trabajar a más alto nivel".
Txema Rodríguez estaba de acuerdo con el resto de sus colegas: "hay una aplicación absolutamente real para GitHub Copilot, y ya existen muchos IDE como IntelliJ de JetBrains que hacían uso de un autocompletado inteligente".
Sin embargo, aclara, "aun no habíamos visto algo como Github Copilot en acción. Si es capaz de aprender de nuestro código y sugerirnos estructuras de código basándose en la guía de estilo del proyecto o desbloqueando algunas acciones más complejas con sus sugerencias será una ayuda muy buena para todos los desarrolladores".
Para él también está claro que este sistema de IA no es una amenaza para el trabajo de los desarrolladores, que según él "disponen de una habilidad difícil de sustituir: el poder de decisión. Me refiero a que puede que esto sea un gran avance pero seguiremos necesitando alguien que supervise ese código, además de pensar qué queremos hacer y cómo enganchar las piezas. Y sobretodo que lo optimice".
Para Txema, que precisamente habló de este ámbito en Xataka, esto es algo parecido a lo que sucede "con el fenómeno del No-Code: nadie lo usaría para un proyecto grande sin la supervisión de un desarrollador. Está bien para prototipar y hacer pruebas de concepto, pero para cosas serías necesitas las experiencia de un desarrollador. Eso aún no lo pueden proporcionar las maquinas".
Imagen | Chris Ried
Ver 18 comentarios