- En 2019, a la mayoría de los ingenieros de software les resultaba difícil imaginar cómo el aprendizaje automático podría ayudarles en su trabajo
- Pero en 2024 existe un entusiasmo generalizado por la forma en que la IA ayuda a escribir código
- Muchos ingenieros han probado el autocompletado basado en ML en herramientas internas de la empresa o en productos comerciales
- Este artículo presenta las mejoras más recientes basadas en IA dentro de la continua transformación de las herramientas internas de desarrollo de software de Google
- También analiza los cambios adicionales que se esperan en los próximos 5 años
- También plantea una metodología para construir productos de IA que aporten valor al desarrollo profesional de software
- Este equipo está a cargo de los entornos de desarrollo de software donde los ingenieros de Google pasan la mayor parte de su tiempo, como el IDE, la revisión de código y la búsqueda de código
- Esto muestra que estas mejoras pueden tener un impacto directo en la productividad y la satisfacción de los desarrolladores
Desafíos
- Como la tecnología de IA evoluciona rápidamente, un desafío constante en esta área es que resulta difícil predecir qué ideas conviene explorar primero
- A menudo existe una brecha considerable entre una demo técnicamente viable y una comercialización exitosa del producto
- Hay tres lineamientos para el enfoque de llevar ideas al producto:
- Priorizar según la viabilidad técnica y el impacto: se trabaja en ideas cuya viabilidad técnica ya fue demostrada y que se espera tengan un alto impacto (medible) en el flujo de trabajo de los ingenieros
- Aprender rápido para mejorar la UX y la calidad del modelo: se pone el foco en iterar rápidamente y extraer lecciones aprendidas, protegiendo al mismo tiempo la productividad y la satisfacción del desarrollador. La experiencia de usuario es tan importante como la calidad del modelo
- Medir el efecto: como el objetivo es elevar los indicadores de productividad y satisfacción, estos deben monitorearse de forma amplia
Aplicar LLM al desarrollo de software
- Con la aparición de la arquitectura Transformer, se empezó a explorar cómo aplicar los LLM al desarrollo de software
- La finalización de código en línea basada en LLM es la aplicación más popular de la IA aplicada al desarrollo de software
- Usar el propio código como datos de entrenamiento es una aplicación natural de la tecnología LLM
- La UX se siente natural para los desarrolladores, ya que el autocompletado a nivel de palabra ha sido durante mucho tiempo una función central del IDE
- Es posible hacer una medición aproximada del impacto, como la proporción de caracteres nuevos escritos por IA
- Por estas razones, tiene sentido que esta aplicación de los LLM haya sido de las primeras en desplegarse
- En un blog anterior se explicó cómo mejorar la experiencia de usuario con la finalización de código y cómo medir su impacto
- Desde entonces ha mostrado un crecimiento rápido y sostenido, similar al observado en otros entornos empresariales
- La tasa de adopción entre los ingenieros de software es de 37% y ayuda a completar 50% de los caracteres del código
- Las principales mejoras provinieron tanto del modelo como de la UX
- Este ciclo es esencial para aprender del comportamiento real y no de una fórmula sintética
- Se mejoran las funciones basadas en IA de las herramientas de programación (por ejemplo, el IDE) aprovechando datos históricos de registros obtenidos de distintas herramientas y datos de uso que capturan preferencias y necesidades de los usuarios
- La proporción de código generado con asistencia de IA sigue aumentando
- Se define como el número de caracteres aceptados a partir de sugerencias basadas en IA dividido entre la suma de los caracteres escritos manualmente y los caracteres aceptados a partir de sugerencias basadas en IA
- Cabe destacar que los caracteres provenientes de copiar y pegar no se incluyen en el denominador
- Se utilizan enormes registros internos de alta calidad sobre la actividad de ingeniería de software, curados durante mucho tiempo a partir de múltiples herramientas
- Estos datos permiten representar ediciones detalladas de código, resultados de compilación, ediciones para resolver problemas de compilación, operaciones de copiar y pegar código, modificaciones al código pegado, revisión de código, ediciones para resolver observaciones de revisores y envío de cambios al repositorio
- Los datos de entrenamiento consisten en un corpus de código alineado con anotaciones por tarea tanto en la entrada como en la salida
- El siguiente despliegue importante fue la resolución de comentarios de revisión de código (actualmente más de 8% se maneja con asistencia basada en IA) y la adaptación automática del código pegado al contexto circundante (actualmente representa cerca de 2% del código en el IDE)
- Otros despliegues incluyen indicar al IDE ediciones de código en lenguaje natural y predecir correcciones para fallos de compilación
- También son posibles otras aplicaciones, como predecir consejos para mejorar la legibilidad del código siguiendo patrones similares
- En conjunto, estas aplicaciones desplegadas han sido exitosas y ampliamente utilizadas en Google, y han tenido un impacto medible en la productividad dentro de un entorno industrial real
Lo aprendido
- A partir del trabajo realizado hasta ahora, se aprendieron varias cosas:
- El mayor impacto se logra con una UX que se integra de manera natural al flujo de trabajo del usuario. En todos los ejemplos anteriores, se presenta una sugerencia al usuario para que pase al siguiente paso del flujo con un solo toque o clic. Los experimentos que requerían que el usuario recordara activar la función no lograron escalar
- Se observó que, mediante sugerencias basadas en IA, quien escribe código se está convirtiendo cada vez más en revisor. Es importante encontrar el equilibrio entre el costo de revisión y el valor agregado. Por lo general, este compromiso se resuelve con objetivos de tasa de aceptación
- Como las métricas offline a menudo son solo un sustituto aproximado del valor para el usuario, la iteración rápida mediante experimentos A/B online es clave. Exponer funciones basadas en IA en herramientas internas ofrece una gran ventaja: permite lanzar e iterar fácilmente, medir datos de uso y preguntar directamente a los usuarios sobre su experiencia mediante investigación de UX
- Los datos de alta calidad obtenidos de la actividad de los ingenieros de Google en todo el conjunto de herramientas de software, incluida la interacción con estas funciones, son esenciales para la calidad del modelo
- Aprovechar mejoras de UX y del modelo para eliminar cuellos de botella intermedios, mientras se optimiza la conversión desde la oportunidad (principalmente la actividad del usuario, mostrada en la parte superior del embudo abajo) hasta el impacto (la asistencia de IA aplicada, en la parte inferior del embudo), es algo importante
What's Next
- Motivados por el éxito hasta ahora, se están enfocando en combinar los modelos fundacionales más recientes (la serie Gemini) con datos de desarrolladores (parte de DIDACT mencionada arriba) para potenciar aplicaciones existentes y nuevas de ML aplicadas a la ingeniería de software en Google
- En toda la industria, la finalización de código basada en ML ha brindado una gran ayuda a los desarrolladores de software
- Aunque todavía hay oportunidades para mejorar la generación de código, se espera que la siguiente etapa de beneficios provenga de la asistencia de ML en actividades de ingeniería de software más amplias, como pruebas, comprensión de código y mantenimiento de código
- Esto último despierta especial interés en entornos empresariales
- Estas oportunidades orientan el trabajo en curso del propio equipo
- Se destacan dos tendencias que pueden verse en la industria:
- La interacción humano-computadora se ha desplazado hacia el lenguaje natural como modalidad general, avanzando hacia el uso del lenguaje como interfaz para tareas de ingeniería de software y como puerta de entrada a las necesidades de información del desarrollador de software integrada en el IDE
- La automatización a gran escala basada en ML de tareas que van desde el diagnóstico de problemas hasta la aplicación de correcciones ha empezado a mostrar evidencia de viabilidad inicial
- Estas posibilidades están impulsadas por innovaciones en agentes y uso de herramientas, que permiten construir sistemas que usan uno o más LLM como componentes para realizar tareas más grandes
- Para ampliar los éxitos anteriores hacia estas funciones de próxima generación, la comunidad de profesionales e investigadores que trabaja en este tema podría beneficiarse de benchmarks comunes que ayuden a mover el campo hacia tareas de ingeniería prácticas
- Hasta ahora, los benchmarks se han centrado principalmente en la generación de código (por ejemplo, HumanEval)
- Sin embargo, en entornos empresariales podrían ser especialmente valiosos benchmarks para tareas más amplias, como migración de código y depuración en producción
- Ya se han publicado benchmarks para resolución de bugs (por ejemplo, SWEBench) y prototipos dirigidos a esos benchmarks (por ejemplo, Cognition AI)
- Se anima a la comunidad a unirse para proponer más benchmarks que cubran tareas de ingeniería de software más amplias
Opinión de GN⁺
- La rápida evolución de la IA: como la tecnología de IA avanza rápidamente, es importante seguir aprendiendo y aplicando las técnicas más recientes.
- UX y calidad del modelo: la experiencia de usuario y la calidad del modelo son factores clave para el éxito de las herramientas de IA.
- La importancia de los datos: los datos de alta calidad influyen enormemente en el rendimiento de los modelos de IA.
- Posibilidades futuras: existe la posibilidad de que la IA tenga un papel aún mayor en diversos aspectos de la ingeniería de software.
- Tendencias de la industria: las interfaces en lenguaje natural y la automatización de tareas a gran escala liderarán el futuro del desarrollo de software.
1 comentarios
Opinión de Hacker News
Cuando la IA se usa correctamente, cumple dos funciones: 1) ahorrar tiempo al desarrollador y reducir la carga cognitiva con cambios no controvertidos. 2) hacer que el usuario sea más inteligente y esté mejor informado mediante sugerencias. Por ejemplo, hay momentos en que el autocompletado de código funciona bien.
Hay una afirmación interesante de que las herramientas de IA "fallan al escalar" cuando el usuario tiene que activar una función. Se está pensando en cómo la IA dentro del IDE puede sugerir de forma útil ideas a nivel de diseño y conceptos.
Se observa un fenómeno en el que, debido a las sugerencias impulsadas por IA, quien escribe código se está convirtiendo cada vez más en revisor. Es importante encontrar un equilibrio entre el costo de revisión y el valor agregado.
Se sintió útil usar GPT-4 para generar una UI en React y una UI en Python en pocos minutos, y luego revisar el código para entender cómo funciona.
Debido a la RAM limitada de los humanos, hay que poner las ideas en un medio externo. Las sugerencias de la IA ayudan a avanzar más rápido en las etapas iniciales.
Es innegable que los LLMs (modelos de lenguaje de gran tamaño) son útiles para programar. El reto clave es la UX adecuada para hacer que todo sea más fluido. Se probó el autocompletado, pero como la mayoría de las sugerencias no eran buenas, se desactivó.
Se sintió más útil usar la app de escritorio de ChatGPT para hacer preguntas sobre código. Sin embargo, tener que explicar los detalles cada vez resulta molesto.
Resulta interesante la tendencia de que la proporción de código escrito con ayuda de IA aumente hasta un 50%.
La IA te dice cómo hacer la tarea que pediste, pero no te dice que era una mala idea. La calidad del código generado por ML depende de los datos de entrenamiento.
Da curiosidad cuánto tiempo tomará que la IA reemplace por completo a los ingenieros de software de Google.
El objetivo final de la IA es operar sistemas, depurar apps, administrar almacenes de datos y escribir el código de las apps según la retroalimentación de los usuarios y las descripciones de requisitos.
Está bien experimentar con herramientas de IA, pero que otras personas copien ciegamente puede tener efectos negativos. Es difícil encontrar el principal punto de venta de escribir código con LLM.