Manual de Ingeniería Informática/Evolución

La Prehistoria

editar

La Computación, y por tanto, las Ciencias de la Computación, tienen su origen en el cálculo, es decir, en la preocupación del ser humano por encontrar maneras de realizar operaciones matemáticas de forma cada vez más rápida y más fácilmente. Pronto se vio que con ayuda de aparatos y máquinas las operaciones podían realizarse de forma más rápida y automática.

El primer ejemplo que encontramos en la historia es el ábaco, aparecido hacia el 500 AC en Oriente Próximo, que servía para agilizar las operaciones aritméticas básicas, y que se extendió a China y Japón, siendo descubierto mucho más tarde por Europa.

También es digno de señalar el conocido Mecanismo de Antikythera, recuperado en 1900, construido alrededor del año 80 a.C., en la isla griega de Rodas, ubicada en el mar Egeo. Era un artefacto de cálculo astronómico con mecanismos de precisión. El usuario, por medio de una perilla, podía accionar un simulador en miniatura del movimiento del sol, la luna y varios planetas, teniendo a la vista la fecha en que se había dado, o se daría, tal combinación. Es tanta su sofisticación que ha sido llamado la primera computadora de Occidente.

Por otra parte, los matemáticos hindúes, árabes y europeos fueron los primeros que desarrollaron técnicas de cálculo escrito. El matemático árabe Al'Khwarizmi, alrededor del año 830 DC, escribe un libro de Aritmética, traducido al latín como Algoritmi de número Indorum, donde introduce el sistema numérico indio (sólo conocido por los árabes unos 50 años antes) y los métodos para calcular con él. De esta versión latina proviene la palabra algoritmo.

La Era Mecánica

editar

A finales del siglo XVI y comienzos del XVII comienza lo que denominamos Era Mecánica, en la que se intenta que aparatos mecánicos realicen operaciones matemáticas de forma prácticamente automática. En 1610, John Napier (1550-1617), inventor de los logaritmos, desarrolló las Varillas de Napier, que servían para simplificar la multiplicación. En 1641, el matemático y filósofo francés Blaise Pascal (1623-1662), con tan sólo 19 años, construyó una máquina mecánica para realizar adiciones, la Pascalina, para ayudar a su padre. Por su parte, Gottfried Wilhelm Leibniz (1646-1716) propuso el sistema binario para realizar los cálculos, construyendo una máquina que podía multiplicar, en incluso teóricamente, realizar las cuatro operaciones aritméticas. Sin embargo, la tecnología disponible le imposibilita la realización de las operaciones con exactitud. No obstante un estudiante alemán de la Universidad de Tubingen, Wilhelm Schickard (1592-1635) ya había construido una máquina de estas características entre 1623 y 1624, de la que hace unas breves descripciones en dos cartas dirigidas a Johannes Kepler. Por desgracia, al menos una de las máquinas quedó destruida en un incendio, y el propio Schickard murió poco después, víctima de la peste bubónica.

Los trabajos de Pascal y Leibniz tuvieron su continuación en 1727, cuando Jacob Leupold propuso algunas mejoras sobre el mecanismo de Leibniz. En 1777, Charles Mahon (1753-1816), Conde de Stanhope, construyó una máquina aritmética y otra lógica, esta última llamada Demostrador de Stanhope. En 1825, el francés Charles Xavier Thomas de Colmar diseña una máquina calculadora que posteriormente consigue comercializar con éxito.

Una mención muy especial requiere el desarrollo de un telar automático por el francés Joseph Jacquard (1752-1834), en 1801. En efecto, analizando las operaciones repetitivas que requería la producción de telas, este inventor imaginó conservar la información repetitiva necesaria bajo la forma de perforaciones en tarjetas. Estas perforaciones eran detectadas mecánicamente, asegurando el desplazamiento adecuado de las guías del hilado, pudiendo una sola persona tejer complicados patrones codificados en las perforaciones de las tarjetas.

