Capítulo 1. Un nuevo mundo para los desarrolladores

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

Mientras hacía malabarismos con densas arquitecturas de redes neuronales y con la visión informática de píxeles en Stanford de 2011 a 2016, Andrej Karpathy también trabajó como pluriempleado en Google. Allí jugueteó y creó un sistema de aprendizaje de características para vídeos de YouTube. Luego decidió convertirse en miembro fundador de OpenAI y más tarde en director sénior de IA en Tesla, donde dirigió un equipo para crear el sistema Autopilot.

Se puede decir con seguridad que es uno de los mejores programadores del mundo. También es un hábil orador con un enorme número de seguidores en Twitter -o X- de casi 800.000 seguidores. Cuando ChatGPT saltó a la palestra, tuiteó:

El nuevo lenguaje de programación de moda es el inglés.

No bromeaba. No se trataba sólo de una oda poética a la codificación, sino de un guiño a un futuro en el que teclear instrucciones en lenguaje natural podría conjurar código informático en prácticamente cualquier idioma. Es como tener un genio bilingüe en tu ordenador, listo para transcribir tus deseos en inglés en comandos de código.

Luego llegó un tuit que se hacía eco de los sentimientos de muchos desarrolladores:

Copilot ha acelerado drásticamente mi codificación, es difícil imaginar volver a la "codificación manual". Aún estoy aprendiendo a usarlo, pero ya escribe el ~80% de mi código, con una precisión del ~80%. En realidad ni siquiera codifico, escribo y edito.

Karpathy se quitaba el sombrero ante el GitHub Copilot de Microsoft, un nuevo brebaje de programación asistida por IA. Pero no tardarían en surgir muchas otras herramientas. El ritmo de la innovación era impresionante.

Ahora, para todos los programadores de ahí fuera, el paisaje puede parecer una densa jungla. ¿Qué es este nuevo y valiente mundo de las herramientas de IA? ¿Dónde deslumbran y dónde se desvanecen? ¿Y cómo vadear todo esto para convertirte en un programador experto en IA?

Pues bien, este libro será tu guía para responder a estas preguntas y a muchas más. La atención se centrará en aprovechar estas herramientas para programar no sólo más rápido, sino también de forma más inteligente y divertida. Así que, arremanguémonos y lancémonos a este viaje de programación asistida por IA.

Evolución y revolución

Un tema clave de la evolución de los lenguajes de programación es la abstracción. Es una forma elegante de describir cómo los sistemas resultan más fáciles de usar para los desarrolladores. Cuando los detalles tediosos se manejan en segundo plano, los desarrolladores pueden centrarse en lo que más importa. Esta ha sido una fuerza impulsora de la innovación, que ha permitido avances como Internet, la computación en la nube, los móviles y la IA.

La Figura 1-1 muestra la evolución de la abstracción a lo largo de las décadas.

Figura 1-1. La abstracción de los lenguajes y herramientas de programación ha evolucionado a lo largo de las décadas

Entremos en más detalles, empezando por los años 40 :

Del lenguaje máquina al lenguaje ensamblador

En los albores de la era informática, los programadores tenían que luchar con 0s y 1s para doblegar las máquinas a su voluntad. Pero entonces apareció el lenguaje ensamblador. Ofrecía instrucciones alfanuméricas, que facilitaban la codificación y la hacían menos propensa a errores.

Lenguajes de alto nivel

Los años 50 nos trajeron Fortran y COBOL, lenguajes que permitían a los programadores codificar utilizando un inglés algo sencillo como DISPLAY, READ, WRITE e IF/THEN/ELSE. Un compilador los convertía en 0s y 1s que un ordenador podía entender. Al mismo tiempo, las personas sin formación técnica generalmente podían leer el código lo suficientemente bien como para entender el flujo de trabajo. La aparición de los lenguajes de alto nivel sería un enorme catalizador de la revolución informática.

Programación procedimental

Lenguajes como C y Pascal introdujeron la programación procedimental, esencialmente empaquetando tareas complejas en pequeñas cajas ordenadas llamadas funciones. Esta abstracción permitió la reutilización y el mantenimiento, e hizo que la gestión de proyectos de software colosales fuera una tarea menos hercúlea.

Programación orientada a objetos (POO)

Algunas de las estrellas de este tipo de lenguaje informático son C++ y Java. Programación orientada a objetos aportó un nuevo nivel de abstracción, permitiendo a los programadores modelar entidades del mundo real mediante clases y objetos, encapsulando tanto los datos como el comportamiento. Esto fomentó la modularidad y permitió una resolución de problemas más intuitiva.

Lenguajes de programación y desarrollo web

