teleporthq
Plataforma
Soluciones
Integraciones
Recursos

Creemos en la generación de código impulsada por IA

Imagen destacada de generación de código impulsada por IA

En septiembre de 2018, teleportHQ publicó este video de 30 segundos en el que se mostraban los resultados preliminares de nuestro motor de generación automática de código.

Automatic code generation example

En cuestión de un par de días, el video se hizo viral y superó los 2 millones de visualizaciones. Los espectadores publicaron comentarios entusiastas en nuestras redes sociales (Facebook, LinkedIn y Twitter). La reacción del mercado superó nuestras expectativas más descabelladas. Fue una gran recompensa para nuestro equipo, que agradecimos mucho.

Pero, para ser sinceros, nuestro recorrido distó mucho de ser perfecto. Los meses anteriores de investigación y desarrollo fueron realmente difíciles. Dudamos mucho y muchas veces nos sentimos solos en la oscuridad. Esa confirmación externa supuso un enorme alivio: por fin supimos que íbamos por buen camino.

Cuando haces actividades de investigación y desarrollo, tienes que estar preparado para desecharlo todo y empezar de nuevo tantas veces como sea necesario. Estábamos preparados para hacerlo. Pero aprendimos que había algo para lo que no estábamos preparados: lidiar con la incertidumbre.

Los desarrolladores saben que cada línea de código produce resultados inmediatos y predecibles. O funciona o no funciona. No hay estados intermedios. Y cuando funciona, proporciona una satisfacción inmediata. Siempre me ha parecido muy gratificante este aspecto de la programación.

Lógica difusa

Sin embargo, las cosas son bastante diferentes cuando se trata del aprendizaje automático. Hay que trabajar con lógica difusa e índices de confianza.

- Pero, espera un momento... ¿Funciona o no?

- Bueno, sí, la mayoría de las veces...

La falta de precisión de una respuesta así pone de los nervios a cualquier desarrollador. Simplemente no tiene sentido utilizar resultados imprecisos del aprendizaje automático para generar código preciso.

Al principio, ciertamente, resulta muy poco intuitivo. Nos llevó mucho tiempo integrar el aprendizaje automático en nuestra cultura de desarrollo (y binaria). Pero, una vez que combinas las perspectivas de desarrolladores y científicos de datos, y aprendes a añadir las capas algorítmicas necesarias para lidiar con la incertidumbre, ya no hay vuelta atrás. Es un camino abierto hacia la creación de valor ilimitado.

Por eso pensamos en compartir algunas reflexiones sobre los inicios de nuestra aventura. Nos gustaría animar a otros equipos de desarrollo de software a incorporar el aprendizaje automático en su cultura de desarrollo. ¡A pesar de los muchos desafíos, al final del túnel hay una luz brillante!

Los orígenes

Como quizá imagines, nadie se despierta una mañana con la idea de generar código automáticamente mediante el aprendizaje automático. Para llegar a eso, hace falta que varias ideas choquen entre sí.

En nuestro caso, el proceso fue bastante largo. Comenzó con algunos trabajos ocasionales con chatbots e interfaces conversacionales. En aquel momento, en 2015, la mayoría todavía trabajábamos en el departamento de JavaScript de Evozon. Ese trabajo nunca llegó a producción, pero todos nos quedamos entusiasmados: abrió muchas perspectivas nuevas sobre cómo podíamos crear experiencias de usuario innovadoras.

Después, nuestro contexto de trabajo nos llevó a plantearnos la posibilidad de crear un VDE (entorno de desarrollo visual) como SaaS. Sabíamos que, si lo hacíamos, tendría que ser algo extraordinario. Crear un producto nuevo sin una propuesta de valor sólida y única habría sido una pérdida de tiempo y dinero.

Mientras nos hacíamos estas preguntas, surgió una idea interesante. ¿Y si nuestra plataforma pudiera integrar un agente conversacional impulsado por IA que diseñara y programara nuestro sitio web en tiempo real?

Decidimos crear un prototipo que simulara todas las funciones con las que soñábamos. Nos permitió visualizar y perfeccionar la experiencia. ¡Hizo que todos soñáramos y sonriéramos!

De vuelta a la realidad

Sin embargo, un producto así parecía completamente fuera de nuestro alcance. Además de la complejidad inherente al proyecto, ninguno de nosotros podía siquiera visualizar todo el proceso de construcción. En ese momento nos dimos cuenta de cuánto se parecen los desarrolladores a los constructores. Los buenos constructores saben que toda obra necesita un buen plan y un orden de ejecución definido y lógico. Entonces, ¿cómo abordar las cosas cuando el proyecto final se parece más a una idea y es tan grande?

Fe y pequeños pasos

Cuando no tienes los conocimientos preliminares necesarios para alcanzar tu objetivo, tendrás que probar cosas nuevas. En cuanto surjan problemas en estos nuevos caminos —y surgirán—, sentirás mucha tentación de abandonarlo todo. Cada problema se convertirá en una buena razón para hacerlo. La única manera de resistir la tentación de rendirse es tener fe en que, al final, superarás cualquier dificultad.

