El software de la Enterprise

Ayer, en la charla de WordCamp Argentina que compartí con el bueno de @eglinsky, mencioné una pregunta que me hago desde el siglo pasado: ¿cómo será el software de la nave Enterprise? Había poco tiempo en la charla, y me limité a apuntar a los próximos años inmediatos del software. Pero quisiera hoy acá comentar cómo se me planteó esa pregunta, y algunas ideas de respuesta.

En los años ochenta y noventa,  leía la revista Byte, que tan buenos números trajo en esos años (recuerdo uno dedicado a lenguajes de programación, donde conocí la programación funcional en detalle, y otro sobre Smalltalk; también algunos números dedicados a lenguajes en particular, creo recordar uno de Forth). Uno de sus columnistas habituales era Steve Ciarcia, la Circuit Cellar.

Pueden leer sobre Ciarcia en:

http://www.circuitcellar.com/
http://www.devili.iki.fi/library/author/203.en.html

Parece que muchas de sus columnas están en línea, o están en forma de libros expuestas en Google. Pero no pude encontrar una en especial. No creo que era una columna, era un recuadro en alguno de sus artículos, aparecido, que recuerde, en los noventa (puede que fuera un Ask Byte, otra columna que escribía). Ahí, Ciarcia explicaba que había recibido una carta de un grupo de estudiantes de una universidad norteamericana. Se había propuesto escribir todo un informe/libro sobre cómo construir una Enterprise, la nave de Star Trek (conocida por acá como Viaje a las estrellas). Y estaban consultando a expertos en diversos campos. La consulta a Ciarcia era sobre el hardware y software de la Enterprise.

Me gustaría tener la respuesta de Ciarcia acá. Lo que escribo ahora es sólo de recuerdo, lo que me llamó la atención. Escribía Ciarcia que para responder rápidamente a situaciones críticas (imaginen viajes a la velocidad de la luz, etc), diversos partes de la Enterprise debían ser autónomas, controladas por computadoras, que trabajan cada una en su tema. Y que habría una red de esas computadoras. Era como si el Enterprise fuera un organismo (no sé si llegaba a ese punto la descripción de Ciarcia, o es algo que agregué yo).

Pero ese artículo me sirvió para retomar lo que venía pensando de los ochenta: la necesidad de encarar programas que actuaran de forma distribuida, y quizás, en paralelo. Eso me había venido de las lecturas sobre limitaciones en Inteligencia Artificial, y la observación que hacían otros sobre cómo funcionaba el cerebro humano, y también los organismos. Siempre me quedó que la computación distribuida es un tema muy interesante de seguir. Es más que map/reduce, es hacer que una red de computadores trabaje para resolver un problema. En los noventa aparecieron proyectos exitosos, como Beowulf (cluster con Linux, solían estar en http://www.beowulf.org/), no exactamente lo que buscaba, pero daban una punta para usar computadoras comunes, para ejecutar una tarea distribuida. Google ha sido el gran explotador de esta idea: gran parte de Google ejecuta sobre un conjunto inmenso de computadores “normales”, lo que les permite escalar “horizontalmente”: para atender a más pedidos, simplemente agregar más máquinas, y en caliente. Igual, no era eso lo que estaba buscando. Cuando luego, en este siglo, descubrí a Fabriq  de @asehmi y su host=”*” (indicar que una tarea, dentro de una serie de tareas, se puede instalar y ejecutar en cualquier nodo de una red de trabajo), me sirvió de inspiración para explorar cosas como AjAgents, AjMessages, y AjProcessor, pensando últimamente cada vez más en Actor Model, pero distribuido, y en agregar agentes distribuidos a AjSharp.

Pero volvamos a la pregunta inicial: ¿cómo será el software de la Enterprise? Digo como broma: ¿Qué está viendo Spock cuando en una pantalla busca información del nuevo planeta que están por visitar? ¿Google o Microsoft? :-)

Es muy difícil saberlo. En los siglos que “faltan” para llegar a la Enterprise, el software puede evolucionar, dar paso a otra cosa, y desaparecer. Hoy ya es una industria madura. Pero no se me ocurre algo que lo reemplace. Concuerdo con Ciarcia: el software de la Enterprise, será distribuido. Eso es lo que puedo afirmar. En la ejecución de software distribuido está la clave para conseguir más de lo que hasta ahora conseguimos, en la resolución de problemas, en escalabilidad, en robustez, etc… La aparición de "el cloud” se puede ver como un inicio hacia eso. Dónde se ejecuta una pieza de una aplicación, tendrá cada vez menos importancia.

Pero lo que de alguna forma disparó en mi mente la pregunta que le hicieron a Ciarcia: ¿cuál es el futuro de la computación?

Algunos puntos de acá a un par de siglos:

