Es bien sabido que la IA generativa puede crear imágenes, produciendo fotografías fotorrealistas, ilustraciones y pinturas con solo seguir instrucciones.
Mientras tanto, en el mundo empresarial, la atención se centra en la capacidad de la IA generativa para generar programas.
La IA basada en chat se materializa a través de modelos de lenguaje grandes y fundacionales, lo que la hace altamente competente para conversar en varios idiomas y traducir entre ellos.
Los lenguajes de programación, utilizados para crear programas, también son un tipo de lenguaje. Los programadores humanos, en cierto sentido, traducen los requisitos de software recibidos verbalmente a lenguajes de programación.
Por esta razón, la IA generativa conversacional que utiliza grandes modelos de lenguaje también es muy hábil en la programación.
Además, la programación es un tipo de trabajo intelectual donde la corrección del resultado a menudo puede verificarse de forma automática e instantánea. Esto se debe a que la ejecución del programa creado permite determinar automáticamente si se producen los resultados deseados.
De hecho, los programadores humanos a menudo crean programas de prueba simultáneamente con el programa principal para verificar que este último funcione según lo previsto, comprobando su comportamiento a medida que avanza el desarrollo.
La IA generativa también puede avanzar en la programación mientras realiza pruebas, lo que permite un mecanismo en el que, si un humano proporciona instrucciones precisas, la IA puede iterar y completar automáticamente el programa hasta que supere las pruebas.
Por supuesto, debido a las limitaciones de la capacidad de programación de la IA generativa y la ambigüedad de las instrucciones humanas, hay muchos casos en los que las pruebas no se pueden superar incluso después de múltiples iteraciones. Además, las pruebas pueden ser insuficientes o incorrectas, lo que a menudo conduce a errores o problemas en el programa completado.
Sin embargo, a medida que mejoran las capacidades de la IA generativa, los ingenieros humanos perfeccionan sus métodos de instrucción, y el conocimiento de programación de la IA generativa se mejora mediante búsquedas en Internet, el alcance para generar programas adecuados de forma automática aumenta día a día.
Además, con la atención del mundo empresarial, las principales empresas que realizan investigación y desarrollo de IA generativa también se están centrando en mejorar las capacidades de programación de la IA generativa.
En tales circunstancias, se prevé que la expansión de las áreas y volúmenes en los que se puede confiar la programación automática a la IA generativa se acelere.
Existen muchos casos en los que personas que nunca antes habían desarrollado programas han configurado un entorno de desarrollo básico basándose en información de internet, y luego han dejado que la IA generativa se encargue de la programación, completando programas en un esfuerzo colaborativo.
Yo mismo, como programador, utilizo la IA generativa para programar. Una vez que le cojo el truco, puedo completar software sin editar el programa en absoluto, simplemente copiando programas en archivos o cortando y pegando según las instrucciones de la IA generativa.
Por supuesto, hay muchas ocasiones en las que encuentro dificultades. Esto se debe principalmente a que mi ordenador o las herramientas de desarrollo de programación tienen configuraciones ligeramente diferentes a las típicas, o a que los componentes de software libre son más nuevos de lo que la IA generativa aprendió, lo que lleva a una brecha de conocimiento, o a veces el contenido que solicito es un poco inusual.
En la mayoría de los casos, si no hay tales pequeñas diferencias o circunstancias especiales, y le indico que cree una característica de software muy común, se generan programas apropiados.
Hacia la era del "Liquidware"
Como desarrollador de software, puedo lanzar el software que desarrollo. Y el software que nosotros, los ingenieros, lanzamos es utilizado por diversos usuarios.
El futuro en el que cualquiera podrá realizar este desarrollo de software con IA generativa es una extensión de la discusión hasta ahora.
Sin embargo, esto no es solo un cambio en el lado del desarrollo de software. También se producirá un cambio significativo en el lado del usuario.
Instruir verbalmente a la IA generativa para que añada o cambie automáticamente funciones al software se puede hacer no solo durante la fase de desarrollo, antes del lanzamiento del software, sino también mientras está en uso. Además, pueden hacerlo los propios usuarios del software.
Los desarrolladores de software solo necesitan definir los rangos permitidos e inalterables y lanzar el software con una función de personalización impulsada por IA generativa.
Esto permitiría a los usuarios solicitar a la IA generativa que cambie pequeños problemas de usabilidad o preferencias de diseño de pantalla.
Además, sería posible añadir funciones útiles que se encuentran en otras aplicaciones, realizar una combinación de múltiples operaciones con un solo clic, o ver pantallas de acceso frecuente en una sola visualización.
Desde la perspectiva del desarrollador de software, permitir tal personalización por parte del usuario ofrece ventajas significativas. Elimina la necesidad de que añadan funciones basadas en las solicitudes de los usuarios, y considerando que podría aumentar la popularidad del software al evitar comentarios negativos e insatisfacción con respecto a la usabilidad, es una gran ventaja.
Cuando los usuarios pueden cambiar libremente pantallas y funciones de esta manera, el concepto se desvía significativamente de lo que tradicionalmente llamábamos "software".
Sería apropiado llamarlo "liquidware" para significar que es aún más fluido y adaptable que el software (que es flexible en comparación con el hardware), y que se ajusta perfectamente al usuario.
En el pasado, las funciones se realizaban únicamente mediante hardware, pero luego surgió el software reemplazable, lo que permitió que las funciones se realizaran mediante una combinación de hardware + software.
A partir de ahí, podemos pensar en la aparición del "liquidware", que se refiere a las partes que pueden ser modificadas por la IA generativa. Así, las funciones generales serían realizadas por hardware + software (proporcionado por los desarrolladores) + "liquidware" (modificaciones del usuario).
En esta era del "liquidware", las ideas de modificación por parte del usuario se multiplicarán.
Una idea de modificación innovadora inventada por un usuario podría convertirse en un tema candente en las redes sociales, llevando a otros a imitar y modificar varios "liquidware".
Además, es seguro que surgirá "liquidware" capaz de integrar y manejar varios tipos de software. Esto permitiría a los usuarios ver líneas de tiempo de múltiples plataformas de redes sociales diferentes en una sola aplicación, o integrar resultados de búsqueda de numerosas plataformas.
De esta manera, en un mundo donde el "liquidware" es predominante, varios dispositivos, incluidos los PC y los teléfonos inteligentes, proporcionarán funciones que se ajustarán perfectamente a la vida y actividades de cada individuo.
Un fenómeno actual
Lo importante para los ingenieros de software como yo es que el "liquidware" no es un concepto futurista ni algo que esté a varios años de distancia.
Esto se debe a que un "liquidware" muy simple ya es alcanzable.
Por ejemplo, digamos que soy un ingeniero que desarrolla una aplicación web para el sitio de comercio electrónico de mi empresa.
Estas aplicaciones web suelen tener bases de datos, sistemas de gestión de ventas y sistemas de envío de productos en servidores gestionados por la empresa o servicios en la nube contratados. Cuando un usuario realiza una compra, estos sistemas se vinculan para cobrar pagos y enviar productos.
Los sistemas centrales y las bases de datos para estas operaciones no pueden modificarse arbitrariamente.
Sin embargo, si el diseño del sitio web de comercio electrónico que ven los usuarios se modifica para la comodidad de cada usuario, generalmente causa pocos problemas. Por supuesto, si los cambios de un usuario afectan la pantalla de otro usuario, eso es un problema, pero las personalizaciones individuales específicas del usuario están bien.
Se pueden concebir varias modificaciones: aumentar el tamaño del texto, cambiar el fondo a un tono oscuro, mover los botones pulsados con frecuencia a posiciones fácilmente accesibles con la mano izquierda, ordenar los elementos por precio en una pantalla de lista, o mostrar los detalles de dos productos uno al lado del otro.
Técnicamente, estas modificaciones se pueden lograr alterando los archivos de configuración y programas como HTML, CSS y JavaScript que muestran la pantalla en el navegador.
En términos de seguridad, estos archivos se ejecutan originalmente en el navegador web, por lo que son modificables por ingenieros familiarizados con las aplicaciones web. Por lo tanto, solo manejan funciones y datos que son seguros de modificar.
Así, en el lado del servidor de la aplicación web de comercio electrónico, se podrían almacenar estos archivos por separado para cada usuario registrado, añadir una pantalla para conversar con una IA de chat y crear un mecanismo para modificar los archivos HTML, CSS y JavaScript de ese usuario en el servidor según sus solicitudes.
Si proporcionas este texto, junto con la información de configuración y el código fuente de una aplicación web de comercio electrónico existente, a la IA generativa, es probable que te proporcione los pasos y los programas necesarios para añadir dicha funcionalidad.
De esta manera, el "liquidware" ya es un tema actual; no sería sorprendente que fuera un fenómeno en curso.
Ingeniero Omnidireccional
Incluso si el alcance de la programación automática impulsada por IA se expande y la era del "liquidware" ya ha comenzado, el desarrollo de software aún no puede ser llevado a cabo únicamente por la IA generativa.
Sin embargo, es cierto que el peso de la programación en el desarrollo de software disminuirá significativamente.
Además, para desarrollar software sin problemas, se necesita un amplio rango de conocimientos y habilidades de ingeniería, no solo programación general, sino también infraestructura en la nube, redes, seguridad, plataformas, marcos de desarrollo y bases de datos, cubriendo todo el sistema de arriba a abajo.
El personal con dichos conocimientos y habilidades se denomina ingenieros full-stack.
Hasta ahora, unos pocos ingenieros full-stack se encargaban del diseño general, mientras que el resto de los ingenieros se centraban únicamente en la programación o se especializaban en áreas no programáticas específicas dentro de la pila del sistema, compartiendo roles de esta manera.
Sin embargo, a medida que la IA generativa asuma la parte de la programación, los costos de desarrollo de software se reducirán significativamente, lo que llevará a la planificación de diversos nuevos desarrollos de software.
En consecuencia, cada proyecto de desarrollo requerirá muy pocos ingenieros que puedan simplemente escribir código; en cambio, se necesitará un gran número de ingenieros full-stack.
Además, en esta situación, simplemente tener conocimientos y habilidades full-stack será insuficiente. Esto se debe a que varios proyectos de desarrollo de software exigirán diversos tipos de software, lo que significa que el desarrollo no siempre se solicitará dentro de la misma pila de sistema. Además, la demanda de sistemas compuestos que requieran múltiples pilas de sistema está destinada a aumentar.
Por ejemplo, la pila de sistema para una aplicación web difiere de la de los sistemas empresariales o centrales. Por lo tanto, un ingeniero full-stack de aplicaciones web no puede encargarse de un proyecto de desarrollo de un sistema central.
Además, las aplicaciones web, las aplicaciones para teléfonos inteligentes y las aplicaciones para PC tienen diferentes pilas de sistema. En el mundo del software embebido, como el IoT, la pila de sistema cambia completamente según el dispositivo en el que esté embebido.
Sin embargo, si la importancia de la programación disminuye y el costo total del desarrollo de software se reduce, el desarrollo de sistemas compuestos que combinen software con diferentes pilas de sistema debería aumentar.
Si bien esto requerirá la reunión de varios ingenieros full-stack separados para el desarrollo, los ingenieros que puedan supervisar el panorama completo y realizar el diseño básico ocuparán una posición crucial.
Esto significa que habrá demanda de ingenieros con conocimientos y habilidades omnidireccionales en numerosas pilas de sistemas, trascendiendo los límites de las pilas de sistemas individuales.
Es probable que a estos ingenieros se les llame ingenieros omnidireccionales.
Y así como la demanda de ingenieros que solo pueden programar disminuirá debido a la IA generativa, llegará eventualmente una era en la que la demanda de ingenieros full-stack confinados a una única pila de sistemas también disminuirá.
Si deseas mantenerte activo como ingeniero de TI en esa era, debes comenzar a esforzarte por convertirte en un ingeniero omnidireccional de inmediato.
El papel del ingeniero omnidireccional
Los lenguajes de programación, plataformas y frameworks a desarrollar son diversos.
Sin embargo, esto no significa que uno deba aprenderlos todos. Esto se debe a que el ingeniero omnidireccional también puede recibir asistencia de la IA generativa.
Si se confía a la IA generativa, incluso los lenguajes de programación, plataformas o frameworks que uno nunca ha utilizado personalmente pueden generarse simplemente proporcionando instrucciones verbalmente.
Por supuesto, existe el riesgo de introducir errores o vulnerabilidades de seguridad, o de acumular deuda técnica que podría dificultar futuras modificaciones.
Para identificar y mitigar estos riesgos, es necesario el conocimiento del lenguaje o la biblioteca específicos. Sin embargo, ese conocimiento también se puede obtener de la IA generativa. El ingeniero omnidireccional solo necesita ser capaz de construir a fondo los procedimientos y mecanismos para detectar y prevenir estos problemas, o para manejarlos a posteriori.
Estos procedimientos y mecanismos no cambian significativamente con las diferencias en la pila del sistema. Si uno puede formalizar los procedimientos y mecanismos para suprimir la introducción de errores y vulnerabilidades de seguridad, y para asegurar la extensibilidad futura durante el desarrollo, entonces el resto puede confiarse a la IA generativa o a ingenieros expertos en esas áreas particulares.
El ingeniero omnidireccional no necesita poseer conocimientos detallados o experiencia a largo plazo con cada pila de sistema individual.
Además, uno de los papeles principales de un ingeniero omnidireccional es diseñar cómo se distribuyen las funciones y cómo interactúan dentro de software complejo que opera de forma colaborativa a través de múltiples y diferentes pilas de sistemas.
Asimismo, considerar cómo debe desarrollarse y gestionarse todo el software también se convierte en un papel importante para el ingeniero omnidireccional.
Software Omnidireccional
Consideremos qué tipo de desarrollo de software requiere un ingeniero omnidireccional.
Anteriormente, di el ejemplo de desarrollar una aplicación web de comercio electrónico.
Bajo la dirección de un ejecutivo a cargo, a quien la alta dirección de la empresa ha ordenado revisar esta aplicación web de comercio electrónico, el equipo de planificación podría presentar los siguientes requisitos:
Conversión a Plataforma de Comunidad de Usuarios. Esto significa no solo una aplicación o sitio específico de comercio electrónico, sino proporcionar una plataforma donde los usuarios de productos puedan interactuar entre sí sobre los productos y su uso. El objetivo es la retención de usuarios, el efecto de boca a boca, el enriquecimiento del contenido a través de las contribuciones de los usuarios y la integración de la retroalimentación del desarrollo de productos (tanto positiva como negativa) con la planificación y el marketing de nuevos productos.
Compatibilidad Omni-dispositivo. Esto permite el acceso a la comunidad de usuarios y la información del producto no solo desde aplicaciones web, sino también desde aplicaciones para teléfonos inteligentes, asistentes de voz, dispositivos wearables, electrodomésticos inteligentes y todos los demás dispositivos.
Compatibilidad Omni-plataforma. Esto incluye no solo la plataforma de comunidad de usuarios propia de la empresa, sino también, por ejemplo, listados de productos y el intercambio de reseñas en sitios de comercio electrónico generales, la integración con redes sociales y la vinculación funcional e informativa con diversas herramientas de IA.
Actualización del Sistema de Negocio. Si bien se vinculará temporalmente con los sistemas existentes de gestión de ventas y entrega de productos, estos sistemas también serán actualizados. Después de la actualización, se prevé la agregación de datos de ventas en tiempo real, la previsión de la demanda y la integración con los sistemas de gestión de inventario. Además, a medida que avance la integración gradual con los sistemas de inventario distribuidos regionalmente y los servicios de envío de productos proporcionados por las empresas de entrega, los sistemas de información también deberán integrarse gradualmente de forma acorde.
Compatibilidad con Liquidware. Por supuesto, todas las interfaces de usuario serán compatibles con "liquidware". Además, todas las interfaces de usuario internas, como las de agregación de información y retroalimentación para el desarrollo y planificación de productos, departamentos de operaciones del sistema e informes de gestión, también se convertirán a "liquidware".
Si se presentara un plan de desarrollo para un software tan complejo, un equipo de desarrollo de software tradicional probablemente no lo aceptaría de inmediato. O, durante el proceso de refinamiento de las especificaciones del sistema, demostrarían lógicamente la necesidad de enormes costos y tiempo de desarrollo, e impulsarían reducciones significativas en las especificaciones.
Sin embargo, ¿qué pasaría si la IA generativa pudiera automatizar la mayor parte de la programación, y más de la mitad de las pilas de sistemas presentadas fueran familiares para alguien del equipo, y el equipo tuviera experiencia previa en la introducción exitosa de nuevas pilas de sistemas, plataformas y frameworks desde cero con la ayuda de la IA generativa? ¿Y qué pasaría si usted, como ingeniero omnidireccional, ya se hubiera embarcado en este camino y tuviera la intención de continuar en él?
Desde esa perspectiva, debería parecer un proyecto muy atractivo. Podría trabajar con un equipo de planificación que presenta propuestas ambiciosas bajo la dirección del liderazgo de planificación, y un equipo de desarrollo con el potencial de convertirse en un equipo de desarrollo de software omnidireccional.
También existe la tranquilidad de los sistemas existentes. Es también un proyecto que permite procesos de desarrollo ágiles, donde las características de alto impacto pueden construirse rápidamente, y el sistema puede crecer incrementalmente con la retroalimentación de los usuarios pioneros.
Considerando esto, el desarrollo de este software omnidireccional debería parecer un proyecto atractivo.
En conclusión
Gracias a la programación automática mediante IA generativa, el "liquidware" y el desarrollo de software omnidireccional ya se están convirtiendo en realidades actuales.
En tal situación, los ingenieros de TI necesitan cada vez más ir más allá del "full-stack" y aspirar a convertirse en ingenieros omnidireccionales.
Además, su alcance se expandirá a la ingeniería de negocios omnidireccional, que abarca la ingeniería integral de las actividades organizativas conectando clientes, empleados internos y IA más allá del ámbito de los sistemas de TI, y la ingeniería de comunidades omnidireccional.
Y aún más allá, creo que surgirá un campo llamado ingeniería social omnidireccional, cuyo objetivo será mejorar integralmente la sociedad.