Fue Charles Babbage (1791-18171) el que diseñó una verdadera máquina procesadora de información, capaz de autocontrolar su funcionamiento. Desesperado por los errores contenidos en las tablas numéricas de la época y dándose cuenta de que la mayoría de los cálculos consistían en tediosas operaciones repetitivas, este profesor de la Universidad de Cambridge, proyecta e inicia la construcción de un nuevo tipo de calculadora. En 1821 presentó a la Royal Society una máquina capaz de resolver ecuaciones polinómicas mediante el cálculo de diferencias sucesivas entre conjuntos de números, llamada Máquina Diferencial. Obtuvo por ello la medalla de oro de la Sociedad en 1822.

Más tarde, Babbage empezó a trabajar en la Máquina Analítica, en cuya concepción colaboró directamente Ada Augusta Byron, Condesa de Lovelace, hija de Lord Byron. El objetivo perseguido era obtener una máquina calculadora de propósito general, controlada por una secuencia de instrucciones, con una unidad de proceso, una memoria central, facilidades de entrada y salida de datos, y posibilidades de control paso a paso, es decir, lo que hoy conocemos como programa. Ada Lovelace, a quien se reconoce como la primera programadora de la historia, y en honor de quien se puso el nombre de Ada al conocido lenguaje de programación, ayudó a Babbage económicamente, vendiendo todas sus joyas, y escribió artículos y programas para la referida máquina, algunos de ellos sobre juegos. Sin embargo, este proyecto tampoco pudo realizarse por razones económicas y tecnológicas.

En el 1854, George Boole publica Las leyes del pensamiento sobre las cuales son basadas las teorías matemáticas de Lógica y Probabilidad. Boole aproximó la lógica en una nueva dirección reduciéndola a una álgebra simple, incorporando lógica en las matemáticas. Comenzaba el álgebra de la lógica llamada Algebra Booleana. Su álgebra consiste en un método para resolver problemas de lógica que recurre solamente a los valores binarios 1 y 0 y a tres operadores: AND (y), OR (o) y NOT (no).

La Primera Generación (electromecánicos y electrónicos de tubos de vacío)

editar

Para tabular el censo de 1890, el gobierno de Estados Unidos estimó que se invertirían alrededor de diez años. Un poco antes, Herman Hollerith (1860-1929), había desarrollado un sistema de tarjetas perforadas eléctrico y basado en la lógica de Boole, aplicándolo a una máquina tabuladora de su invención. La máquina de Hollerith se usó para tabular el censo de aquel año, durando el proceso total no más de dos años y medio. Así, en 1896, Hollerith crea la Tabulating Machine Company con la que pretendía comercializar su máquina. La fusión de esta empresa con otras dos, dio lugar, en 1924, a la International Business Machines Corporation (IBM).

Sin embargo, en el censo de 1910, el sistema de Hollerith fue sustituido por uno desarrollado por James Powers. En 1911 James Powers constituyó la Power's Tabulating Machine Company, convirtiéndose en el principal competidor de Hollerith.

En 1900, en el Congreso Internacional de Matemáticas de París, David Hilbert (1862-1943) pronunció una conferencia de título Problemas matemáticos, en la que proponía una lista de 23 problemas que estaban sin resolver (algunos todavía lo están).

Dos de estas cuestiones fueron: ¿es la matemática completa?, es decir, ¿puede ser demostrada o refutada cualquier sentencia matemática? y ¿es la matemática consistente?, es decir, ¿es cierto que sentencias tales como 0 = 1 no pueden demostrarse por métodos válidos?. En 1931, Kurt Gödel (1906-1978) fue capaz de responder a estas dos preguntas, demostrando que cualquier sistema formal suficientemente potente es inconsistente o incompleto.

