La democratización de la creación de software y la IA

La historia del desarrollo de software consiste en un proceso continuo de reducción de barreras. Cada avance tecnológico relevante ha facilitado que un número mayor de personas pueda utilizar ordenadores para crear nuevas herramientas. Pero reducir la dificultad necesaria para crear aplicaciones y servicios no implica eliminar la necesidad de comprender cómo se construye un proyecto software.

Superando la barrera del hardware

Durante las primeras décadas de la informática, crear software estaba restringido a organizaciones capaces de acceder a ordenadores muy costosos y a profesionales con una formación muy especializada. La aparición del ordenador personal modificó esta situación. Una persona podía adquirir para su casa una máquina programable de propósito general por un precio relativamente asequible.

La barrera de entrada pasó entonces a estar formada principalmente por tres elementos: disponer de un ordenador personal, acceder a las herramientas necesarias para desarrollar programas y adquirir los conocimientos técnicos para utilizarlas. Un ordenador personal, un compilador y suficiente documentación podían constituir un entorno de desarrollo completo. El hardware se había democratizado, pero el conocimiento seguía siendo una barrera considerable.

Internet y la democratización del conocimiento

La popularización de Internet produjo una nueva transformación. El ordenador personal había democratizado el acceso a la capacidad de computación, Internet comenzó a democratizar el acceso al conocimiento necesario para utilizarla.

La documentación técnica, que anteriormente podía encontrarse principalmente en libros, manuales, revistas especializadas, universidades y entornos profesionales, empezó a estar disponible en línea. Posteriormente aparecieron foros, comunidades de desarrolladores, proyectos de código abierto, cursos, tutoriales, blogs técnicos y plataformas especializadas en preguntas y respuestas.

Aprender a programar continuaba requiriendo un esfuerzo considerable, pero el coste económico y la dificultad de encontrar información se habían reducido drásticamente. Un desarrollador que encontraba un problema podía buscar su mensaje de error, consultar la documentación de una biblioteca o estudiar cómo otras personas habían resuelto situaciones similares.

Internet facilitó el aprendizaje de lenguajes de programación y ayudó a la difusión de conocimientos sobre arquitectura de software, patrones de diseño, seguridad, pruebas, bases de datos, sistemas distribuidos y metodologías de desarrollo.

La barrera del conocimiento no desapareció, pero acceder a él se hizo progresivamente más sencillo.

De buscar información a conversar con ella

La aparición de los asistentes conversacionales basados en inteligencia artificial introdujo un cambio cualitativamente diferente. El problema dejó de ser únicamente encontrar información para convertirse también en poder interrogarla mediante lenguaje natural.

Ante una cuestión técnica, ya no era imprescindible formular correctamente una búsqueda, localizar varias fuentes, interpretarlas y construir una respuesta a partir de ellas. Un chatBot con conocimientos de ingeniería del software podía realizar parte de ese proceso y proporcionar directamente una explicación adaptada al contexto presentado por el usuario.

Conceptos que requerían consultar diferentes libros, artículos o discusiones técnicas pueden explorarse mediante una conversación en un chat. Con este avance era posible describir un problema, solicitar alternativas, preguntar por sus ventajas e inconvenientes y profundizar sucesivamente en determinados aspectos del problema.

La inteligencia artificial comenzó así a actuar como una nueva capa de abstracción sobre el conocimiento técnico disponible.

Pero facilitar el acceso a una respuesta no equivale a comprender la solución que se ha obtenido. Una respuesta técnicamente plausible puede contener errores, asumir condiciones inexistentes o ser adecuada para un contexto diferente. La capacidad para evaluar la respuesta continúa dependiendo del conocimiento de la persona que la recibe.

Del asistente al agente

La reciente evolución de la IA introduce un cambio todavía más profundo. Este cambio consiste en que las herramientas de inteligencia artificial han dejado de limitarse a explicar cómo escribir software y han comenzado a participar directamente en su construcción.

Los modelos actuales pueden generar código, modificar proyectos existentes, ejecutar herramientas, interpretar errores, crear pruebas y realizar sucesivas modificaciones hasta obtener aparentemente el resultado solicitado. La aparición de agentes de programación amplía todavía más esta capacidad al permitir que determinados procesos se ejecuten con un grado creciente de autonomía.

