Chapter Content
A ver, a ver... ¿por dónde empiezo? Bueno, pues vamos a hablar un poco sobre cómo avanzamos, cómo progresamos, ¿no? Y verán, una cosa que es súper clara es que conforme la tecnología avanza, pues intentamos resolver problemas más complicados, eso es obvio. Pero, ojo, que con esa dificultad añadida, también se suman más y más piezas a lo que construimos. Y es que, qué sé yo, es como si un puente chiquito, que cruza un río pequeño, necesita poquitas cosas, ¿verdad? Pero ya cuando hablamos de un puente que tiene que cruzar un río enorme, pues la cosa cambia. Necesitamos más pilares, más columnas, más vigas para que aguante el peso, más secciones, más materiales para que los coches y la gente puedan pasar seguros. Incluso juntas y soportes para que el puente no se venga abajo con el viento o un temblorcito.
Y eso, fíjense, es la naturaleza de los problemas difíciles. Tienen muchos factores que hay que tener en cuenta, y eso implica, pues eso, que hay que usar más piezas. Si miramos la historia, verán que las soluciones que hemos creado hoy en día tienen muchísimas más piezas que las de antes. Un avión moderno, por ejemplo, tiene más de un millón de partes. Nuestras redes eléctricas, millones de puntos de conexión. Los satélites, un montón de antenas, paneles solares y motores. Los coches, ni te cuento, llenos de tecnología y componentes para que sean más seguros, cómodos, etc. Un microchip, ¡billones de transistores! Así que, ya saben, a más difícil el problema, más piezas.
Ahora, uno pensaría que, si las cosas que construimos tienen tantos detalles, pues la gente que las construye tiene que saber muchísimo más, ¿no? Parece que los ingenieros de hoy tienen que saber más que los de hace 200 años. Pero aquí viene la pregunta del millón: ¿cómo es que los humanos estamos creando cosas tan sofisticadas en tan poco tiempo? ¿Cómo podemos meter todos esos detalles en una sola cabeza? ¿Es que somos más listos ahora? ¿Trabajamos más? Y la verdad es que no, o sea, el cerebro humano no ha cambiado en miles de años, y tampoco es que trabajemos más duro. Entonces, ¿cómo hacemos para avanzar tanto sin ser más inteligentes ni esforzarnos más?
Pues miren, la clave está en que el avance tecnológico no podría ocurrir si tuviéramos que saberlo todo sobre cada cosa que inventamos. Lo que pasa es que cada generación empieza desde un punto más avanzado. O sea, los ingenieros de ahora no tienen que saber cómo se construían los puentes hace 200 años, solo tienen que entender cómo funcionan las cosas ahora, con la tecnología que tenemos. Es como si cada generación le pasara el testigo a la siguiente. No se trata de tener mejores ideas, sino de usar lo que ya se hizo para crear cosas nuevas. Por eso digo que el progreso es automático e inevitable. Y ¿cómo lo hacemos? Pues, empaquetando los detalles de las soluciones de hoy en herramientas más fáciles de usar. El progreso humano, al final, es una historia de abstracción, de simplificar las cosas.
Si pensamos en cómo ha mejorado el software en los últimos 50 años, verán que todo se trata de hacer lo mismo con menos código. Empezamos con el código máquina, que es lo más complicado que hay. Son instrucciones en binario, ceros y unos, que la computadora entiende directamente. Imagínense tener que decirle a un robot cómo salir de un laberinto usando solo ceros y unos... ¡un lío!
El código máquina es lo que está más cerca del microchip, es el nivel más bajo de abstracción. Y por eso, cada tarea lleva mucho tiempo, porque cada instrucción es súper básica. Es como construir una casa desde cero, en lugar de usar piezas prefabricadas.
Un poquito más arriba en la escalera de la abstracción está el lenguaje ensamblador, que es como una versión más fácil de leer del código máquina. Usa símbolos que se parecen más a lo que usamos los humanos, así que es más fácil programar. Podemos pensar en el lenguaje ensamblador como una interfaz que se pone encima del código máquina. Con esta interfaz, los programadores pueden hacer las cosas más rápido que antes. ¿Por qué? Pues porque cuando usas una "palanca" en lenguaje ensamblador, en realidad estás moviendo varias palancas en el código máquina.
Y seguimos subiendo, y llegamos a la programación procedural. Aquí ya podemos usar nombres para las funciones y los procedimientos. Es como si tuviéramos pedazos de código ensamblador ya hechos, lo que hace que sea aún más fácil programar. Con esto, los programadores pueden pensar en la computadora como si fuera un conjunto de módulos que se pueden usar una y otra vez. Ahora, los materiales para construir nuestra casa vienen un poco más armados, así que es más fácil ponerla en pie.
A ver, cuando se trata de crear software, los problemas más difíciles necesitan equipos más grandes y mejor comunicación. Hay que gestionar un montón de cosas diferentes, probar muchas ideas, crear prototipos. Y la programación procedural a veces se queda corta. Entonces, aparece la siguiente generación, que viene con la programación orientada a objetos (POO). La POO es un nivel más de abstracción. Esconde los detalles del lenguaje procedural y introduce conceptos como objetos, que son como componentes reutilizables de alto nivel.
Con la POO, las piezas para construir nuestra casa están aún más prefabricadas. La POO trae cosas que se parecen más a cómo pensamos los humanos. Conceptos como la herencia, el polimorfismo y la encapsulación hacen que la programación sea más fácil. Es como cuando usas materiales prefabricados para construir una casa. Ya no tienes que preocuparte por los detalles, puedes concentrarte en la estrategia y la creatividad. A nivel industrial, te puedes enfocar en optimizar la eficiencia, la calidad, la escalabilidad y la sostenibilidad. La POO hace que la programación sea más rápida y accesible.
Pero, ¿por qué parar ahí? La gente quiere aplicaciones web dinámicas, como tiendas online, redes sociales, banca online, herramientas para aprender y colaborar, páginas para reservar viajes, juegos, portales de salud y empleo, mercados online... Así que aparecieron los lenguajes de scripting, que son perfectos para crear interfaces interactivas y dinámicas. Los lenguajes de scripting son aún más abstractos. Simplifican la forma en que los humanos le damos instrucciones a las máquinas. Cosas como la gestión de la memoria se hacen solas. Además, tienen bibliotecas enormes y una comunidad que te ayuda a programar rápido. Con el scripting, el tiempo que pasa entre que tienes una idea y la conviertes en software es cada vez menor.
Y en el nivel más alto de abstracción están las interfaces visuales y de audio. La interfaz gráfica de usuario (GUI) esconde los detalles de la interacción con la máquina y te muestra representaciones visuales de la información y las funciones. Ahora hay herramientas para crear software arrastrando y soltando elementos, y con la inteligencia artificial, hasta se puede programar sin escribir código. Incluso las personas con discapacidad pueden programar usando comandos de voz.
Hoy en día, se puede crear un prototipo de una aplicación entera en semanas. Y los equipos que hacen esto son muy diferentes a los de hace 50 años. Ahora hay muchas personas que no son técnicas que juegan un papel importante en la creación de software. La línea entre los profesionales técnicos y no técnicos se está borrando gracias a la abstracción.
Y esto significa que ahora podemos resolver problemas con software que antes eran impensables. Podemos analizar cantidades enormes de datos, construir máquinas que parecen inteligentes, que reconocen el habla, clasifican imágenes y entienden el lenguaje humano. Podemos crear modelos climáticos avanzados, analizar historiales de pacientes, explorar planetas lejanos, estudiar fenómenos cósmicos y conectar a personas de todo el mundo por videoconferencia.
Lo que empezó como un experimento se ha convertido en una de las industrias más importantes del mundo. El software permite la colaboración y la conexión humana a una escala sin precedentes. Y todo esto es gracias al poder de la abstracción. Cada generación tiene la posibilidad de crear software más fácil que la anterior, y eso significa que puede resolver problemas más difíciles. Significa que puede gestionar y controlar el número creciente de piezas que necesita para resolver esos problemas.
La abstracción no elimina los detalles, sino que los mete en "cajas" más grandes, en interfaces que nos permiten controlar muchas piezas con pocas "palancas". La abstracción hace que el progreso sea inevitable, porque ayuda a la gente a crear cosas nuevas usando lo que ya se hizo.
Cuando vemos rascacielos, satélites, supercomputadoras, trenes de alta velocidad, centrales nucleares, teléfonos inteligentes, computadoras e implantes biomédicos, cuesta creer que los humanos podamos crear cosas tan complejas. Los objetos que hemos creado tienen un montón de detalles, necesitan una coordinación muy precisa y, además, son bastante fiables. Pero cuando nos damos cuenta de que cada generación solo necesita usar lo que hizo la anterior como punto de partida, la forma en que avanzamos se vuelve más clara. Los constructores de una generación no necesitan saber cómo funciona todo, solo necesitan entender su nivel de abstracción.
Esto quiere decir que nadie vivo hoy en día tiene todo el conocimiento sobre cómo funcionan las cosas por dentro. Ese conocimiento se ha ido ocultando a medida que cada generación añade niveles de abstracción a sus creaciones. Y esto pasa en todas las áreas de la innovación humana. No somos más listos que nuestros antepasados. No trabajamos más duro. Ni siquiera sabemos mucho más. El avance humano se entiende mejor como una historia de abstracción y progreso continuo.
Ahora, la abstracción normalmente se relaciona con la mente, con la cognición. Los humanos creamos conceptos abstractos a partir de ejemplos concretos. Cuando decidimos meter cosas específicas en una misma categoría, estamos usando la abstracción. Decir que todas las razas de perros entran en la categoría "perro" es crear la abstracción perro. Hacer una pintura abstracta es usar solo las partes necesarias para dar una impresión. La abstracción en la mente es cómo entendemos y nos movemos por un mundo complejo, reduciendo la carga mental que necesitamos para lidiar con los detalles de la vida.
Se podría pensar que la abstracción es solo información. Después de todo, los componentes que crean los programadores son información que se usa a nivel informático. Crear un módulo en programación es como crear la categoría "perro" en el lenguaje humano. Reduce la carga mental que necesitamos para manejar los detalles del software.
Pero la abstracción también puede ser física. La analogía de la construcción de casas no es solo una analogía. Si usas piezas prefabricadas más grandes como punto de partida, estás usando la abstracción. Así como la mente puede combinar cosas específicas en una sola categoría, los detalles físicos también se pueden combinar para que sirvan a una función a un nivel más alto.
Podemos entender la abstracción física si vemos cómo los humanos hacemos que las cosas sean usables. Nadie podría usar un hacha de piedra si tuviera que sujetar la hoja contra el mango al balancearla. La cuerda que se usa para sujetar la hoja y el mango los convierte en un solo objeto, y el usuario no tiene que pensar en cómo están unidos. Las cosas solo son usables si el esfuerzo que necesitas para usarlas es menor que el que necesitarías si tuvieras que coordinar cada pieza manualmente.
Piensen en un automóvil. Si los conductores tuvieran que coordinar manualmente todas las piezas del motor de combustión interna, el chasis y la transmisión, nadie podría conducir. Las interfaces que se les dan a los conductores tienen muchos menos detalles que las piezas internas del auto. Incluso la palanca de cambios de una transmisión manual es una abstracción física. Logra lo que hacen todas las abstracciones: proporciona una interfaz que reduce el número de "palancas" que tienes que mover para hacer una tarea. Con una palanca de cambios, el conductor puede seleccionar la marcha moviendo solo la palanca y el embrague, sin tener que mover cada engranaje de la caja de cambios. Las posiciones de la palanca están marcadas claramente, y esa es una interfaz que le permite al conductor hacer una selección sin tener que navegar por los detalles internos. Y la transmisión automática lleva la abstracción física al siguiente nivel, y podemos cambiar de marcha sin pensar en cómo funciona por dentro.
Así como combinamos mentalmente cosas diferentes en categorías, la palanca de cambios representa un solo objeto físico que contiene un conjunto de detalles físicos internos, y la transmisión automática lo lleva aún más lejos. La abstracción física que acompaña al ingenio humano es fundamental para el progreso humano.
Las buenas prácticas que se usan en una industria o profesión se basan en las abstracciones físicas que creamos. El técnico de resonancia magnética no está coordinando la magnetización, la excitación del pulso de radiofrecuencia, la detección de la señal, la adquisición de datos y la reconstrucción de la imagen. El barista no está calentando agua, creando presión, moliendo granos, extrayendo sabores o produciendo vapor manualmente. El que pone el asfalto no está buscando piedras, grava y arena, ni probando aglutinantes. Los profesionales de cualquier campo operan por encima del nivel de los detalles que ya se resolvieron, gracias a la abstracción física. Esto quiere decir que nuestras ideas de conocimiento y habilidad están alineadas con las abstracciones físicas, porque son los puntos de partida que usa la gente para operar los sistemas en su campo.
Todo el progreso humano es una historia de cómo la humanidad avanza sin necesitar más conocimiento o esfuerzo que la generación anterior. Pero aunque este progreso sea automático e inevitable, crear interfaces requiere pensar mucho. Crear abstracciones físicas es algo que se hace a propósito y con cuidado. Las abstracciones físicas que han creado los humanos han sido posibles gracias al diseño.
La forma más obvia de crear abstracciones físicas es a través del diseño. Podemos tomar decisiones sobre qué piezas incluir, cómo conectarlas y cómo mostrar su funcionamiento a través de una interfaz. En el ejemplo de la informática, la programación procedural surgió al tomar decisiones sobre cómo juntar pedazos de código máquina en una sintaxis y una semántica de nivel superior. Esto requiere razonar y calcular. Tienes que meterte en las entrañas de tu nivel de abstracción actual y decidir cómo conectar y mostrar esas piezas en un nivel superior. El diseño crea abstracciones físicas al empaquetar el funcionamiento interno de un objeto. Esto agrupa funciones diferentes en objetos a un nivel superior. Y ese empaquetado hace que las funciones de un sistema se puedan coordinar más fácilmente desde afuera.
Esto nos muestra que las versiones informativas y físicas de la abstracción están muy relacionadas. El razonamiento que usamos en el diseño nos permite ver las características que comparten un grupo de cosas diferentes. La palanca de cambios funciona porque se conecta a un conjunto de piezas internas que comparten un mismo propósito. Este objeto físico se ha logrado usando nuestra capacidad mental para notar patrones, y agrupar esos patrones en una forma de nivel superior. La abstracción física es un reflejo de las abstracciones conscientes que hacemos con nuestras mentes.
Vemos que los humanos logramos el progreso tecnológico a través de la abstracción, y que la abstracción se puede lograr mediante el diseño. Esto ha hecho que el diseño sea una parte fundamental de nuestro progreso. Pero el diseño tiene un costo, porque no puedes diseñar sin ver cómo las piezas internas de un sistema chocan entre sí.
Para diseñar, hay que razonar sobre las conexiones que se hacen entre los niveles de abstracción inferiores y superiores. Por eso, el diseño depende del determinismo. El diseño solo funciona cuando podemos evaluar cómo se producen las salidas de un sistema, de forma determinista. No podemos juntar el funcionamiento interno de una transmisión en una palanca de cambios si no podemos ver cómo se afectan los diferentes engranajes entre sí. No podemos juntar el lenguaje C en módulos de C++ si no podemos ver cómo funciona el lenguaje C explícitamente. Esta es la base del diseño. Si no pudiéramos razonar sobre cómo interactúan las piezas internas para producir las salidas, nuestros diseños serían solo conjeturas.
Se podría pensar que el diseño puede ser de alto nivel. ¿Podrían ser las pautas que ayudan a dirigir los esfuerzos en una dirección positiva? ¿Esto haría que el diseño se desconectara del determinismo? Pero eso no es diseño, es una metodología o un marco de trabajo. Los marcos de trabajo son principios que ayudan a la gente a lograr ciertos objetivos. No se meten en el sistema y razonan sobre su funcionamiento interno. Diseñar es tomar decisiones intencionales sobre cómo interactúan y se relacionan los diferentes elementos. El diseño depende de tener conocimiento determinista.
El determinismo se relaciona con los sistemas o procesos cuyo comportamiento se puede predecir por completo a partir de sus entradas y las reglas que rigen su funcionamiento. Si le das las mismas entradas iniciales a un sistema determinista una y otra vez, siempre producirá las mismas salidas. Esta idea de repetibilidad, previsibilidad y ausencia de aleatoriedad está en el diseño. El diseño asume que hay una serie de pasos explícitos que van desde la entrada hasta la salida. Si no fuera así, elegir piezas y conexiones específicas no tendría sentido.
Es importante distinguir, de nuevo, entre los sistemas y procesos deterministas y no deterministas. Un sistema no determinista es aquel cuyo comportamiento no se puede predecir por completo. A diferencia de los sistemas deterministas, que producen la misma salida para un conjunto de entradas, los sistemas no deterministas pueden producir diferentes comportamientos o resultados, incluso cuando se les dan las mismas entradas y condiciones iniciales. El mismo conjunto de coches y conductores, conduciendo a las mismas velocidades, llegando a una intersección sin señales de stop ni semáforos, no producirá un flujo de tráfico predecible. Habrá mucha variación en la secuencia de movimientos y el flujo de vehículos. Un sistema que produce resultados diferentes, a pesar de tener las mismas entradas, no se puede diseñar.
Algunos lectores podrían pensar que el ejemplo anterior está mal. Sabemos que los sistemas de tráfico se pueden diseñar, y que añaden un comportamiento predecible al flujo de tráfico. Pero no estamos diseñando el tráfico en sí, sino diseñando un marco externo que rige un sistema no determinista (el tráfico). Los sistemas de tráfico actuales no intentan controlar las interacciones específicas entre los vehículos, solo imponen limitaciones externas que se aplican a todos los vehículos. Esto es como un gobierno que crea marcos que regulan los mercados libres. Cualquier intento de diseñar el sistema en sí, como dictar las interacciones específicas entre los coches o entre los clientes y los vendedores, puede interferir con el funcionamiento de un sistema no determinista.
El no determinismo está directamente relacionado con la dificultad de un problema. Así como no se puede diseñar (internamente) un sistema no determinista, los problemas difíciles no se pueden resolver con el determinismo. Los problemas difíciles, son los que requieren prueba y error y heurística para resolverse. Un problema difícil no es solo algo que es más difícil en comparación con los problemas sencillos, sino una situación que exige una solución muy diferente.
Podemos entender lo diferente que tiene que ser una solución cuando se trata de resolver problemas difíciles mirando a la naturaleza. Las soluciones de la naturaleza resuelven los problemas más difíciles. Estos problemas los presentan los entornos naturales, y los resuelven objetos que no transforman las entradas en salidas usando una mezcla sencilla de piezas conectadas de forma determinista. La naturaleza resuelve sus desafíos mediante la creación de estructuras emergentes. Esto quiere decir que la naturaleza no crea soluciones que tengan pasos entre las entradas y las salidas. Esto no podría resolver problemas difíciles porque las situaciones de la naturaleza están hechas de muchos factores e interacciones que las definen. No se trata de recopilar suficientes reglas para tener en cuenta la complejidad de la naturaleza, de hecho, no se trata de reglas. Incluso si pudiéramos crear un objeto con una regla para cada posibilidad, no resolvería un problema difícil.
Pensar en los problemas difíciles como si fueran versiones más difíciles de los sistemas basados en reglas es como intentar describir la mecánica cuántica usando la mecánica clásica. Una descripción clásica no se acerca a lo que está pasando, porque el reino cuántico no es clásico. No es una cuestión de grado o aproximación, es una cuestión de ser algo completamente diferente.
Las soluciones de la naturaleza tienen una complejidad real, lo que significa que sus salidas no son el resultado de interacciones sumadas o de una serie de procedimientos secuenciales. La naturaleza crea configuraciones de materia que producen las salidas que se necesitan de una forma diferente al procesamiento basado en reglas. Ya hablaremos de este mecanismo, pero es importante saber que las soluciones de la naturaleza son diferentes a los sistemas sencillos que producen los humanos. Las soluciones de la naturaleza tienen mucho no determinismo, y lo necesitan para funcionar.
Piensen en el reconocimiento facial, una tarea que hacen los humanos y los sistemas de IA avanzados. Lo que hace que el reconocimiento facial sea un problema difícil no es solo el número de factores relacionados con el fenómeno, sino que la palabra "resolver" significa algo diferente a lo que significa en el determinismo. En el determinismo, resolver significa encontrar una respuesta o un conjunto de respuestas específicas y definitivas. Pero los sistemas no deterministas se parecen más a las respuestas probabilísticas, con un cierto grado de exactitud; una versión más suave de lo que vemos en el determinismo.
Pero aunque esta analogía se acerca al espíritu del no determinismo, sigue presentando el no determinismo como una versión aproximada de lo que vemos en los sistemas deterministas. Por ejemplo, la mayoría de los enfoques computacionales que buscan una solución a los problemas computacionalmente difíciles usan técnicas como la optimización para encontrar un resultado satisfactorio que cumpla con ciertos criterios. Pero la idea de que el no determinismo es una versión aproximada del determinismo es incorrecta.
La solución que se encuentra bajo la complejidad no es una solución más débil o aproximada, sino un tipo de solución completamente diferente. La solución que se encuentra bajo la complejidad es más potente y realista que cualquier cosa que pueda ser una solución precisa y determinista. La idea de la aproximación es solo un producto de pensar en las cosas complejas de forma incorrecta, a través de la lente de la sencillez. Las soluciones genuinas a los problemas difíciles no se aproximan, computan directamente la respuesta necesaria usando una idea de computación diferente. Ya hablaremos de la diferencia entre hacer un cálculo matemático y resolver un problema del mundo real.
La falta de mecanismos causales en el centro de la complejidad impide que el diseño pueda producir el tipo de soluciones que hacen que la complejidad sea manejable. No hay objetos que se puedan crear para mostrar interfaces conectadas de forma determinista a los usuarios. La dependencia del diseño en el determinismo significa que el diseño solo puede encontrar soluciones a los problemas sencillos.
Esto nos lleva a una encrucijada: 1) Necesitamos crear abstracciones físicas para progresar, 2) la creación de abstracciones físicas siempre se ha hecho mediante el diseño, 3) el diseño no puede resolver problemas difíciles, y 4) los problemas difíciles son los que tenemos que resolver con las cosas que construimos.
La forma actual en que creamos abstracciones físicas pronto llegará a su fin. El diseño no puede crear las cosas que necesitamos para construir soluciones. La complejidad de las situaciones a las que nos enfrentamos exige algo que el diseño no puede ofrecer. No podemos razonar sobre las piezas y las conexiones, porque el mecanismo por el que las soluciones de la naturaleza resuelven los problemas es diferente.
Siempre ha sido un error pensar en la naturaleza como si fuera una máquina determinista. A veces es solo una forma ingenua de ver el mundo, otras veces esta transgresión se desarrolla peligrosamente en la sociedad y la política. Pero ahora, la idea de que la naturaleza es como una máquina basada en reglas dificulta el progreso. Solo si cambiamos radicalmente lo que significa construir cosas, el futuro seguirá siendo manejable.
El cambio fundamental en la clase de problemas, y las soluciones necesarias para resolverlos, es la base del cambio filosófico necesario para operar en la era de la complejidad. El reto no es solo aceptar la degradación de la comprensión causal, sino redefinir nuestros conceptos de conocimiento, habilidad y nuestro enfoque de la innovación humana. Tenemos que construir de forma diferente.
Que no podamos seguir progresando mediante el diseño no niega el hecho de que la abstracción es necesaria para el progreso. Un problema más difícil no se puede resolver simplemente conectando más piezas en un objeto diferente. Las piezas deben juntarse en objetos de nivel superior para que la siguiente generación las use. Así es como un gran número de piezas se colocan correctamente en objetos más complejos. Es demasiado costoso colocar miles o millones de piezas individualmente, deliberadamente y con la coordinación correcta. Las piezas de nivel inferior deben encontrar la cohesión necesaria para resolver el problema en un nivel superior, y la abstracción es cómo se logra esta cohesión.
Y esto es para cualquier idea de progreso. Piensen en cómo la mente humana crea abstracciones para entender nuestro mundo. No podemos movernos por la vida sin colocar lo que vemos y oímos en objetos de nivel superior. Si no pudiéramos clasificar las cosas como amenazas frente a oportunidades, amigos frente a enemigos, comida, peligro, refugio, etc., no podríamos sobrevivir. Al crear abstracciones mentales en la mente, que engloban cosas superficialmente diferentes en categorías, reducimos la carga mental que necesitamos para movernos por la vida.
Esta capacidad de ver conexiones entre cosas diferentes se extiende a todas nuestras innovaciones. Todo, desde las nuevas filosofías hasta las nuevas tecnologías, surge porque podemos juntar tanto la información como las cosas físicas en nuevos objetos. Es la abstracción la que hace que los desafíos difíciles sean computacionalmente viables, porque la abstracción es lo que produce nuevas estructuras informativas y físicas que computan, sin necesidad de una coincidencia entre el detalle de un problema y el procedimiento de una solución. Es la abstracción la que organiza las cosas de tal manera que la coordinación interna de las piezas puede atender a la multitud de factores dentro de los desafíos más difíciles. En resumen, no hay progreso sin abstracción.
Y esto es para la naturaleza como para los humanos. La naturaleza progresa a través de su proceso de cambio y desarrollo a lo largo del tiempo. Las soluciones de la naturaleza resuelven continuamente los problemas contra los factores de estrés ambiental cambiantes. Si damos un paso atrás y miramos la innovación humana en general, este es un problema que está resolviendo la naturaleza, ya que los humanos son organismos que interactúan en masa para resolver problemas. Pero cuando se trata de nuestras invenciones específicas, los humanos crean sus nuevas abstracciones mediante el diseño, como ya hemos dicho. Las piezas que se juntan se hacen deliberadamente, usando información causal sobre cómo interactúan esas piezas. No puede ser así como la naturaleza crea sus abstracciones. La naturaleza no está usando el razonamiento consciente para juntar piezas en objetos de nivel superior. Y, sin embargo, la naturaleza resuelve problemas que son más difíciles que cualquier cosa que el hombre haga con sus puentes y motores de cohetes.
Esto plantea una pregunta: si el progreso mediante la abstracción es una propiedad universal, ¿cómo crea la naturaleza sus abstracciones?
La abstracción física, en ambos casos, sigue siendo la agrupación de funciones en grupos de nivel superior y la exposición de una interfaz, pero el grupo en la naturaleza no es una agregación diseñada de forma determinista, sino una manifestación estadística de la materia. Pero lo que importa en este momento es admitir que las abstracciones físicas de la naturaleza, aunque son fundamentales para el progreso, no están diseñadas. No hay ningún esfuerzo consciente por parte de la naturaleza para elegir qué piezas e interacciones constituyen un paquete, por lo que la abstracción en la naturaleza debe tener un mecanismo diferente.
Esto plantea la pregunta: ¿cómo "sabe" la naturaleza qué piezas combinar en objetos de nivel superior si no puede razonar sobre qué piezas incluir y cómo conectarlas? ¿Cómo crea la naturaleza sus objetos? ¿Cómo puede el proceso de selección natural ver las similitudes que conectan un nivel de materia al siguiente?