Otra de las cuestiones era: ¿son las matemáticas decidibles? es decir, ¿hay un método definido que pueda aplicarse a cualquier sentencia matemática y que nos diga si esa sentencia es cierta o no?. Esta cuestión recibió el nombre de enstcheidungsproblem.

En 1936, Alan Turing (1912-1954) contestó a esta cuestión en el artículo On Computable Numbers. Para resolver la cuestión Turing construyó un modelo formal de computador, la Máquina de Turing, y demostró que había problemas tales que una máquina no podía resolver. Al mismo tiempo en Estados Unidos contestaba a la misma cuestión Alonzo Chuch, basándose en una notación formal, que denominó cálculo lambda, para transformar todas las fórmulas matemáticas a una forma estándar. Basándose en estos resultados, entre 1936 y 1941, el ingeniero alemán Konrad Zuse (1910-1957), diseñó y construyó su serie de computadores electromecánicos binarios, desde el Z1 hasta el Z3. Sin embargo estos computadores no tuvieron mucha difusión, ni siquiera dentro de su país, ya que el gobierno nazi nunca confió en los trabajos de Zuse.

En 1938, Claude Shannon (1916- ) demostró cómo las operaciones booleanas elementales, se podían representar mediante circuitos conmutadores eléctricos, y cómo la combinación de circuitos podía representar operaciones aritméticas y lógicas complejas. Además demostró como el álgebra de Boole se podía utilizar para simplificar circuitos conmutadores. El enlace entre lógica y electrónica estaba establecido.

Al desencadenarse la Segunda Guerra Mundial, la necesidad de realizar complicados cálculos balísticos y la exigencia de descodificar los mensajes cifrados del otro bando, impulsó el desarrollo de los computadores electrónicos de propósito general. El propio Turing fue reclutado en Bletchley Park, en Inglaterra, para descifrar los mensajes que encriptaba la máquina alemana Enigma, para lo que fue necesario construir la computadora Colossus.

En la Universidad de Harvard, Howard Aiken (1900-1973) en colaboración con IBM, empezó, en 1939, la construcción del computador electromecánico Mark I, en la que trabajó como programadora Grace Murray Hopper. Pero para cuando se terminó en 1944, ya habían aparecido las primeras computadoras totalmente electrónicas, que eran mucho más rápidas.

Por otro lado, en la Universidad del Estado de Iowa, entre 1937 y 1942, John Vincent Atanasoff (1903-1995) y Clifford Berry, diseñaron y construyeron la ABC (Atanasoff-Berry Computer). Terminada en 1942, fue la primera computadora electrónica digital, aunque sin buenos resultados y nunca fue mejorada. En 1941, John W. Mauchly (1907-1980) visitó a Atanasoff y observó de cerca su impresionante maquinaria, teniendo la oportunidad de revisar su tecnología. Más tarde, Mauchly y J. Presper Eckert, Jr (1919-1995), diseñaron y construyeron, entre los años 1943 y 1946, el computador eléctrico de propósito general ENIAC. Existe una gran controversia respecto a que Mauchly copiara muchas de las ideas y conceptos del profesor Atanasoff, para construir la computadora ENIAC. En cualquier caso en las últimas fases de su diseño y construcción aparece la importante figura de John Von Neumann (1903-1957), que actúa como consultor.

Von Neumann escribió en 1946, en colaboración con Arthur W. Burks y Herman H. Goldstine, Preliminary Discussion of the Logical Design of an Electronic Computing Instrument, que contiene la idea de Máquina de Von Neumann, que es la descripción de la arquitectura que, desde 1946, se aplica a todos los computadores que se han construido.

Con estos fundamentos, Eckert y Mauchly construyen en la Universidad de Manchester, en Connecticut (EE.UU.), en 1949 el primer equipo con capacidad de almacenamiento de memoria, la EDVAC. Eckert y Mauchly forman una corporación para construir una máquina que se pueda comercializar, pero, debido a problemas financieros, se vieron obligados a vender su compañía a a Remington Rand Corp. Trabajando para esta compañía fue que se concluyó el proyecto Univac, en 1951.

