Es bien sabido que la IA generativa puede producir imágenes fotorrealistas, ilustraciones y pinturas simplemente con recibir instrucciones.
Mientras tanto, en el mundo empresarial, la atención se centra en la capacidad de la IA generativa para generar programas.
La IA conversacional está impulsada por grandes modelos de lenguaje, una tecnología fundamental, y destaca en 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 una tarea intelectual donde la corrección de los resultados a menudo puede verificarse de forma automática e inmediata. Esto se debe a que un programa creado puede ejecutarse y comprobarse automáticamente para ver si produce la salida deseada.
De hecho, cuando los programadores humanos crean un programa, a menudo crean simultáneamente programas de prueba para verificar los resultados, desarrollando el programa principal mientras comprueban que funciona según lo previsto.
La IA generativa también puede progresar con la programación mientras realiza pruebas de la misma manera. Si un humano proporciona instrucciones precisas, es posible que la IA itere y complete automáticamente el programa hasta que pase todas las pruebas.
Por supuesto, debido a las limitaciones de las capacidades 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 numerosas iteraciones. Además, las pruebas inadecuadas o incorrectas a menudo provocan errores o problemas en el programa completado.
Sin embargo, a medida que mejoran las capacidades de la IA generativa y los ingenieros humanos refinan sus métodos de instrucción, junto con mecanismos para mejorar el conocimiento de programación de la IA generativa a través de búsquedas en Internet, el alcance para generar automáticamente programas adecuados se está expandiendo día a día.
Además, con el enfoque del mundo empresarial, las principales empresas dedicadas a la investigación y el desarrollo de IA generativa también están invirtiendo fuertemente en mejorar las capacidades de programación de la IA generativa.
En esta situación, se espera que la expansión del alcance y el volumen de las tareas de programación automatizada que se pueden confiar a la IA generativa se acelere.
Existen numerosos casos de personas que nunca antes habían desarrollado programas, que configuran un entorno de desarrollo básico utilizando información de internet, y luego confían en la IA generativa para la programación, completando proyectos juntos como un equipo de dos.
Como programador, yo mismo utilizo la IA generativa para programar. Una vez que le cojo el truco, puedo completar software sin editar el programa en absoluto, simplemente copiando y pegando código en archivos según las instrucciones de la IA generativa.
Ciertamente, hay muchas ocasiones en las que me quedo atascado. Esto se debe principalmente a pequeñas diferencias entre la configuración de mi computadora o mis herramientas de desarrollo de programación y las configuraciones comunes, o a que los componentes de software gratuitos son más nuevos que la versión con la que se entrenó la IA generativa, lo que causa una brecha de conocimiento, o a que mis solicitudes son ligeramente inusuales.
En los casos en que no hay tales discrepancias menores o circunstancias especiales, y cuando se le indica que cree funciones de software muy comunes, se generan programas apropiados en la mayoría de las situaciones.
Hacia la Era del Liquidware
Como desarrollador de software, puedo lanzar el software que creo, y ese software, lanzado por nosotros los ingenieros, es luego utilizado por varios usuarios.
El futuro donde este desarrollo de software puede ser realizado por cualquiera 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 avecinan cambios significativos para el lado del usuario.
La tarea de instruir verbalmente a la IA generativa para que añada o modifique funciones en el software de forma automática se puede realizar no solo durante la fase de desarrollo, antes del lanzamiento del software, sino también durante su uso. Además, puede ser llevada a cabo por el propio usuario del software.
Los desarrolladores de software pueden definir el alcance de lo que se puede y no se puede cambiar, para luego lanzar el software con funciones de personalización impulsadas por IA generativa.
Esto permitiría a los usuarios pedir a la IA generativa que modifique pequeñas inconveniencias o preferencias de diseño de pantalla dentro del software.
Además, los usuarios podrían añadir funciones útiles de otras aplicaciones, combinar múltiples operaciones en un solo clic o ver las pantallas consultadas con frecuencia en una única visualización.
Para los desarrolladores de software, habilitar esta personalización por parte del usuario ofrece beneficios significativos: elimina el esfuerzo de implementar las solicitudes de características por sí mismos y puede aumentar la popularidad del software al evitar reseñas negativas e insatisfacción por la usabilidad.
Cuando los usuarios pueden cambiar libremente pantallas y funciones de esta manera, el concepto se desvía significativamente de lo que tradicionalmente llamamos "software".
Sería más apropiado llamarlo "Liquidware", lo que implica algo aún más fluido y adaptable que el software (que ya es más flexible que el hardware), y algo que se ajusta perfectamente al usuario.
Las funciones antes se realizaban exclusivamente mediante hardware. Luego, surgió el software intercambiable, que permitió que las funciones se materializaran a través de una combinación de hardware y software.
A partir de ahí, podemos vislumbrar la aparición del Liquidware, que significa partes que pueden ser modificadas por IA generativa. En consecuencia, las funciones serán realizadas por hardware + software (proporcionado por los desarrolladores) + Liquidware (modificaciones del usuario).
En esta era del Liquidware, las ideas de los usuarios para modificaciones explotará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 diversas aplicaciones de Liquidware.
Además, es probable que surja Liquidware capaz de manejar varias aplicaciones de software de manera integrada. Esto significa que los usuarios podrían ver líneas de tiempo de múltiples plataformas de redes sociales diferentes en una sola aplicación, o los resultados de búsqueda podrían integrar resultados de numerosas plataformas.
De esta manera, en un mundo donde el Liquidware está extendido, varios dispositivos, incluidos los PC y los teléfonos inteligentes, proporcionarán funciones que se ajustarán perfectamente a cada una de nuestras vidas y actividades individuales.
Un Fenómeno Actual
Para los ingenieros de software como yo, es crucial entender que el Liquidware no es un concepto futurista ni algo que esté a varios años de distancia.
Esto se debe a que incluso el Liquidware muy simple ya es posible de lograr.
Por ejemplo, supongamos que soy un ingeniero que desarrolla una aplicación web para el sitio de comercio electrónico de mi empresa.
Una aplicación web de este tipo tendría bases de datos, sistemas de gestión de ventas y sistemas de envío de productos en servidores administrados internamente o contratados a través de un servicio en la nube. Cuando un usuario realiza una compra, estos sistemas se vinculan para gestionar el cobro y el envío del producto.
Los sistemas centrales de negocio y las bases de datos como estos no pueden modificarse arbitrariamente.
Sin embargo, el diseño de la pantalla web de un sitio de comercio electrónico orientado al usuario puede modificarse para adaptarse a usuarios individuales sin causar problemas significativos. Por supuesto, si los cambios de un usuario afectaran las pantallas de otros usuarios, eso sería un problema, pero las personalizaciones específicas de cada usuario individual están bien.
Por ejemplo, son concebibles diversas modificaciones: ampliar el texto, cambiar el fondo a un tono oscuro, reubicar los botones más pulsados para facilitar la operación con la mano izquierda, ordenar los artículos 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.
Desde una perspectiva de seguridad, estos archivos originalmente se ejecutan en el navegador web. Por lo tanto, las partes que pueden ser modificadas por un ingeniero con conocimientos en aplicaciones web 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 puede crear un mecanismo para almacenar estos archivos por separado para cada usuario que ha iniciado sesión, añadir una pantalla para conversar con una IA de chat y luego modificar los archivos HTML, CSS y JavaScript de ese usuario en el servidor según sus solicitudes.
Si este texto, junto con la información de configuración y el código fuente de la aplicación web de comercio electrónico existente, se presentara a una IA generativa, es probable que proporcionara 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 en este momento.
Ingenieros Omnidireccionales
Incluso con el alcance ampliado de la programación automática impulsada por IA y el advenimiento de la era del Liquidware, el desarrollo de software todavía no puede llevarse a cabo únicamente por IA generativa.
Sin embargo, es seguro que la importancia de la programación en el desarrollo de software disminuirá significativamente.
Además, para desarrollar software de manera fluida, se requiere una amplia gama de conocimientos y habilidades de ingeniería, que van desde la programación general hasta la infraestructura en la nube, redes, seguridad, plataformas, marcos de desarrollo y bases de datos, cubriendo toda la pila del sistema para que funcione el sistema completo.
El personal con estos conocimientos y habilidades se denomina ingenieros full-stack.
Tradicionalmente, unos pocos ingenieros full-stack se encargaban del diseño general, mientras que el resto de ingenieros se especializaban en programación, o se centraban en áreas específicas no relacionadas con la programación dentro de la pila del sistema, dividiendo así los roles.
Sin embargo, a medida que la IA generativa asuma el aspecto de la programación, los costes de desarrollo de software se reducirán significativamente, lo que llevará a la planificación de varios nuevos proyectos de desarrollo de software.
En consecuencia, en cada proyecto de desarrollo, los ingenieros que simplemente puedan escribir programas serán en gran medida innecesarios; en su lugar, se demandará un gran número de ingenieros full-stack.
Además, en este escenario, el simple hecho de tener conocimientos y habilidades full-stack será insuficiente. Esto se debe a que los tipos de software requeridos en varios proyectos de desarrollo se diversificarán, lo que significa que el desarrollo no siempre se solicitará utilizando la misma pila de sistema. Además, sin duda aumentarán las demandas de sistemas complejos que requieran múltiples pilas de sistemas.
Por ejemplo, la pila de sistema para una aplicación web difiere de la de los sistemas de negocio o centrales. Por lo tanto, un ingeniero full-stack de aplicaciones web no puede ser responsable de un proyecto de desarrollo de un sistema central.
Del mismo modo, las aplicaciones web, las aplicaciones para teléfonos inteligentes y las aplicaciones para PC tienen pilas de sistemas diferentes. En el mundo del software integrado, como el IoT, la pila de sistema variará completamente para cada dispositivo integrado.
Sin embargo, a medida que disminuye la importancia de la programación y caen los costes generales de desarrollo de software, es probable que aumente el desarrollo de sistemas complejos que combinen software con estas pilas de sistemas diferentes.
Si bien dicho desarrollo requerirá reunir a varios ingenieros full-stack distintos, los ingenieros que puedan supervisar todo el sistema y manejar el diseño básico desempeñarán un papel crucial.
Esto significa que habrá una demanda de ingenieros con conocimientos y habilidades omnidireccionales en numerosas pilas de sistemas, trascendiendo las fronteras 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 saben programar disminuirá debido a la IA generativa, llegará un momento en que la demanda de ingenieros full-stack confinados a una única pila de sistemas también disminuirá.
Si deseas seguir activo como ingeniero de TI en esa era, debes empezar de inmediato el camino para convertirte en un ingeniero omnidireccional.
El Papel de los Ingenieros Omnidireccionales
Los lenguajes de programación, plataformas y marcos de trabajo que se desarrollarán son diversos.
Sin embargo, un ingeniero omnidireccional no necesita dominar todos ellos, porque también puede recibir asistencia de la IA generativa.
Si se lo dejas a la IA generativa, incluso lenguajes de programación, plataformas o marcos de trabajo que nunca hayas usado antes pueden ser generados simplemente proporcionando instrucciones verbales.
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 biblioteca específica. Sin embargo, este conocimiento también puede obtenerse de la IA generativa. Un ingeniero omnidireccional solo necesita ser capaz de construir sólidamente procedimientos y mecanismos para detectar y prevenir estos problemas, o para manejarlos después de que ocurran.
Estos procedimientos y mecanismos no cambian drásticamente con las diferentes pilas de sistemas. Si se formalizan los procedimientos y mecanismos para prevenir errores y vulnerabilidades de seguridad y garantizar la extensibilidad futura, entonces el resto puede dejarse en manos de la IA generativa o de ingenieros especializados en esas áreas específicas.
Los ingenieros omnidireccionales no necesitan poseer conocimientos detallados ni experiencia a largo plazo con cada pila de sistema individual.
Una de las principales funciones de un ingeniero omnidireccional es diseñar cómo se distribuyen las funciones y cómo interactúan los múltiples sistemas de software complejos, operando colaborativamente en diferentes pilas de sistemas.
Además, considerar cómo desarrollar y gestionar todo el software es también un papel crucial para un ingeniero omnidireccional.
Software Omnidireccional
Consideremos para qué tipo de desarrollo de software se necesita un ingeniero omnidireccional.
Anteriormente, di el ejemplo de desarrollar una aplicación web de comercio electrónico.
Bajo la dirección de un ejecutivo encargado por la alta gerencia de actualizar esta aplicación web de comercio electrónico, el equipo de planificación podría presentar los siguientes requisitos:
Integración de la Plataforma de la Comunidad de Usuarios: Esto significa proporcionar una plataforma no solo para una aplicación o sitio de comercio electrónico dedicado, sino donde los usuarios puedan interactuar sobre los propios productos y cómo usarlos. El objetivo es la retención de usuarios, el efecto boca a boca, el enriquecimiento del contenido a través de las contribuciones de los usuarios y la integración de la retroalimentación (tanto positiva como negativa) en el desarrollo de productos, la planificación de nuevos productos y el marketing.
Compatibilidad con Omni-dispositivos: Esto hace que la comunidad de usuarios y la información del producto sean accesibles desde varios dispositivos, incluyendo no solo aplicaciones web, sino también aplicaciones para teléfonos inteligentes, asistentes de voz, dispositivos wearable y electrodomésticos inteligentes.
Compatibilidad con Omni-plataformas: 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 integrales, la integración con redes sociales y la vinculación funcional y de información con varias herramientas de IA.
Actualización del sistema de negocio: Si bien se vinculará temporalmente con los sistemas de gestión de ventas y entrega de productos existentes, esto también implica la actualización de estos sistemas. Después de la actualización, el plan incluye la agregación de datos de ventas en tiempo real y la previsión de la demanda, así como la integración con los sistemas de gestión de inventario. Además, la vinculación con los sistemas de inventario distribuidos regionalmente proporcionados por las empresas de reparto y los servicios de envío de productos por parte del transportista se implementará por fases, lo que requerirá que el sistema de información adapte gradualmente sus integraciones en consecuencia.
Compatibilidad con Liquidware: Todas las interfaces orientadas al usuario serán, por supuesto, compatibles con Liquidware. Además, las interfaces de usuario internas para el desarrollo y la planificación de productos (como la agregación de información y la retroalimentación), los departamentos de operaciones del sistema y los informes para la gerencia 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. Alternativamente, a través de discusiones sobre las especificaciones del sistema, demostrarían lógicamente la necesidad de enormes costes y tiempo de desarrollo, presionando para que se reduzcan significativamente 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 propuestas ya fueran conocidas por alguien del equipo? ¿Y si el equipo tuviera un historial de lanzamiento exitoso de nuevas pilas de sistemas, plataformas y marcos de trabajo desde cero con la ayuda de la IA generativa? ¿Y si tú, como ingeniero omnidireccional, ya hubieras iniciado este camino y tuvieras la intención de continuarlo?
Desde esa perspectiva, debería parecer un proyecto muy atractivo. Tendrías la oportunidad de trabajar con un equipo de planificación que presenta propuestas ambiciosas de la alta dirección y con un equipo de desarrollo con el potencial de convertirse en un equipo de desarrollo de software omnidireccional.
También está la tranquilidad de los sistemas existentes. Es también un proyecto que puede crecer incrementalmente a través de un proceso de desarrollo ágil, comenzando con funcionalidades de impacto elevado y rápida implementación, y recogiendo la retroalimentación de los usuarios tempranos para un crecimiento gradual.
Considerando todo esto, el desarrollo de este software omnidireccional debería parecer un proyecto muy atractivo.
Conclusión
Con la programación automática impulsada por la IA generativa, el Liquidware y el desarrollo de software omnidireccional ya se están convirtiendo en realidades actuales.
En este contexto, los ingenieros de TI necesitan cada vez más ir más allá del full-stack y aspirar a convertirse en ingenieros omnidireccionales.
Más allá de eso, su ámbito se expandirá aún más, yendo más allá del reino de los sistemas de TI para abarcar la ingeniería de negocios omnidireccional —ingeniar las actividades organizacionales mismas, conectando a clientes, empleados internos e IA— y la ingeniería de comunidades omnidireccional.
Y aún más allá, preveo el surgimiento de un campo llamado ingeniería social omnidireccional, cuyo objetivo es mejorar la sociedad de forma integral.