La arquitectura de la complejidad

Herbert A. Simon dedicó su vida al estudio de sistemas: organizaciones, economía o inteligencia artificial. En 1962, publicó un paper titulado «The architecture of complexity» donde presenta cómo el estudio general de sistemas significa entender la formación de jerarquías.

Sistemas complejos y jerarquías

Simon aproxima un sistema complejo como aquél que está compuesto por un número grande de componentes que interactúan de manera no trivial. Un sistema jerárquico sería aquél que se puede descomponer en subcomponentes interrelacionados, que no necesariamente tienen que estar subordinados en una relación de autoridad maestro-esclavo.

La razón por la que es más habitual encontrar jerarquías de cualquier tipo en los sistemas complejos es porque forman estructuras estables de manera más rápida. Para defender esta tesis repasa ciertos ejemplos de la naturaleza y sociales, pero baste cita la famosa parábola de los dos relojeros para entender lo que quiere decir:

There once were two watchmakers, named Hora and Tempus, who manufactured very fine watches. Both of them were highly regarded, and the phones in their workshops rang frequently – new customers were constantly calling them. However, Hora prospered while Tempus became poorer and poorer and finally lost his shop. What was the reason?

The watches the men made consisted of about 1.000 parts each. Tempus had so constructed his that if he had one party assembled and had to put it down -to answer the phone, say- it immediately fell into pieces and had to be reassembled from the elements. The better the customers liked his watches, the more they phone him, the more difficult it became for him to find enough uninterrupted time to finish a watch.

The watches that Hora made were no less  complex than those of Tempus. But he had designed them so that he could put together subassemblies of about ten elements each. Ten of these subassemblies, again, could be put together into a larger subassembly; and a system of ten of the latter subassemblies constituted the whole watch. Hence, when Hora had to put down a partly assembled watch in order to answer the phone, he lost only a small part of his work, and he assembled his watches in only a fraction of the man-hours it took Tempus.

Es decir, la organización en subsistemas, facilitaría la estabilidad de la estructura global.

Sistemas casi-descomponibles

Para entender las jerarquías, Simon propone dos aspectos fundamentales:

  • el número de componentes en que se particiona el sistema: o el span. En los límites, un sistema jerárquico con span = 1 sería una cadena de componentes; un sistema jerárquico se consideraría como plano si su span es alto.
  • cómo se agrupan sus componentes: aunque los sistemas físicos y químicos se suelen agrupar por las propiedades espaciales y los sociales por la interacción entre componentes, Simon argumenta que esta es una falsa dicotomía. Él propone que los componentes de un sistema se agrupan por la “intensidad de la interacción” entre ellos y que la cercanía espacial es un subproducto de ciertas estructuras físicas que necesitan cercanía para intercambiar información.

Es precisamente la interacción –entre subsistemas y dentro del subsistema- lo que Herbert usa para estudiar las jerarquías. Su tesis es que podemos entenderlas como sistemas casi-descomponibles: es decir, que las interacciones dentro de un subsistema son muy intensas mientras que las interacciones entre subsistemas son más débiles aunque no despreciables. En parábola:

Consider a building whose outside walls provide perfect thermal insulation from the environment. We shall take these walls as the boundary of our system. The building is divided into a large number of rooms, the walls between them being good, but not perfect, insulators. The walls between rooms are the boundaries of our major subsystems. Each room is divided by partitions into a number of cubicles, but the partitions are poor insulators.

A thermometer hangs in each cubicle. Suppose that at the time of our first observation of the system there is a wide variation in temperature from cubible to cubicle and from room to room – the various cubicles within the building are in a state of thermal disequilibrium. When we take new temperature readings several hours later, waht shall we find? There will be very little variation in temperature among the cubicles within each single room, but there may still be large temperature variations among rooms. When we take readings again several days later, we find an almost uniform temperature throughout the building; the temperature differences among rooms have virtually disappeared.

Es decir, a  corto plazo, se podría entender el comportamiento de un subsistema de manera individual; sin embargo, a largo plazo, necesitaríamos incluir en la ecuación el resto de componentes de manera agregada para tener en cuenta los efectos de esas interacciones.

La descripción de la complejidad