Python, Ruby y JavaScript abstraen muchas de las tareas de bajo nivel asociadas a la programación. Ofrecen amplias bibliotecas y estructuras de datos incorporadas, que simplifican las tareas comunes de programación y reducen la cantidad de código necesario para llevarlas a cabo.

Aprendizaje automático e IA

Con el auge de la IA y el aprendizaje automático, las bibliotecas y marcos especializados como TensorFlow y PyTorch han eliminado muchos detalles matemáticos intrincados de la programación. Esto ha permitido a los desarrolladores centrarse en la arquitectura del modelo y los procesos de entrenamiento.

Programación asistida por IA

Por supuesto, el último participante en esta narrativa de abstracción es la programación asistida por IA, a la GPT-4 y otros grandes modelos de lenguaje (LLM) masivos. Son como tu equipo entre bastidores, listo para colaborar en la generación de código a tus órdenes.

Veamos un ejemplo sencillo. Para ello, utilizaremos ChatGPT, que tiene una gran capacidad para generar código. Utilizaremos un prompt para preguntar qué queremos que haga el sistema. Supongamos que le damos la siguiente instrucción

Pregunta: En Python, escribe un programa que compruebe si un número entero dado es par o impar e imprime el resultado.

La Figura 1-2 muestra la respuesta de ChatGPT.

Figura 1-2. Cuando se te pida que crees código, la respuesta de ChatGPT incluirá no sólo un listado, sino también una explicación

Obtenemos el listado del código, que incluso viene con útiles comentarios. También hay una explicación de cómo funciona el programa. Puedes pulsar el botón Copiar código de la parte superior derecha para incluir el código en tu IDE y ejecutarlo.

IA Generativa

Antes de profundizar en cómo funcionan las herramientas de programación asistida por IA, vamos a tener una visión general de la IA generativa. Ésta es la base de estos sistemas.

La IA Generativa es una rama de la inteligencia artificial (IA), que permite crear contenidos nuevos y únicos. La Figura 1-3 muestra cómo se relacionan entre sí las distintas partes.

Figura 1-3. Hay distintos tipos de IA, y pueden representarse como subconjuntos anidados, con la IA generativa y, finalmente, los grandes modelos lingüísticos en el centro

La IA es el gran paraguas: incluye todos los sistemas que pueden realizar tareas con el estilo de la inteligencia humana. Dentro de la IA está el aprendizaje automático (AM). En lugar de marchar al ritmo de instrucciones explícitas, los sistemas de ML obtienen ideas basadas en montones de datos. El ML se basa generalmente en algoritmos complejos, que permiten hacer predicciones o tomar decisiones sin codificación rígida.

Si profundizas un poco más, obtienes el aprendizaje profundo (deep learning, DL), una parte más ajustada del ML que funciona con redes neuronales apiladas con capas ocultas, de ahí la etiqueta profundo. Estos modelos apilados han mostrado resultados sobresalientes en áreas como el reconocimiento de imágenes y del habla.

Dentro de los pasillos del aprendizaje profundo, encontrarás la IA generativa (o GenAI). Los modelos GenAI crean nuevos datos que reflejan sus datos de entrenamiento.

En el círculo más cerrado se sitúan los LLM, como GPT-4, Gemini, Claude y LLaMA 2. Estos potentes modelos -a menudo denominados "modelos fundacionales"- producen textos de apariencia humana basándose en algoritmos de vanguardia y en el entrenamiento con enormes cantidades de datos.

Pero la IA generativa es algo más que LLMs. La GenAI también tiene capacidades multimodales, es decir, la capacidad de crear imágenes, audio y vídeo.

En el próximo capítulo, profundizaremos en cómo funciona la IA generativa. Pero a continuación, veamos los pros y los contras de las herramientas de programación asistida por IA.

Los beneficios

Las herramientas de programación asistida por IA están diseñadas para mejorar las capacidades de los desarrolladores, permitiéndoles centrarse en la resolución de problemas avanzados y en las innovaciones, en lugar de quedar atrapados en tareas monótonas o en complejos detalles de código. Por eso el uso que hace GitHub de la palabra copiloto es acertado. Se trata de tener a ese compañero de confianza en la cabina, navegando por los intrincados y a menudo tediosos aspectos de la codificación, permitiéndote centrarte en lo que importa.

En las próximas secciones, destacaremos las ventajas y aplicaciones prácticas de estos potentes sistemas.

Tu asesor

Con ChatGPT, puedes pedir consejo a sobre muchos tipos de actividades de desarrollo. Aquí tienes un ejemplo:

Pregunta: Proporciona consejos detallados y buenas prácticas para minimizar el tiempo de búsqueda y aumentar la productividad al programar. Incluye estrategias relacionadas con la organización del código, la documentación, las herramientas y la mentalidad.

LaFigura 1-4 muestra la respuesta.

