Como desarrollador hay algo que siempre he querido crear, un asistente virtual. Y no uno que haga mis tareas cotidianas, sino uno que escriba codigo, y que mejor si es uno que escribe codigo de la manera en la que yo lo hago.
Para que puedas entenderme, imaginate esto, un dia estas creando una app desde cero, y mientras usas un microfono, dices crea u servidor basico, añada dos rutas, una get, otra post, documentadas, y conectalo a dos modelos de datos con un nombre, apellido, fecha, contraseño cifrada y despliegala dentro de un contenedor en el servidor de desarrollo, oh y enviale un correo con el enlace de la documentacion al desarrollador frontend.
Y dices todo esto mientras estas tipeando codigo de la interfaz de una App movil. y asi vas pidiendo mas y mas cosa, mientras vas haciendo otras. parece ciencia ficcion, pero es algo de lo que podemos estar más cerca de lo que crees, y se veia venir desde hace ya bastantes años atras. que aunque no tenemos esto que les comento actualmente, si tenemos lo que incluso podria definirse a futuro como el inicio de estos asistentes, algo que ahora llamamos software de autocompletado de codigo basado en inteligencia artificial.
Github Copilot
Hace unos dias Github ha anunciado una nueva herramienta en fase de pruebas (Technical Preview),llamada Github Copilot. el cual es una herramienta de autocompletado de codigo basado en Machine learning usando la tecnologia de otra empresa llamada OpenAI, el modelo que estan usando especificamente es GPT-3 con una nuevo sistema AI personalizado para Microsoft llamado Codex. Y menciono a Microsoft porque recuerden que este no tan solo es dueño de Github, sino que tambien es uno de los principlaes inversores de OpenAI, con el objetivo de potenciar los servicios Azure AI. Esto es posible ya que OpenAI paso de ser una empresa sin fines de lucro a una lucrativa.
En la pratica Copilot es un plugin para tu editor que te brinda sugerencias basadas en modelos de Machine learning que han sido entrenados usando Codigo publico de Github. Y aunque por ahora tan solo esta enfocado en ofrecer autocompletado en lenguajes como Python, JavaScript, TypeScript, Ruby y Go, se espera que abarque mas lenguajes y que este integrado en Github CodeSpaces, que es otro producto pendiente de Microsoft (recuerden que este ultimo intento llevar VsCode a la nube, pero ahora parece que lo hara dentro de Github).
Github planeta esto como una evolucion del Pair Programming, en donde dos programadores se ayudan mutuamente para acelerar el proceso de desarrollo. Con Copilot, uno de estos programadores seria virtual.
el plugin de Copilot ya se puede ver en el marketplace de vscode, pero todavia no hay acceso mas que para las personas que han pedido un acceso temprano, usando una cuenta de Github.
Entre las caracteristicas que ofrece copilot:
- Primero lo mas obvia, Copilot ofrece autocompletado de codigo, y no solo de snippets pre-escritos, es decir sugerencias que ha aprendido basadas en porciones de codigo publicas en la web y tambien del codigo que tengas escrito para tomarlo como un contexto y para que las sugerencias se asemejen a la forma en la que escribes codigo. tambien ofrece sugerencias basado en los comentarios y nombre de funciones que escribas, es decir si escribes una funcion llamada "addTwoNumbers", te mostrara la funcion creada, o si estas testeando un componente por ejemplo de react puedes escribir un comentario como "testing the MyCard component" y te dara el bloque de testing ya escrito. incentivandote a que tengas que escribir buenos comentarios y tambien empezar a tener mas en cuenta los nonbres de variables. Estas sugerencias no son siempre las mismas, esto quiere decir que asi qescribas el mismo, comentario, puedes recibir diferentes completados.
Copilot tambien esta ofrece una especie de menu flotante con opciones para intercambiar entre lso bloques de codigo que sugiere, e incluso te permite ver todas las sugerencias que puede brindarte en ese momento.
Ahora algo que si es un poco molesto, quizas porque todavia esta en desarrolo, es que copilot intenta hacer predicciones por cada nombre de variable o porcion de codigo que escribes y esto ironicamente puede llegar a ser un retraso. es decir Copilot trata de sugerir siempre, por mas pequeño que el codigo sea. Otro asunto es que javascript como saben el lenguaje que posee multiples frameworks y estos a su vez poseen distintos DSL, entonces en ocasiones cuando escribes Javascript tambien puedes obtener sugerencias de React y Vue, lo que tambien es algo incomodo.
Por cierto Todo este proceso de analisis basado en AI, lo hace en la nube, es decir que lo que vas tipeando se envia a los servidores de Microsoft, estos procesan y te envian solo las sugerencias.
Ahora, si bien muchos de ustedes puedan creer que esto es nuevo, quizas porque puede que no lo hallan escucchaddo ates, realmente no es la primera vez que les hablo de este tipo de herramientas, en el pasado ya les he llegado a comentar de herramientas como Kite o Tabnine, que tambien son programas que ofrecen autocompletado intelgiente, y de hecho no hace muccho publique una encueta en twitter y alguno decian no usar estas herramientas, pero como ahora Github esta entrando en este mercado y es una empresa de codigo muy importante, a dado a conocer mucho más esto y al parecer a futuro simplemente se va a popularizar más, algo bastante tipico en el mundo de las empresas de Software, existen empresas que salen con una idea, luego una empresa mas grande ve el potencial, estos lo compran o lo desarrollan ellos mismos, este ultimo es el caso de Copilot.
Todas estas herramientas de autocompletado inteligente en esencia proveen lo mismo, completado con predicciones AI, pero muchas de estas se diferencian en los modelos que estan basados, los lenguajes que soportan, la personalizacion, el manejo de tus datos personales, porque recuerda que todo lo que tipees se esta procesando, el precio, el soporte de editores y asi.
Entonces para entender un poco mejor esto, comparemos a copilot con otra herramienta que ya hace bastante tiempo esta en el mercado, y que tambien he llegado a usar, llamda Tabnine.
Coilot vs Tabnine
Tabnine es otra empresa que tambien tiene autocompletado de codigo AI, y tambien esta basado en el modelo de Open AI, solo que este usa GPT-2, y ofrece muchas más caracteristicas que Copilot, vemaos en detalle:
- ambos ofrecen autocompletado de codigo basdao en machine learning, copilot usa el modelo GPT-3, mientras Tabnine esta basado en GPT-2, pero mientras que Copilot las predicciones tan solo estan basadas en Cloud, Tabine ofrece predicciones tanto de manera local usando recursos de GPU y tambien en cloud, que cuando tu codigo es subido este es eliminado al terminar de procesarse. esto de la libertad de escoger si quieres procesar tu codigo en la nube o no.
- Copilot por el momento tan solo provee predicciones para unos pocos lenguajes populares. Tabnne tiene soporte para mas de 30 lenguajes de programacion y sus predicciones ya estan en fase de produccion.
- Copilot esta disponible solo para Visual Studio Code y CodeSpaces, productos de Microsoft/Github obviamente, Tabnine por otra parte no solo esta disnponible para VSCODE sino tambien lo esta muchos otros editores como vim, emcas, jupyter, editores de jetbrains, atom, android Studo, sublime text.
- y lo que seria su diferencia mas importante por ahora, es que Copilot aun esta en fase de prueba y mucho del codigo que sugiere no es codigo probado, incluso informan que el codigo que predice puede llegar a ser codigo que tengan errores o fallas de seguridad, a diferencia de Tabnine que ya esta en produccion, y en sintesi ya ofrece actualmente lo que copilot plantea.
En el ultimo año he usado bastante a Kite y tabnine, siendo Tabnine el que uso mas estos dias, y siendo una ayuda bastante util al momento de escribir codigo de produccion, como cambio mucho de editores y escribo en varios lenguajes, el completado AI, se nota muchisimo como una mejorar en productividad, y me gusta bastante la politica en la que manejan los datos personales. De hecho no hace mucho cree un ejemplo usandolo.
Que existan mas herramientas que ayuden a la productividad del desarrollador es excelnte, que usen tecnologias AI es mucho mejor, me encanta que se popularize, y que muchos desarrolladores puedan aumentar su productivad, pero quiero compartirles una pregunta, que no puede evitar plantearme, ¿A donde apunta Microsoft con esto?, he visto muchos comentarios de desarrolladores, que tienen mucha desconfianza en cuanto a Microsfot, y tienen sus fundamentos, no hace muchos años Microsoft era de las empresas mas detestadas, actualmente estan haciendo las cosas bien, pero aun quedan resagos de esa historia.
Por comentarles, algo, actualmente hay un movimiento llamado No Code, basicamente son plataformas por parte de empresas como Google, o Microsoft que cualquier persona puede registrarse y crear aplicaciones con botones e interfaces. y justo ahora, no son una competencia para los desarrolladores, no pueden hacer de todo y lo que un desarrollador plantea es muchisimo mejor. ahora.
Pero si potencias la capacidad de producir codigo, y sobretodo codigo limpio y eficiente, entrenado por cientos de miles de desarrolladores, estas platforrmas pueden verse altmanente beneficiadas, volviendose ya no una competencia, sino una amneza para los trabajos de los desarrolladores, sobretodo los no tan expertos.
parafrasiando la oracion "Quien vigia a los vigilantes", me gustaria que piensen lo siguiente: "quien automatizara a los automatizadores". No me malinterpreten me encanta la idea de tener una herramienta que me ayude a ser más productivo, de nuevo yo uso Tabnine y por eso les hago la comparacion, pero cuando veo a Microsoft, una empresa muy grande entrar en esto, no puedo evitar tener mis dudas.
En fin creo que es buen momento para ser desarrollador, se estan dando bastantes avances en codigo y al menos por ahora todavia escribimos el codigo nosotros y no una maquina. Y como veo que se volvera mas comun, traere tambien mas informacion de esto eventualmente.
Muy bien eso ha sido todo por el video del dia de hoy, y si quieren conocer mucho más de Tabnine les dejare en la descipcion del video un enlace para que puedan enterarse. nos vemos en proximos videos.
Recursos
- Github Copilot Website
- HyperTextual - Copilot
- Microsoft OpenAI 2021
- Microsoft Invertira 1000 Millones en OpenAI
- Genbeta - Github Copilot
https://www.youtube.com/watch?v=Zilz7Y_pZws https://youtu.be/4duqI8WyfqE
https://www.theverge.com/2021/6/29/22555777/github-openai-ai-tool-autocomplete-code
https://www.cnbc.com/2021/06/29/microsoft-github-copilot-ai-offers-coding-suggestions.html
*https://stackoverflow.blog/2021/06/02/prosus-acquires-stack-overflow/
Y por cierto, incluso he publicado hace unas semanas un ejemplo pratico usando Tabnine, para los que les interesa verlo en la practica.