Entonces, tendrás que empezar con pequeños pasos y, con suerte, ganar un par de batallas. Cada pequeña victoria fortalece tu fe y te acerca un paso más a tu objetivo final. Cada victoria, por pequeña que sea, revelará nuevas e inesperadas opciones para los pasos siguientes. Al final, todo consiste en encontrar un buen equilibrio entre soñar y ejecutar.

Lenguaje de definición de interfaces de usuario (UIDL)

Por eso decidimos iniciar nuestro recorrido con algo que conocíamos y entendíamos bien. Desde el principio sabíamos que querríamos poder generar código en cualquier lenguaje. Esto significaba que necesitábamos una capa de representación intermedia de nuestra interfaz de usuario, independiente del código. No es algo nuevo en el sector. Inspirándonos en otros, construimos nuestra propia versión de esta representación. Básicamente, es un objeto JavaScript que cumple con el formato de nuestro lenguaje de definición de interfaces de usuario (UIDL). Puedes pensar en cada representación como un JSON. (Nuestro blog está creado con él; haz clic aquí para ver cómo se ve).

Generadores de código

Una vez definido nuestro UIDL, abordamos los motores de generación de código. Sabíamos que debían poder generar código de última generación a partir de un objeto UIDL, en tiempo real y para cualquier lenguaje o framework.

Dada nuestra experiencia profesional con JavaScript, empezamos con React. El experimento salió bien y hoy ya ofrecemos compatibilidad con React/Next y Vue/Nuxt. Esperamos ofrecer también compatibilidad con React Native antes de fin de año. Hablaremos más sobre nuestro recorrido con los generadores de código en una futura publicación del blog.

Afortunadamente, el sector de las tecnologías de la información utiliza ampliamente los wireframes para crear prototipos de interfaces de usuario. Entrenamos un motor de detección de objetos para que reconociera «solo» unos 20 tipos de objetos que representan los componentes básicos de las interfaces de usuario. Tras un par de meses recopilando datos y entrenando el modelo, pudimos crear la primera versión de nuestra API de visión. Esta devuelve una lista de los objetos detectados y sus respectivas posiciones en una imagen proporcionada.

Una vez que nuestro UIDL y los generadores de código funcionaban juntos, estábamos listos para pasar al siguiente paso: la detección de objetos.

Aprendizaje automático y detección de objetos

Machine learning and object detection from paper image

La pieza clave

En esa etapa, éramos capaces de detectar la posición relativa de los elementos. Después, tuvimos que abordar la parte difícil: transformar la posición absoluta de los elementos en una representación en forma de árbol. Y esa es otra historia. Esa es la parte que corresponde a los conocimientos complejos que los desarrolladores front-end deben adquirir para tomar las decisiones arquitectónicas adecuadas. Años de trabajo.

Aquí es donde comenzó la parte más fascinante de este recorrido. Es donde el aprendizaje automático y los algoritmos habituales convergen y hacen magia al empezar a tomar las decisiones adecuadas sobre la arquitectura de las interfaces de usuario. Y es exactamente ahí donde estamos centrando todos nuestros esfuerzos. Consideramos que este último bloque tecnológico es la pieza clave del futuro del desarrollo front-end.

En ese futuro, la tecnología potenciará considerablemente a los desarrolladores front-end. Dedicarán mucho más tiempo a la experiencia de usuario de los productos que crean, en lugar de a los detalles técnicos internos. Esto generará mucho valor para todos, y estamos comprometidos a trabajar muy duro para acercar ese futuro.

En resumen, así funciona nuestro flujo de trabajo:

Code generation workflow explained image

Conclusión

Nuestro recorrido apenas comienza y estamos invirtiendo mucho en investigación y desarrollo. Estamos convencidos de que, en los próximos años, el aprendizaje automático y la inteligencia artificial transformarán de forma irreversible —y para mejor— la manera de crear interfaces de usuario. Esto liberará una cantidad considerable de tiempo humano valioso, que podrá aprovecharse mejor.

Trabajamos sin descanso en nuestros bloques tecnológicos fundamentales y nos entusiasma anunciar que lanzaremos nuestra plataforma SaaS y las últimas versiones de nuestros generadores de código de código abierto antes de que termine el primer trimestre de 2019. Si te interesa, síguenos en Twitter.

Por último, pero no menos importante, nos interesa muchísimo conocer tu opinión sobre nuestros avances hasta ahora. Si ves potencial en estos bloques tecnológicos, escríbenos. Nos encanta conversar con personas curiosas y estamos encantados de considerar cualquier oportunidad de colaboración.

Producto

Publicaciones relacionadas

Comentarios

Todavía no hay comentarios. Sé la primera persona en compartir tu opinión.

Deja un comentario

Tu correo electrónico nunca se muestra públicamente.
Los comentarios se revisan antes de publicarse.