ChatGPT proporciona tres áreas principales a tener en cuenta. Recomienda utilizar un diseño modular, mantener una nomenclatura coherente y organizar los archivos de forma lógica. También aconseja dar prioridad a una documentación clara con comentarios, docstrings y READMEs. A continuación, ChatGPT menciona el uso de las funciones de búsqueda de un IDE, el uso de herramientas como Git y marcar recursos clave.

Figura 1-4. Puedes obtener consejos útiles sobre tareas de programación en ChatGPT

Integración IDE

La integración perfecta con el IDE es crucial para la programación asistida por IA. Mantiene el impulso del proceso de desarrollo, sin el pesado trabajo de dominar una nueva plataforma. Esto significa menos tiempo subiendo por la curva de aprendizaje y más tiempo programando y, no lo olvidemos, no tener que cambiar entre diferentes plataformas o herramientas significa menos fricción y facilita el proceso de programación.

También está la ventaja de la retroalimentación en tiempo real. A medida que los desarrolladores tejen o ajustan el código, las herramientas integradas están ahí para señalar errores, ofrecer correcciones o sugerir una forma mejor de hacer las cosas. Este intercambio instantáneo de escritura, comentarios y ajustes es como tener a tu lado a un entrenador amistoso. Te guiarán hacia un código más limpio y eficiente sin la molestia de las revisiones manuales o las comprobaciones externas.

Los sistemas asistidos por IA también pueden mejorar un IDE sintonizando con la narrativa general de la codificación. La IA capta lo esencial de los tipos de variables, las firmas de los métodos e incluso el plano estructural del proyecto para producir sugerencias de código relevantes. Pero no se trata sólo de escupir código.

La Tabla 1-1 presenta algunas de las principales herramientas de programación asistida por IA y los IDE que soportan .

Nota

Un estudio de investigación de Microsoft demostró que el 88% de los usuarios de GitHub Copilot se sentían menos frustrados y más centrados. Una razón clave era que permanecer dentro del IDE significaba pasar menos tiempo buscando. Esto permitía al desarrollador permanecer en el "estado de flujo".

Reflejar tu código base

Algunas herramientas de programación asistida por IA están adaptadas para encajar bien con entornos de desarrollo específicos. Los desarrolladores tienen libertad para ajustarlas, permitiendo que la herramienta comprenda las bibliotecas internas, las API, las buenas prácticas y los planos arquitectónicos de un proyecto. Esto garantiza que las sugerencias que te hagan no sólo sean técnicamente sólidas, sino que también se ajusten a las necesidades únicas de tu proyecto.

Esta personalización ayuda a alinear las sugerencias de código generadas con las normas de codificación, los marcadores de calidad y los protocolos de seguridad establecidos por tu organización. Centrarse en fomentar el código de alta calidad significa que los equipos pueden evitar tropezar con fragmentos de código obsoletos o indeseables.

Además, este enfoque a medida es una gran ventaja para los recién llegados a un equipo de desarrollo. Tradicionalmente, conseguir que se aclimaten a una nueva base de código requiere una gran inversión de tiempo, ya que pueden necesitar meses explorando el código, revisando la documentación y aprendiendo los protocolos de codificación. Sin embargo, una herramienta de programación asistida por IA puede reducir significativamente este tiempo de aprendizaje.

Integridad del código

La integridad del código es un sello distintivo del buen desarrollo de software. Destaca la solidez y fiabilidad del código fuente en la ejecución de su función prevista. Piensa en ella como una lente a través de la cual se examina la integridad, precisión, coherencia y fortificación del código. Un contratiempo en la integridad del código es una alfombra de bienvenida para los errores y posibles puntos ciegos de seguridad, que, a su vez, podrían provocar fallos del sistema y violaciones de datos.

Los diversos factores que engendran la integridad del código incluyen su precisión, minuciosidad, uniformidad y disposiciones de seguridad, así como la facilidad con que se puede mantener. Los desarrolladores pueden aumentar la integridad del código mediante una serie de enfoques, como las pruebas unitarias y de integración, las revisiones del código por pares, el análisis estático del código y las evaluaciones estrictas de la seguridad.

Merece la pena señalar que una lista cada vez mayor de herramientas de programación asistida por IA están desplegando funciones destinadas a reforzar la integridad del código. Profundizan en los puntos más delicados del código, allanando el camino para la generación de pruebas unitarias y casos de perímetro pertinentes y nítidos.

Algunas de estas herramientas vienen con funciones de recomendación de "arreglos". Éstas se examinan previamente para garantizar que no conducen a nuevos problemas antes de que lleguen a los desarrolladores. Después, los desarrolladores pueden revisar y asimilar estas sugerencias directamente en su IDE.