- Computación ubicua: software corriendo sobre hardware que está en todas partes: en las paredes, mesas, etc…. Desaparición de la computadora personal: habrá software y datos personales. Me acerco a una pared, y puedo dar mi presentación, que aparece en ella, recuperada desde una “gran nube”. O pasar mi multimedia en la “pared”. Una especie de Max Headroom: todo está disponible en todas partes.

- Computación en cada elemento físico: desde contenedores, a piezas de automóviles, software revisando el funcionamiento o la posición del material, dando esos datos a una red global, extensión de lo que es hoy Internet. Cada dispositivo (TE móvil, heladera, auto, camión, … ) conectado a esa red.

- El ascenso de Inteligencia Artificial realmente operativa. La formación de robots autónomos, “organismos” que aprender a interactuar en su entorno, ya sea con inteligencia o con menos. Exploración del espacio usando esos “organismos”.

- Potenciación de toda actividad científica con la ayuda del software/hardware: desde las ciencias duras, hasta las matemáticas, serán afectadas (ya lo están siendo) por el poder de computación (para simulaciones, resolver problemas) que harán de cada uno de los investigadores, o de un grupo, un Polymath. Justamente, en matemáticas se está planteando el uso de gran poder de computación en algunos temas, ver http://polymathprojects.org/. Pero imagino también la aparición de “organismos matemáticos” que, basados en Inteligencia Artificial, como hacía el programa Eurisko de Douglas Lenat en los ochenta, se sumerjan en la exploración de nuevas ramas de las matemáticas, por sí mismos.

- La evolución de la web semántica a un repositorio de conocimiento humano (no sólo información, sino conocimiento). Programas que operan sobre eso, logrando más información o, incluso, conocimiento.

- Como ahora está pasando, cambio en las relaciones y métricas humanas: el trabajo en grupos distribuidos será cada vez más habitual. Todo software y hardware que aparezca para conseguir eso, será adoptado. No creo que desaparezca el grupo humano en contacto físico: lo que veo, es que grupos físicos trabajaran en colaboración con otros grupos que están distribuidos en el planeta.

- Agentes artificiales para casi todas las tareas que hoy delegamos en personas, o tenemos que hacer nosotros mismos.

- Integración de hardware/software con el cuerpo humano. Si se da, será para reparar deficiencias de un individuo. No creo que haga falta para potenciarlo. Simplemente con tener agentes que hagan nuestro trabajo, rutinario o no, no será necesario integrar software y hardware en nuestro cuerpo para incrementar las capacidades de un ser humano. Ejemplo: no hace falta tener más memoria, implantar en nuestro cerebro algo de hardware/software que potencie esa parte. Simplemente, delegaremos ese tema a toda Internet o a lo que venga.

- Reproducción de nuestra mente: más especulativo, pero podría haber algún camino. Una réplica nuestra, o varias, programadas con nuestros gustos, intereses, que sirva como “gran agente” para potenciar las actividades de cada uno.

Otras ideas?

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

This entry was posted in 3463. Bookmark the permalink.

3 Responses to El software de la Enterprise

  1. El post habla de muchas cosas interesantes (aún conservo buena parte de las viejas Byte, edición argentina).

    Yo creo,sin adentrarme tanto en el futuro como vos lo hiciste en el post, que hay necesidades de hoy, muy mal resueltas por el software tradicional, que son las que están generando la aparición de nuevas tendencias (como las “nosql”).

    Por ejemplo la escalabilidad horizontal. Hace años, como asiduo lector de labs.google.com encontré el artículo al q seguramente te referís donde decía algo asi como “Nuestra escalabilidad no está dada por hardware potente y caro, sino por nuestro software”. Eso me quedó muy grabado, y creo que es el camino.

    También creo que la computación distribuida es lo que se necesita potenciar (esto es lo que a escala se hace en un equipo electrónico de mediana complejidad para arriba, un televisor por ejemplo, cada placa realiza una función y todas juntas posibilitan que veamos televisión).

    Es un tema más que interesante la cooperación entre sistemas (no quiero decir orquestación porque puede prestarse a asociarlo con un producto de una empresa que no me cae bien para nada).

    Interesante artículo (Me gustaría poder ampliar el gráfico de la Enterprise, para leer las referencias).

    Saludos!

  2. Hi Angel – this article translated quite nicely into English and I was able to get the gist of it. I think Starship Enterprise will have really dumb actuators connected to a distributed system of telepathically connected autonomous grey matter units. All reflex actions in the ship will be handled by local brainstem units. Living humans (and Spock) will serve higher level planning, command and control functions. In other words there will be no software. We will have discovered long ago by then that software is better done as wetware.
    - Arvindra

  3. Llegué tarde a estos comentarios, pero como dice Arvindra, definitivamente lo veo más por el lado del wetware.

    En cualquier caso, esto es tema para nuestra VAN sobre la inmortalidad de la Medusa, que ya deberíamos pensar como un podcast independiente, ¿no?

Leave a Reply

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

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>