También por esta época Maurice Wilkes construye la EDSAC en Cambridge (Inglaterra) y F.C. Williams construye en Manchester (Inglaterra), la Manchester Mark I.

Estas máquinas se programaban directamente en lenguaje máquina, pero a partir de mediados de los 50, se produjo un gran avance en la programación avanzada.

La Segunda Generación (los transistores y los avances en programación)

editar

Allá por 1945 la máxima limitación de las computadoras era la lenta velocidad de procesamiento de los relés electromecánicos y la pobre disipación de calor de los amplificadores basados en tubos de vacío.

En 1947, John Bardeen, Walter Brattain y William Shockley inventan el transistor, recibiendo el Premio Nobel de Física en 1956. Un transistor contiene un material semiconductor, normalmente silicio, que puede cambiar su estado eléctrico. En su estado normal el semiconductor no es conductivo, pero cuando se le aplica un determinado voltaje se convierte en conductivo y la corriente eléctrica fluye a través de éste, funcionando como un interruptor electrónico.

Los computadores construidos con transistores eran más rápidos, más pequeños y producían menos calor, dando también oportunidad a que, más tarde, se desarrollaran los microprocesadores. Algunas de las máquinas que se construyeron en esta época fueron la TRADIC, de los Laboratorios Bell (donde se inventó el transistor), en 1954, la TX-0 del laboratorio LINCOLN del MIT y las IBM 704, 709 y 7094. También aparece en esta generación el concepto de supercomputador, específicamente diseñados para el cálculo en aplicaciones científicas y mucho más potentes que los de su misma generación, como el Livermore Atomic Research Computer (LARC) y la IBM 7030.

Pero esta generación se explica también por los avances teóricos que se dan.

Así, en 1950, Alan Turing publica el artículo Computing Machinery and Intelligence en la revista Mind, en el que introducía el célebre Test de Turing. Este artículo estimuló a los pensadores sobre la filosofía e investigación en el campo de la Inteligencia Artificial. Por desgracia, Turing no fue testigo del interés que desató su artículo, porque en 1952 fue detenido por su relación homosexual con Arnold Murray y fue obligado a mantener un tratamiento con estrógenos que le hizo impotente y le produjo el crecimiento de pechos. En 1957, fue encontrado muerto en su casa al lado de una manzana mordida a la que había inyectado cianuro.

En 1951, Grace Murray Hooper (1906-1992) da la primera noción de compilador y más tarde desarrolla el COBOL. Pero fue John Backus, en 1957, el que desarrolla el primer compilador para FORTRAN. En 1958, John MacCarthy propone el LISP, un lenguaje orientado a la realización de aplicaciones en el ámbito de la Inteligencia Artificial. Casi de forma paralela, Alan Perlis, John Backus y Peter Naur desarrollan el lenguaje ALGOL.

Pero el personaje más importante en el avance del campo de los algoritmos y su análisis, es Edsger Dijkstra (1930- ), que en 1956, propuso su conocido algoritmo para la determinación de los caminos mínimos en un grafo, y más adelante, el algoritmo del árbol generador minimal. Más tarde, en 1961, N. Brujin introduce la notación O, que sería sistematizada y generalizada por D. Knuth. En 1957, aparece la Programación Dinámica de la mano de R. Bellman. En 1960, S. Golomb y L. Baumet presentan las Técnicas Backtracking para la exploración de grafos. Se publican en 1962 los primeros algoritmos del tipo Divide y Vencerás: el QuickSort de Charles Hoare y el de la multiplicación de grandes enteros de A. Karatsuba e Y. Ofman.

En 1959, Jack Kilby (1923- ) presenta el primer circuito integrado, un conjunto de transistores interconectados con resistencias, en una pequeña pastilla de silicio y metal, llamada chip. Fue a partir de este hecho que las computadoras empezaron a fabricarse de menor tamaño, más veloces y a menor costo, debido a que la cantidad de transistores colocados en un solo chip fue aumentando en forma exponencial.

