Referencia: Este artículo es una tradución al español de Objects Have Failed por Richard P. Gabriel.

Palabras de apertura de Richard P. Gabriel, 6 de Noviembre de 2002


¿Qué puede significar que un paradigma de programación falle?

Un paradigma fracasa cuando la narrativa que encarna no dice la verdad o cuando sus proponentes lo abrazan más allá de la razón. El fracaso en decir la verdad se centra en las necesidades cambiantes del software en el siglo XXI y en las llamadas mejoras OO que han eliminado sus beneficios originales. El abrazo obsesivo ha generado una búsqueda de la pureza que se ha convertido en un arma ideológica, promoviendo un avance incremental como la solución definitiva a nuestros problemas de software. El efecto ha sido lavar el cerebro a la gente en la calle. La afirmación “todo es un objeto” dice que OO es universal y la afirmación “los objetos modelan el mundo real” dice que OO tiene una posición privilegiada. Estas son invitaciones muy seductoras a un punto de vista totalizador. El resultado es que la investigación y el desarrollo de paradigmas alternativos se ven afectados por el hambre.

Algún día, el software que ya hemos escrito será un conjunto de medida 0.

Hemos vivido tres edades de la computación. La primera fue el código de máquina. La segunda fue la de los ensambladores simbólicos, las rutinas de los intérpretes y los primeros compiladores. Y la tercera fue la de la programación imperativa, procedimental (o procedural), la funcional y la de los lenguajes basados en compiladores.

Ahora estamos en la cuarta: la programación orientada a objetos.

Estas cuatro primeras edades incluyeron aplicaciones de una sola máquina. Aunque tales sistemas seguirán siendo importantes, cada vez más nuestros sistemas estarán compuestos por docenas, cientos, miles o millones de componentes dispares, aplicaciones parciales, servicios, sensores y actores en una variedad de hardware, escritos por un variado conjunto de desarrolladores, y no será incorrecto decir que nadie sabe cómo funciona todo. En el mundo antiguo, nos centramos en la eficiencia, las limitaciones de recursos, el rendimiento, los programas monolíticos, los sistemas autónomos, los programas de autor único y los enfoques matemáticos. En el nuevo mundo nos centraremos en la robustez, la flexibilidad, la adaptación, los sistemas distribuidos, los programas de autoría múltiple y las metáforas biológicas para la computación.

No hace falta decir que la orientación a objetos proporciona un importante lente a través de la cual comprender y crear sistemas en el nuevo mundo, pero simplemente no puede ser la única lente. En los sistemas futuros, la falta de fiabilidad será común, la complejidad estará fuera de la vista, y cualquier cosa que se parezca a un código de precisión cuidadosamente elaborado será poco realista. Es como una ciudad: Los ladrillos son importantes para construir parte de algunos edificios, pero la complejidad y la complicada forma en que una variedad de materiales y componentes de construcción se unen bajo el control de una multitud de actores con diferentes culturas y objetivos, talentos y proclividades significa que el tipo de pensamiento que entra en los ladrillos no funcionará a la escala de la ciudad. Los ladrillos son demasiado limitados, y las circunstancias en las que tienen sentido están demasiado restringidas para servir de modelo para construir algo tan diverso e impredecible como una ciudad. Y además, la ciudad en sí misma no es el objetivo final, porque la ciudad debe también “en el mejor de los casos” ser una estructura humana para la actividad humana, lo que requiere un segundo conjunto de niveles de complejidad y preocupaciones. Usando esta metáfora para hablar de los futuros sistemas informáticos, es justo decir que OO aborda las preocupaciones al nivel de los ladrillos.

La tendencia modernista en la computación es comprometerse en un discurso totalizador en el cual se espera que un paradigma o una historia provea todo en cada situación. Por mucho que lo intenten, los promotores de OO no pueden proporcionar una gran narrativa modernista creíble excluyendo todas las demás. OO no tiene una posición privilegiada. Así que en lugar de que Java, por ejemplo, abarque todos los componentes desarrollados en otros lugares, sus promotores decidieron desarrollar sus propias versiones para que toda la computación fuera incluida dentro de la narrativa de Java.

Los objetos, tal y como fueron concebidos por los diseñadores de lenguajes como Smalltalk y Actors “mucho antes de que aparecieran C++ y Java” eran para modelar y construir mundos complejos y dinámicos. Los ambientes de programación para lenguajes como Smalltalk fueron escritos en esos lenguajes y fueron extensibles por los desarrolladores. Debido a que la filosofía del cambio dinámico era parte de la visión del mundo post-Simula OO, los lenguajes y ambientes de esa época eran altamente dinámicos.

Pero con C++ y Java, el pensamiento dinámico fomentado por los lenguajes orientados a objetos fue casi fatalmente asaltado por la teología del pensamiento estático heredado de nuestra herencia matemática y las suposiciones incorporadas en nuestras visiones de la computación por Charles Babbage cuya visión del mundo de la construcción de fábricas fue dominada por la omnisciencia y la omnipotencia.

Y como resultado encontramos que los lenguajes orientados a objetos han sucumbido a los pensadores estáticos que adoran la planificación perfecta sobre la adaptabilidad del tiempo de ejecución, las decisiones tempranas sobre las tardías, y la sabiduría de los compiladores sobre la inteligencia de la detección y reparación de fallas.