Una ventaja añadida de estas herramientas es su capacidad para analizar rápidamente las solicitudes de extracción y elaborar resúmenes sucintos de las alteraciones del código. También tienen un don para automatizar la tarea de generar notas de publicación, lo que resulta útil para documentar la evolución de las versiones de software.

Generador de documentación basado en IA

Documentación es el héroe anónimo del proceso de desarrollo de software. Ayuda a garantizar que el código base siga siendo legible, mantenible y escalable, especialmente a medida que los equipos se transforman y los proyectos aumentan en complejidad. Pero reconozcámoslo, crear y actualizar esta documentación a menudo parece una caminata a través de un pantano burocrático: puede consumir mucho tiempo y, en ocasiones, se deja de lado.

Ahora llegan las herramientas de programación asistida por IA. Estos escribas digitales pueden elaborar una extensa documentación en una fracción de tiempo, y además con una gran dosis de calidad y claridad. Esto se consigue aprovechando el poder de los LLM, que son especialmente hábiles con el lenguaje.

Modernización

La audaz declaración de Marc Andreessen en en 2011 en el Wall Street Journal, "El software se está comiendo el mundo", ha envejecido como un buen vino. Andreessen, conocido por su habilidad para detectar tendencias tecnológicas a kilómetros de distancia y su estelar historial como empresario de éxito y capitalista de riesgo, señaló un momento maduro en la historia de la tecnología.

Subrayó cómo la infraestructura había alcanzado la mayoría de edad y preparado a las industrias mundiales para una metamorfosis. El auge de plataformas en la nube como Amazon Web Services y el crecimiento generalizado de Internet de banda ancha cambiaron las reglas del juego. Habían derribado los obstáculos tradicionales de los costes de los servidores y los conocimientos de redes. Esto había despejado el escenario para que disruptores como Uber, Netflix y una serie de plataformas de medios sociales reescribieran las reglas de sus respectivas industrias.

Cuando avanzamos rápidamente desde el perspicaz artículo de Andreessen, vemos que la innovación exprés no ha hecho más que aumentar. Sin embargo, también ha traído consigo una amenaza de disrupción, especialmente para las grandes empresas. Muchos de estos gigantes están anclados en sistemas heredados que no sólo son caros, sino que modernizarlos también es una apuesta arriesgada. Su estructura jerárquica puede interponer obstáculos en la toma de decisiones, y su escala expansiva añade capas de complejidad a la adopción del cambio. Además, sus empleados no siempre están al tanto de las últimas innovaciones tecnológicas.

Entra IBM, que ve este escenario como una mina de oro de oportunidades y canaliza sus cuantiosos recursos para crear herramientas de programación asistida por IA para sus clientes. En octubre de 2023, presentó el Asistente de Código watsonx para Z. Este sistema puede traducir COBOL a Java en sistemas mainframe, con un código de salida elegantemente orientado a objetos.

El modelo Watsonx.ai de IBM comprende 115 lenguajes de codificación basados en 1,5 billones de tokens. El modelo tiene unos 20.000 millones de parámetros. Se trata de uno de los mayores sistemas de IA para el desarrollo de código.

El hecho es que hay cientos de miles de millones de líneas de COBOL. Pero migrar este lenguaje a los modernos no es tarea fácil. Es habitual que el COBOL tenga décadas de antigüedad y poca o ninguna documentación. Si la conversión no se realiza correctamente, las consecuencias pueden ser graves. Ten en cuenta que gran parte del procesamiento mundial de tarjetas de crédito se gestiona con mainframes. Lo mismo ocurre con el sistema del Tío Sam para gestionar los préstamos escolares.

Por desgracia, hay muchos ejemplos de proyectos de migración fallidos. Pensemos en el Departamento de Vehículos a Motor de California, que, a pesar de invertir 208 millones de dólares en el proyecto, tuvo que suspenderlo en pocos años. Ay.

Dado lo mucho que está en juego, los desarrolladores de mainframe suelen ganar salarios más altos. Pero las empresas siguen teniendo dificultades para reclutar talentos. Los desarrolladores más jóvenes se forman en lenguajes modernos y perciben el desarrollo de mainframes como un callejón sin salida. Mientras tanto, un número creciente de desarrolladores experimentados de mainframe se jubilan.

IBM se dio cuenta de que la IA es esencial para resolver este enorme problema. Es cierto que los transpiladores o traductores de código existen desde hace décadas. De hecho, se han utilizado a menudo en proyectos de mainframe. Sin embargo, lo que han estado haciendo principalmente es tomar el código espagueti de COBOL, darle una traducción rápida y, bueno, tienes código espagueti de Java. Es un modesto lavado de cara sin apenas un atisbo de mejora o innovación. El código Java sigue necesitando una buena cantidad de grasa para los codos, lo que explica por qué muchos proyectos tropiezan o se dan de bruces.

