INTRODUCCIÓN
Me propongo en lo que sigue introducir el tema de la sociología
de las computadoras. No me refiero a la sociología de los
usuarios de computadoras sino a la sociología de las
computadoras mismas. Tal disciplina o rama de una disciplina,
habría que entenderla como una ciencia que aplica conceptos y
leyes descubiertas en el análisis de las relaciones entre los
seres humanos a las relaciones entre ciertos seres no humanos:
los procesadores electrónicos. Si tal ciencia existe, o está a
punto de existir, ello tendrá tremendas repercusiones para la
filosofía de la ciencia y para la imagen que el ser humano tenga
de sí mismo. De cualquiera de los dos modos que se vea, se trata
de un asunto trascendente para la ciencia del conocimiento.
Tradicionalmente se habla de las "ciencias duras" (las
matemáticas, la física, la biología) y las "ciencias
suaves" (las ciencias sociales, básicamente). Voy a
sostener que esta distinción ha comenzado a perder sentido por
obra de la existencia misma de las computadoras. Pero esta vez no
es porque las ciencias suaves se hayan hecho duras como las
ciencias especulativas se han transformado en empíricas
sino, curiosamente, porque las ciencias duras se están haciendo
suaves. Quiero referirme concretamente a la informática, que es
la única ciencia dura que conozco suficientemente.
LA COMPUTADORA, ¿NUNCA SE EQUIVOCA?
A una primera época en el desarrollo de la informática, digamos
que es su época clásica, en que todo es proporcionado y apolíneo
corresponden aforismos como "La computadora nunca se
equivoca; solo el programador, que es humano, lo hace"
es decir errare humanum est. Es la época de la
computadora gigante, muy impresionante en su tamaño, pero
fundamentalmente simple en su arquitectura y en su programación;
el gran tamaño esconde un poder muy reducido, se trata de la
"calculadora de cuarto" que difiere solo en tamaño de
la calculadora de bolsillo. Tales computadoras solo tenían una
fracción del poder de cómputo y de la complejidad de
arquitectura de muchas de las microcomputadoras existentes hoy,
por ejemplo la computadora con que escribo este artículo.
Tengo ante mí un volumen de la revista ACM Computing Surveys
donde se describe lo que será muy pronto la arquitectura estándar
de la maquinaria de cómputo: el sistema operativo distribuido,
es decir, una máquina virtual cuya unidad funcional frente al
usuario esconderá una multiplicidad de microprocesadores (equivalentes
a las actuales computadoras) conectados por medio de una red
local. Encuentro el artículo interesante por razones que no
tienen que ver directamente con la técnica informática. La
mayor de ellas me ha reforzado en la convicción de que estamos
ante el advenimiento de la computadora falible, de la computadora
que se equivoca por las mismas causas que el cerebro se equivoca,
a saber: su misma complejidad. Errare complexum est.
Si una computadora consiste en un solo procesador o unidad
lógica y su respectiva memoria, un fallo del procesador
paraliza a la computadora, no la hace equivocarse. Pero si la
computadora es una sociedad de computadoras conectadas por una
red (como serán todas las computadoras del cercano mañana), si
uno de los procesadores deja de funcionar, la computadora no se
para, simplemente se degrada, ... o se equivoca. Toda suerte de
equívocos y malos entendidos pueden entonces suceder. Por
ejemplo, uno de los procesadores que debía recibir un mensaje
del procesador afectado podría seguir trabajando como si el
procesador dañado hubiera cumplido su función, pero con
información incompleta. Si por ejemplo la computadora dañada
debía enviar un mensaje indicando haber recibido un mensaje
anterior (una transferencia de fondos, tal vez) y ese acuse de
recibo nunca llega, el procesador destinatario puede decidir que
el mensaje nunca fue recibido y enviar de nuevo el mensaje
original; esta vez el mensaje lo recibe un procesador de
reemplazo que ha sustituido al procesador dañado, pero lo recibe
con un atraso que posibilita la inscripción por ejemplo de una
doble transferencia de fondos.
Además, aun suponiendo que todos los procesadores funcionen bien,
la computación en paralelo puede ocasionar extraños efectos,
muy difícilmente evitables; un típico ejemplo es el bloqueo recíproco,
cuando cada uno de dos procesadores se pone a esperar que el otro
procesador desocupe un recurso que necesita para finalizar una
operación, por ejemplo el acceso a cierta parte de un disco de
almacenamiento de datos o a algún lugar de una memoria
compartida. Las consecuencias de un tal bloqueo, o de otras
situaciones parecidas, son impredecibles, y los resultados de la
computación global pueden muy bien resultar incorrectos.
CIENCIAS "SUAVES" Y CIENCIAS "DURAS"
Ante esta clase de problemas, y algunos otros que mencionaré en
seguida, los científicos de la informática están comenzando a
comportarse de manera muy inesperada: los científicos de la
informática han encontrado soluciones a los problemas que
plantea la computación distribuida, en la sociología, en la
ciencia administrativa y hasta en la ciencia política. La
diferencia entre las ciencias duras y las ciencias suaves
comienza a desaparecer cuando se aplican soluciones de las
ciencias sociales a los problemas estrictamente computacionales y
comienza a surgir una sociología de las computadoras.
Un sistema operativo es un programa fundamental que se ejecuta
directamente sobre la arquitec- tura electromecánica de la
computadora y ofrece al usuario o usuarios de esta toda clase de
servicios necesarios, como acceso a unidades de almacenamiento de
datos en discos, acceso a aparatos de impresión, etc. En
realidad, es un programa bastante elaborado una de cuyas
principales responsabilidades es la administración de los
recursos de cómputo y su oportuna puesta a disposición del
usuario o usuarios. Cuando, como en los sistemas distribuidos a
que me vengo refiriendo, los procesadores son varios, entre los
cuales se distribuyen distintas operaciones independientes para
ser ejecutadas en paralelo lo que indiscutiblemente aumenta
la eficiencia del sistema las responsabilidades del sistema
operativo se complican hasta lo indecible.
Manejar la adjudicación de recursos sin tener información
exacta sobre el estado global del sistema es muy difícil. Y esa
información exacta es prácticamente imposible de tener si
varios procesadores trabajan simultáneamente a la velocidad de
la electricidad enviándose mensajes recíprocamente y alterando
el estado de la memoria compartida por medio de procesos
mutuamente independientes.
LA IMPORTANCIA DE LA REDUNDANCIA
Cuando algo muy serio está en juego en la vida social piénsese
en el caso de una enfermedad grave o de una crisis nacional
normalmente se recurre al concurso de varios solucionadores de
problemas que operen simultáneamente: en el caso de la
enfermedad, llamamos a esta solución "junta de médicos";
en el caso de la crisis nacional, la llamamos "junta de
notables"; en el caso computacional, la llamamos simplemente
redundancia. Durante su ejecución, un programa se pone a "correr"
simultáneamente en un cierto número de máquinas, en paralelo.
Cada vez que un proceso termina, las máquinas comparan sus
resultados; si coinciden, no hay problema; pero si difieren, las
máquinas recurren a un procedimiento para dirimir los conflictos
muy bien experimentado: las máquinas votan, y la solución que
obtenga la mayoría de los votos será el resultado que todas las
máquinas tomen como dato para sus cómputos en los módulos
siguientes. Claramente, se trata de la importación de un método
social para la solución de problemas informáticos.
LA JERARQUÍA SOCIAL
Uno de los problemas más serios que puede enfrentar un sistema
operativo distribuido es el de asignar el trabajo requerido entre
los distintos procesadores que forman el sistema. El problema es
muy similar al de distribuir el trabajo entre los componentes
humanos de una gran organización. La solución estándar en
estos casos es organizar a los trabajadores de una manera jerárquica.
La solución computacional es organizar a los procesadores como
se organiza a la gente en la gran corporación, el ejército, la
universidad, o cualquiera otra de las jerarquías del mundo
social. Algunas máquinas se declararán obreros y otras
administradores. Por cada grupo de un cierto número de obreros
se asignará una máquina administradora (el jefe de departamento)
con la tarea de supervisar quién está ocupado y quién no.
Las cuestiones normales en una jerarquía humana surgen también
en una jerarquía informática: ¿qué pasa cuando un jefe de
departamento deja de funcionar? Una solución es promover a uno
de los subordinados directos para llenar el puesto vacante. El
escogimiento podrán hacerlo los subordinados mismos, o los
iguales del "difunto", o en sistemas más autocráticos
el jefe del procesador descartado.
Todas estas son por supuesto decisiones políticas. Si se quiere
evitar tener un solo administrador (vulnerable) en la cúspide de
la jerarquía, es posible decapitar el sistema y poner en la
cumbre a un comité de máquinas en las que resida la autoridad
suprema. Cuando un miembro del politburó funciona mal, los
restantes miembros promueven a alguien del nivel inferior como
repuesto. Puede haber también soluciones anarquistas, donde
nadie tiene autoridad final, y lo interesante del caso es que
tales sistemas pueden funcionar, por lo menos tan bien como los
de autoridad centralizada. En esos sistemas todos los problemas
se resuelven por intercambio de mensajes y, por supuesto, por la
disposición de los distintos elementos a asumir las posiciones
vacantes cuando ello resulte necesario para el funcionamiento del
sistema, tal como ellos lo ven. Por supuesto, puede haber
colisiones, pero existen soluciones para resolver conflictos sin
que haya un árbitro de la disputa.
LA HETERARQUÍA
Un ejemplo interesante de solución de conflictos sin intervención
de un árbitro se presenta en la transmisión de mensajes por
medio de una red local del tipo ethernet. En este tipo de red las
estaciones están todas conectadas por un simple cable coaxial,
el mismo que se usa para instalar una antena de televisión.
Cualquier estación puede poner en cualquier momento una señal
en el cable, y esta señal es oída por todas las otras
estaciones. Si dos o más estaciones trasmiten al mismo tiempo,
ocurre una colisión, es decir, los mensajes se interfieren unos
a otros y llegan a su destino adulterados. Como la estación que
envía también está oyendo, al no reconocer su mensaje sabe que
ha fracasado en su intento y que tiene que reenviar su mensaje.
Esto ocurre pocas veces, por lo que tiene un impacto
insignificante en el rendimiento de la red. Para reducir la
probabilidad de colisiones, la estación que falló espera un
ratito antes de volver a trasmitir; si se produce una nueva
colisión, espera el doble, y así sucesivamente hasta tener éxito.
Este sistema de resolución de conflictos es perfectamente eficaz,
y no difiere mucho del que se usa en la conversación normal, sin
director de debate, para evitar que la gente hable al mismo
tiempo. Vemos aquí un caso de una buena solución a un problema
computacional que se inspira en un modelo social: la conversación
humana normal.
EL DOBLE EFECTO EN LAS CIENCIAS SOCIALES Y EN LA INFORMÁTICA
En su libro La miseria del historicismo, Karl Popper introduce el
concepto del "doble efecto" en la dinámica social. Según
este concepto, todo acto social produce dos efectos: uno deseado,
que es el propósito del acto, y otro no deseado pero
inevitable que debe ser soportable para el actor si el acto
ha de realizarse en absoluto. De este concepto saca Popper su
conclusión de filosofía de la ética en el sentido de que el
objetivo último de la moral es disminuir lo más posible el mal
general en vez de maximizar la felicidad del mayor número, como
postulaban los utilitaristas. Uno tendría que esperar que esta
doctrina del doble efecto, típica de las sociedades humanas, se
aplicara también a los sistemas de cómputo desde el momento en
que estos comiencen a ser "sociales"; y así es, en
efecto.
Para comprobarlo, analicemos el caso de un grupo de procesadores
que trabajan en paralelo en la solución de un problema
complicado. Así como desde el punto de vista del hardware (la
parte física de la máquina) la computadora se descompone en
procesadores, cada uno independiente de los otros, desde el punto
de vista del software (la parte intelectual de la máquina) el
programa se descompone en procesos independientes. Para "correr"
el programa, diversos procesos tendrán que ejecutarse en otros
tantos procesadores; por razón de la misma limitación en el número
de procesadores, pero también porque algunos procesos son
prerrequisito de otros, los procesos irán siendo asignados a los
procesadores consecutivamente; pero para maximizar la eficiencia,
se procurará que un buen número de procesos se ejecuten
paralelamente.
La decisión estratégica de cómo lograr la mejor asignación de
procesos a procesadores y la mejor distribución de la ejecución
entre un arreglo secuencial y un arreglo paralelo constituye el
problema de la asignación de recursos. Si tomamos en cuenta que
los distintos procesos, por ser parte de un programa integral que
soluciona un mismo problema, tienen que comunicar entre sí para
enviarse datos y resultados, pareciera que los procesos que
comunican frecuentemente deberían ejecutarse simultáneamente.
Así, Ousterhout sugiere que los procesos que trabajan juntos se
asignen a diferentes procesadores para que puedan "correr"
en paralelo. Pero otros investigadores no están de acuerdo: Chow
y Abraham, por ejemplo, consideran que los procesos que trabajan
juntos deben ponerse en la misma máquina, para reducir los
costos de la comunicación. Se ve claramente aquí que si
pretendemos aumentar la eficiencia por la computación en
paralelo, el sistema se degrada por los requerimientos de la
comunicación; pero si queremos disminuir esos requerimientos, el
sistema se hace más lento porque la computación debe hacerse
secuencial. Un ejemplo típico del doble efecto de Popper.
Pero todavía hay más: un tercer grupo de investigadores, por
ejemplo Stankovik y Sidhu consideran que la estrategia
fundamental debe ser velar porque ningún procesador esté
sobrecargado mientras otros permanecen ociosos. Para estos
autores, balancear las cargas es la estrategia razonable, tomando
en cuenta que en sistemas complejos de hecho no sabemos nada
sobre los detalles del comportamiento del sistema en cada ejecución
concreta. En la ejecución de esta estrategia, se pueden
presentar efectos secundarios muy graves, pues hacer migrar un
proceso de un procesador a otro implica una serie de acciones muy
costosas: hay que interrumpir su ejecución, para lo cual deben
guardarse muchos ítemes de información que permitan volver a
ponerlo en ejecución en el punto en que estaba al llegar al
nuevo procesador. En la práctica, lo que se recomienda es más
bien dejar los procesos que están ejecutándose llegar a su fin
en el procesador en que se encuentren, pero crear los nuevos
procesos solamente en las máquinas menos cargadas; solución que
recuerda los métodos para desburocratizar una institución: no
nombrar nuevo personal para llenar las vacantes que se produzcan,
en vez de despedir personal. En resumen, los objetivos de
maximizar la producción, minimizar el tiempo de respuesta y
uniformar las cargas entran en conflicto. Toda solución al mismo
implica una transacción: de igual tipo que las transacciones
sociales o políticas.
UN BOOMERANG EPISTEMOLÓGICO
Una vez que los modelos han sido aplicados con éxito a la informática,
puede darse un efecto boomerang sobre las ciencias humanas, las
cuales pasan a beneficiarse de las mismas técnicas informáticas
que ellas inspiraron. Es decir, la misma técnica, al ser
refinada y hecha mucho más rigurosa en su versión computacional,
puede ser retomada en aplicaciones directamente sociales. Veo
innumerables aplicaciones de esta tesis en las disciplinas
sociales, pero muy especialmente en la ciencia administrativa y
en la ciencia política.
Tomemos algunos de los casos analizados antes. Creo que la
sociología, la ciencia política y la administración pueden
beneficiarse de los análisis computacionales sobre bloqueos recíprocos
o sobre organización, reparación y funcionamiento de jerarquías.
Igualmente, la sociología y la ciencia política tienen mucho
que aprender de la forma en que se analizan y deciden las
transacciones entre objetivos en conflicto para maximizar la
satisfacción o, como diría Popper, minimizar la insatisfacción.
Otra área muy fecunda de reflexión es la teoría de la
redundancia, sobre todo si se combina con la consideración de su
complementaria la teoría de la programación estructurada. En
efecto, ciertos problemas por su naturaleza, admiten ser
descompuestos en subproblemas, supuestamente más fáciles de
resolver que sus progenitores; este es el origen de los expertos,
tanto en la vida social real como en el reino de la informática.
Cuando existe un conocimiento claro sobre una materia, cuando el
problema es un problema bien formado, lo procedente es
descomponerlo en sus distintos aspectos y pasar los subproblemas
a la consideración de los respectivos expertos. La famosa "comisión
especial", a la que suelen mandarse los asuntos difíciles,
es un caso claro de esta metodología informática, por la que el
asunto se divide en sus partes y cada parte la asume el proceso
especializado correspondiente. Contrasta con esto el caso del
problema no bien formado, para cuya solución no se puede
articular ninguna experticia determinada. En este caso lo que
corresponde convocar no es al "comité de expertos" o
"comisión especial" sino más bien a la igualmente
famosa "junta de notables", en la que reina no la
descomposición de saberes especializados, sino la redundancia de
saberes de sentido común.
Mándanos tu Artículo
Dep. de Noticias
Nuevas Ideas
Este trabajo fue publicado por primera vez en la Revista de
Filosofía de la Universidad de Costa Rica (1988). Fué
reproducido en Epistemología e informática (1993).
REFERENCIAS
Copyright © 1988, 1997 Claudio Gutiérrez
|