En este contexto se ha popularizado el concepto de vibeCoding, una forma de creación de software en la que el usuario describe mediante lenguaje natural aquello que desea delegando  parte de las decisiones de implementación en la inteligencia artificial.

Esta capacidad está produciendo dos interpretaciones aparentemente contradictorias. Hay personas sin conocimientos avanzados de programación que ya pueden construir prototipos y aplicaciones que anteriormente habrían requerido la intervención de un desarrollador. Por otra parte, los profesionales del software pueden utilizar estas mismas herramientas para aumentar considerablemente su productividad.

La consecuencia es una nueva reducción de la barrera de entrada a la creación de software.

La falsa sensación de éxito

Esta democratización presenta un problema fundamental que consiste en que generar software que aparentemente funciona es considerablemente más sencillo que generar buen software.

Cuando una persona solicita a una inteligencia artificial que construya una aplicación, el sistema intenta materializar la descripción recibida. Si la especificación es incompleta, ambigua o técnicamente inconsistente, el modelo debe trabajar con esa incertidumbre. Puede realizar suposiciones razonables y producir un resultado visualmente convincente, pero eso no significa que haya construido exactamente aquello que el usuario necesitaba.

Una característica especialmente problemática del vibeCoding es que tiene una facilidad para producir una sensación prematura de éxito.

Una interfaz puede mostrarse correctamente. Un botón puede ejecutar la acción esperada. Los datos pueden almacenarse y recuperarse. Desde el punto de vista del usuario, el software parece terminado.

Sin embargo, gran parte de la calidad del software no resulta inmediatamente visible.

La arquitectura puede ser inadecuada para futuras ampliaciones. El modelo de datos puede contener decisiones que dificulten su evolución. Pueden existir problemas de concurrencia, seguridad o rendimiento. El tratamiento de errores puede ser insuficiente. Las pruebas pueden cubrir únicamente los escenarios más evidentes. Las dependencias pueden haber sido elegidas sin considerar sus consecuencias a largo plazo.

El problema no consiste necesariamente en que la inteligencia artificial haya ejecutado incorrectamente la tarea. Puede haber construido de manera razonable aquello que se le solicitó. El problema puede encontrarse en en la incapacidad del usuario para describir con suficiente precisión aquello que realmente necesitaba.

Especificar también es ingeniería

El desarrollo profesional de software nunca ha consistido exclusivamente en escribir código. Una parte importante del trabajo consiste en transformar necesidades ambiguas en requisitos concretos, identificar restricciones, anticipar situaciones excepcionales y decidir qué compromisos son aceptables.

Cuando se delega la implementación en un agente de inteligencia artificial, estas actividades no desaparecen, más bien adquieren una importancia mayor.

Una especificación insuficiente produce un número de soluciones demasiado amplio. El sistema debe completar la información que falta mediante inferencias. Cuantas más decisiones se deleguen, mayor será la probabilidad de que el resultado se aleje de las necesidades reales.

En este sentido, los modelos generativos pueden reducir drásticamente el coste de escribir código sin reducir en la misma proporción la dificultad de especificar correctamente un sistema.

La programación puede hacerse más accesible mientras que la ingeniería de software continúa siendo difícil.

El problema aparece después de que el programa funcione

Existe además una dimensión temporal que puede pasar inadvertida durante la generación inicial. El coste de un producto de software no termina cuando se obtiene su primera versión funcional.

El software necesita ser corregido, actualizado, ampliado, auditado y adaptado a nuevos requisitos. En sistemas con una vida útil suficientemente larga, una parte considerable del esfuerzo se dedica precisamente a comprender y modificar código existente.

El código generado automáticamente no está exento de esta realidad.

Una sucesión de instrucciones destinadas únicamente a conseguir que el sistema vuelva a funcionar puede introducir duplicaciones, dependencias innecesarias, soluciones locales incompatibles con la arquitectura general o abstracciones difíciles de comprender. Cada modificación puede resolver el problema inmediato y, al mismo tiempo, aumentar la dificultad de implementar la siguiente versión del producto.