Pero al utilizar la IA generativa, IBM afirma que ha sido capaz de mejorar hasta diez veces los resultados de un proyecto.

Otras empresas están explorando esta oportunidad de modernización. Thomas Dohmke, que es el director general de GitHub, publicó: "Que COBOL siga funcionando en main frames es un problema social mucho mayor de lo que pensamos". En una entrevista con Fortune, señaló que había oído hablar más de COBOL en 2023 que durante las últimas tres décadas. También dijo que las empresas han estado preguntando cómo utilizar GitHub Copilot para sus proyectos de migración.

Ten en cuenta que ChatGPT también es compatible con lenguajes de programación heredados. La Tabla 1-2 muestra los lenguajes que admite.

Tabla 1-2. Lenguajes de programación heredados comunes
Lengua Descripción La era del desarrollo
COBOL Desarrollado para el tratamiento de datos empresariales Finales de los años 50 a principios de los 60
Fortran Diseñado para cálculos científicos y de ingeniería 1950s
Pascal Desarrollado para fomentar las buenas prácticas de ingeniería de software Finales de los 60 a principios de los 70
BÁSICO Creada como una lengua fácil de aprender para estudiantes y principiantes Mediados de los 60
ALGOL Influyó en lenguajes posteriores como Pascal, C y Java Finales de los años 50 a principios de los 60
Lenguaje ensamblador Corresponde a la arquitectura de la CPU para la que está diseñado, remontándose a los primeros ordenadores programables Primeros tiempos de la informática
PL/I Se utiliza para la programación científica, de ingeniería, empresarial y de sistemas Principios de los 60

Para ver cómo la programación asistida por IA puede ayudar con los lenguajes heredados, supongamos que tienes que trabajar con el siguiente fragmento de código:

MODULE ComplexModule
  IMPLICIT NONE
  TYPE :: ComplexType
     REAL :: real, imag
  CONTAINS
     OPERATOR(+) (a, b) RESULT(c)
       TYPE(ComplexType), INTENT(IN) :: a, b
       TYPE(ComplexType) :: c
       c%real = a%real + b%real
       c%imag = a%imag + b%imag
     END OPERATOR
  END TYPE ComplexType
END MODULE ComplexModule

No sabes qué lenguaje es ni cómo funciona. La sintaxis no se presta a una comprensión intuitiva del flujo de trabajo.

Ahora digamos que vas a ChatGPT e introduces lo siguiente:

Pregunta: ¿En qué lenguaje está escrito esto? ¿Qué hace este fragmento de código? Explica también cómo funciona.

La Figura 1-5 muestra parte de la respuesta.

Figura 1-5. ChatGPT responde a una petición de interpretar código heredado

ChatGPT identifica esto con precisión como código Fortran. También explica que el código define un módulo llamado ComplexModule, que contiene un tipo derivado ComplexType para representar números complejos, junto con un operador de suma sobrecargado + para sumar dos números complejos. A continuación hay una explicación paso a paso del código.

Inconvenientes

Ahora echemos un vistazo a los aspectos no tan escabrosos de las herramientas de programación asistida por IA. Como cualquier tecnología incipiente -eh, incluso el primer iPhone era un poco tosco-, la IA tiene su parte de contratiempos, problemas y obstáculos. El camino de la innovación está lleno de espacio para el pulido y el ajuste.

Veamos algunos de los inconvenientes.

Alucinaciones

Para los LLM, las alucinaciones son casos en los que el modelo produce datos que parecen precisos, pero que en realidad son incorrectos o no se basan en los datos de entrada con los que se entrenó el modelo. Esto puede suponer un reto importante para el desarrollo de software. Las alucinaciones pueden dar lugar a sugerencias de código inexactas, generar documentación engañosa y crear escenarios de prueba erróneos. Además, pueden hacer que la depuración sea ineficaz, confundir a los principiantes y erosionar potencialmente la confianza en las herramientas de IA.

Como aspecto positivo, se han producido notables avances en la reducción de la aparición de alucinaciones. Se ha dedicado una cantidad considerable de investigación académica a esta cuestión, y las empresas de IA han estado empleando estrategias eficaces como el aprendizaje por refuerzo a partir de la retroalimentación humana (RLHF) para mitigar este problema.

Sin embargo, dada la complejidad intrínseca de los LLM y la enorme cantidad de datos en que se basan, erradicar por completo las alucinaciones parece una tarea difícil, si no imposible.

Otro aspecto a tener en cuenta es que ciertos lenguajes de programación presentan mayores índices de precisión cuando se utilizan herramientas asistidas por IA. Lenguajes como Python, JavaScript, TypeScript y Go tienden a tener un mejor rendimiento en este sentido. Esto se atribuye a que estos lenguajes están bien representados en repositorios públicos y, por tanto, proporcionan un conjunto de datos más rico para que la IA aprenda de ellos. La IA mejor entrenada, a su vez, ofrece sugerencias más precisas y sólidas.

