La estética del código fuente: a la búsqueda del Arte en la Programación

16 Sep 2016

Introducción

Un lenguaje informático no es más que un conjunto de instrucciones que introducimos en una máquina para que esta opere permitiéndonos así desarrollar programas. De este modo, las distintas formas en que combinamos dichas instrucciones dan lugar a los diferentes estilos y escuelas responsables de lo que podemos denominar ‘la estética de la programación‘.

Esa estética, según las reglas a las que responda, se puede clasificar a su vez en cuatro grandes grupos que tradicionalmente, como muchas corrientes artísticas, han coexistido de forma simultánea…

Las cuatro estéticas

El grupo más anárquico, aquel donde todo vale, es el que no se define dentro de ninguna escuela: un revuelto sin ningún orden que crece de forma orgánica a medida que surgen distintas necesidades. No hay estructuras profundas, o un ordenamiento planificado; simplemente es el resultado natural de ir agregando más y más líneas según se precisen. Tendríamos así la primera corriente, la organicista, vulgar y peyorativamente conocida como ‘Spaghetti code‘ por su clara referencia enmarañada y compleja. Pero como todo sistema organizado, la programación tiende a estructurarse de forma coherente y lógica. De esta evolución natural, surgirían el resto de líneas o estilos que completan el cuadro.

knuth-close
Donald Knuth, autor de The Art of Computer Programming

Donald Knuth nos identificó un segundo orden al identificar el buen código con aquel del que se disfruta con su lectura. De este modo, una fragmento de software se vuelve casi una pieza literaria: desde un planteamiento inicial o problema, vamos avanzando por su desarrollo en lo que identificamos como la trama hasta alcanzar la solución o desenlace. Muchos factores quedan relegados a un plano anecdótico bajo este enfoque ya que es la composición lo que prima sobre el resto. Esta corriente, más culta, ha generado históricamente tantos admiradores como detractores.

robert-c-martin
Robert C. Martin, autor de Clean Code: A Handbook of Agile Software Craftsmanship

Robert C. Martin abriría una nueva etapa al ponderar el trabajo de un programador de forma más estadística: según sus observaciones, un desarrollador pasa una décima parte de su tiempo escribiendo código frente a otras nueve leyéndolo. Esa desproporción lo motivó a afrontar el proceso desde otra perspectiva: si la mayor parte del tiempo la pasamos leyendo, necesitamos optimizar esa lectura aunque ello requiera de un mayor esfuerzo durante su redacción. Aquí no se está valorando ya la habilidad estructural, sino el pragmatismo final: la belleza no debe llegar a través de complejos recursos literarios, sino con la sencillez de una idea. El mensaje de un cuento infantil, pese a sus limitaciones, puede ser tan bello como la obra más barroca.

Finalmente, y desde tiempos más recientes, una cuarta corriente se abre camino con fuerza: la del gusto por el estilo perfeccionista más refinado. Con un origen incierto, generado quizá de forma espontánea y simultánea, se atribuye esta corriente a las élites académicas de cada lenguaje. Suponen el canto del cisne en cuanto a las posibilidades que brinda un sistema. La belleza llega aquí desde la elegancia y el adorno, independientemente de la claridad de su exposición final. El lector que se asoma a esta corriente puede verse atrapado por estructuras perfectamente diseñadas, donde todos sus elementos funcionan de forma coordinada, pero cuyo objetivo no resulta en absoluto claro. Buscando el símil artístico, nos enfrentamos aquí con aquellas obras de una pericia técnica sobresaliente y diseños imposibles que tanta admiración y desconcierto provocan a partes iguales.

No es necesario recalcar el choque entre estas corrientes: el caos frente al orden, y el orden contra sí mismo. La búsqueda de la belleza desde un enfoque técnico frente a la sencillez con la que se expresa la idea que lo motiva. Finalmente, la perfección más refinada ajena al pragmatismo de las formas. Es un debate entre un interminable fuego cruzado: ¿la belleza compleja es el verdadero fin del programador? ¿o quizá el objetivo es la claridad por encima de los adornos? ¿qué satisface más al desarrollador experimentado? ¿y al novel?

La forma original: nacimiento del desarrollo orgánico

Al igual que en las artes, el crecimiento natural de un sistema es su primera manifestación. Y por crecimiento natural, nos referimos al desorganizado: las primeras ciudades se constituyeron acumulando viviendas no siendo hasta mucho más tarde que éstas se agruparon de forma organizada. A los barrios de Tell el-Amarna o a los planos hipodámicos griegos, les precedieron sistemas mucho menos elaborados.

