arte emergiendo el software

Todo es arte... Incluso la ingeniería de software

Confieso que no siempre me vi como ingeniero de software, especialmente al principio. Entré a la carrera porque desde niño tuve inclinación hacia las computadoras y las posibilidades que ofrecían: ¿no sé dibujar? no importa, ahí estaba Corel; ¿escribir? con mi caligrafía horrenda la máquina de escribir tenía su encanto pero Word era una maravilla. Todo parecía ilimitado, limpio, exacto y profesional; ¡y eso en los tiempos de Windows 3.1! Y aunque no había mucho en aquel entonces pronto llegaron Photoshop, Audition, 3ds Max y un sinfín de aplicaciones con las que era posible crear cualquier cosa que pudieras imaginar.

Lo que no imaginé fue que al entrar a la carrera de ingeniería de software me encontraría con... ¡nada! ¡nada de lo que me apasionaba estaba ahí! En su lugar había que escribir líneas y líneas de texto con cierta sintaxis, aplicar una lógica y ejecutarla, ¿y el resultado? una pantalla negra con letras blancas en la que escribes dos números y ¡voilà, se suman! Eso sí, cuidadito con introducir texto en lugar de un número, porque todo se desploma; ¿decimales? pf... ¡todo quieres! ahora tendrás que reescribir tu código; los decimales (que no son decimales sino flotantes, no seas bobo) son distintos de los enteros o los caracteres. En mi tiempo libre estaba creando un corazón latiendo hecho de fuego fotorrealista con FumeFX o haciendo que una amiga tomara un café consigo misma en After Effects ¿y en la universidad?... una pantalla negra con A+B=C.

Aún así me quedé y terminé la carrera... un poco por inercia, otro tanto gracias a las materias de inteligencia artificial, y las matemáticas (aunque algo excesivas para el área) tampoco me desagradaron. Pero lo que en realidad me sostuvo fue el reto intelectual y creativo de implementar soluciones a problemas inesperadamente complejos: ¿qué modificaciones serían necesarias, por ejemplo, para que ese mismo programa de suma aceptara indistintamente enteros, decimales o palabras? había pues también en mi una pasión por los lenguajes... y los retos. Aunque no fue sino hasta después de graduarme que el verdadero reto de la ingeniería de software se manifestó con nitidez:

Una estrella moribunda al borde del colapso, un niño aprendiendo a leer, glóbulos blancos que se apresuran a atacar a un virus: no son más que unos pocos de los objetos del mundo físico que conllevan una complejidad verdaderamente aterradora. El Software puede también involucrar elementos de gran complejidad; sin embargo, la complejidad que se encuentra aquí es de un tipo fundamentalmente diferente. Como apunta Brooks, 'Einstein arguyó que debe haber explicaciones simplificadas de la naturaleza, porque Dios no es caprichoso ni arbitrario. No hay fe semejante que conforte al ingeniero del software: mucha de la complejidad que debe dominar es complejidad arbitraria'.

— Object-Oriented Analysis and Design with Applications. Booch, Jacobson, Rumbaugh

Mi primer desarrollo de software comenzó como uno podría esperar: construyes una interfaz gráfica donde el usuario llena algunos campos, el programa hace lo suyo, luego avanzas a la siguiente pantalla y así sucesivamente hasta terminar... en teoría tienes un proceso secuencial, predecible, ordenado. La realidad resulta enteramente distinta: un requerimiento en la cuarta interfaz obliga a reescribir la primera; eso altera necesariamente la segunda; y aquella pequeña funcionalidad tan elegante en la tercera ya no funciona más. Complejidad inesperada empieza a emerger con cada iteración y se apila exponencialmente hasta volverse casi inmanejable: hasta el más pequeño cambio implica horas y horas de revisión minuciosa y con tantos parches y modificaciones el código resultante pronto se vuelve caos encarnado.

[...] Para hablar claro, la complejidad de tales sistemas excede la capacidad intelectual humana [...] puede dominarse esa complejidad, pero nunca eliminarla [...] La tarea del equipo de desarrollo de software es la de manufacturar la ilusión de simplicidad.

— Object-Oriented Analysis and Design with Applications. Booch, Jacobson, Rumbaugh

Fue lidiando con esa tragedia que poco a poco empezaron a resurgir en mí 'estrategias' informáticas que en la universidad memoricé sin entender del todo: abstracción, encapsulamiento y herencia (entre otras) cobraron nueva luz y se materializaron como soluciones anticipadas. ¿Qué habría pasado si en lugar de comenzar por la interfaz hubiera empezado con una abstracción puramente lógica, invisible para el usuario, que encapsulara los conceptos y comportamientos con los que este interactuaría? las pantallas no serían más que manifestaciones heredadas de ese 'objeto' y cualquier cambio en él se propagaría limpio y necesario a todas las interfaces. Donde antes reinaba el caos habría ahora un orden emergente.

Ah, si tu corazón —como el mío— se conmueve ante la contemplación serena de la eficiencia, puedes acaso comenzar a simpatizar conmigo. Pero si además —milagro del universo— llevas en tu interior la chispa creativa, te invito entonces a imaginar un mundo donde manifestar tu creatividad dependerá no solo del uso inspirado de formas, colores o sonidos; sino que —usando únicamente palabras, voluntad y entendimiento— dependerá de que antes crees las características e interacciones de lo que serán las formas, los colores y los sonidos mismos. Y dime, querido lector, ¿cómo nombrarías a un mundo así, si no... arte?