Tercera Generación (cicuitos integrados y miniaturización)

editar

A partir del circuito integrado, se producen nuevas máquinas, mucho más pequeñas y rápidas que las anteriores, así aparecen las IBM 360/91, IBM 195, SOLOMON (desarrollada por la Westinghouse Corporation) y la ILLIAC IV, producida por Burroughs, el Ministerio de Defensa de los EE.UU y la Universidad de Illinois.

Seymour Cray (1925-1996) revoluciona el campo de la supercomputación con sus diseños: en 1964, el CDC 6600, que era capaz de realizar un millón de operaciones en coma flotante por segundo; en 1969, el CDC 7600, el primer procesador vectorial, diez veces más rápido que su predecesor.

En cuanto a los avances teóricos, a mediados de los 60, un profesor de Ciencias de la Computación, Niklaus Wirth, desarrolla el lenguaje PASCAL, y en Berkeley, el profesor Lotfi A. Zadeh, publica su artículo Fuzzy Sets, que revoluciona campos como la Inteligencia Artificial, la Teoría de Control o la Arquitectura de Computadores.

En 1971, Intel introduce el primer microprocesador. El potentísimo 4004 procesaba 4 bits de datos a la vez, tenía su propia unidad lógicoaritmética, su propia unidad de control y 2 chips de memoria. Este conjunto de 2.300 transistores que ejecutaba 60.000 operaciones por segundo se puso a la venta por 200 dólares. Muy pronto Intel comercializó el 8008, capaz de procesar el doble de datos que su antecesor y que inundó los aparatos de aeropuertos, restaurantes, salones recreativos, hospitales, gasolineras...

A partir de aquí nacieron las tecnologías de integración a gran escala (LSI) y de integración a muy gran escala (VLSI), con las que procesadores muy complejos podían colocarse en un pequeño chip.

Sin embargo, hasta este momento, por motivos económicos, complejidad de uso y dificultad de mantenimiento, los computadores habían sido patrimonio de universidades, organismos militares y gubernamentales, y grandes empresas.

En 1975, Popular Electronics dedicó su portada al primer microcomputador del mundo capaz de rivalizar con los modelos comerciales, el Altair 8800.

Cuarta Generación (ordenadores personales de uso doméstico)

editar

El Altair 8800, producido por una compañía llamada Micro Instrumentation and Telemetry Systems (MITS), se vendía a 397 dólares, lo que indudablemente contribuyó a su popularización. No obstante, el Altair requería elevados conocimientos de programación, tenía 256 bytes de memoria y empleaba lenguaje máquina. Dos jóvenes, William Gates y Paul Allen, ofrecerion al dueño de MITS, un software en BASIC que podía correr en el Altair. El software fue un éxito y, posteriormente Allen y Gates crearon Microsoft.

Paralelamente, Steven Wozniak y Steven Jobs, también a raíz de ver el Altair 8800 en la portada de Popular Electronics, construyen en 1976, la Apple I. Steven Jobs con una visión futurista presionó a Wozniak para tratar de vender el modelo y el 1 de abril de 1976 nació Apple Computer. En 1977, con el lanzamiento de la Apple II, el primer computador con gráficos a color y carcasa de plástico, la compañía empezó a imponerse en el mercado.

En 1981, IBM estrena una nueva máquina, la IBM Personal Computer, protagonista absoluta de una nueva estrategia: entrar en los hogares. El corazón de esta pequeña computadora, con 16 Kb de memoria (ampliable a 256), era un procesador Intel, y su sistema operativo procedía de una empresa recién nacida llamada Microsoft.

En 1984, Apple lanza el Macintosh, que disponía de interfaz gráfico para el usuario y un ratón, que se hizo muy popular por su facilidad de uso.