plano-mileto
Plano hipodámico de la ciudad de Mileto. Anatolia, s.V a.C.

Es así, de forma natural, como el denominado Código Espagueti aparece con frecuencia en los primeros estadios de desarrollo de un lenguaje. Aparece una necesidad, y esta se soluciona añadiendo un nuevo elemento al total.

Cuando las estructuras son pequeñas, este sistema puede mantenerse con cierta solvencia. No es necesaria una planificación urbanística avanzada cuando cuatro vecinos fundan una aldea. Sus miembros tampoco requieren de altos conocimientos técnicos en cuanto a ingeniería urbana y acceso a recursos. Cada habitante, al igual que cada pequeño fragmento de código, es más o menos independiente del resto. Quizá se necesiten en determinadas circunstancias, pero eso no hace necesario el contar con todo un sistema de Administración Social.

Sin embargo, a medida que la comunidad crece, las necesidades de sistemas organizados va surgiendo de forma natural. Aún es posible mantener el orden antiguo, pero a medida que las relaciones se hacen más complejas, también lo es la comunicación y el acceso a recursos. Con el código, ocurre exactamente lo mismo: a medida que se van ensamblando piezas, las interconexiones exigen de una estructura formal, de un sistema sobre el que desarrollarse de forma lógica.

Llegado un punto crítico, lo orgánico se vuelve inefectivo e insostenible. El esfuerzo de trabajar sin una estructura exige de grandes esfuerzos y, con cada nueva necesidad, surgen nuevos problemas. Al igual que los viejos arrabales árabes mostraron sus deficiencias en el pasado, un viejo programa desestructurado se presenta como un grave problema a la hora trabajarlo…

constantinopla
Antiguo plano de Constantinopla, actual Estambul.

Pero como hemos convenido más arriba, esa necesidad de una organización encontró soluciones de forma temprana: si a las ciudad pronto se le superpuso una cuadrícula, al código fuente también se le aplicaron módulos similares.

La estructura como organización básica

Aún cuando un sistema se estructure, éste no tiene porque resultar bello. Si recurrimos a las viejas ciudades griegas, recordaremos allí la grandeza de sus templos y espacios cívicos, sus jardines, esculturas y monumentos; toda una serie de ornamentos que respetaban el sistema organizativo -el módulo- y que rompían la monotonía de otros vacuos carentes de atractivo. Consecuentemente, grandes proyectos urbanísticos basados exclusivamente en la modulación, han demostrado ser prácticamente inhabitables por adolecer de ese cuidado por la estética pese a su perfecta disposición matemática.

roma
Reconstrucción idealizada de la Antigua Roma
multifamiliar-presidente-aleman
Conjunto Urbano Presidente Alemán. Colonia Del Valle, al sur de la Ciudad de México

El código fuente de nuevo refleja esta realidad: la estructura, la organización, y su modularidad, no lo hacen estéticamente bello por sí mismo. Necesita de ese algo más; demanda esa atención por las formas que exhiben con orgullo las Artes. Al igual que con un texto escrito, no solo importa lo que se está transmitiendo, sino que se presta interés al cómo esto se consigue.

Nace la estética del código

Una herramienta que nace con objetivos meramente prácticos puede volverse inesperadamente en una obra de arte. Es posible que la finalidad original de una armadura fuera la de ofrecer protección en combate frente a los empaques enemigos, pero eso no impide que en el s.XVI se utilizasen como símbolo de poder en detrimento de su finalidad original.

parade-charles-v
Casco de desfile del emperador Carlos V, Filippo y Francesco Negroli. Milan, 1545

Al igual que los orfebres etruscos demostraban su pericia elaborando las más bellas filigranas para sus joyas votivas, el actual fabricante de relojes suizo quiere demostrar que aún continúan liderando este arte al incluir más complicaciones en sus modelos más exclusivos. De este modo, cualquiera que sea el fin último, ambas perspectivas buscan la distinción mediante la relación de estética y técnica.

filigrana-etrusca
Filigrana etrusca. S.V a.C.
calibre-3750-2
Mecanismo del reloj Vacheron Constantin Calibre 3750

Dentro de ese esquema de pensamiento es donde encaja la filosofía de Donald Knuth. Para este pionero en Ciencias de la Computación, matemático y profesor emérito en la prestigiosa Universidad de Stanford, el código debe organizarse como lo hacen las piezas literarias más elaboradas. En su obra magna The Art of Computer Programming, defiende todas esas ideas.