Propiedad intelectual

Matthew Butterick tiene una formación muy diversa, en la que ha desempeñado funciones como programador, diseñador y abogado, con una especial inclinación por la tipografía. Su trayectoria le ha llevado a escribir libros sobre tipografía, diseñar fuentes y crear programas de edición y maquetación de documentos. Sin embargo, su encuentro con GitHub Copilot en junio de 2022 no le produjo alegría. Más bien le llevó a escribir una entrada de blog titulada "Este Copiloto es estúpido y quiere matarme".

Su descontento no terminó con los blogs. Rápidamente escaló hasta lanzar una demanda colectiva contra Microsoft, GitHub y OpenAI. La manzana de la discordia era un supuesto incumplimiento de las condiciones de servicio y las políticas de privacidad de GitHub, con una posible extensión a cargos por infracción de derechos de autor.

Esta maraña legal subraya una zona gris más amplia relativa a los derechos de propiedad intelectual con respecto al código creado a partir de herramientas de programación asistida por IA. Dado que el resultado es un cóctel de innumerables líneas de código preexistente, la cuestión de la propiedad es un gran interrogante.

Un argumento se basa en la idea del "uso justo". Sin embargo, esta doctrina legal es turbia y no ofrece una vía clara para los contenidos generados por IA. Para resolver esta cuestión, probablemente será necesaria una legislación federal o una sentencia del Tribunal Supremo.

Mientras tanto, Microsoft ha maniobrado para construir un cortafuegos legal para los clientes de GitHub Copilot. Se ha comprometido a defender a los usuarios frente a demandas legales, siempre que se cumplan ciertos requisitos previos.

La intersección entre la programación asistida por IA y los métodos del software de código abierto añade otra capa al atolladero legal. Las licencias con copyleft, como las versiones 2 y 3 de la Licencia Pública General (GPL), exigen que cualquier obra derivada utilice los términos de la licencia del código original. Esto ayuda a promover una corriente de innovación. Sin embargo, podría suponer un problema para los desarrolladores, ya que podría privarles del derecho a proteger la propiedad intelectual de su aplicación, o incluso obligarles a hacer que todo su código sea de código abierto.

Privacidad

El uso de herramientas de programación asistida por IA, a menudo alojadas en la nube, plantea muchas preguntas sobre la privacidad y confidencialidad de los datos. ¿Cómo se salvaguardan los datos dentro de la empresa? ¿Existe la posibilidad de que se utilicen como datos de entrenamiento?

La claridad de las respuestas puede variar de un proveedor a otro. Por ello, algunos desarrolladores pueden optar por alejarse totalmente de las herramientas de programación asistida por IA.

Este ha sido el enfoque de Anthony Scodary, cofundador y codirector de ingeniería de Gridspace. Esta empresa, cuyas raíces se remontan a la Universidad de Stanford, desarrolla robots de voz expertos en conversaciones telefónicas complejas. Su base tecnológica se apoya en el reconocimiento del habla, la síntesis del habla, los LLM y los sistemas de diálogo.

En lugar de utilizar las plataformas de programación asistida por IA existentes, Gridspace eligió el camino menos transitado. Diseñó su propia plataforma de programación asistida por IA, basada en servicios Docker dentro de un clúster Kubernetes. Implementado como un complemento IDE, este sistema a medida se ajusta a su propia base de código. "Esto nos ha permitido evitar enviar nuestra IP y nuestros datos a otras empresas", dijo. "También ha supuesto que tengamos un modelo más pequeño, eficiente y especializado a nuestro estilo".

Esto no implica que éste sea el mejor enfoque. Cada organización tiene sus propios puntos de vista y métodos preferidos. Pero cuando se trata de evaluar la programación asistida por IA, es importante comprender las implicaciones para la privacidad.

Seguridad

En un artículo de investigación titulado "Security Weaknesses of Copilot Generated Code in GitHub", los autores Yujia Fu et al. destacaron los problemas de seguridad de GitHub Copilot. Examinaron 435 fragmentos de código generados por IA de proyectos en GitHub, y el 35,8% tenía instancias de Enumeración de Debilidades Comunes (CWE).

No se limitaban a un solo lenguaje de programación. Eran errores multilingües que abarcaban 42 categorías diferentes de CWE. Tres de estas categorías eran los sospechosos habituales: inyección de comandos del SO, uso de valores insuficientemente aleatorios y comprobación o gestión inadecuada de condiciones excepcionales. Pero aquí está el truco: 11 de estos CWE tuvieron el dudoso honor de entrar en la lista de los 25 mejores CWE de 2022.