Más allá de los tipos estáticos, las interfaces precisas y el razonamiento matemático, necesitamos mecanismos de auto-curación y auto-organización, verificando y respondiendo a las fallas, y administrando sistemas cuya complejidad general está más allá del conocimiento de cualquier persona.

Uno podría pensar que tal movimiento postmoderno tendría buenas consecuencias, pero a diferencia de Perl, la combinación no era aditiva sino sustractiva, como si al socavar lo que era OO, se pudiera hacer más poderoso a OO. Esto puede funcionar como un dispositivo literario o artístico, pero la idea en la programación no es enseñar sino construir.

El aparente éxito comercial de los objetos y nuestro amor por los negocios durante la última década se han combinado para sofocar la investigación y la exploración de enfoques de lenguajes alternativos y paradigmas de computación. Las comunidades de investigación universitarias e industriales se retiraron de la innovación en los lenguajes de programación con el fin de cosechar los frutos fáciles del árbol OO. El frenesí empresarial de finales del siglo pasado cegó a los investigadores ante la diversidad de ideas, y se decantaron por lo que estaba de moda, lo que no era controvertido. Si alguna vez hubo un momento en el que la ciencia normal de Kuhn dominó la informática, fue durante este período.

Mi propia experiencia lo confirma. Hasta 1995, cuando volví a la escuela para estudiar poesía, mi carrera de investigación se centró en el lenguaje de programación, Lisp. Cuando regresé en 1998, descubrí que mi área de investigación había sido eliminada. Me vi obligado a encontrar nuevas formas de ganarme la vida dentro de la ecología creada por Java, que estaba muy ocupado recreando el mundo de la informática a su propia imagen.

Smalltalk, Lisp, Haskell, ML y otros lenguajes languidecen mientras que C++, Java y su casi clon C# son los únicos lenguajes que están recibiendo atención. Lenguajes pequeños como Tcl, Perl y Python están reuniendo adeptos, pero no están haciendo ningún progreso en el diseño de lenguajes y sistemas.

Nuestros argumentos son de varios tipos:

  1. El enfoque orientado a los objetos no aborda adecuadamente los requisitos informáticos del futuro.

  2. Los lenguajes orientados a objetos han perdido la simplicidad —algunos dirían que la pureza— que los hacía especiales y que era la fuente de su poder expresivo y de desarrollo.

  3. Se suponía que conceptos poderosos como la encapsulación salvaban a la gente de sí mismos mientras desarrollaban software, pero la encapsulación falla para las propiedades globales o cuando se necesita la evolución del software y los cambios al por mayor. El Código Abierto maneja esto mejor. Es probable que la modularidad —mantener las cosas en el ámbito local para que la gente pueda entenderlas— sea lo realmente importante del encapsulamiento.

  4. Los objetos prometen la reutilización, y no hemos visto mucho éxito.

  5. A pesar de la clara comprensión temprana de la naturaleza del desarrollo de software por parte de los pioneros de OO, los actuales cuidadores de las ideas han regresado a la filosofía de planificación perfecta, gran diseño y omnisciencia heredada de la teología de Babbage.

  6. El exceso de optimismo engendrado por los objetos a finales de los años 90 llevó a las empresas a esperar milagros que podrían haber sido posibles con objetos no contaminados por el pensamiento estático, y cuando los desarrolladores de software no pudieron cumplir, los escandalosos planes de negocios de esas empresas se desmoronaron, y el resultado fue nuestra actual recesión.

  7. Los objetos requieren programación mediante la creación de entidades de comunicación, lo que significa que la programación se realiza mediante la construcción de estructuras en lugar de la expresión lingüística y la descripción a través de la forma, y esto a menudo conduce a un desajuste del lenguaje al dominio del problema.

  8. El diseño de objetos es como crear una historia en la que los objetos hablan e interactúan entre sí, lo que lleva a la gente a esperar que el aprendizaje de la programación orientada a objetos sea fácil, cuando en realidad es tan difícil como siempre. Una vez más, el negocio fue engañado.

  9. La gente entusiasmada con los objetos acaparó el camino, no se apartó, no permitió que se exploraran alternativas —no por malicia sino por exuberancia— y ahora los recursos que podrían utilizarse para avanzar se están agotando. Pero a veces esta exuberancia era una mentira descarada para apartar a otros del camino.

Pero al final, no abogamos por cambiar la forma en que trabajamos con y sobre los objetos y los lenguajes orientados a objetos. En su lugar, abogamos por la diversidad, por el trabajo en nuevos paradigmas, por dejar que florezcan mil flores. La autocuración, la auto-reparación, los sistemas masivos y complejos, la auto-organización, la adaptación, la flexibilidad, el crecimiento gradual, el comportamiento estadístico, la evolución, el surgimiento, y tal vez docenas de otras ideas y enfoques en los que no hemos pensado en que —incluyendo las nuevas manifestaciones físicas de la acción no-física— se nos debería permitir y animar a seguir adelante.

Este es un momento para la definición y el cambio de paradigma. No siempre se verá como ciencia, ni siquiera parecerá racional; los documentos y charlas que explican y defienden nuevas ideas pueden sonar como propaganda o ficción o incluso poesía; la narrativa jugará un papel más importante que los teoremas y los resultados difíciles. Esto no será una ciencia normal.

Ante todo esto, es justo decir que los objetos han fallado.