Historia de la computación A fin de comprender con mayor claridad lo que representa para la humanidad la aparición y uso extendido de las máquinas computadoras es conveniente hacer un repaso sobre el desarrollo de artefactos que auxilian en la labor de cálculo Además, esta revisión permitirá establecer con mayor precisión cuáles son los antecedentes de la ciencia de la computación, lo que permitirá desterrar muchos de los conceptos erróneos que existen sobre esta ciencia. ¿Computación? La palabra computadora viene del verbo computar, que es equivalente a calcular, que a su vez se deriva del vocablo griego calculus, las piedrecillas que en un tiempo se utilizaban para contar; por lo tanto, en su origen, el término computadora se utiliza para denotar a las máquinas que facilitan la labor de cálculo. Para otras culturas el nombre genérico que se da a este tipo de artefactos es ordenador, que se deriva de la forma en que se utilizan dichas máquinas. Antecedentes Desde la antigüedad, las distintas culturas que han poblado nuestro planeta han tenido la necesidad de efectuar diferentes tipos de cálculos, algunos más elaborados que otros. Por ejemplo, los mayas podían predecir con mucha precisión distintos fenómenos astronómicos, lo que implicaba un conocimiento matemático muy avanzado; los egipcios, los griegos y los chinos también desarrollaron bastantes conocimientos matemáticos. Los arqueólogos han encontrado vestigios de estas actividades y aún buscan interpretaciones que permitan conocer mejor los conocimientos que manejaban nuestros antepasados; vale la pena mencionar que algunas herramientas perduran hasta nuestros días, un ejemplo notable es el ábaco. En http://www.ee.ryerson.ca:8080/~elf/abacus se habla acerca del ábaco, en particular se menciona que los aztecas utilizaban un artefacto similar. A la par de las herramientas se han desarrollado notaciones que facilitan algunas operaciones, fundamentalmente aritméticas. En general, las distintas culturas han desarrollado los procesos necesarios para resolver el tipo de problemas que eran de su interés; una parte relevante de ese desarrollo se ha materializado en las herramientas utilizadas durante dichos procesos, pero también son importantes las notaciones empleadas y los procesos en sí. Notaciones Tan solo para tener una idea de la importancia de las notaciones, vale la pena pensar en las distintas maneras en que se ha representado el concepto de número: Para los pueblos primitivos, que únicamente necesitaban contar unos cuantos objetos, era suficiente con emplear una notación que reflejara directamente la cantidad de objetos en cuestión. Surge así lo que ahora podríamos llamar notación unaria: existe solamente un símbolo que se repite tantas veces como objetos se tengan. Cinco personas se representan por lllll Culturas más avanzadas empleaban varios símbolos que se combinaban para formar cantidades más grandes. Mayas. Utilizan una notación basada en 20 símbolos (tantos como dedos tiene una persona). Indo-árabes. Notación basada en 10 símbolos (tantos como dedos tienen las manos de una persona). Romanos. Notación basada en 7 símbolos: I, V, X, L, C, D y M. Conforme aumentan las cantidades que se tienen que manejar se dificulta la representación de los números. En un principio solamente se manejaban números enteros, pero las necesidades de cálculo han llevado a la creación de enteros negativos, racionales, reales, etcétera. Actualmente la mayoría de las culturas emplea una notación basada en 10 símbolos distintos y un conjunto de reglas que permiten combinarlos de tal forma que es muy sencillo formar cualquier cantidad. Se emplea una notación posicional: el valor de cada símbolo depende de la posición en que se encuentre. Por otra parte, en la mayoría de las computadoras se utiliza una representación numérica basada en dos símbolos (el 0 y el 1) cuyos valores también dependen de la posición que ocupan, en forma similar a la notación decimal que utilizamos comúnmente las personas; a esta notación se le llama notación binaria. Se encuentran estudios muy amenos de la noción de número, pasando por una revisión de las formas en que los números han sido utilizados a lo largo de la historia. Procesos La representación de los números no es el único problema que se afronta, es necesario establecer procesos que faciliten las tareas de cálculo. A lo largo de la historia han surgido procesos ingeniosos para facilitar las operaciones, en general dichos procesos están relacionados con la representación de los números. Los mayas tenían un sistema numérico basado en veinte símbolos distintos, pero ¿alguien sabe cómo efectuaban las operaciones aritméticas básicas? El sistema de numeración romano es muy conocido, de hecho todavía se utilizan número romanos para escribir algunas cantidades. Tal vez sea fácil decir cómo efectuar una suma de dos números romanos, pero ¿qué tan difícil sería multiplicar esos mismos números? Nuestra cultura utiliza una notación desarrollada originalmente por los pueblos indo-arábigos; además de la notación, también tenían métodos para facilitar las operaciones. A principios del segundo milenio las culturas europeas empezaron a asimilar los desarrollos árabes. A partir de esa época surgen métodos para realizar operaciones complejas; en la actualidad todavía hay personas que son diestras en el arte de efectuar operaciones aritméticas utilizando el ábaco, es sorprendente la velocidad y precisión con que realizan esta actividad. Una vez que existían métodos para realizar algunas operaciones aritméticas es natural preguntarse si es posible desarrollar métodos que permitan mecanizar otros tipos de razonamiento. Es así que en el siglo XIII hay intentos de mecanizar el pensamiento (discos concéntricos con palabras escritas en ellos, se formula una pregunta y la respuesta aparece en otro lugar; para mecanizar el razonamiento basta crear un artefacto que maneje los discos). Para el siglo XV ya hay métodos sencillos para efectuar sumas y multiplicaciones. Funcionan bien (en tiempo y precisión) para cantidades pequeñas. Al manejar cantidades grandes se complica la multiplicación (y la división). En siglo XVII, espoleados por la necesidad de crear mejores instrumentos para la navegación marítima, se desarrolla el concepto de logaritmo (John Napier. Hay una gran variedad de formas en que se ha escrito el nombre de este personaje, aquí se toma la que aparece en la biografía que edita la Escuela de Matemáticas y Estadística, University of St. Andrews, Scotland, que, dicho sea de paso, es la primer universidad en que estudio Napier): se trata de reducir una multiplicación a una suma. Claro que es necesario saber los valores correspondientes de los logaritmos y antilogaritmos empleados en las operaciones. En 1617 aparece un trabajo de Napier en el que se presenta el método para realizar operaciones aritméticas usando logaritmos, mismos que se obtenían de una tabla de logaritmos escrita en unas columnas móviles; con la ayuda de esta tabla podía obtener con gran rapidez multiplicaciones, raíces cuadradas y raíces cúbicas. Máquinas sumadoras En los siglos XVII y XVIII aparecen máquinas para sumar y restar. Utilizan la tecnología desarrollada para los mecanismos de relojería y de la industria del juguete (cajas musicales). En base a ruedas es posible representar cantidades (una rueda con diez posiciones por cada dígito), para manejar el acarreo se utilizan engranes (ruedas dentadas) para conectar las ruedas con los dígitos, cada rueda origina un movimiento de otra rueda al dar un giro completo. Algunas de las máquinas más conocidas de esa época son: Sumadora de Pascal (1642), conocida como la Pascalina. Basada en engranes. Círculos de proporción. Basados en logaritmos, son el antecedente de las reglas de cálculo. Calculadora de Leibniz (1671). Multiplicaba en base a sumas repetidas. Máquinas avanzadas Con la revolución industrial, y a raíz de que se perfeccionan las técnicas mecánicas y productivas, surge una pregunta: dado que es posible construir máquinas que realicen las tareas físicas del ser humano, ¿será posible construir máquinas que realicen las tareas ``intelectuales''? El siglo XIX es testigo de una serie de acontecimientos muy importantes para el desarrollo de lo que hoy conocemos como computadoras. A principios de ese siglo (1804) el francés Joseph-Marie Jacquard perfecciona la idea que permitiría automatizar algunas de las tareas que realizaban las máquinas tejedoras: en base a tarjetas de cartón perforadas es posible transmitir a la máquina las instrucciones para su funcionamiento, con lo que se puede cambiar muy fácilmente el patrón del diseño. Este mismo mecanismo es el que se aplica a otras máquinas, por ejemplo las pianolas. En 1822 Charles Babbage diseña una máquina para hacer cálculos de diferencias, la máquina diferencial (en base al método de diferencias finitas). Para construirla obtiene el patrocinio del gobierno británico. A pesar de trabajar durante varios años en el proyecto la máquina no se concluye, en parte debido a la falta de las herramientas y componentes necesarios, muchas de ellas tenían que ser construidas artesanalmente. Durante el desarrollo de la máquina de diferencias Babbage diseña otra máquina: la máquina analítica, cuyo primer diseño termina en 1834. Esto también contribuye a que Babbage pierda e interés por la máquina de diferencias. La máquina analítica tendría la posibilidad de realizar diferentes tareas, dependiendo de lo que se le indique. Babbage contó con la colaboración de Ada Augusta de Lovelace durante el desarrollo de la máquina analítica, ella estaba encargada de traducir las soluciones de algunos problemas para que la máquina analítica los pudiera procesar. Algunos aspectos relevantes relacionados con la máquina analítica son: Las acciones se controlan mediante tarjetas perforadas (estilo telar de Jacquard). Es una máquina que permite resolver todo tipo de problemas, basta indicar la secuencia de acciones a realizar. Es una máquina programable. Ada Augusta de Lovelace es la primera en programar. Uno de los aspectos más importantes durante el siglo XIX es el trabajo que se desarrolla en torno a la lógica, surgen teorías para tratar de mecanizarla. Boole. En 1854 publica un libro titulado Investigación sobre las leyes del pensamiento, sobre las cuales se basan las teorías matemáticas de la lógica y de la probabilidad. Es el pionero del álgebra de la lógica, mejor conocida como álgebra Booleana. Stanley Jevons. En 1870 se da a conocer su máquina para resolver problemas lógicos, se le conocía como el piano lógico y se le considera uno de los antecedentes de las computadoras actuales. En esa misma época se desarrollan otros dispositivos de cálculo, algunos de ellos para actividades muy particulares; en general no son programables. Algunos ejemplos son: Máquina de multiplicación directa, desarrollada por León Boleé en 1887. La millonaria de Otto Steiger en 1892. Se vendieron cerca de 4500 unidades, en particular una de ellas se utilizó para realizar los cálculos que permitieron determinar la existencia de Plutón. La máquina tabuladora de Herman Hollerith. Esta máquina fue usada en el censo de población de los EE.UU. de 1890. Posteriormente la compañía de Hollerith (Tabulating Machine Company) se une a otra para formar IBM. En 1899 William S. Burroughs construye una calculadora de multiplicación directa. Esta calculadora se vuelve muy popular. El desarrollo de estos dispositivos muestra que es posible automatizar ciertas operaciones y acciones. A fines del siglo XIX y principios del siglo XX surgen muchos inventos que permiten crear mejores condiciones de vida. Algunos inventos importantes que están tan integrados a nuestra vida diaria que nos es difícil pensar en cómo se viviría sin ellos: Automóviles. Nos permiten trasladarnos rápida y cómodamente (si el tráfico lo permite). Aviones. Facilitan los viajes a largas distancias, en particular los viajes intercontinentales. Luz eléctrica. Fuente de energía disponible en gran cantidad de lugares; esta energía es la que posibilita el funcionamiento de la mayoría de las computadoras. El baño en casa (w.c.). Ha permitido un cambio cualitativo en las condiciones de higiene de la mayoría de las personas, lo que ha ayudado a crear mejores condiciones de vida para la humanidad. Por otra parte, se sientan las bases de la física y la matemática modernas (teorías de Planck, Einstein, Rutherford; Hilbert, Russell, Whitehead). Hasta cierto punto se crea una sensación de poder ilimitado, lo que permitiría resolver todos los problemas científicos que estaban pendientes y eventualmente llegar a niveles de vida mejores a los conocidos. Se intenta demostrar que el edificio de la matemática es perfecto formalmente. Sin embargo surgen problemas: ¡hay cosas que no se pueden demostrar! Uno de los problemas más importantes es el Problema de decidibilidad: Dados un conjunto de axiomas, las reglas de una lógica de primer orden y una proposición, ¿existe una secuencia finita de deducciones que lleve de los axiomas a la proposición? Alan Turing demuestra que no es posible resolver este problema. La máquina de Turing Como parte de sus trabajos sobre decidibilidad, Turing construye un modelo abstracto para determinar lo que es computable. A este modelo se le conoce como la máquina de Turing. Es computable todo aquello que pueda ser calculado por una máquina de Turing (tesis de Church-Turing). Toda computadora (en realidad todo algoritmo) es equivalente a una máquina de Turing. Los programas son equivalentes a una máquina de Turing. Se desarrollan otros modelos (que son equivalentes) para determinar lo que es computable: Cálculo lambda. Propuesto por Alonzo Church. Máquina de Post. Se puede decir que estos trabajos son la base para que se establezca la Ciencia de la Computación como una disciplina. Las computadoras Por otra parte, en los primeros años del siglo XX las máquinas analógicas se utilizan en distintas actividades, en particular se construye un analizador diferencial en el M.I.T.; con la utilización de este tipo de máquinas y los basculadores de Eccles-Jordan (con estados biestables) era más fácil profundizar en las propiedades lógicas de la aritmética binaria para deducir que las propiedades abstractas de esta aritmética podían ser incorporadas en circuitos electrónicos utilizando válvulas o relevadores. En base a estos resultados era factible proponer la construcción de máquinas electromecánicas para realizar cálculos. Con la segunda guerra mundial se necesitan equipos capaces de procesar grandes volúmenes de información. Algunos de los problemas que impulsaron el desarrollo de equipos con mayores capacidades de procesamiento son: Cálculos balísticos. Determinar la trayectoria de los proyectiles para alcanzar un objetivo determinado. Códigos. Descifrar a tiempo los mensajes cifrados que intercambiaban los ejércitos enemigos. En esa época ya se cuenta con la infraestructura que permite construir las primeras computadoras. Algunos de los desarrollos fueron parte de proyectos secretos durante la Segunda Guerra Mundial, por lo que la información referente a esos proyectos no estuvo disponible al público general durante mucho tiempo. La historia de las computadoras no es resultado de un solo trabajo, que pudiera verse como un fenómeno lineal en el tiempo, influyen una gran cantidad de trabajos que se desarrollaban simultáneamente en distintas partes del mundo; de tal forma que es difícil establecer una clasificación única. A continuación se presentan los ejemplos más relevantes de los que se puede llamar la clasificación generacional de las computadoras, esta clasificación se basa en los aspectos más relevantes en cuanto a la arquitectura de las computadoras. Primera generación (1940--1955) Las primeras computadoras se fabricaban en base a bulbos y relevadores (elementos electromecánicos), su configuración se realizaba mediante alambrado de los circuitos. Los sistemas operativos eran inexistentes, el usuario era el sistema operativo. Las tareas de control estaban incluidas como parte de los programas. A continuación se presentan algunos ejemplos notables de las computadoras de la primera generación Computadoras de Zuse. En 1936 Konrad Zuse construye en su casa una calculadora mecánica. En base a esta experiencia Zuse construye la primer computadora alemana en 1940, se le llama Z2. A esta computadora siguieron la Z3 y Z4. Hay muy poca información acerca de estos trabajos, pues los laboratorios en que se desarrollaban fueron destruidos durante la ocupación de Alemania por parte de los ejércitos aliados. De las pocas cosas que se saben de estas máquinas es que se empleaba una sintaxis distinta a la que se emplea actualmente: se escribían primero las expresiones y después el lugar en que quedaban los resultados (en la mayoría de los lenguajes de programación se escribe primero la referencia al lugar en que se almacena el resultado y después la expresión que lo genera). Computadoras Coloso. Fabricadas en Inglaterra durante la segunda guerra mundial (aproximadamente en 1943). Estas computadoras se emplearon para tratar de descifrar los códigos con que se transmitían los mensajes secretos durante la guerra, por lo que su existencia fue un secreto durante mucho tiempo. Mark I. Desarrollada entre 1937 y 1944 por Howard Aiken en Harvard. Durante mucho tiempo se le consideró la primer computadora, recientemente se ha demostrado que existían otras computadoras antes de la Mark I. ENIAC (Electronic Numerical Integrator And Calculator). Desarrollada por Eckert y Mauchly en la Universidad de Pennsylvania, fue terminada en 1946. Es la primer computadora que utilizaba exclusivamente componentes electrónicos en su fabricación. EDVAC (Electronic Discrete Variable Automatic Computer). Desarrollada por John Von Neumann. Se le considera el antecedente de las computadoras digitales modernas; en particular incorpora el concepto de programa almacenado en la memoria de la computadora (que curiosamente es lo que ha permitido la existencia de los virus informáticos). El proyecto para construir la máquina se retrasó y concluyó en 1952, antes de ella se construyó la EDSAC (Electronic Delay Storage Automatic Calculator) en el año de 1949; es la primer máquina operativa que incorpora ese mismo concepto. El equipo que desarrolló la ENIAC construyó otra máquina a la que llamaron UNIVAC (Universal Automatic Computer). Se le considera la primer computadora para uso comercial. Un aspecto muy importante es que en esta máquina se utilizaron diodos de cristal en vez de los tubos de vacío (bulbos), con lo que se establecían las bases para el desarrollo de computadoras utilizando elementos de estado sólido. A fin de facilitar el desarrollo de programas (y consecuentemente obtener mayor beneficio de las computadoras) se crean los primeros programas de apoyo (ensambladores, compiladores, intérpretes, etc.) Surgen también conceptos de programación como son: subrutinas y macro instrucciones. Se desarrollan los primeros controladores de dispositivos, con lo que se logra cierta independencia de la máquina a la hora de programar. Segunda generación (1955--1965) Uno de los aspectos que permite diferenciar con mayor claridad las computadoras de la segunda generación de las computadoras pertenecientes a la primer generación es el uso de una nueva tecnología: las computadoras de la segunda generación se fabricaban en base a transistores. Este hecho tiene consecuencias muy importantes: se reduce drásticamente el espacio necesario para instalar estos equipos y el consumo de energía es menor (con su consecuente disminución en la disipación de calor y una simplificación de las necesidades de infraestructura para instalar estos equipos). Otros aspecto importante es el cambio de denominación: a las máquinas de la primera generación se les conoce como calculadoras electrónicas, mientras que las de la segunda generación ya son procesadores electrónicos; este cambio no es sólo de nombre, se les considera máquinas que pueden ser utilizadas para procesar cualquier tipo de información. En esta época se inicia la utilización de computadoras en ámbitos comerciales, a pesar de que estas primeras computadoras eran muy caras (el costo de las computadoras más baratas rondaba los $200,000 USD). Este hecho tenía sus consecuencias: era más barato contratar operadores que realizaran las tareas de administración de los equipos que pagar lo que costaría desarrollar esos sistemas y el hardware necesario para que funcionara correctamente. El hecho de que estas máquinas pudieran ser utilizadas por gente totalmente ajena a su desarrollo plantea varias necesidades, en particular es necesario que se simplifique su operación. Muchos de los problemas que se tuvieron que resolver dieron paso a nuevas disciplinas relacionadas con la computación, por ejemplo las áreas de sistemas operativos y lenguajes de programación, entre otras. Además, por la necesidad de aprovechar al máximo los recursos de cómputo lleva a buscar mecanismos como los siguientes: Calendario de actividades (job scheduling). Permitía planear las actividades que tenía que realizar el procesador para aprovechar al máximo los tiempos muertos. Procesamiento por lotes (JCL). Facilidad de elaborar procesos que se ejecutaban cuando el sistema se encontraba libre de otras cargas de trabajo. Bloqueo de procesos. Permite liberar el procesador para que otro proceso lo utilice mientras el primer proceso se encuentra ocioso. Manejo de espacio temporal (buffers). Trabajo ``externo'' mientras el procesador realiza otras actividades. A esta forma de trabajo se le llamó SPOOL (Simultaneous Peripheral Operation On Line). Tiempo compartido. Hay varios procesos activos simultáneamente, cada uno de ellos asume que es el único proceso en el sistema y por lo tanto tiene a su disposición todos los recursos. Primeros lenguajes de programación independientes de una computadora particular. En esta época hay grandes cambios por la introducción de nuevos mecanismos para facilitar diversas actividades relacionadas con las computadoras, por ejemplo se introducen máquinas para leer tarjetas perforadas en vez de programar directamente sobre un tablero, ya sea para introducir datos o programas; posteriormente se utilizaron medios magnéticos para almacenar la información. En muchas ocasiones las mejoras en el hardware propiciaban nuevos problemas en el funcionamiento de las computadoras, el siguiente ejemplo lo ilustra: Un proceso requiere leer 1600 tarjetas, el mecanismo de lectura tarda 80 segundos para hacerlo y bastan 5 segundos para procesarlas. En el mejor de los casos, durante el tiempo que se realiza la operación de entrada-salida (en este caso lectura) el procesador solo tiene trabajo durante 5 segundos, por lo que hay 75 segundos de tiempo muerto. Tercera generación (1965--1980) El aspecto que permite diferenciar con mayor claridad a las computadoras de la tercera generación es de naturaleza tecnológica: las computadoras de la tercera generación utilizan circuitos integrados en su fabricación. Además se utiliza la microprogramación para facilitar el diseño y construcción de computadoras. Para muchas personas la presentación de la computadora IBM 360 en abril de 1964 marca el inicio de esta generación. Existen otros aspectos igualmente importantes, en particular, a partir de la tercera generación los sistemas operativos de las computadoras son más robustos, aunque también son mucho más grandes que sus antecesores. En estos sistemas se integran muchos de los mecanismos elaborados para las computadoras de la segunda generación. Debido a que los costos de las computadoras todavía eran muy elevados, la mayoría de las computadoras funcionan con sistemas operativos multiusuario y multitarea. Es en esta época que surgen las primeras minicomputadoras. Estas computadoras no tenían la capacidad de procesamiento de las computadoras grandes, sin embargo eran adecuadas a las necesidades de organizaciones pequeñas y de una gran cantidad de escuelas y universidades; de esta forma los estudiantes de muchas carreras (especialmente las relacionadas al área científica) pudieron utilizar estos equipos durante sus estudios, por lo que se convirtieron en impulsores de la computación al momento de egresar de sus carreras e integrarse a sus actividades profesionales. Es en una minicomputadora que se desarrolla la primer versión del sistema operativo UNIX. La primer versión de UNIX fue desarrollada en 1969 por Ken Thompson, de los laboratorios Bell, utilizando una PDP-7 que se encontraba sin uso. Por otra parte, las compañías dedicadas a la fabricación de computadoras grandes (también conocidas como mainframes) construyen computadoras que son cada vez más potentes y veloces, algunas de ellas estaban diseñadas para resolver con rapidez y eficiencia problemas numéricos; a estas computadoras se les llamó supercomputadoras. Cuarta generación (1980--2002) En cuanto a diferencia tecnológica, las computadoras de la cuarta generación se fabrican en base a circuitos integrados de muy alta densidad (circuitos VLSI). En particular se utilizan microprocesadores en el diseño y fabricación de muchas computadoras. Los microprocesadores surgen a principios de la década que inicia en 1970, aunque en un principio se les utilizaba como parte de otro tipo de artefactos, por ejemplo en las calculadoras de bolsillo. A las computadoras que se diseñaban y construían en base a microprocesadores se les llamó microcomputadoras. Los primeros microprocesadores tenían capacidades muy limitadas: disponían de un conjunto muy pequeño de instrucciones a nivel de lenguaje de máquina, tenían muy poca precisión para representar valores numéricos y el espacio de direccionamiento para la memoria principal estaba restringido a unas pocas localidades. Debido a esas limitaciones las primeras microcomputadoras eran máquinas que se utilizaban con fines recreativos, lo que establecía un límite al precio de mercado de estas computadoras (menos de $1000.00 USD). Conforme se fabricaban mejores microprocesadores las microcomputadoras aumentaban en sus capacidades. A principios de la década que inicia en 1980 existían varias microcomputadoras destinadas al público general, cada una con un diseño propio y con su sistema operativo. En 1981 IBM anuncia su microcomputadora de uso personal, la IBM-PC. A diferencia de lo que habían sido sus diseños de mainframes, la IBM-PC se fabrica en base a componentes comerciales, lo que facilita el surgimiento de una gran cantidad de fabricantes de microcomputadoras similares a la IBM-PC. Por otra parte, existían varios sistemas operativos para esa microcomputadora, a elección del usuario; el que predominó fue MS-DOS de la compañía Microsoft. Al momento de su lanzamiento la IBM-PC competía directamente con las microcomputadoras de la compañía Apple, Atari y Radio Shack, quienes luchan por dominar el mercado. En 1983 aparecen la Apple IIe y la Lisa, ambas de la compañía Apple; en particular se considera a la Lisa como la primer microcomputadora que contaba con una interfaz gráfica para el usuario y un ratón para controlar un indicador en la pantalla del monitor, además de que utilizaba un procesador de 32 bits (Motorola 68000). Poco tiempo después (en 1984) surge la Apple MacIntosh, que también utilizaba un procesador de 32 bits (el M68000) y costaba mucho menos que la Lisa. La MacIntosh hereda las características de la interfaz gráfica y se le considera como la pionera de esta forma de interactuar con la computadora. Desde esa época se ha desarrollado una gran batalla por el control del mercado de microcomputadoras. Surgen nuevos procesadores que son más veloces y poderosos, lo que obliga a modificar los diseños para aprovechar sus nuevas capacidades: Por otra parte, los sistemas operativos y las interfaces del usuario aprovechan estas capacidades y son cada vez más complejos, lo que a su vez requiere de mejoras en el diseño de las computadoras. Es una espiral a la que no se le ve fin. El término microcomputadora ha quedado chico para estas computadoras, a las que actualmente se les conoce como computadoras personales. Actualmente es difícil imaginar una gran cantidad de actividades sin el uso de las computadoras personales, están en casi cualquier actividad. Lo que en un tiempo fue herramienta de uso exclusivo de científicos ahora es un artefacto al alcance de la mano de cualquier persona. A la par del desarrollo de las computadoras personales surgieron las estaciones de trabajo, se considera a la Apollo (1981) la primera de ellas. Eran computadoras diseñadas para ser usadas en actividades de diseño industrial, por lo que requerían de gran poder de procesamiento (para realizar simulaciones) y de interfaces gráficas amigables (los diseñadores no tenía que ser expertos en el manejo de las computadoras). Las primeras estaciones de trabajo eran prácticamente minicomputadoras especializadas en el trabajo de diseño. Con el paso del tiempo muchas estaciones de trabajo utilizan los mismos procesadores de las computadoras personales y muchas computadoras personales se utilizan como estaciones de trabajo, al grado que en ocasiones es difícil distinguir unas de las otras. Casi todas las estaciones de trabajo contaban con un monitor a color y con capacidad de graficación, un ratón y un entorno basado en la utilización de elementos gráficos, configuración común en las computadoras personales actuales. Otro aspecto importante de esta época es la utilización de las redes de computadoras para el trabajo académico. Si bien las necesidades de comunicación entre computadoras existían desde mucho tiempo antes, es en esa época en que se populariza, principalmente a nivel académico, el uso de estas redes. Las redes se utilizaban principalmente para establecer sesiones remotas (trabajar a distancia en otra computadora), transferencia de archivos y correo electrónico; la gran diferencia con la utilización actual radicaba en las interfaces utilizadas para acceder a los servicios de la red: eran poco amigables. Además, el hecho de que se contara con redes de computadoras confiables abrió el camino para áreas de investigación novedosas, por ejemplo el área de sistemas distribuidos. Las necesidades actuales de los usuarios de las computadoras han propiciado una evolución en la forma de interactuar con las computadoras, en particular se ha puesto mucho énfasis en las interfaces de trabajo, que en muchas ocasiones se encuentran sobre los servicios que ofrece el sistema operativo, ocultando los detalles del funcionamiento de la computadora y sus sistemas. Sin embargo los sistemas operativos siguen evolucionando, muestra de ello son los sistemas operativos en red (que integran los dispositivos disponibles en la red para que los usuarios no se preocupen de su ubicación física para poder emplearlos) y los sistemas operativos distribuidos (la integración de computadoras y servicios en forma transparente para el usuario); en este momento se sigue avanzando en estas direcciones para ofrecer las mejores condiciones de trabajo para los usuarios de las computadoras. ¿La quinta generación? En septiembre de 1983 la Association for Computing Machinery dedicó una sección de su revista Communications of the ACM a la quinta generación de computadoras. En esa sección Pamela McCorduck escribió: En octubre de 1981 el Ministerio de Industria y Comercio Exterior del Japón (MITI) patrocinó una conferencia para anunciar un nuevo proyecto nacional: el desarrollo de una nueva generación (la quinta) de computadoras. Las computadoras de esta generación no serán computadoras tradicionales, serán máquinas de inferencia simbólica, capaces de hacer razonamientos muy rápidos utilizando cantidades masivas de conocimientos y datos. Serán computadoras que puedan aprender, asociar, hacer inferencias, tomar decisiones y comportarse en formas que han sido consideradas exclusivas del razonamiento humano. Era un proyecto a realizarse durante diez años, al que muchas personas objetaron desde un principio. Sin embargo hay un aspecto a resaltar de este proyecto: la importancia de aprovechar (y manipular o procesar) el conocimiento; conocimiento de alta calidad y adaptado a las necesidades particulares de cada individuo. Diez años después, al finalizar el proyecto, quedaba una sensación de que no se habían alcanzado las metas planteadas. En la actualidad no hay cambios tecnológicos importantes en la fabricación de computadoras, tampoco hay (a nivel general) mecanismos novedosos en la interacción del usuario con la computadora, por lo que es difícil plantear la existencia de una nueva generación de computadoras. Sin embargo, no se puede decir que estemos estancados en lo que se apreciaba hace 20 años, a comparación de lo que existía en esa época tenemos: Computadoras de uso personal, accesibles a una gran cantidad de individuos. Cuentan con sistemas operativos sencillos de utilizar mediante interfaces gráficas. Redes de computadoras que integran a la mayoría de las computadoras que existen en el mundo. Casi todos los países del mundo, sin importar su filiación política, son parte de esta red mundial llamada Internet. Existe un sistema que engloba una gran cantidad de documentos accesibles en forma muy simple, la World Wide Web. Este sistema utiliza la infraestructura y servicios de comunicación que ofrece Internet, aunque en muchas ocasiones se les confunde. En muchos lugares se están utilizando redes de computadoras para implementar computadoras de procesamiento paralelo, posibilitando el acceso a una tecnología que solo estaba el alcance de quienes poseían grandes recursos económicos. A estos sistemas se les llama clusters.