Esto no quiere decir que las herramientas de programación asistidas por IA sean un gran riesgo para la seguridad. Ni mucho menos. El hecho es que los proveedores siguen trabajando para mejorar las barreras de seguridad. Sin embargo, como con cualquier código, una buena dosis de atención a la seguridad es el nombre del juego.

Datos de entrenamiento

Los datos de entrenamiento para LLMs de las herramientas de programación asistida por IA pueden tener lagunas notables, que pueden afectar al rendimiento y la utilidad de estas herramientas en escenarios del mundo real. Desglosemos algunas de ellas:

Lagunas de representación

Si determinadas áreas de un lenguaje de programación o de una biblioteca no están bien representadas -o no aparecen por ninguna parte- en los proyectos de código abierto, la IA puede carecer de conocimientos suficientes sobre ellas, lo que dará lugar a sugerencias menos precisas. La calidad de los resultados de la IA depende en gran medida de la calidad y el alcance de los datos de entrenamiento.

Incoherencia en la calidad

Tomando prestada una analogía cinematográfica, el código fuente abierto de un LLM es un poco como una caja de bombones: nunca sabes lo que te va a tocar. Algunos proyectos son la crème de la crème, mientras que otros son... digamos, la tostada quemada del mundo del código. Este batiburrillo puede hacer que nuestra programación asistida por IA sea incoherente en la calidad de las sugerencias que te lanza.

Fecha límite de conocimientos

Los LLM tienen una fecha límite en su formación, por lo que en cierto modo son como una instantánea en el tiempo. Esto plantea retos cuando hay nuevas versiones, actualizaciones o desapariciones en lenguajes de programación o bibliotecas.

Brecha de generalización

La brecha de generalización, la diferencia entre el rendimiento de la IA en los datos de entrenamiento y en los datos no vistos, también puede plantear problemas. Por supuesto, cuanto más se acerque el rendimiento de ambos, mejor. Esta es la conclusión de un trabajo de investigación de Rie Johnson y Tong Zhang titulado "Inconsistencia, inestabilidad y brecha de generalización del entrenamiento de redes neuronales profundas".

Comprensión contextual

La IA puede darte sugerencias basadas en lo que ha visto antes. Pero si no ha visto un escenario como el tuyo, puede errar el tiro. Por eso es importante no hacer suposiciones al crear sugerencias.

Sesgo

Los desarrolladores no suelen tener un conocimiento sólido de la ética de la IA, probablemente porque este tema no suele formar parte de los cursos de informática ni de los programas intensivos de formación inicial. Esta laguna en la comprensión puede llevar a que los algoritmos apliquen sesgos involuntariamente y al potencial mal uso de los datos.

Este problema también afecta a las herramientas de programación asistida por IA. Pueden perpetuar involuntariamente los sesgos presentes en los datos con los que fueron entrenadas. Por ejemplo, si se les pide que creen una lista de nombres, podrían sugerir principalmente nombres en inglés debido a la fuerte presencia de conjuntos de datos centrados en el inglés en sus conjuntos de datos de entrenamiento. A veces, este sesgo puede dar lugar a resultados perjudiciales o inadecuados. Hubo un caso en el que, ante la pregunta "def raza(x):", la IA rellenó un conjunto limitado y fijo de categorías raciales. En otro caso preocupante, cuando se le encargó que escribiera comentarios de código para la pregunta "Islam", se descubrió que la IA accedía a palabras como terrorista y violento con más frecuencia que cuando se mencionaban otros grupos religiosos.

Una nueva vía para los desarrolladores

El estudio de McKinsey sugiere que es probable que la aparición de herramientas de programación asistida por IA cambie nuestra forma de abordar el desarrollo de software. Según los autores, el éxito podría depender de una buena formación, que haga hincapié en las buenas prácticas y se sumerja en ejercicios prácticos sobre aspectos como la ingeniería de prompts, las normas de codificación y la calidad. También es inteligente arrojar luz sobre los riesgos asociados a la IA generativa.

Para los desarrolladores novatos, especialmente los que tienen menos de un año de experiencia a sus espaldas, es una buena idea sumergirse en cursos adicionales que cubran los principios básicos de la programación para aumentar la productividad.

A medida que los desarrolladores incorporan estas herramientas a su rutina diaria, es vital mantener el impulso de desarrollo de habilidades con la orientación de los profesionales experimentados del equipo y la participación en actividades de la comunidad. Esto podría significar participar en foros en línea dedicados o celebrar reuniones periódicas del equipo para compartir ejemplos prácticos. Estas acciones pueden fomentar una cultura de aprendizaje continuo, difundir las buenas prácticas en todos los ámbitos y ayudar a detectar problemas desde el principio.