La Conquista del Hogar y la Revolución de Internet

editar

Quinta generación de computadoras

La quinta generación de computadoras, también conocida por sus siglas en inglés, FGCS (de Fifth Generation Computer Systems) fue un ambicioso proyecto propuesto por Japón a finales de la década de 1970. Su objetivo era el desarrollo de una nueva clase de computadoras que utilizarían técnicas y tecnologías de inteligencia artificial tanto en el plano del hardware como del software,1 usando el lenguaje PROLOG2 3 4 al nivel del lenguaje de máquina y serían capaces de resolver problemas complejos, como la traducción automática de una lengua natural a otra (del japonés al inglés, por ejemplo).

Como unidad de medida del rendimiento y prestaciones de estas computadoras se empleaba la cantidad de LIPS (Logical Inferences Per Second) capaz de realizar durante la ejecución de las distintas tareas programadas. Para su desarrollo se emplearon diferentes tipos de arquitecturas VLSI (Very Large Scale Integration).

El proyecto duró once años, pero no obtuvo los resultados esperados: las computadoras actuales siguieron así, ya que hay muchos casos en los que, o bien es imposible llevar a cabo una paralelización del mismo, o una vez llevado a cabo ésta, no se aprecia mejora alguna, o en el peor de los casos, se produce una pérdida de rendimiento. Hay que tener claro que para realizar un programa paralelo debemos, para empezar, identificar dentro del mismo partes que puedan ser ejecutadas por separado en distintos procesadores. Además, es importante señalar que un programa que se ejecuta de manera secuencial, debe recibir numerosas modificaciones para que pueda ser ejecutado de manera paralela, es decir, primero sería interesante estudiar si realmente el trabajo que esto conlleva se ve compensado con la mejora del rendimiento de la tarea después de paralelizarla. Principales eventos y finalización del proyecto 1981: se celebra la Conferencia Internacional en la que se perfilan y definen los objetivos y métodos del proyecto. 1982: el proyecto se inicia y recibe subvenciones a partes iguales aportadas por sectores de la industria y por parte del gobierno. 1985: se concluye el primer hardware desarrollado por el proyecto, conocido como Personal Sequential Inference machine (PSI) y la primera versión del sistema operativo Sequentual Inference Machine Programming Operating System (SIMPOS). SIMPOS fue programado en Kernel Language 0 (KL0), una variante concurrente de Prolog12 con extensiones para la programación orientada a objetos, el metalenguaje ESP. Poco después de las máquinas PSI, fueron desarrolladas las máquinas CHI (Co-operative High-performance Inference machine). 1986: se ultima la máquina Delta, basada en bases de datos relacionales. 1987: se construye un primer prototipo del hardware llamado Parallel Inference Machine (PIM) usando varias máquinas PSI conectadas en red. El proyecto recibe subvenciones para cinco años más. Se desarrolla una nueva versión del lenguaje propuesto, Kernel Language 1 (KL1) muy similar al "Flat GDC" (Flat Guarded Definite Clauses), influenciada por desarrollos posteriores del Prolog y orientada a la computación paralela. El sistema operativo SIMPOS es re-escrito en KL1 y rebautizado como Parallel Inference Machine Operating System, o PIMOS. 1991: concluyen los trabajos en torno a las máquinas PIM. 1992: el proyecto es prorrogado un año más a partir del plan original, que concluía este año. 1993: finaliza oficialmente el proyecto de la quinta generación de computadoras, si bien para dar a conocer los resultados se inicia un nuevo proyecto de dos años de duración prevista, llamado FGCS Folow-on Project.13 El código fuente del sistema operativo PIMOS es lanzado bajo licencia de dominio público y el KL1 es portado a sistemas UNIX, dando como resultado el KLIC (KL1 to C compiler). 1995: finalizan todas las iniciativas institucionales vinculadas con el proyecto.

Fuentes

editar