«Hemos visto que la programación de computadoras es un arte,
puesto que aplica el conocimiento acumulado al mundo,
porque requiere de habilidad y de ingenuidad,
y especialmente porque puede producir objetos de gran belleza.
Un programador que subconscientemente se ve a sí mismo como artista disfrutará de lo que hace y lo hará mejor.»

Donald Knuth, discurso de aceptación del Premio Turing (1974)

El giro conceptual tomado por Knuth parte de la propia definición de Lenguaje de Programación con la que abrimos el artículo. Para el matemático, ‘en lugar de proporcionar a una máquina las instrucciones con aquello que queremos hacer, debemos concentrarnos en explicar a otras personas lo que queremos que la máquina haga’. Ahora, el fin último de un programa no descansa sobre la computadora que lo interpreta, sino sobre los programadores que lo elaboran. La estructura del software debe estructurarse acorde al ser humano, siendo el código fuente la ilustración lógica de aquello que se expone.

El arte se vuelve práctico con la estética del mensaje

Si Knuth representa la vía más perfeccionista anteponiendo la estética al pragmatismo, Robert C. Martin, familiarmente conocido como Uncle Bob (Tío Bob), sacrifica la precisión de las formas para subrayar la importancia del resultado final. No hablamos aquí de una ruptura radical, sino de una evolución hacia otro estadio más sostenible.

Tachado por los críticos como un paso atrás en lo que a las formas se refiere, el arte se desprende de sus adornos: de la exigencia técnica y el abigarrado despliegue visual de un sobrecogedor Barroco, pasamos a la robustez del Racionalismo del s.XX donde prima el fin sobre la forma. La estructura perfectamente calculada persiste pero permanece oculta; no se exhibe con desmesura: los excesos injustificados no gustan, se toman como una distracción que aleja al espectador del mensaje.

casa-claudia
Villa Savoye. Le Corbusier, 1929

Para Martin, el código, como el Arte, debe estructurarse de modo que cumpla con una serie de principios básicos. A saber:

  • Ser sencillo -que no simple-, expresivo y legible.
  • Responder a una única finalidad bien definida.
  • Utilizar los mínimos medios necesarios sin recurrir a la duplicidad o reiteración.

Si bien es necesaria la expresividad y legibilidad heredada del planteamiento de Knuth, ahora buscamos la sencillez y el minimalismo. El código debe ser la herramienta que solucione una -y solo una- necesidad, siendo finalmente un programa una secuencia ordenada de dichos fragmentos, únicos y bien definidos.

Volviendo a nuestros símiles literarios, el autor de una obra debe repasar cada párrafo escrito a su término, comprobando si existen reiteraciones o figuras que no enriquecen el conjunto. El proceso creativo se complementa con una ardua tarea de saneamiento y simplificación procurando siempre que la idea inicial permanezca inalterada. Una obra será mejor valorada si aún manteniendo el mensaje y la expresividad original, resulta breve.

El código de hoy. La refinación extrema y la precisión como objetivo principal

Finalmente, llegamos al reino de la pericia más excelsa. Los creadores cuentan con toda una tradición a sus espaldas que les sirve de punto de partida para sus investigaciones y complejos experimentos.

De nuevo el s.XX nos brinda en el Arte los ejemplos más exuberantes de la mano del modernismo, el High Tech, o el deconstructivismo por citar solo algunos ejemplos. Tan solo basta con asomarse a las premisas de este último para trasladarlo inmediatamente al terreno del código fuente:

«El deconstructivismo es un movimiento caracterizado por la fragmentación, el proceso de diseño no lineal, el interés por la manipulación de las ideas de la superficie de las estructuras y, en apariencia, de la geometría no euclidiana. Estas ideas se emplean para distorsionar y dislocar algunos de los principios elementales de la arquitectura, como la estructura y la envolvente del edificio. La apariencia visual final de las obras de la escuela deconstructivista se caracteriza por una estimulante impredecibilidad y un caos controlado.»

– Deconstructivismo. Wikipedia, La enciclopedia libre.

daniel-libeskind
Casa 18.36.54. Daniel Libeskind, 2010

Las obras de esta etapa destacan así por una perfección técnica sin parangón: el cálculo complejo al que se somete cada uno de sus elementos constituye un verdadero manifiesto sobre la excelencia de sus artífices. No es por ello de extrañar que a esta tendencia solo se adhieran los mejores en cada arte buscando con ello el reconocimiento de sus iguales.