Con el repunte de la productividad de los desarrolladores, es posible que los directivos quieran remover un poco la olla en lo que respecta a las funciones, centrándose en las tareas que aportan más valor. También habrá que mejorar la cualificación para colmar las lagunas existentes.

Claro, estas indicaciones no son el evangelio. El ámbito de la programación asistida por IA es bastante reciente y está cambiando a un ritmo vertiginoso. Por encima de todo, la clave es estar preparado para afrontar los golpes.

Carrera profesional

Aunque no hay pruebas fehacientes de que el uso de la programación asistida por IA mejore tus perspectivas profesionales, un puñado de indicios sugieren que esta experiencia podría convertirse en un billete caliente en el mercado laboral:

Ofertas de empleo

Las bolsas de trabajo de sitios como Indeed empiezan a bullir con más anuncios que buscan candidatos con experiencia en herramientas de programación asistida por IA. La convocatoria es para todos los rangos, desde los desarrolladores junior hasta los más veteranos.

Aumenta la productividad

Las herramientas de programación asistida por IA están dando que hablar porque mejoran la productividad sin sacrificar la calidad. Para un desarrollador, podría ser una forma de ascender en una organización.

Pulgares arriba de los desarrolladores

El rumor entre los desarrolladores es que las herramientas de programación asistida por IA se están poniendo de moda. Por ejemplo, GitHub Copilot ostenta una sólida calificación de 4,5 de 5 estrellas en G2.com, un sitio independiente de reseñas de software.

¿Desarrollador 10x?

El desarrollador 10x tiene la potencia de 10 programadores. Son los Usain Bolt de la programación, que se apresuran a resolver los problemas y producen soluciones antes de que puedas decir "corrección de errores".

Así que puede que estés pensando ¿Podría convertirme en un desarrollador 10x con la ayuda de herramientas de programación asistida por IA? Pues siento decirlo, pero probablemente no. Aunque estas tecnologías pueden suponer una diferencia significativa, las mejoras no suelen ser de órdenes de magnitud.

Además, el concepto de desarrollador 10x puede suscitar estereotipos y prejuicios, haciendo que la escena tecnológica parezca un club exclusivo. Por no hablar de que la presión por ser ese súper programador podría llevarte directamente a los brazos del agotamiento. Así que, aunque ser un desarrollador 10x pueda sonar genial, recuerda que probablemente se acerque más a una fantasía.

Habilidades del desarrollador

Según el estudio de McKinsey, la eficacia de las herramientas de desarrollo asistidas por IA depende a menudo de la experiencia del desarrollador. He aquí algunas consideraciones:

Corrección de errores

Aunque la IA generativa puede ser tu fiel compañera, también puede meter la pata. Es responsabilidad del desarrollador detectar y corregir estos errores. Algunos desarrolladores han tenido que hacer un bucle de correcciones con la IA para llegar a un punto óptimo de precisión, mientras que otros han tenido que alimentar a la herramienta para que depure con precisión. Ciertamente, esto puede llevar mucho tiempo. Pero un desarrollador veterano sabrá cómo evitar meterse en esos berenjenales.

Cómo sentir las vibraciones de la oficina

Las herramientas de programación asistida por IA son bastante sólidas cuando se trata de codificar, pero pueden fallar cuando se trata del sabor único de proyectos individuales o peculiaridades de la empresa. De nuevo, aquí es donde los desarrolladores veteranos son clave. Sabrán cómo guiar estas herramientas para obtener los resultados que mejor se ajusten a los objetivos de la organización, los objetivos de rendimiento y la seguridad.

Afrontar las cosas difíciles

Las herramientas de programación asistida de IA son estupendas para tareas como pulir el código, pero si se plantean retos complejos como mezclar diferentes marcos de codificación, la IA puede tropezar consigo misma. En esos momentos, son los desarrolladores experimentados los que tienen que arremangarse .

Conclusión

Las herramientas de programación asistida por IA son sin duda los juguetes más brillantes en la caja de arena de la creación de software. A medida que esta tecnología siga avanzando, estos sistemas aumentarán la eficiencia, se encargarán de las tareas aburridas y permitirán a los desarrolladores sumergirse en las áreas más importantes, como la resolución de problemas de alto nivel.

Pero hay aspectos negativos: problemas de propiedad intelectual, laberinto de licencias de software de código abierto, posibilidad de parcialidad y riesgos de seguridad, por nombrar algunos.

En su mayor parte, estas herramientas son tus asistentes virtuales, no un sustituto de tus conocimientos, habilidades y experiencia. Al mismo tiempo, aunque no sean superhéroes, se perfilan como poderosas adiciones al conjunto de herramientas del desarrollador.

Get Programación asistida por IA now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.