El riesgo no es sólo producir código incorrecto. También existe el riesgo de producir código que nadie comprende suficientemente bien como para sustituir el trabajo de la IA por código mantenible, escalable y actualizable.

La mantenibilidad del proyecto se convierte en una cuestión central. Si la persona que dirige el desarrollo no comprende la arquitectura creada por la IA, evaluar una modificación propuesta por otro agente de IA resulta difícil. La capacidad de generar cambios puede crecer más rápidamente que la capacidad para evaluar sus consecuencias.

La productividad y la desaparición del equipo

El incremento de productividad asociado a estas herramientas también está modificando la percepción sobre la organización de los equipos de desarrollo. Un profesional experimentado asistido por inteligencia artificial puede realizar determinadas tareas que anteriormente requerían muchas más horas de trabajo. Esto puede generar la impresión de que algunas funciones, especialmente las posiciones junior, han dejado de ser necesarias o de que equipos completos pueden ser sustituidos por un desarrollador experimentado acompañado de varios agentes.

Esta conclusión confunde capacidad de producción con capacidad organizativa.

Un equipo de software no está únicamente para producir líneas de código. También está para distribuir conocimiento, revisar decisiones, detectar errores, cuestionar hipótesis e ideas y permitir que diferentes personas desarrollen experiencia sobre el sistema. De la misma forma un desarrollador junior no es simplemente una versión menos productiva de un desarrollador senior.

Las posiciones junior forman parte del mecanismo para formar los profesionales experimentados del futuro.

Si las organizaciones eliminan sistemáticamente esas posiciones porque la inteligencia artificial permite que los profesionales actuales produzcan más software, pueden obtener una mejora de productividad inmediata mientras debilitan simultáneamente su capacidad para formar nuevas generaciones de especialistas.

La cuestión no es cuántas personas son necesarias para producir una determinada cantidad de software, sino qué conocimientos deben existir dentro de una organización para comprender, mantener y evolucionar ese software durante años.

De pedir resultados a pedir conocimiento

La democratización de la creación de software mediante inteligencia artificial ofrece una oportunidad que puede ser más importante que la generación automática de código.

Las mismas herramientas que permiten solicitar crea esta aplicación permiten adoptar un enfoque diferente como pedir enséñame a construir esta aplicación.

La diferencia entre ambas formas es sustancial.

En el primer caso, en el que la persona pide la creación, el objetivo principal es obtener un resultado. En el segundo caso, el resultado se convierte también en un mecanismo de aprendizaje. La inteligencia artificial puede explicar las decisiones arquitectónicas, presentar alternativas, justificar la elección de determinadas estructuras de datos, generar ejemplos progresivos, analizar errores y ayudar al usuario a comprender las consecuencias de cada modificación.

De esta forma, la inteligencia artificial puede utilizarse como sustituto parcial de determinadas tareas de programación, y como un instrumento para acelerar la adquisición de conocimientos. La misma tecnología que permite programar sin comprender puede convertirse en una de las herramientas más eficaces para aprender a comprender.

Una nueva etapa de la democratización

Puede ser cada vez más sencillo conseguir que un ordenador produzca una aplicación. Pero sigue  siendo difícil determinar qué aplicación debe construirse, cómo debe comportarse en situaciones no previstas, qué arquitectura permitirá mantenerla, qué riesgos introduce y cómo deberá evolucionar cuando cambien sus requisitos.

La democratización de la creación de software no debería entenderse como el final de la necesidad de aprender ingeniería de software. Mas bien puede ser lo contrario.

Cuando producir código deja de ser el principal cuello de botella, comprender qué código merece la pena producir, evaluar el que ha sido generado y ser capaz de mantenerlo adquiere más importancia.

El futuro de la creación de software no estará en elegir entre programar manualmente o delegar la programación en una inteligencia artificial. Más bien estará en utilizar la inteligencia artificial para elevar progresivamente el nivel de abstracción al que trabajan las personas sin renunciar al conocimiento necesario para comprender aquello que están construyendo.

La herramienta puede escribir cada vez más código pero la responsabilidad de entender el sistema continúa siendo humana.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.