El hecho de que muchos sistemas complejos tengan una estructura jerárquica casi-descomponible, facilita nuestra comprensión de ellos. O quizás nuestra comprensión de otro tipo de sistemas está limitada por nuestra capacidad de procesamiento. En cualquier caso, según Simon, cualquier actividad humana que suponga problem-solving se puede asimilar a un sistema de este tipo: el progreso hasta llegar al objetivo se produciría por un proceso de prueba/error selectivo; nos apoyaríamos en resultados intermedios que tendrían la misma función que los subsistemas biológicos (estabilizar la estructura) y nos señalizarían el camino hacia el objetivo.

¿Cómo, pues, podemos usar en nuestro beneficio las jerarquías para entender y construir sistemas complejos?

  • La jerarquía es, al fin y al cabo, una manera de encapsular la redundancia del sistema y hacerlo más económico en términos de esfuerzo.
  • Aunque no conocemos reglas generales que describan cómo encapsular esa redundancia para cualquier sistema, tenemos a nuestra disposición dos tipos de representaciones útiles: describir su estado y describir el proceso.

Usando la descripción de estado, podríamos definir un círculo como “el lugar de los puntos equidistantes de un punto dado“. La definición del proceso podría ser algo como “pinchar el compás en un punto del plano y rotar el otro brazo hasta que dé una vuelta completa“.

Coda

La arquitectura de la complejidad, de Herbert A. Simon aborda una tarea difícil y consigue reducirla a algo manejable: propone que el estudio de sistemas complejos es fundamentalmente el estudio de su jerarquía, encontrar la redundancia que nos permita representar su estructura de manera comprensible, para lo que tenemos a nuestra disposición dos herramientas fundamentales, estado y proceso.

Una teoría de sistemas aplicable a multitud de entornos (biología, sociales, etc) es necesariamente generalista. Como programador, sin embargo, hay lecciones en este paper que se pueden extrapolar a nuestro día a día.

code-hierarchy

La teoría de la casi-descomponibilidad es atractiva. Explica, por ejemplo, por qué los tests unitarios en subsistemas son posibles pero no suficientes para modelar el comportamiento del sistema. Explica también que para una mayor eficiencia en nuestro trabajo deberíamos enfocarnos en la búsqueda de submódulos estables. No menos importante: apunta que para agregar código en componentes (funciones, clases, módulos, etc) deberíamos primar agregaciones con gran interacción interna pero con interacción externa baja – es decir, loose coupling y high cohesion.

Por otro lado, alguna vez he bromeado con que el título que mejor me representa es el de físico-químico de sistemas de control interactivos. Tras la boutade se esconde una pequeña píldora de verdad: en el fondo, el día a día de todo programador consiste en eliminar la redundancia de un sistema. Me paso el día codificando esa redundancia con 2 herramientas principales: estado y proceso, datos y algoritmos.


Comments

4 responses to “La arquitectura de la complejidad”

  1. @nosolosw No he prestado mucha atención a H.A. Simon, encuentro a faltar demasiado rápido los conceptos de emergencia, morfogenesis, autopoiesis, etc., en cuanto a la comprensión de sistemas sociales, pero tal como lo expones en el contexto de la ingeniería de software me ha parecido valioso. cc:/ @ruivaldivia 

  2. @antonio @ruivaldivia no descartes que la simplificación haya sido mía. Al final sí habla de evolución y filogenia/ontogenia, aunque no me pareció lo más interesante para la mirada que yo tenía sobre el paper. En el caso del software la evolución me parece que no puede modelarse como un proceso de prueba/error selectivo con componentes aleatorias; sino más bien por uno dominado por los límites de la comprensibilidad y las fuerzas/organizaciones que lo producen.

  3. Sebastian Diaz Osorio Avatar
    Sebastian Diaz Osorio

    Elegí ing en sistemas en un principio para saber programar, debo agradecer a la cuarentena ya que por ella descubrí lo fascinante de interpretar la realidad y plasmarlas en diagrama diagrames y luego a código, el estudio de organizaciones en algo que me interesa mucho , pero se me hizo un poco denso el articulo (ademas de que no se inglés jaja) alguna recomendación para un neófito en al compresión de los sistemas?.

  4. […] respuesta más elaborada: las interfaces son sistemas complejos, necesitamos subcomponentes para simplificar su creación y mantenimiento. Hay dos áreas donde un lenguaje de programación supera al de marcado para crear subcomponentes: […]

Leave a Reply to Andrés Cancel reply

Your email address will not be published. Required fields are marked *