Cuando trasladamos este escenario al terreno de la computación, observamos que efectivamente esta corriente existe y, además, ganando fuerza. Promovida siempre desde las grandes empresas con sus mejores expertos a la cabeza, demuestran así hasta dónde se dominan los propios límites de cada uno de los lenguajes trabajados. Un alarde de conocimiento técnico que han transformado en un nuevo arte: los códigos se fragmentan en módulos interdependientes que actúan como cajas negras, la linealidad se rompe buscando la optimización ciclomática de sus algoritmos mediante sistemas paralelos… De este modo, el resultado es un producto de funcionalidad casi impredecible en un primer momento pero perfectamente calculado y balanceado. El desarrollador que afronta estas piezas se encuentra con estructuras a priori desconcertantes que terminan funcionando con precisión y eficiencia. Se pierde completamente el mensaje, se diluye entre recursos tecnicistas y complejas fórmulas mucho más inaccesibles que aquello que le ha precedido.

No hablamos aquí de las claves ocultas del arte aprehensibles solo a los iniciados, sino a verdaderos desafíos mentales. Es recurrente que frente a estas demostraciones, el resto de profesionales no sea capaz de valorar qué es lo realmente más sorprendente: que el código funcione o el camino recorrido hasta llegar a él.

En esta ocasión, el choque con las escuelas anteriores es insalvable. No estamos ante una evolución natural como ocurría con las formas de una idea, sino con un sistema nuevo que requiere de una aproximación diferente. La estética permanece, incluso con mucha más fuerza debido a la fascinación que despierta, pero el pragmatismo ha desaparecido completamente. Se le habla solo a la máquina, en su propio lenguaje, no a los humanos: cualquier atajo lógico que suponga una ventaja computacional será incorporado inmediatamente aunque eso suponga un nuevo puzle a los ojos de quien revisa.

algoritmia
Ejemplo de algoritmo. Benjamin/Cummings Publishing Co., 1994

Como cabe esperar, si un arquitecto tradicional se ve claramente sobrepasado a la hora de afrontar una reforma en una arquitectura de estas características, el programador medio no puede participar de un lenguaje que apenas acierta a leer con orden. No obstante, eso no priva que, así como el más rudo albañil puede deleitarse en soluciones que no termina de comprender, el desarrollador es capaz de reconocer la elegancia de aquello que está completamente fuera de su alcance. Nos movemos aquí en el mundo de la estética de lo complejo.

dirac-equation
Ecuación de Dirac, una de las construcciones matemáticas más bellas y elegantes del mundo

Queda comentar que este perfil de alta cualificación no tiene que ser sinónimo de pedantería, aunque tampoco podemos afirmar que esté libre de ella. El investigador más perfeccionista puede mostrarse siempre dispuesto a compartir su conocimiento, explicando sus soluciones al detalle para acercarlas a los interesados. En este caso, el nivel técnico de su obra se puede deber más a un resultado natural de su experiencia que a la mera demostración de sus capacidades. Sin embargo, también está el extremo opuesto: aquel que se esfuerza por ofuscar voluntariamente su trabajo a través de las más enrevesadas soluciones. En este caso, lo que muestra en su trabajo es completamente artificial e intencionado, una firme demostración de músculo: mejor cuanto más intimide.

El Mundo Real

¿Existe entonces una postura correcta? ¿Debe una corriente prevalecer por encima del resto?

En el Arte no existe una respuesta. Habrá quien guste de la retórica y las formas abogando así por la corriente más culta; otros se sentirán más atraídos por la sencillez y el minimalismo adhiriéndose con ello a la línea pragmática; finalmente, los teóricos e investigadores más aventajados disfrutarán del reto de crear soluciones más y más complejas que hagan gala de todo ese esfuerzo empleado durante la búsqueda de sus propios límites. No faltarán por supuesto quienes, bien por desconocimiento, bien por falta de medios, prefieran la libertad más bohemia actuando fuera de toda escuela y sistema.

En el Arte de la Programación el paralelismo se mantiene idéntico: todas las estéticas tienen cabida de forma simultánea, justificadas o no por su propio contexto.

Y nos corresponde a cada uno de nosotros el tomar partido durante el desarrollo de nuestra actividad profesional.

Más:

Solo un marciano comentando!

  1. nasciiboy

    A pesar de mis limitaciones mentales, reconozco como alucinante el tema y la forma de expresarlo

Deja un comentario

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