domingo, 19 de enero de 2014

Indice Temático

Indice Temático


Prólogo

1. Antecedentes históricos

2. La arquitectura fundamental

3. La lógica de tres estados

4. Construcción de una computadora con chips

5. Los circuitos periféricos

6. El ensamblador EDTASM para el μP 6809 I

7. El ensamblador EDTASM para el μP 6809 II

8. Ensamble de código para el μP 8086 I

9. El lenguaje BASIC

10. Algoritmos computacionales

11. La programación visual

12. El entorno Visual Basic I

13. El entorno Visual Basic II

14. El entorno Visual Basic III

15. El entorno Visual Basic IV

16. El entorno Visual Basic V

17. El entorno Visual Basic VI

18. El entorno Visual Basic VII

19. El entorno Visual Basic VIII

20. El lenguaje C I

21. El lenguaje C II

22. El lenguaje C III

23. El lenguaje C IV

24. El lenguaje C V

25. El lenguaje C VI

26. El lenguaje C VII

27. El lenguaje C VIII

28. El lenguaje C IX

29. El lenguaje C X

30. El lenguaje C XI

31. Resumen del lenguaje C

32. La programación Windows I

33. La programación Windows II

34. La programación Windows III

35. Programación para Internet con JavaScript

36. Funciones y objetos en JavaScript

37. Formularios en JavaScript

38Ventanas, marcos y arreglos en JavaScript

39. La interfaz cliente-servidor

40. Programación Web con CSS I

41. Programación Web con CSS II

42. Programación Web con CSS III

43. Programación Web con CSS IV

44. El lenguaje C++ I

45. El lenguaje C++ II

46. La máquina Turing I

47. La máquina Turing II

48. La máquina Turing III

49. El sistema operativo I

50. El sistema operativo II

51. RISC y CISC: Dos filosofías de diseño

Apéndices:

Anexo 1: El código ASCII

Anexo 2: La norma ISO-Latin-1

Anexo 3: Conversiones entre bases numéricas

Anexo 4: Conjunto básico de instrucciones Intel

Anexo 5: Los coprocesadores matemáticos

Anexo 6: Conjunto de instrucciones del μP 6809

Anexo 7: Instrucciones del procesador 1802

Anexo 8: Tabla inversa de códigos op 1802

Anexo 9: HTML, XML, XHTML

Anexo 10: Las propiedades CSS

Bibliografía

Prologo

El diseño de computadoras digitales ha sido referido en varias ocasiones por algunos más como un arte que como una ciencia. Otros lo han descrito simplemente como una colección de buenas ideas, lo cual es cierto hasta cierto punto. Por un lado, está basado firmemente en la teoría y el diseño de los circuitos lógicos, lo cual en su nivel más esencial requiere de conocimientos de circuitos electrónicos. Por otro lado, varias cosas que pertenecen al estudio de esta materia han sido más el resultado del descubrimiento y la experiencia que de una derivación obtenida teóricamente de un análisis matemático riguroso.

Una peculiaridad atractiva del diseño de computadoras digitales es que no se requieren conocimientos de matemáticas superiores; esto es, no se requieren conocimientos previos de materias tales como trigonometría, geometría analítica o cálculo infinitesimal. Este tipo de conocimientos se requiere cuando se van a programar computadoras con fines de investigación tecnológica y científica, pero en tal caso estamos hablando de la aplicación de las computadoras digitales para la resolución de problemas de carácter numérico y no de la arquitectura y el funcionamiento interno de las computadoras en sí, algo que increíblemente para muchos programadores permanece como un misterio. En principio, cualquier párvulo que haya terminado su educación primaria puede empezar a adquirir conocimientos propios acerca del diseño de las computadoras digitales, lo importante es la capacidad para poder pensar lógicamente. Con el enfoque actual utilizado en la construcción de sistemas que se enfoca más bien a la interconexión de “cajas negras” eléctricamente compatibles entre sí, seleccionando circuitos integrados según se requiera y ocultando a la vez dentro de las cajas negras los detalles técnicos de la cuestión electrónica, ni siquiera es necesario tener conocimientos del álgebra tradicional, aunque eso sí, se vuelve prioritario adquirir conocimientos así sean elementales del álgebra Boleana, el álgebra de los circuitos lógicos.

Tómese en cuenta que, al igual que cualquier catedral que por majestuosa que sea es construída a fin de cuentas con miles de ladrillos idénticos entre sí, cualquier computadora digital, sin importar su complejidad, se puede construír usando únicamente las tres funciones lógicas básicas, la función NOT, la función OR y la función AND. Con estas tres funciones lógicas básicas podemos construír compuertas, sumadores, substractores, flip-flops RS, flip-flops JK, contadores binarios, registros de desplazamiento (corrimiento), registros de memoria, memorias RAM, etc. Y una vez que tenemos esos bloques más sofisticados a nuestra disposición, los podemos interconectar entre sí para poder construír máquinas como la máquina IBM que fue capaz de derrotar al campeón mundial de ajedrez.

Este trabajo presupone que el lector ha leído ya una obra como el libro Fundamentos de Lógica Digital de este mismo autor o una obra similar, y está familiarizado con las tres funciones lógicas básicas (AND, OR, NOT), y la construcción de flip-flops R-S, flip-flops D, flip-flops J-K, sumadores aritméticos, etc. a partir de las tres funciones lógicas básicas, y que tiene además al menos algunas nociones básicas sobre electricidad (para poder entender las cuestiones relacionadas con el hardware), lo suficiente como para poder identificar en un diagrama esquemático componentes tales como resistencias, capacitores y transistores.

La obra pone énfasis en la arquitectura y la programación de los microprocesadores de 8 bits de los años setenta en vez de los microprocesadores más modernos como los de 32 bits e inclusive los de 64 bits. La pregunta obvia es: ¿por qué, si hay procesadores hoy mucho más potentes que los que había hace cuatro décadas, nos tenemos que remontar al estudio de componentes que ya ni siquiera se pueden obtener hoy en el mercado al estar descontinuados? La respuesta es: por fines didácticos y pedagógicos. Para establecer una analogía, cualquiera que quiera ser piloto aviador tendrá un aprendizaje mucho más suave y menos complicado si empieza con una avioneta sencilla que si empieza con un tablero de control computarizado propio de los aviones comerciales repleto de foquitos y medidores de todo tipo. El aprendizaje de las rutinas de vuelo usando para ello una avioneta sencilla le permite al estudiante enfocarse en los puntos esenciales de las técnicas de vuelo y le impide distraerse o inclusive confundirse trabajando con algo mucho más complicado. Del mismo modo, para el estudio del funcionamiento de los microprocesadores queremos tomar como punto de partida lo más sencillo que pueda haber. Lo más sencillo que pueda haber se remonta precisamente a finales de la década de los sesentas cuando estaban por aparecer los primeros microprocesadores. Antes de éste período crítico en el mundo de la computación, los microprocesadores no existían, ni siquiera en concepto. Las computadoras eran máquinas excesivamente caras y de difícil mantenimiento, disponibles únicamente en organizaciones gubernamentales con amplios presupuestos o en instituciones educativas con mucho dinero a su disposición, y ello sobre la base de tiempo compartido; nadie podía tener una computadora para su uso exclusivo y personal, el tiempo disponible de una máquina tenía que ser compartido limitando en muchas ocasiones la extensión de los programas que se podían entregarle al “despachador”. Nadie en su sano juicio habría propuesto el uso de una computadora para cosas individuales tales como un procesador de palabras o para retoque de imágenes fotográficas.

Así pues, es a finales de la década de los sesentas y a principios de la década de los setentas cuando empiezan a “saltar las chispas”. Es justo en este período crítico en la historia de la humanidad cuando, tras la invención del circuito integrado en 1958 por Jack Kilby trabajando para la empresa Texas Instruments, se llega a lo que en física nuclear se denomina como la “masa crítica”, la mínima cantidad de materiales fisionables (uranio, plutonio) requerida para sostener por sí sola una reacción en cadena o detonar una bomba atómica. Es en esta etapa crucial cuando hacen su aparición los microprocesadores 8008, 8080 y 8088 de Intel, el Z80 de Zilog, el 6800 de Motorola y el COSMAC 1802 de RCA (en ese entonces aún no existía la empresa American Micro Devices O AMD que con el tiempo sería la principal competidora de la empresa Intel). El punto de arranque ocurre precisamente con los microprocesadores de 8 bits. Tiempo después vendrían los microprocesadores más complejos de 16 bits, y eventualmente llegarían los microprocesadores de 32 bits (obsérvese que cada generación representa un doblaje en la capadidad del procesador). Son precisamente los microprocesadores de 8 bits los que por su sencillez relativa nos pueden introducir al mundo de las computadoras digitales. Puesto que las ideas básicas contenidas en la construcción de los microprocesadores de 8 bits terminaron siendo incorporadas en los microprocesadores de 16 bits en adelante, cuando se entiende el funcionamiento de los microprocesadores de 8 bits se está en buenas condiciones para entender el funcionamiento de los microprocesadores más complejos de hoy en día.

Precisamente porque nos basaremos en microprocesadores de 8 bits así como en otros circuitos de apoyo para tales microprocesadores, al hablar de ellos lo haremos muchas veces en tiempo presente, como si todavía se pudieran obtener en el mercado, y no en tiempo pasado. Del mismo modo, al hablar de los lenguajes de programación usados para obtener una comunicación vía software con los microprocesadores de aquél entonces haciéndolos llevar algo a cabo, específicamente los lenguajes ensambladores y compiladores, también lo haremos en tiempo presente, aunque estos recursos de programación hayanb sido superados ampliamente por otros recursos de programación más avanzados. Se repite que todo esto tiene un objetivo pedagógico, pero se le garantiza de antemano al lector que no perderá su tiempo ya que los conocimientos adquiridos son plenamente incorporados en lo que se tiene hoy en día, ninguna idea es desaprovechada, ningún avance ni en el software ni en el hardware ha sido en vano conforme todo ha ido evolucionando.

En el libro clásico The Elements of Programming Style de Brian W. Kernighan y P. J. Plauger se asienta que el arte de la programación de computadoras no puede ser enseñado predicando generalidades, es necesario presentar ejemplos de programas que utilicen código en algún lenguaje tal y como el que se puede encontrar en la vida cotidiana. Es por esta razón que se ha recurrido como ejemplo al conjunto de instrucciones del microprocesador Motorola 6809 y se ha creado la entrada titulada “El ensamblador EDTASM para el μP 6809” con la finalidad de que el lector pueda darse una idea sobre cómo trabaja un ensamblador que viene incluído dentro de lo que se conoce como un entorno integrado de desarrollo o IDE (del inglés Integrated Development Environment) que cuenta con un editor de texto, un debugger (localizador de errores) y tal vez otras herramientas adicionales. El paquete EDTASM incluía además del ensamblador y el editor de texto la herramienta ZBUG usada para el diagnóstico y detección de errores. Asimismo, se ha recurrido al lenguaje C, el lenguaje favorito de los programadores de sistemas, para ilustrar la manera en la cual se puede tomar control directo de los recursos de una computadora.

Y si hay una necesidad de recurrir a ejemplos específicos para poder aprender algunos de los detalles finos del arte de la programación, lo mismo ocurre con los circuitos electrónicos, con el hardware. Aunque el diseño de computadoras digitales está basado firmemente en algunas ideas y conceptos que podríamos considerar universales, eventualmente se llega a un punto en el cual es necesario considerar ejemplos aplicados de la teoría para poder, en dado caso, poner “manos a la obra”. Es por ello que se han creado entradas como la titulada “Construcción de una computadora con chips” y la titulada “Los circuitos periféricos” que dan pormenores sobre cómo es posible construír, usando componentes electrónicos que se pueden adquirir en el mercado de componentes especializados, una computadora funcional.

Esta obra puede ser utilizada como un suplemento a los libros de texto publicados hoy en día sobre el diseño de computadoras digitales. Inclusive, conforme la obra vaya creciendo, puede ser usada como libro de texto para un curso formal en el diseño de computadoras digitales. Podrá ser de utilidad para estudiantes universitarios en las ramas de la ciencia de las computadoras, así como la ingeniería eléctrica y la ingeniería electrónica. Puede ser usada también por técnicos e ingenieros en el campo que desean ponerse al corriente sobre esta materia.

El mejor aprovechamiento de esta obra presupone una familiaridad previa con la teoría de los circuitos lógicos. Dentro de la misma se intercalarán problemas para poner a pensar un poco al lector, dándole desde luego la solución a los problemas propuestos. Se han dejado fuera los tratamientos matemáticos extensos aunque no se han dejado fuera tópicos de enorme interés teórico con amplio impacto para lo que eventualmente se puede hacer con una computadora digital (por esta misma razón se ha incluído material para tratar la máquina Turing). Por otro lado, en virtud de los avances explosivos de tecnologías para fabricación de circuitos integrados (tales como TTL, DTL, ECL, CTL, Schottky TTL, CMOS, ECL, PMOS, I2L, SOS, etc.), el tratamiento detallado de estas tecnologías se ha dejado fuera de esta obra, dejándole los detalles técnicos sobre estas familias a aquellos dedicados a la fabricación de circuitos integrados, y adoptándose aquí el concepto de las “cajas negras”, lo cual nos deja en mayor libertad de efectuar un enfoque basado en la ingeniería de sistemas que es vital cuando se utilizan circuitos integrados de alta densidad en los diseños de computadoras digitales.

Todos los símbolos empleados en esta obra están en concordancia con la especificación técnica “American Standard Graphics Symbols for Logic Diagrams ASA Y32.14-1962” (conocidas también como el estándard militar norteamericano MIL-STD-806B) que se han convertido en el estándard de la industria alrededor del mundo al haber tomado los Estados Unidos la delantera en la creación y fabricación de los circuitos integrados de alta densidad que allanaron el camino para la fabricación masiva de los miles de productos basados en el uso de un microprocesador. Esta misma delantera tecnológica norteamericana que se dió en los años sesenta produjo una cantidad enorme de literatura técnica que hoy es considerada convencional, la cual introdujo a su vez una plétora de acrónimos y tecnicismos que son reconocidos en cualquier parte del mundo y que se han convertido en la lingua franca de la tecnología computacional moderna. Quizá las palabras más conocidas sean hardware y software. La palabra “hardware” es una palabra inglesa que mucho antes del advenimiento de la era electrónica se utilizaba en las ferreterías para designar de modo genérico lo que se vendía en dichas tiendas, artículos tales como clavos, martillos, pinzas, tubería de cobre, fusibles para tomas eléctricas caseras, etc. Esta misma palabra fue adoptada para designar todo lo que tiene que ver con los materiales y las partes requeridas para la construcción de una computadora digital, tales como tubos electrónicos, resistencias, capacitores, transistores, circuitos integrados, soldadura, etc., distinguiéndola de la palabra “software” cambiando el prefijo “hard” (que significa duro) por el prefijo “soft” (que significa suave) para hacer referencia no a los “fierros” requeridos para construír una computadora sino a los programas elaborados en papel y lápiz o en editores de texto que son ejecutados en una computadora. Hasta la fecha, no hay una traducción al castellano que con una sola palabra simbolice lo que se entiende por “hardware” y lo que se entiende por “software”, y aunque la hubiera esto actuaría como una barrera de lenguaje para todo aquél que se rehuse a acostumbrarse al uso cotidiano de las palabras de “hardware” (pronunciada en castellano como “jardwer”) y “software” (pronunciada en castellano como “saftwer”). Aquí las usaremos sin mayores preámbulos. Hay otras palabras como “chip” usada para hacer referencia a un circuito integrado cualquiera, que también es de uso generalizado en la literatura técnica. Como no es posible por estas razones intentar traducir absolutamente todo al castellano, al igual que como ocurre con la palabra “láser” usaremos en esta obra la misma terminología inglesa, pero dando al mismo tiempo en donde ello sea posible una traducción que represente el mismo concepto, como en el caso de las palabras “set” que se puede traducir como “ajuste” y “reset” que se puede traducir como “reajuste” para referirse al estado en el que será puesto desde un flip-flop hasta todo un sistema. Lo mismo se puede decir de ciertas palabras en inglés usadas en la programación de las computadoras, palabras tales como do (hacer), while (mientras que) e if (si) que son palabras clave reservadas en varios lenguajes de programación, que por su uso casi universal en cientos de miles de programas escritos que han sido objeto de muchas refinaciones con el paso de los años no resulta conveniente traducir al castellano, ya que además de que no hay lenguajes de alto nivel que usen palabras clave reservadas en castellano, serían ilegibles para otros programadores en otras partes del mundo. De este modo, tanto para el hardware como para el software, es necesario retener tecnicismos en inglés que serán encontrados tarde o temprano (más temprano que tarde) por los estudiosos de la ciencia de las computadoras.

Existe otra razón para darle preferencia a los tecnicismos en inglés sobre la traducción que se le pueda dar a estos en castellano, independientemente de la universalidad de muchos acrónimos y abreviaturas de amplio uso, y ello tiene que ver con la cantidad de letras usadas para representar algo en inglés y su equivalente en castellano. Tómese por ejemplo la palabra “switch” (pronunciada en castellano como “suitch”), usualmente traducida como “interruptor” o como “conmutador”. En inglés, el concepto requiere de seis letras para su representación, mientras que en castellano el mismo concepto requiere de once o diez letras. Tómese por ejemplo las palabras “on” (pronunciada en castellano como “an”) y “off” (pronunciada en castellano como “af”), la primera requiriendo de dos letras y la segunda de tres. Sus traducciones al castellano, “encendido” y “apagado”, requieren respectivamente de nueve y siete letras. Y la palabra “flag” que requiere de cuatro letras consume en su traducción “bandera” al castellano siete letras. Estos no son ejemplos aislados, por regla general la traducción de un texto del inglés al castellano consume por lo menos un 20 por ciento de espacio adicional. Desafortunadamente, la impresión de una línea de texto en un renglón en un monitor de computadora no cuenta con un espacio ilimitado, solo se puede imprimir una cantidad máxima de letras y espacios en blanco antes de que se tenga que dar el salto al siguiente renglón. Y esto, al estar escribiendo programas en algún lenguaje de alto nivel para ser ejecutados en una computadora, agota rápidamente el espacio disponible que tendríamos para meter en cada línea algún comentario. En programas cuyas instrucciones a primera vista no tienen un propósito claro, la inserción de comentarios (los cuales son ignorados por la computadora al llevarse a cabo la conversión del programa a lenguaje de máquina) en cada línea de texto suele resultar no solo deseable sino inclusive una necesidad para que los programas puedan ser portátiles de una computadora a otra distinta. Y no hay cosa más desagradable que los comentarios que ocupan más de un renglón por falta de espacio, lo cual puede reducir la legibilidad del programa. La única forma de enfrentar esto es limitando lo que escribimos a palabras de extensión corta, y esto se logra más fácilmente en inglés que en castellano. Por otra parte, si quisiéramos diseñar un lenguaje de alto nivel usando palabras clave reservadas tales como HACER (en lugar de la palabra DO usada, por ejemplo, en FORTRAN) o MIENTRASQUE (en lugar de la palabra WHILE), escribir programas se puede convertir en algo más engorroso de lo que ya es. Ciertamente, no se está proponiendo que todos los tecnicismos en inglés, acrónimos y abreviaturas, sean incorporados al diccionario de la Real Academia de la Lengua Española como parte del lenguaje. Pero todos aquellos que están involucrados en cualquier cosa que tenga que ver con la ciencia de las computadoras deberán de resignarse a incorporar tal terminología a su propio diccionario. Y de cualquier manera, si insistimos en traducirlo todo al castellano, incluídas las convenciones utilizadas en esta ciencia, para rediseñarlo todo terminológicamente desde el principio, lo que hagamos será legible únicamente para los técnicos y profesionistas del mundo de habla hispana, y un ruso o un alemán tendrán una dura tarea en tratar de comprender lo que hayamos elaborado. Recurrir a lo que ya es universal es una cuestión de practicalidad que nos permite comunicarnos así como entender lo que está fluyendo alrededor del mundo en lo que tenga que ver con el diseño y la construcción de computadoras digitales.

Las dificultades en lograr que el Castellano siga siendo un vehículo universal de comunicación en lo que se refiere a la adaptación de la terminología técnica que se está generando principalmente en el idioma inglés en lo que toca a las ciencias de la computación están bien resumidas en la siguiente “Nota para el usuario” puesta al principio del Manual del Usuario de Microsoft Windows para lo que Microsoft designó como el sistema operativo Windows 3.1:

Al terminar el siglo XX habrá en el mundo cerca de 500 millones de personas que tendrán el español (o castellano) como lengua materna. Esta expansión se verá, sin embargo, envuelta en numerosas dificultades y conflictos idiomáticos. Algunos de los peligros que acosan al español son: el influjo del inglés, el mal uso que del mismo hacen los medios de comunicación y, quizas más importante y relacionado con el primero, los vacíos existentes en el vocabulario técnico.

El campo de la informática o computación es un motor continuo de creación de nueva terminología proveniente, casi en su totalidad, del inglés. A esto se suma otro problema: la existencia de inevitables peculiaridades y variedades lingüísticas que caracterizan a los diversos países hispano-parlantes. Si bien es verdad que las diferencias son mínimas y además se circunscriben en su mayor parte al vocabulario (que es la parte que menos altera una lengua), también es verdad que muchas “diferencias” pueden crear en el usuario la sensación de que está leyendo un manual “hecho para otro país” y sentirlo como ajeno.

En Microsoft somos conscientes de todos estos problemas, por lo que a la hora de “adaptar” (y no solo traducir) un programa al castellano, tratamos de aunar la lengua tanto como sea posible, buscando un español que pueda ser entendido, por ejemplo, lo mismo en Venezuela o Argentina que en México o España. Qué duda cabe que la búsqueda de una “norma común” conlleva, a menudo, el rechazo de numerosos usuarios que encuentran la terminología ajena y hasta jocosa, y que preferirían ver recogidas las peculiaridades lingüísticas de su propio país en lugar de una traducción más general.

Así, por ejemplo, para los usuarios de España el empleo del término computadora en lugar de ordenador resulta chocante e incluso ajeno, aunque es entendido por todos; sin embargo, el galicismo ordenador (Fr. ordinateur) queda bien lejos de los países latinoamericanos como para haber podido asentarse en ellos, habiéndolo hecho en su lugar el anglicismo computadora (Ing. computer). Del mismo modo, un anglicismo como reporte (Ing. report) tan común en hispanoamérica, tiene su equivalente castellano informe también comprendido en toda América Latina.

Se trataría pues de elegir el término que, aunque un poco ajeno o extraño, pueda ser comprendido por todos los usuarios sin importar de qué país se trate. Se recogen a continuación algunos términos conflictivos:

Inglés España América Latina
Backup Copia de seguridad Copia de respaldo
BBS Boletín Electrónico Tablero de mensajes
Environment Entorno Ambiente
File Fichero Archivo
Mouse Ratón Mouse
Press Pulsar Presionar/Oprimir
Plotter Trazador gráfico (plóter)   Graficador
Word Processing   Procesador de textos Procesador de palabras 

Aunque a primera vista pudiera parecer, viendo la tabla, que existen dos normas claras (España opuesta al resto de Latinoamérica), esto no es totalmente cierto. Si bien es verdad que, tanto por la proximidad geográfica como por el influjo más acusado del inglés sobre determinados países hispanoamericanos, una gran cantidad de términos se han hecho comunes en estos países, también es cierto que no existe una norma común latinoamericana. Así, un usuario venezolano puede sentir una palabra mexicana como más cercana que su correspondiente española, pero también puede suceder al revés con otro término que sea propio y restringido a México. Otros países como Chile o Argentina, más alejados geográficamente del influjo del inglés, pueden identificarse más con la terminología que se emplea en España.

Lo mismo sucede con los ejemplos que aparecen en los manuales. Los productos en español van destinados a todos los países hispanoparlantes y por ello nos tenemos que hacer eco de las variedades y peculiaridades existentes a la hora de elegir los nombres de localidades, personas, direcciones, etc.

Un problema concreto, que afecta principalmente a los usuarios Mexicanos, es el de los separadores decimal y de miles. En México se sigue la norma de E.E.U.U. de separar los decimales con punto y los millares con una coma, esta norma es minoritaria en América Latina y no se aplica en España. En este caso, la elección es clara a favor de la última y, aunque el programa siempre deja al usuario elegir la configuración deseada, en los ejemplos tenemos que tomar partido por una opción, por lo que los usuarios mexicanos deberán tener esto en cuenta y cambiar adecuadamente los puntos por comas y viceversa.

Otro problema que se plantea es el de los usuarios habituados a trabajar con las versiones inglesas. A menudo estos usuarios encuentran la traducción de los comandos, menús, etc. inadecuada o confusa respecto a su correspondiente inglesa. Este es un tipo de usuario que no está acostumbrado a trabajar con programas en español ni a utilizar terminología traducida. La importancia de la traducción de los productos va mucho más allá del simple entendimiento de los mismos por parte del usuario; demuestra además que cualquier lengua (y en nuestro caso, el español) puede ser una lengua técnica si se desarrolla suficientemente y ayuda a crear este vocabulario científico-técnico tan necesario para el futuro.

Hagamos entre todos del español una lengua universal, tratando de aunar esfuerzos con el objetivo de evitar, dentro de lo posible, por una parte ese vacío en el vocabulario técnico y por otra parte el surgimiento y adaptación al español. Somos 300 millones de hablantes que compartimos la misma lengua y todos tenemos que sentirnos orgullosos y responsables de ella.

Es precisamente en virtud de las idiosincracias idiomáticas propias de varias regiones así como de la inexistencia de traducciones adecuadas o una plétora de tecnicismos por lo cual en esta obra el lector frecuentemente encontrará la palabra castellana elegida como adecuada junto con el tecnicismo inglés puesto entre paréntesis (o viceversa) para que el lector tenga una idea más precisa sobre el sentido o significado preciso que se le debe dar a la palabra castellana (lo que los lingüistas llaman, la semántica de los términos y las palabras).

Esta obra es la continuación natural de una obra previa, Fundamentos de Lógica Digital, elaborada por este mismo autor y puesta a disposición del público en general en forma gratuita por cortesía de Blogger, la cual es a su vez una subsidaria de Google. Al haberse acumulado cerca de un millón de visitas (de acuerdo con Google Sitemaps) a la obra Fundamentos de Lógica Digital en febrero de 2014, resulta evidente que hay interés e inclusive tal vez una necesidad de que este tipo de materiales técnicos sea puesto a la disposición de los internautas en el mundo de habla hispana, sobre todo tomando en cuenta la escasez de obras impresas en castellano que cubran este tipo de tópicos, esto agravado por los precios elevados de aquellas que se puedan encontrar. La obra que aquí se presenta continúa con el mismo estilo didáctico que el que ha sido empleado en otras obras del mismo autor publicadas también en Internet a través de Blogger, tales como La Mecánica Cuántica y La Teoría de la Relatividad., y por respeto a los lectores autodidactas no se han incluído problemas y ejercicios a los cuales no se les proporcione una solución completa o al menos la respuesta que se espera que obtengan.

La secuencia de tópicos se lleva a cabo de una manera progresiva, yendo desde lo más sencillo hacia lo más complejo, como lo requiere la buena didáctica. Empezando con una revisión de los antecedentes históricos, se repasa la arquitectura fundamental en la que están basadas todas las computadoras digitales programables construídas en la actualidad, cubriéndose tras esto el tema de la lógica de tres estados tan indispensable para la utilización de buses bi-direccionales comunes. Con esto como base, se procede al análisis sobre cómo se puede construír una computadora elemental usando chips (circuitos integrados) al mismo tiempo que se introduce al lector a la programación en lenguaje de máquina. Tras esto, al ser obvias las desventajas de tratar de llevar a cabo la elaboración de programas sofisticados recurriendo directamente a la programación en el lenguaje de máquina, el lector es introducido a los programas ensambladores, y tras ello a los programas de alto nivel empezando por el lenguaje BASIC. El siguiente paso consiste en introducir al lector a un tema que le puede ser de utilidad: la programación para Internet usando el lenguaje JavaScript. El propósito de esto es que, si bien no siempre resulta fácil obtener un programa ensamblador o programa compilador que pueda convertir un código fuente a un código binario que pueda ser interpretado en lenguaje de máquina para algún procesador en particular, la amplia disponibilidad de navegadores (browsers) automáticamente pone en manos de cualquiera que posea una computadora personal el equivalente de un compilador capaz de tomar código fuente escrito en lenguaje JavaScript que el usuario elabora en algún procesador de texto o bloc de notas, y el cual inserta en un código fuente HTML (el código básico que todos los navegadores reciben a través de Internet) que puede ser interpretado o compilado de inmediato por la mayoría de los navegadores. En pocas palabras, el dueño de cualquier computadora ya tiene en sus manos en estos momentos los recursos necesarios para empezar a aprender a programar, y el lenguaje JavaScript le permite experimentar y “jugar” con saltos incondicionales, saltos condicionales, bucles, arreglos, etcétera, pudiendo aprender a programar en su propia casa siendo la misma computadora su mejor maestro. Una vez que el lector está familiarizado con lo que es el lenguaje de programación JavaScript, se le introduce a los elementos de las Hojas de Estilos en Cascada CSS con lo cual puede empezar a crear documentos para la Web dándoles un aspecto profesional. De hecho, cualquiera que esté interesado en convertirse en un programador Web o webmaster puede empezar con los fundamentos que aquí se presentan. No se descuidan, desde luego, los aspectos teóricos de las ciencias de la computación, y por ello el lector encontrará aquí temas como la máquina de Turing.

El propósito fundamental de esta obra es enseñar, transmitir conocimientos, y no presumir sapiencia. Es por ello que el lector encontrará una abundancia de ejemplos e ilustraciones parecidas a las que podría poner un maestro en el pizarrón de un salón de clases, en aparente exceso al mínimo que es común encontrar en los libros de texto académicos en muchos de los cuales la labor de los editores parece ser el estar recortando materiales de la obra original hasta dejar únicamente aquello considerado absolutamente indispensable y cuyo recorte posterior haría la obra no solo incomprensible sino incluso inútil. Aquellos que estén en desacuerdo con este aparente abandono en la formalidad de las exposiciones se les remitirá a varias de las obras citadas en la bibliografía así como los trabajos reproducidos en publicaciones periódicas profesionales tales como las transacciones de la IEEE Computer Society o la Association for Computing Machinery.

En virtud de que esta obra presiona los recursos tipográficos de los navegadores (browsers) de Internet hasta su máxima capacidad (como resultará obvio por la variedad de simbología matemática que se utiliza aquí), hay la posibilidad de que en la reproducción de texto aquellos errores que parecen ser errores tipográficos en realidad no lo sean en virtud del posible fallo del navegador para poder interpretar correctamente el código fuente HTML de la página Blogger que está siendo consultada. Un ejemplo de esto podría ser la reproducción dentro del texto principal de una expresión como la siguiente:


En la forma en la que se acaba de dar esta fórmula, como un archivo de imagen PNG, no hay posibilidad alguna de que la imagen pueda ser truncada poniendo parte de la expresión en una línea y el resto de la expresión en la línea siguiente de texto. La mayoría de los navegadores siempre se adaptará para reproducir un archivo de imagen sin subdividirlo. Inclusive, si la fórmula se dá por separado en texto como texto ordinario centrado y si la fórmula no es muy larga (ocupando dos o más líneas) en una manera como se muestra a continuación:

3x - 4z-7 + 25

la fórmula también será reproducida fielmente en la mayoría de los navegadores. El problema se suscita cuando se mete alguna expresión como ésta siendo parte del texto ordinario, algo como esto que se está poniendo aquí a continuación: 8x - 6y. Si la expresión algebraica no cabe en una línea, lo más probable es que el primer término de la fórmula (8x) sea puesto al final de una línea, posiblemente junto con el signo negativo (-) si es que hay espacio para ello al final de la línea, y que el otro término (6y) sea puesto al principio de la siguiente línea de texto, posiblemente junto con el signo negativo, habido el hecho de que los espacios en blanco entre los caracteres son utilizados como guía para subdividir y separar porciones de texto consideradas como diferentes “palabras”. Aunque se lleve a cabo una truncación así, una fórmula como ésta sigue siendo entendible. Sin embargo, en el caso de una fórmula como la que se dió arriba en texto centrado, aunque todos los caracteres tipográficos del segundo término están juntos (el número 4 con su signo negativo, la variable z y el exponente 7 con su signo negativo), si el signo menos que antecede al exponente 7 es interpretado no como un signo menos aritmético sino como un guión tipográfico, entonces dependiendo del monitor y de la resolución de la imagen (lo cual es usado por la computadora para subdividir el texto) es muy probable que si el término:

4z-7

se encuentra cerca del final de una línea de texto, al final de la línea se pondrá 4z y al inicio de la siguiente línea se pondrá el exponente negativo 7 pero en tipografía de super-índice, lo cual vuelve confusa la lectura correcta de la expresión. Una forma en la cual se podría evitar esto sería la inclusión de alguna función que le indique al navegador que no es posible subdividir este tipo de caracteres matemáticos. Desafortunadamente, al momento de elaborar esta obra, no había recurso alguno para obligar a la mayoría de los navegadores a hacer esto (esta es una de las razones por las cuales se ha hecho uso extensivo de imágenes PNG para la reproducción de fórmulas). Al momento de estar esta obra en su etapa avanzada (2012), Blogger todavía no había incorporado la capacidad para elaborar páginas capaces de reproducir fórmulas echando mano de recursos como MathML o como MahtJax. Afortunadamente, para casos como estos, el usuario siempre puede ampliar o reducir horizontalmente el tamaño de la página, con lo cual los caracteres de texto que están al final de una línea pueden ser forzados a pasar a formar parte de la siguiente línea (o viceversa). Y en el caso de navegadores como el Mozilla Firefox, la función de “Vista” (View) permite ampliar o reducir el tamaño de texto (con la función “Zoom”), lo cual puede reacomodar el texto matemático de modo tal que sea legible (si algún lector encuentra otro remedio para esta deficiencia inherente en los navegadores que les impide distinguir lo que es texto ordinario de lo que es texto matemático, agradecería mucho que me lo hicieran saber). Desafortunadamente, la interpretación correcta de la tipografía depende no sólo del navegador que está siendo utilizado, también puede depender de la versión del navegador que está siendo utilizado e incluso del sistema operativo que está corriendo en la computadora. Para la elaboración de este trabajo se utilizaron tanto el navegador Chrome de Google como el navegador Mozilla Firefox, bajo un sistema operativo Windows 7. Si hay tipografía de carácter dudoso en la reproducción de estos materiales, sobre todo en lo que respecta a la simbología matemática, vale la pena probar otros tipos de navegadores en la máquina (por ejemplo, Internet Explorer, Opera o Safari) en su versiones más recientes. Si los problemas persisten, el autor agradecería un correo electrónico de sus lectores informándole sobre la naturaleza de los errores tipográficos que se vayan encontrando, así como el título de la entrada en donde son encontrados (resulta casi imposible estar buscando en toda la obra algún error que puede estar ubicado en cualquiera de las decenas de entradas que la forman.)

De vez en cuando surge la pregunta acerca de la posible disponibilidad de esta obra en el formato de almacenamiento PDF (Portable Document File), un sistema multi-plataforma que mantiene la misma presentación visual en varios sistemas operativos (Windows, Unix, Linux, Mac) y que facilita la impresión de los documentos, desarrollado por la empresa Adobe Systems. Hay tres razones por las cuales esta obra no está disponible en este formato. La primera es que algunos de los archivos gráficos en esta obra son archivos gráficos animados, lo cual no se puede traspasar a un documento impreso, e inclusive las versiones de PDF que pueda haber para las computadoras caseras no están equipadas para la reproducción de este tipo de archivos. Otra dificultad es que hay muchas máquinas en uso con sistemas operativos que hoy se considerarían primitivos (Windows 95, Windows 98) y en las cuales la reproducción de imágenes con los colores correctos en archivos PDF podría dejar mucho que desear, e inclusive tal vez lo único que se logre es la impresión o la visualización del documento en blanco y negro, restándole la ventaja didáctica a la cromaticidad de muchas figuras incluídas en esta obra. Y la tercera dificultad es que Blogger no permite la reproducción de documentos en formato PDF, los documentos tienen que ser reproducidos como páginas HTML elaboradas para la Web.

En esta obra, salvo algunas excepciones aisladas, se han evitado al máximo las referencias a documentos técnicos y científicos en Internet que han sido puestos en sitios tales como SpringerLink en virtud de que estos sitios no sólo no hacen accesibles los documentos que archivan de manera gratuita, sino que por cada documento que consta de unas diez o quince páginas hacen un cobro entre 30 y 40 dólares por documento, lo cual significa que para consultar apenas unos diez documentos en un sitio como estos el lector tiene que estar preparado para erogar unos 300 ó 400 dólares, lo cual va totalmente en contra del espíritu de Internet de que la información pueda fluír libremente alrededor del mundo al menor costo posible de un lado a otro. Tal vez los autores que colocan sus trabajos en estos sitios de acceso caro no se dan cuenta de que ellos mismos se están limitando severamente el universo de sus posibles lectores, sobre todo en países en los que no se cuenta con las amplias cantidades de dinero que se requieren para poder accesar los documentos que ellos elaboran. El cobro exagerado para poder descargar y leer un documento que consta de tan sólo diez o quince páginas no está justificado a menos de que se trate de un documento realmente extraordinario, excepcional, como los papeles originales de Alan Turing, John von Neumann y Tim Berners-Lee, y esos papeles se pueden obtener gratuitamente de varios sitios de Internet, puestos a disposición del público internauta general mundial por instituciones académicas de prestigio que laboran sin fines de lucro, a diferencia de los sitios que cobran entre 30 y 40 dólares por descargar de ellos algo que consta de unas cuantas páginas.

Parafraseando a Jimmy Wales, el fundador de Wikipedia, este trabajo es una pequeña contribución al ambicioso objetivo de un mundo en el que todas las personas y cualquier persona tengan libre acceso a la suma total de los conocimientos de la humanidad.

Se puede esperar, en una obra de esta extensión, que inevitablemente harán su aparición equivocaciones, errores tipográficos y errores de tipo numérico que el autor habrá pasado por alto, no atribuíbles al navegador sino a un fallo real en la elaboración de los materiales. El autor agradece de antemano todos los señalamientos que se le hagan al respecto, lo cual ayudará a mejorar los materiales para quienes tengan necesidad o interés de consultarlos en un futuro.

El autor desea expresar su agradecimiento a la empresa Google la cual a través de su subsidiaria Blogger facilitó el espacio necesario para que esta obra pudiera ser publicada, sin lo cual posiblemente esta obra no habría visto la luz del día. El autor desea expresar también su agradecimiento a la empresa Picasion.com por la disponibilidad en-línea de su constructor de gráficos animados que permiten dar una mayor claridad a las ideas que se busca transmitir facilitando la asimilación de los materiales. Agradezco también a Roger Cortesi por la disponibilidad de su editor de ecuaciones en la tipografía LaTeX.

Se espera que inevitablemente en una obra como ésta haya errores y equivocaciones de todo tipo que fueron pasadas por alto por el autor. Se agradece de antemano cualquier retroalimentación o señalamiento de los lectores que permita corregir y enmendar tales deficiencias que pueden causar confusión o inclusive azoro para quienes apenas están aprendiendo esta materia por vez primera.

Hay también dos URLs abreviados para tener acceso con cualquiera de ellos al índice temático de esta obra, cada uno de los cuales es más fácil de recordar y apuntar o citar como referencia. Son los siguientes:



Hay también un código QR (Quick Response) que permite enviar por teléfonía celular que cuente con cámara el código de barras bidimensional QR. Es el siguiente:


Una advertencia: esta obra no ha sido creada teniendo en mente su descarga en teléfonos inteligentes o dispositivos móviles de pantalla pequeña, y presupone que el lector tendrá acceso a la misma en una computadora de escritorio con una resolución de pantalla lo suficientemente grande (ya sea de 800x600 pixeles o de 1024x768 pixeles en los monitores CRT del tipo SVGA) o en una computadora laptop con una pantalla LED de por lo menos 15" (la mayoría de los sistemas y plataformas en la actualidad alrededor del mundo cumplen con esta condición), en virtud de que no se trata de material de lectura ligero que pueda ser captado en forma óptima en un teléfono celular.


El autor

Antecedentes históricos

Los cálculos aritméticos manuales nunca han sido del agrado de muchos, evidenciado por el hecho de que las matemáticas tradicionalmente han sido la materia considerada más difícil y problemática de las asignaturas escolares desde la primaria hasta la universidad, y esto no es privativo de nuestra época, es algo que se ha mantenido constante desde que el hombre aprendió a contar.

Es por esto que, a través de las épocas, la humanidad en todos los rincones del planeta ha buscado maneras de poder simplificar los cálculos aritméticos de forma tal que se puedan llevar a cabo con mayor rapidez y con menos margen de error. Esto es lo que condujo a la invención del ábaco en Asia, el cual por cierto aún se sigue empleando en nuestros días en esa parte del mundo.

Entre los esfuerzos para construír máquinas más eficientes y rápidas para efectuar cálculos en el sistema decimal, vale la pena mencionar un método descrito en 1617 por un matemático escosés de nombre John Napier, consistente en una serie de barras de marfil especialmente talladas y marcadas para efectuar multiplicaciones y divisiones, conocidas como los “huesos de Napier” o ábaco Neperiano:





Por su parte, Blaise Pascal inventó la primera “sumadora mecánica”, muy parecida a las calculadoras mecánicas de escritorios usadas alrededor de 1960 antes de que fueran desplazadas por las calculadoras electrónicas de escritorio:




Una máquina del mismo tipo pero un poco más avanzada fue desarrollada unas cuantas décadas después por Gottfried Leibniz:





 la cual era capaz de sumar, restar, multiplicar, dividir, y con la cual hasta se podían extraer raíces cuadradas. Sin embargo, no fue sino hasta 1820 cuando las primeras calculadoras comerciales capaces de llevar a cabo las operaciones matemáticas básicas de suma, resta, multiplicación y división estuvieron disponibles.

Al llegar el siglo XIX, varios individuos contribuyeron al avance de máquinas que podían llevar a cabo más tareas en forma automática. Una de tales máquinas, inventada sin intención alguna de que efectuase cálculo matemático de ningún tipo, fue una hiladora de textiles desarrollada por Joseph Jacquard, la cual era controlada mediante instrucciones almacenadas en códigos puestos en tarjetas perforadas. Con un simple cambio en las instrucciones, era posible cambiar el patrón del hilado. Aquí podemos ver los inicios del programa almacenado. Esta idea, unida al funcionamiento mecánico de las calculadoras comerciales de aquél entonces, proporcionaría la inspiración necesaria para llevar a cabo uno de los proyectos más ambiciosos de dicha época: la invención de una computadora para llevar a cabo cálculos matemáticos activada por medios puramente mecánicos.

En los albores de la revolución industrial, tras el descubrimiento de la máquina de vapor, los primeros intentos por construír una máquina capaz de poder llevar a cabo en forma automática cálculos automáticos aritméticos repetitivos considerados laboriosos para los humanos, efectuándolos en forma rápida y sin incurrir en equivocaciones, se pueden rastrear a la máquina analítica de Charles Babbagge y su colaboradora cercana Ada Lovelace, considerada como la primera programadora de sistemas de informática. La máquina analítica de Babbage, inventada en 1835, repleta de engranes mecánicos impulsados por la fuerza del vapor, era algo que en principio podía y debía funcionar. Quizá demasiado avanzada para su época, la máquina de Babbage usaba tarjetas perforadas para controlar y dirigir su operación, las cuales contenían las instrucciones a llevarse a cabo. La máquina era capaz de usar los resultados de un cálculo para comenzar otro cálculo diferente, y era capaz de llevar a cabo cálculos repetitivos o bucles. Un logro significativo en el diseño de la máquina era la capacidad de poder saltar alrededor de las instrucciones del programa en lugar de tener que ir tomando las instrucciones en la secuencia en que habían entrado en el programa. Este mismo concepto es usado y conocido ampliamente hoy en día por los programadores de la actualidad bajo el nombre de transferencias condicionales. Sin embargo, la falta de fondos suficientes para llevar tan ambicioso proyecto hasta su conclusión así como los cambios continuos hechos por Babbage a las especificaciones mecánicas de los componente de su máquina, impidieron que la máquina pudiera ser terminada, quedando como un sueño pendiente a ser realizado por generaciones sucesivas. Hoy sabemos de sobra que algo como lo que pretendía hacer un solo hombre como Babbage requiere de un equipo completo de hombre de ciencia dedicados única y exclusivamente a tal esfuerzo. Sin embargo, Babbage estuvo más cerca de terminar su máquina de lo que generalmente se le concede, y de haberlo logrado quizá habría acelerado el progreso de la humanidad por varias décadas.

La idea de Babbage de usar tarjetas perforadas para especificar las instrucciones de un programa de cómputo capaz de resolver problemas matemáticos fue retomada en los años 1890 por Herman Hollerith, el cual inventó la tarjeta perforada que hacía uso del código Hollerith así como una máquina eléctrica para leer rápidamente las tarjetas perforadas. sentando así las bases para la creación de una compañía que sería conocida como la International Business Machines (IBM).

El tiempo continuó su marcha inexorable, sin muchos avances dramáticos dignos de ser mencionado, hasta que al fragor de la Segunda Guerra Mundial, con el poder de la electricidad en uso común y cotidiano, hizo su aparición una nueva generación de visionarios que desde la Universidad de Harvard emprendieron el diseño de lo que vendría siendo la primera computadora electromecánica, la Mark I, construída bajo pedido por IBM y terminada en 1944:




Posiblemente el lector esté familiarizado con el hecho de que un dispositivo electromecánico es aquél que usa electricidad para producir un movimiento mecánico, un ejemplo del cual es la alarma eléctrica. El relevador y los solenoides fueron los dispositivos mecánicos que fueron usados en estas computadoras electromecánicas. La Mark I era una máquina grande, con cerca de 15.5 metros de longitud y 2.4 metros de altura. Las instrucciones para programarla eran alimentadas en cintas de papel perforado y los datos eran a ser manipulados eran alimentados mediante tarjetas perforadas, tal y como lo había concebido Babbage. Los resultados de la computadora eran almacenados en tarjetas mediante una máquina de escribir eléctrica. La Mark I podía multiplicar dos números en cerca de tres segundos. Terminada la Segunda Guerra Mundial, su sucesora la Mark II concluída en 1947 podía llevar a cabo la misma multiplicación en un cuarto de segundo. Era 12 veces más rápida, y en su tiempo fue un gran paso en la dirección correcta. Pero las limitaciones inherentes a los movimientos electromecánicos de los solenoides impedían que se pudiese esperar de grandes mejoras en las velocidades de procesamiento. Era necesario recurrir a otro tipo de tecnología de índole puramente electrónica, sin partes con movimientos electromecánicos, para incrementar los tiempos de procesamiento. Y tal tecnología ya existía: los bulbos electrónicos al vacío, los mismos bulbos que antaño se utilizaban para construír aparatos de radiocomunicación, amplificadores de sonido, etcétera.

La primera computadora digital electrónica, desarrollada en 1946 por John Presper EckertJohn Mauchly y otros en la Moore School of Engineering en la Universidad de Pennsylvania, la ENIAC (acrónimo de Electronic Numerical Integrator and Computer), era capaz de llevar a cabo una multiplicación en alrededor de 2.8 milisegundos:




En rigor de verdad, hay reclamos de que ya desde antes en Alemania se había desarrollado una computadora electromecánica, la Z3 inventada por Konrad Zuse, así como la computadora Colossus. Pero la primera quedó destruída por los bombardeos llevados cabo por las fuerzas aliadas, mientras que la segunda fue mantenida en secreto por largo tiempo después de haber concluído la Segunda Guerra Mundial, motivo por el cual tales avances tuvieron un impacto casi nulo en el desarrollo y comercialización de las computadoras.

Concluída la Segunda Guerra Mundial, podemos hablar de varias generaciones sucesivas de computadoras disponibles comercialmente, y haremos aquí un intento por resumir la clasificación generalmente aceptada de cada generación.


Las computadoras de primera generacion


A diferencia de las primeras computadoras como Mark I y ENIAC que estaban restringidas a aplicaciones de uso cerrado muy específico, siendo máquinas de diseño único que jamás fueron concebidas para ser producidas en serie, los ingenieros y programadores que participaron en la construcción de esos prototipos experimentales no tardaron en poner en marcha la construcción de lo que puede considerarse como las primeras computadoras comerciales, las cuales podemos clasificar como computadoras de primera generación. Esta generación comenzó en 1951 con la primera computadora electrónica diseñada para ser construída en serie y vendida comercialmente, la computadora UNIVAC I, producida por una compañía llamada Remington Rand. La primera UNIVAC I fue instalada para ser usada por el U.S. Bureau of Census. Por varios años, la gente usó la palabra “UNIVAC” cada vez que alguien se refería a una computadora. Esto continuó hasta que la competencia llegó cuando la International Business Machines (IBM) empezó a construír y vender computadoras. La primera computadora IBM fue la computadora IBM 701 y fue instalada por vez primera en 1953. Al año siguiente, la IBM puso a la venta la computadora IBM 650, la cual fue la computadora más popular por algunos años, de modo tal que cuando alguien se refería a una “IBM” sus interlocutores sabían que la persona se estaba refiriendo a una computadora.

Todas las computadoras de la primera generación estaban basadas en el uso de válvulas electrónicas, los cuales al igual que cualquier foco de filamento incandescente estaban propensos a fallas eléctricas y los cuales usados en los grandes números requeridos por cualquier computadora requerían de grandes cantidades de enfriamiento por aire acondicionado, de modo tal que la operación de las mismas salía más onerosa que el costo de adquisición. Siendo el bulbo electrónico en su quintaesencia un foco incandescente, el mantener en operación una máquina con miles de tubos electrónicos encendidos al mismo tiempo consumía tan grandes cantidades de energía que se requería de varias toneladas de aire acondicionado para que las máquinas no se calentaran , y los sistemas de aire acondicionado en sí también consumían grandes cantidades de energía eléctrica. Y puesto que bastaba que un solo bulbo electrónico fallara para mandar abajo por completo la operación de la máquina, el mantenimiento y reparación de las mismas consumía grandes cantidades de presupuesto. Era indispensable encontrar otra tecnología en la que los componentes usados para construír las compuertas lógicas en las cuales basa su operación cualquier computadora no consumiesen tanta energía y no estuviesen propensos a fallos seguidos. Tal tecnología no tardaría en llegar con avances en la física del estado sólido.


Las computadoras de segunda generación


El elemento crucial para reemplazar a los tubos electrónicos incandescentes fue la invención oportuna del transistor bipolar, el cual permitió la transición de bulbos electrónicos a transistores en las computadoras comerciales vendidas alrededor de 1959:




Se trata, en efecto, del advenimiento de la electrónica con componentes de estado sólido aplicada a grandes proyectos computacionales. El transistor era mucho más económico, mucho más confiable, requería menos energía eléctrica al no necesitar un filamento incandescente para su funcionamiento, y era mucho más pequeño que los bulbos electrónicos miniatura que se habían logrado desarrollar. La siguiente fotografía nos muestra uno de tales transistores con la cápsula superior de empaquetamiento removida:




Con la invención del transistor que terminó desplazando al tubo electrónico como el elemento básico de construcción de las compuertas lógicas básicas usadas en todas las computadoras, la fabricación de las computadoras de primera generación llegó a su fin. Algunos fabricantes concentraron sus esfuerzos en la construcción de computadoras de propósito general mientras que otros concentraron sus esfuerzos en computadoras científicas diseñadas para obtener una “super-precisión” en los cálculos numéricos. En virtud de la competencia intensa en el mercado de las computadoras, fueron concebidos muchos tipos de diseños y arquitecturas, proporcionando la experiencia para ir acercando a los académicos a un consenso sobre lo que pudiera ser calificado como un diseño “óptimo”. Algunos tuvieron éxito comercial mientras que otros fracasaron. La siguiente tabla proporciona un resumen de algunas de las computadoras más usadas de la segunda generación:

Fabricante Modelo
Tamaño
Aplicación
IBM 1620 Pequeño Científico
IBM 1401 Pequeño a mediano Negocios
IBM 7094 Grande Científico y negocios
CDC 1604 Mediano a grande Científico
CDC 3600 Grande Científico
RCA 501 Mediano Negocios
UNIVAC 1108 Grande Científico y negocios

Aún con las enormes reducciones de costos de fabricación y mantenimiento obtenidas con el reemplazo de los tubos electrónicos con transistores, las computadoras de la segunda generación seguían siendo tan costosas que hubiera sido inconcebible comprar una de estas máquinas para ser usada por una sola persona, y más inconcebible aún que pudieran ser usadas para escribir novelas, para escuchar música digitalizada o para “chatear”.


Las computadoras de tercera generación

Hay un consenso generalizado de que la tercera generación de computadoras comenzó alrededor de 1966 cuando los fabricantes introdujeron el concepto de familias de computadoras, de las cuales la familia correspondiente al Sistema/360 de IBM es el primer ejemplo, siendo este el primer ordenador que empezó a substituir los transistores individuales con circuitos integrados dentro de los que se podían empaquetar no uno sino varios transistores. La familia del Sistema/360 incluía una máquina pequeña (relativamente hablando) para ser usada en negocios, bautizada como el modelo 30, así como otros modelos hasta máquinas grandes y potentes para ser usadas en aplicaciones científicas y de negocios. Cada modelo estaba identificado por un número único, y en general entre más grande era el número tanto mayor era el poder computacional. Las computadoras de la tercera generación resolvieron un problema característico de las computadoras de segunda generación, el que programas sofisticados desarrollados para máquinas más pequeñas con una gran inversión de tiempo y recursos no se podían correr en máquinas más potentes, inclusive máquinas construídas por una misma empresa. En efecto, cada modelo de máquina requería su propio programa, y aunque el objetivo final del programa a fin de cuentas fuese el mismo, hacer la misma tarea en otra máquina requería volver a escribir un programa desde el principio o tratar de adaptar lo ya existente a otra máquina invirtiendo mucho tiempo y esfuerzo en las correcciones requeridas. Este problema fue la razón detrás del concepto del desarrollo de familias de computadoras. Así, una compañía podía empezar comprando o rentando una máquina pequeña, y posteriormente conforme la compañía fuese creciendo se podía comprar o rentar una máquina más grande de la misma familia con la plena seguridad de que los programas desarrollados para la máquina más pequeña podían correr o ser ejecutados en otra máquina más potente de la misma familia requiriendo tan solo cambios mínimos o quizá ningún cambio en los programas desarrollados para la máquina más pequeña. Esto es lo que se conoce como compatibilidad hacia arriba (en inglés, upward compatibility), y es exactamente lo mismo que vemos hoy en día cuando un usuario que ha elaborado una hoja de cálculo Excel en Windows XP espera que la misma hoja de cálculo pueda ser abierta sin cambio alguno en un Excel diseñado para funcionar en Windows 8. En el caso del hardware, esto implica que debemos poder llevar a cabo mejoras en el hardware (actualizando tarjetas internas o chips) sin necesidad de tener que desechar la máquina completa con cada nueva actualización de hardware que vaya apareciendo con un dispositivo nuevo que será conectado a la máquina. Lo mismo aplica a los sistemas operativos, nadie le compraría a ninguna empresa una actualización del sistema operativo de su máquina si tal actualización traera como consecuencia que los programas ejecutables que antes le funcionaban a la perfección dejarán de trabajar. El número “360” usado para identificar a la familia del Sistema/360 de IBM se inspiró de la graduación de 360 grados en la rosa de los vientos, queriendo decir con ello que dentro de una misma familia los clientes podía migrar “en cualquier dirección” con la garantía de toparse con muy pocos problemas sin mayores consecuencias en lo que a la compatibilidad del software respecta.

Otra característica que marcó el comienzo de la tercera generación fue el uso de módulos miniaturizados de circuitos, haciendo realidad el concepto de una máquina construída a base de módulos fácilmente intercambiables y reemplazables en caso de fallas, y el uso cada vez más pronunciado de circuitos integrados. Los módulos híbridos miniaturizados, llamados “tecnología de lógica sólida” por IBM, tenían al transistor “pelón” (sin empaquetamiento alguno) y capacitores de chip montados en un pequeño substrato de cerámica en el cual las resistencias y los conductores eléctricos eran montados permanentemente. El módulo completo era un cuadrado de alrededor de media pulgada (127 milímetros) de largo. Sin embargo, la mayoría de los fabricantes pronto llevó a cabo la transición hacia el circuito integrado que fue inventado por Jack Kilby en 1958. De este modo, una computadora de tercera generación usando circuitos integrados era mucho más pequeña, más confiable al ser propensa a menos fallas, menos cara, y consumiendo menos energía eléctrica para el mismo poder de cómputo proporcionado por una máquina de segunda generación.


Las computadoras de cuarta generación


La distinción entre las computadoras de tercera generación y cuarta generación no es tan clara como en el caso de las generaciones precedentes. Algunos especialistas opinan que las computadoras de la cuarta generación comenzaron con la familia del Sistema/370 de IBM (una versión actualizada del Sistema/360), pero muchos otros son de la opinión que las computadoras de la cuarta generación empezaron con el arribo del microprocesador, el cual por vez primera integró en un solo circuito miniaturizado todos los componentes propios de una unidad de procesamiento central CPU. Los avances tecnológicos continuos permitieron la inclusión de memoria y funciones de entrada/salida en el mismo chip, de modo tal que se podía tener una microcomputadora completa en un chip. El primer procesador era un procesador de tan solo cuatro bits, apareciendo en el mercado en 1971, pero pronto fue seguido por el microprocesador de 8 bits.

En las computadoras de la cuarta generación podemos ver otro avance significativo. Si bien el transistor bipolar representaba un ahorro considerable en sus requerimientos energéticos en comparación con los requerimientos energéticos de las válvulas electrónicas, la cosa se podía mejorar aún más con el reemplazo de los transistores bipolares con otro tipo de transistor, el transistor MOS (Metal Oxide Semiconductor), el cual con su consumo prácticamente nulo de corriente eléctrica y su consumo prácticamente nulo de energía traduciéndose en una disipación calorífica considerablemente menor, posibilitó ir metiendo cantidades cada vez mayores de componentes lógicos computacionales dentro de los circuitos integrados.

La integración de una cantidad cada vez mayor de componentes lógicos en un solo circuito integrado abrió las puertas para poner en un solo chip los componentes que estaban dispersos en varios módulos separados, los cuales en conjunto formaban lo que hoy se conoce como la unidad de procesamiento central o CPU (del inglés, Central Processing Unit). Por tratarse de una unidad de procesamiento miniaturizada a través de la microelectrónica, a este componente se le dió el nombre que aún lleva hasta la fecha: el microprocesador, abreviado en mucha literatura técnica como μP en donde se hace uso del prefijo μ que de la palabra griega “mu” se usa para representar la palabra “micro”.

La aparición del microprocesador no fue consecuencia de una actitud visionaria, de un diseño astuto o de una planeación avanzada y de fondo. Fue de hecho en su mayor parte algo accidental. Los primeros microprocesadores introducidos en el mercado fueron accidentes de la tecnología, y en ocasiones, rechazos. Debido a la introducción desordenada y no planificada de los microprocesadores, varios de sus errores iniciales de diseño e inadecuaciones continuaron propagándose de una generación a otra, todo en el nombre de algo llamado “compatibilidad”, y muchas de las características que encontramos en el desarrollo de los microprocesadores tienen sus orígenes en este desarrollo desordenado y caótico en donde tuvieron su cuna.

El microprocesador tiene un historial interesante que nadie anticipaba en aquél entonces. Comienza con el ensamble en la Costa Este de los Estados Unidos (en los laboratorios Bell Telephone Labs) de un pequeño puñado de científicos encabezados por William Shockley (ganador del Premio Nóbel de Física, inventor del transistor bipolar que dió inicio a la revolución de la electrónica de estado sólido) dentro del cual se encontraban Robert Noyce y Gordon Moore. Shockley dejó Bell Telephone para crear su propia compañía, Shockley Research Laboratories. Unos años después un grupo pequeño de científicos dejaron esta compañía para crear la suya propia en la Costa Oeste de Estados Unidos, Fairchild, en Sunnyvale (al sur de San Francisco), en lo que con el paso del tiempo sería conocido como el “Valle del Silicio” (Silicon Valley). Unos años después, un grupo pequeño de científicos dejaron esta compañía para fundar otra empresa en Sunnyvale que sería bautizada como Intel (Integrated Electronics), fundada en 1968 por Robert Noyce y Gordon Moore. Esos fueron los orígenes de la empresa que inventó el microprocesador. La historia del microprocesador propiamente dicho comienza tres años después con la introducción en el mercado (a principios de 1971) del circuito integrado 4004 producido por Intel, un chip de silicio que incorporaba 2,250 transistores, desarrollado y fabricado como resultado de un contrato con una compañía japonesa fabricante de calculadoras electrónicas de escritorio, cuya microfotografía ampliada se muestra a continuación:




Los otros compradores del 4004, esencialmente un microprocesador de 4 bits (cuatro bits es lo que se requiere para poder representar con combinaciones de unos y ceros un número decimal del cero al nueve) tuvieron que firmar un contrato comprometiéndose a no usar el 4004 para desarrollar calculadoras de escritorio por lo menos durante un año. De este modo, el primer microprocesador fue, de hecho, un circuito integrado diseñado para ser usado como una calculadora de escritorio. Por lo tanto ese circuito integrado no era muy potente, y era generalmente inadecuado para ser usado en computación de propósito general, y por lo tanto nunca hubo altas expectativas sobre sus posibilidades de venta.

El siguiente paso fue la introducción en 1972 del 8008, el primer microprocesador de 8 bits de propósito general. Unos años antes, la compañía Display Terminals Corporation (conocida después como Datapoint) había abierto un petición pública para el desarrollo de un procesador monolítico capaz de controlar un monitor con una pantalla de tubos de rayos catódicos, desde un solo chip. Dos compañías compitieron por y obtuvieron el contrato de desarrollo: Texas Instruments e Intel. Después de algunos meses de esfuerzo, Texas Instruments se retiró de la competencia, mientras que Intel continuó con el desarrollo de un componente que podía satisfacer todos los requerimientos funcionales pedidos por Datapoint excepto uno: era demasiado lento. Aunado a esto, y al mismo tiempo, había empezado una guerra de precios sobre los precios de otra tecnología alterna basada en componentes bipolares, resultando en precios significativamente menores para los productos bipolares. En vista de la velocidad inadecuada del procesador desarrollado por Intel, y los precios considerablemente más bajos de los componentes bipolares, Datapoint decidió implementar su controlador con tecnología bipolar. De este modo, Intel se quedó con un producto cuyo desarrollo ya había sido pagado, pero para el cual no había un mercado obvio. Un producto esencial de Intel, entonces una compañía muy joven, eran productos de memoria. Con cierta reticencia, el 8008 fue introducido  en el mercado bajo la suposición de que vendería más productos de memoria. Parecería que todos los esfuerzos de diseño serían detenidos y el equipo de diseño sería reasignado a otras tareas. ¡Esto iba a ser el fin de los microprocesadores!

Para gran sorpresa del fabricante (y de sus competidores) las ventas del nuevo producto (el microprocesador) empezaron a escalar rápidamente. Uno de los fabricantes de circuitos integrados se había topado por accidente con el siguiente producto de integración a gran escala (LSI) en el mercado, el microprocesador. Intel se dió cuenta rápidamente del potencial del nuevo producto, ensambló de nuevo un equipo de diseño, e introdujo un año después el sucesor del 8008, el 8080. Simultáneamente, los competidores principales de Intel dedicaron sus esfuerzos para implementar su propia versión de lo que creían que un 8080 debería haber sido. En los dos años que siguieron, todos los microprocesadores “estándard” en el mercado de ese entonces fueron introducidos, la mayoría de ellos inspirados en el diseño temprano del 8080. Motorola introdujo el 6800 (un año después de la introducción del 8080), Rockwell introdujo el PPS8, Signetics introdujo el 2650, etc.

Tiempo después, varios diseñistas del 8080 dejaron a Intel para fundar su propia empresa, Zilog, la cual introdujo el microprocesador Z-80, un pretendido sucesor del 8080 con el cual Zilog terminó compitiendo directamente en contra de Intel. El mecanismo de creación de nuevas empresas fabricantes de microprocesadores fundadas por científicos diseñistas que habían estado trabajando en otras empresas exitosas también fabricantes de microprocesadores es lo que contribuyó directamente a los enormes parecidos en diseño y arquitectura de los procesadores de esa época pese a ser elaborados en compañías diferentes. Y es lo que contribuyó también a sus deficiencias en sus diseños (tales como una sobreabundancia de registros internos, lo cual parecería ser una ventaja, aunque el domiciliamiento de registros múltiples típicamente requiere de instrucciones en lenguaje de máquina más grandes lo cual se traduce en un tiempo más lento en la ejecución de las instrucciones). Solo con el paso del tiempo estas deficiencias en el diseño empezaron a ser corregidas conforme la densidad de integración iba en aumento. En la siguiente microfotografía se tiene el circuito integrado iAPX 432 fabricado por Intel:




Y en la fotografía que se muestra a continuación podemos ver a uno de estos circuitos integrados pasando a través del proverbial ojo de una aguja:




Los primeros microprocesadores estaban limitados en sus capacidades de cómputo, pero ya para finales de los setentas eran tan poderosos y sofisticados como las unidades de procesamiento central usadas en las computadoras de la segunda e inclusive la tercera generación. La siguiente tabla nos muestra algunos de los microprocesadores que fueron históricamente los más vendidos y utilizados conforme la tecnología se fue desarrollando desde microprocesadores de 4 bits hasta microprocesadores de 16 bits:

Número de bits
Fabricante
Modelo
4
Texas Instruments
1000
4
Intel
4004
8
Intel
8080, 8085
8
Fairchild
F-8
8
Motorola
6800,6809
8
National
IMP-8
8
RCA
COSMAC
8
MOS Technology
6502
8
Signetics
2650
8
Zilog
Z-80
16
Texas Instruments
9900
16
Motorola
68000
16
Intel
8086
16
Zilog
Z-8000

Un procesador con una capacidad cada vez mayor de procesamiento es un reflejo directo del aumento explosivo en la densidad de compuertas lógicas (bloques AND, OR, NOT, XOR, etc.) puestas dentro de un circuito integrado. Para poder apreciar la rapidez con la cual se fueron dando los avances en la integración de una cantidad cada vez mayor de componentes en un solo circuito integrado, basta con repasar la siguiente tabla que nos muestra el progreso de la tecnología de los años sesenta a los años setenta en los cuales se tenía una terminología técnica peculiar para clasificar el grado de integración en base al número de compuertas lógicas que había dentro de un chip:

Nivel de
integración
Número de compuertas
lógicas por chip
Período
Integración de
escala pequeña SSI
(Small Scale
Integration)
12
Inicios de los sesenta
Integración de
escala mediana MSI
(Medium Scale
Integration)
 100
Finales de los sesenta
Integración de
gran escala LSI
(Large Scale
Integration)
1,000
Inicios de los setenta
Integración de
muy grande escala
VLSI (Very Large
Scale Integration)
50,000
Finales de los setenta

Podemos ver que, de acuerdo con esta tabla, el nivel de integración fue creciendo 4 mil veces desde la integración a escala pequeña SSI hasta la integración a muy grande escala VLSI en menos de 20 años. El pronóstico sobre este crecimiento explosivo quedó enunciado formalmente en lo que hoy se conoce como la ley de Moore. Obviamente, esta clasificación quedó completamente obsoleta al inicio del tercer milenio en donde el número de compuertas lógicas ascendía ya a los cientos de miles en cada circuito integrado. Pero esto no da la historia completa, porque al mismo tiempo que el nivel de integración crecía el área del chip por componente lógico iba disminuyendo al mismo tiempo, de modo tal que el tamaño total del chip no crecía en proporción al número de compuertas lógicas. De hecho, en el período de tiempo considerado, el tamaño del chip solo creció en veinticinco tantos. Puesto que el tamaño del chip no incrementaba mucho, y puesto que los avances en los procesos de manufactura mantenían bajos los costos de producción, el costo de cada circuito integrado iba creciendo muy poco. Pero en virtud del aumento en el número de compuertas lógicas por chip, el costo por compuerta lógica fue disminuyendo en un factor de 1,000, lo cual proporcionó unidades de procesamiento central de bajo costo pero con capacidades extraordinarias de cómputo para ser usadas en sistemas de computación que eran pequeños, consumían poca potencia, y eran altamente confiables.

La misma tecnología que permitió ir poniendo una cantidad cada vez mayor de compuertas lógicas en circuitos integrados proporcionó otro beneficio a los sistemas computacionales, ya que además de posibilitar unidades de procesamiento central de bajo costo para ser usadas en microcomputadoras, la tecnología VLSI permitió la colocación de grandes cantidades de memoria de acceso aleatorio RAM en un solo chip, permitiendo que ya para inicio de los ochentas hubiera memorias RAM capaces de poder almacenar 65,536 bits de información (a una memoria de este tipo frecuentemente se le refiere como una memoria de 64K, en donde K representa 1,024 o 210).

Sin embargo, faltaba aún lo mejor, algo que ya se empezaba a vislumbrar en el horizonte. La posibilidad de poder poner a precio accesible una computadora doméstica en cada hogar ya sea para usos personales o fines de entretenimiento, haciéndolo con una presentación amigable e intuitiva para el vasto mercado de consumidores que carecían de conocimientos técnicos acerca de todo lo que tuviera que ver con el uso y manejo de las computadoras digitales, y ello no tardaría en llegar con el abaratamiento y la proliferación que empezaba a darse en el mercado de los microprocesadores.


La era de las interfaces gráficas


El primer gran impulso para la comercialización masiva del microprocesador fue dado por los aficionados en tomar la electrónica tomada como un “hobby”, los cuales acostumbrados a construír sus propios proyectos (radios, fuentes de poder, transmisores caseros, amplificadores de audio, etc.) crearon un mercado nuevo para el producto, Con el advenimiento de familias completas de circuitos integrados que daban apoyo en todo tipo de funciones a los microprocesadores que se estaban fabricando en ese entonces, una vez que se proporcionaban todos los componentes -incluyendo el circuito impreso, un gabinete atractivo así como las instrucciones detalladas- para llevar a cabo el ensamble la construcción de todo un sistema completo era cosa que cualquier persona podía llevar a cabo en unas cuantas horas aún sin conocimientos técnicos de electrónica. Para las personas para quienes estos proyectos tenían un valor educativo o de entretenimiento, esto terminó resultando uno de los juguetes o herramientas más sofisticados que se hayan introducido en el mercado. Para 1977, se estimaba que eran ya cientos de miles de estudiantes, ingenieros electrónicos, médicos, abogados y hombres de negocios los que estaban involucrados activamente en la construcción de computadoras pequeñas usando componentes microprocesadores, así como en la programación de dichos sistemas. Los profesionistas y hombres de negocios frecuentemente ensamblaban tales sistemas para obtener algún beneficio directo como la administración de archivos, contabilidad, o como una ayuda en su profesión, mientras que otros los construían para diversión o entretenimiento. En el mercado dirigido a estos aficionados, un primer gran paso fue dado por la empresa MITS que comercializó una computadora que bajo el concepto de “construya usted mismo su propia computadora” puso a la venta un kit de partes junto con las instrucciones necesarias para el ensamble de una computadora bautizada como la Altair 8800.

Al mismo tiempo que creció la venta de “kits” para que cada quien en su propia casa pudiera construír su propia computadora sin tener que gastar cientos de miles de dólares en obtener la satisfacción de poder poseer y poder programar su propia computadora, empezaron a aparecer computadoras ya ensambladas listas para ser encendidas y ser usadas de inmediato, lo cual apelaba a quienes careciendo de experiencia en electrotécnica se sentían intimidados y hasta incapaces de poder ensamblar cosa alguna que tuviera que ver con circuitos eléctricos. La caída de precios permitió que hiciera su aparición la computadora doméstica Commodore 64, al igual que la computadora Sinclair ZX81 que se llegó a vender en forma de kit en cien dólares. Por su parte, el consorcio Tandy/Radio Shack introdujo la serie de computadoras TRS-80, junto con una atractiva variedad de productos de software para ser usado con dichas máquinas.

Ante la intensa actividad que estaba siendo desplegada a bajo nivel por los aficionados a la computación que estaban adquiriendo en cantidades cada vez mayores equipos de cómputo para ser ensamblados en sus propias casas así como otros que estaban adquiriendo computadoras ya construídas, era de esperarse que el gigante empresarial dedicado a la venta de computadoras de alta capacidad con fines profesionales, la International Business Machines Corporation (IBM) decidiera no quedar fuera de este mercado de bajo nivel, siempre tratando de mantener su monopolio sobre sistemas de cómputo tanto en el ámbito profesional como en el ámbito de los aficionados que hasta ahora había descuidado.

La entrada de IBM al mercado de las computadoras personales o PCs (abreviación de Personal Computer) se llevó a cabo con la IBM PC que fue seguida posteriormente por la IBM PC XT en la que se le agregó un disco duro a la máquina original que permitiría un avance significativo en el software del sistema operativo de la máquina, y por la IBM PC AT (las siglas AT significan Advanced Technology). Por increíble que parezca, siendo el gigante que era aunque IBM poseía todos los recursos económicos y el talento científico para fabricar por cuenta propia sus propios microprocesadores y elaborar su propios sistemas operativos para sus computadoras personales, en una mala decisión gerencial que terminaría lamentando tiempo después prefirió convertirse en una mera ensambladora de tales sistemas, adquiriendo los microprocesadores de una empresa llamada Intel, y adquiriendo el sistema operativo PC-DOS de una empresa llamada Microsoft. Con el paso del tiempo, ambas empresas se convertirían en el mayor fabricante de procesadores y en el mayor fabricante de sistemas operativos del mundo entero, sacando a IBM de su posición privilegiada al ir aumentando rápidamente la potencia de los microprocesadores así como la versatilidad y facilidad de uso de los sistemas operativos fabricados por quienes se convirtieron en sus propios competidores. Lo único que puso IBM detrás de sus computadoras personales fue su propio logo, lo cual sirvió como justificante para que el precio de las mismas fuera inicialmente alto. Eventualmente aparecieron competidores que se aprovecharon del hecho de que IBM no podía reclamar patente alguna en los componentes del sistema (el cerebro de las máquinas era fabricado no por IBM sino por Intel, el sistema operativo era elaborado no por IBM sino por Microsoft. En lo que toca al chip BIOS conteniendo las rutinas para inicializar a la máquina durante el encendido, IBM tuvo que enfrentar muy pronto la competencia de empresas tales como Phoenix Technologies y American Megatrends que le quitaron a IBM la exclusividad en las funciones del chip BIOS. Y como ni siquiera el gabinete de las máquinas podía ser patentado por IBM, no tardaron en hacer su aparición las computadoras clonadas de IBM  o “clones”. De cualquier modo, la filosofía de diseño e integración de componentes concebida por los ingenieros de IBM es algo que sigue siendo de inmensa utilidad todavía hasta nuestros días, ya que gracias a tal visión cualquiera puede ensamblar en casa su propia computadora personal adquiriendo el procesador junto con su abanico de enfriamiento, la tarjeta madre (motherboard) que sirve de huésped al procesador, las tablillas de memoria RAM, el lector de discos DVD, la fuente de poder, el gabinete, el sistema operativo (el cual es gratis, en caso de que se quiera recurrir a Linux como sistema operativo), y ensamblar todo en un par de días sin tener que usar soldadura y una pistola para soldadura como en otros tiempos. Otra gran aportación de los diseñadores de la arquitectura IBM fue el de las especificaciones de sockets para permitir la inserción de tarjetas de expansión, mediante espacios vacantes en la tarjeta madre en los cuales se podía meter una tarjeta para algún propósito especial como ampliar la cantidad de memoria RAM disponible en las máquinas, agregar alguna de sonido, agregar alguna tarjeta de módem así como tarjetas para gráficos de alta resolución, etcétera.

Antes de que las computadoras personales IBM fueran introducidas en 1981, la mayor parte de la computación a escala pequeña con fines no-recreativos (orientada a negocios) era llevada a cabo mediante máquinas construídas con el procesador Z80 de la empresa Zilog, un procesador de 8 bits, usando para la operación y el control inicial de la máquina un sistema operativo llamado CP/M (Control Program for Microprocessors) elaborado por la empresa Digital Research, el cual estaba basado en líneas de comandos. En ese entonces, la mayoría de las máquinas contaban con apenas 32 Kilobytes o 64 Kilobytes de memoria RAM, mientras que las máquinas para uso personal clasificadas como “máquinas monstruo” contaban con 128 Kilobytes de memoria.

Según lo cuentan las anécdotas, para el lanzamiento de sus computadoras personales IBM al principio se contactó con Digital Research, la compañía que creó CP/M, para la elaboración de un sistema operativo para sus computadoras de 16 bits, pero por azares del destino IBM terminó seleccionando a una compañía llamada Microsoft, fundada el 4 de abril de 1975, cuya propuesta para IBM se inspiró en la interfaz de líneas de comandos de CP/M incorporando en el sistema operativo de Microsoft comandos de CP/M tales como dir, format, etc. Para el fundador de Microsoft, el giro del destino que terminó beneficiándolo a él en lugar de a Gary Kildall (el fundador de Digital Research) con el contrato con IBM sería lo que lo pondría en camino de convertirse en el hombre más rico del mundo al terminar monopolizando el mercado mundial comercial de sistemas operativos.

El cerebro de la nueva computadora personal a ser introducida por IBM iba a ser el procesador 8086, una versión ligeramente más rápida del 8088, aunque el 8088 terminó siendo usado en lugar del 8086. Una versión de lo sucedido describe que la decisión de haber escogido al 8088 sobre el 8086 fue por una supuesta escasez de chips 8086, aunque otra versión menos gentil con IBM sostiene IBM consideraba a las microprocesadores como meros juguetes y no se justificaba gastar un poco más en un procesador más rápido. Ambos μP, siendo de 16 bits, podían accesar hasta 1,024 Megabytes de memoria RAM (frecuentemente abreviado como 1 Mb), lo cual en aquél entonces parecía ser mucho más memoria de lo que cualquier programa de aplicación concebible para computadoras de uso personal pudiera necesitar (en esto ayudó el hecho de que no había sistemas operativos con una interfaz gráfica, los cuales además de que requieren de una tarjeta interna para gráficos o de una capacidad para gráficos incorporada en la electrónica del procesador, requieren de una buena cantidad de memoria RAM). Se creía que era tanta la memoria posible de 1 Megabytes de RAM, que se reservaron 384 Kilobytes para uso interno de la máquina (sistema operativo), dejando 640 Kilobytes disponibles para programas de aplicación, dando origen a lo que terminó siendo conocido como la famosa “barrera de los 640 Kbytes”.

Sin embargo, pese al abaratamiento de las máquinas, faltaba el ingrediente indispensable para hacer accesible en forma masiva las computadoras domésticas al individuo común y corriente. El impedimento principal radicaba en la interfaz con el usuario.

Tanto en las terminales (teclados y pantallas) de usuarios independientes conectados a grandes computadoras centralizadas en instituciones académicas y organizaciones gubernamentales funcionando bajo el viejo sistema operativo UNIX, como en las computadoras domésticas funcionando bajo los sistemas operativos PC DOS y MS DOS elaborados por Microsoft, la clásica ventana de líneas de comandos de texto presentaba un aspecto generalmente intimidante y nada intuitivo en el cual el simple acto de copiar un archivo de un directorio (carpeta) a otro directorio o sub-directorio requería memorizar o tener a la mano el manual del usuario con todos los comandos disponibles, requiriendo incluso el tener que asistir a cursos y seminarios para poder usar tales sistemas operativos. A modo de ejemplo, a continuación se presenta la sintaxis requerida para copiar un archivo, tal y como se especificaba en el manual DOS:

   COPY [/A] [/B] [d:] [path] filename [.ext] [/A] [/B]
      [+[[,,d:] [path] filename [.ext] [/A] [/B] ...]
      [d:] [path] [filename[.ext]]      [/A] [/B] [/V]

La imposibilidad de poder sacarle sentido de buenas a primeras a estas especificaciones técnicas propició la aparición de numerosas academias e instituciones educativas que redujeron lo anterior a algo menos formal y técnico pero mucho más manejable como:

   COPY <fuente> <destino>

   COPY <archivo a copiar> <copia del archivo>

   COPY <archivo1> <archivo2>

dándose ejemplos simplificados tales como:

  C> COPY A:\DOCS\VERSION8\reporte5.doc C:\TEMP\REPORTES\BORRADOR\respaldo.doc

Reconociendo una necesidad imperiosa, fue así como aparecieron programas de aplicación que se encargaron de darle una interfaz gráfica intuitiva a los sistemas operativos DOS de las computadoras personales IBM, destacando entre ellos PC TOOLS DELUXE introducido por la empresa Central Point Software. Lo extraordinario de este programa es que no requería que la computadora tuviese instalada una tarjeta de expansión para permitir que la máquina pudiera llevar a cabo graficados en la pantalla así fuese graficados primitivos y en monocromo, bastó con recurrir a los pocos elementos gráficos proporcionados dentro de la convención ASCII extendido desde el ASCII decimal 176 hasta el ASCII decimal 223 (véase en los apéndices al final de esta obra “El código ASCII”) así como tomar el control directo de la porción de la memoria de la máquina asignada a la impresión de caracteres ASCII en la pantalla para producir una muy buena simulación de una interfaz gráfica sumamente intuitiva bautizada como PC SHELL, una especie de “concha” que se encargaba de “envolver” al sistema operativo DOS sin intención alguna de proclamarse como sistema operativo (no lo era, era simplemente una interfaz gráfica), escondiendo la ventana de líneas de comandos DOS para darle un aspecto puramente visual al sistema operativo:




Increíblemente, PC SHELL solo requería 10 Kilobytes de memoria para funcionar a toda su capacidad al ser encendida la máquina (el funcionamiento automático de PC TOOLS  al llevarse a cabo el encendido de la máquina se lograba modificando el archivo de texto del sistema AUTOEXEC.BAT durante el proceso de primera instalación de PC TOOLS). Y más increíble aún es que PC TOOLS podía funcionar con un Mouse (si había instalado uno en la máquina) aunque -lógicamente- sin el cursor puntero en forma de flecha al que estamos acostumbrados hoy en los monitores a color de alta resolución. Comparando la pantalla típica de PC SHELL (con sus dos ventanas características, la ventana izquierda conteniendo el árbol de directorio identificada bajo “Tree 1”, y la ventana derecha conteniendo el listado de archivos bajo “File list 1”):




con la ventana típica del Administrador de Archivos de Windows 3.1:




o la ventana típica de la interfaz gráfica Explorer en Windows XP de la cual se muestra la siguiente captura de imagen:




podemos concluír que casi todos los elementos (líneas de menú, barras de desplazamiento, distribución jerárquica de directorios en la ventana izquierda y los archivos contenidos en cada directorio seleccionado mostrados en la ventana derecha, etc.) bajo gráficos pioneros concebidos por los creadores de PC TOOLS han sido incluídos en las interfaces gráficas de la gran mayoría de los sistemas operativos usados en la actualidad y ciertamente en las interfaces gráficas de todos los sistemas operativos Windows elaborados por la empresa Microsoft (Windows 95, Windows Me, Windows XP, Windows Vista, Windows 7, Windows 8, Windows NT). Pero PC TOOLS no solo fue un programa pionero que contribuyó a sentar el patrón convencional para las interfaces gráficas de todos los sistemas operativos modernos (ninguno de los cuales usa ya la obsoleta ventana de líneas de comandos de texto). Como parte de su paquete de herramientas, incluyó una herramienta que bautizaron como el Clipboard (Portapapeles) que permitía “recortar” o “copiar” una porción de texto de un documento para empastar esa porción de texto en otro documento, formalizando el concepto de “copiado y empastado” de uso tan cotidiano hoy en día. También se incluían dentro del paquete de herramientas algo bautizado como el “Desktop” (Escritorio) en el cual se podían encontrar entre otras cosas un editor de texto llamado NOTEPADS (equivalente al Bloc de Notas en los sistemas operativos de Microsoft), cuatro calculadoras (una Calculadora Algebraica para cálculos aritméticos, una Calculadora Financiera para cálculos financieros y contables, una Calculadora para Programadores y una Calculadora Científica), un programa DATABASES elaborador de bases de datos compatibles con las bases de datos elaboradas con los entonces populares programas dBASE tanto dBASE III como dBASE IV,  y hasta un programa llamado TELECOMMUNICATIONS que permitía el envío o recepción de datos digitales a través de las líneas telefónicas para máquinas conectadas a un modem compatible con los modems Hayes (el estándard de la industria en ese entonces), así como una agenda llamada APPOINTMENT SCHEDULER. Por si esto fuese poco, PC TOOLS también incluía varias utilerías como un analizador de la desfragmentación del disco duro así como un desfragmentador (identificado como COMPRESS DISK). Y para los monitores a colores que ya estaban empezando a hacer su aparición en ese entonces (aunque de baja resolución y con una gama limitada de colores), PC TOOLS permitía configurar su interfaz gráfica al gusto del usuario.

Sin embargo, PC TOOLS no era un sistema operativo, requería de los recursos del sistema operativo DOS para poder funcionar, y como era un programa de aplicación que se vendía por separado para ser instalado como una simple “concha” de envoltura siendo por lo tanto un programa independiente (algo así como los programas antivirus) sin ser incluído como parte integral del sistema operativo de ninguna computadora personal, posiblemente esta es la razón por la cual no se le ha dado a PC TOOLS el importancia que merece por haber iniciado la era de interfaces gráficas GUI (Graphical User Interface) a través de las computadoras domésticas vendidas por IBM. Pero el usuario de hoy tal vez pueda darse cuenta de que muchas de las cosas que hoy se puede hacer con la versión más reciente y actualizada de un sistema operativo Windows de Microsoft se podían hacer con la misma facilidad con el programa PC TOOLS. El mérito de Microsoft, en todo caso, fue el de haber introducido el concepto de objetos y la programación orientada-a-objetos mediante una programación visual para simplificar la programación y el manejo de los objetos manipulados mediante las interfaces gráficas.

En esa época de competencia intensa por estandarizar el uso de interfaces gráficas intuitivas y amigables para el usuario, quizá la computadora de uso casero que más llamó la atención en ese entonces fue la computadora Apple 1, concebida e impulsada por dos invividuos casi desconocidos en ese entonces, Steve Wozniak y Steve Jobs, los cuales concibieron e impulsaron el sistema operativo Mac System 1 lanzado por vez primera el 24 de enero de 1984 y cuya interfaz gráfica presentaba el siguiente aspecto:




La computadora Apple 1 sería superada pronto por la computadora Lisa también de la empresa Apple fundada por Steve Jobs, y es a la que usualmente se le concede el honor de haber implementado como parte integral de su sistema operativo la primera interfaz gráfica en una computadora comercial, apoyándose en los trabajos de investigación llevados a cabo por el Centro de Investigación en Palo Alto (California) de la empresa Xerox. Para que la interfaz gráfica pudiera tener el éxito que tuvo, fue necesario que previamente se hubiera inventado ese accesorio que podemos considerar como revolucionario en su momento: el Mouse. Este accesorio ya existía desde antes de la introducción de la interfaz gráfica, inclusive desde antes de la introducción de los monitores de color, aunque su uso en pantallas monocromáticas de texto con caracteres blancos sobre un fondo negro parecía algo fuera de lugar. El mouse es lo que contribuyó de manera significativa a la aceptación masiva de la interfaz gráfica popularizada por la computadora Lisa. Ante la enorme aceptación del producto, esta misma proeza fue repetida por Apple con la introducción en 1984 de su computadora Macintosh. Este avance significativo que marcó el futuro de la computación casera con el eventual abandono del viejo sistema de interacción mediante una ventana con comandos de línea no pasó desapercibido para la empresa Microsoft que había elaborado el sistema operativo PC-DOS para las computadoras personales vendidas por IBM. Un año después del lanzamiento de la computadora Macintosh, y en lo que debió de haber sido un esfuerzo sobrehumano requiriendo una gran inversión de recursos, Microsoft lanzó al mercado su propia versión de una interfaz gráfica, una interfaz gráfica a la que muy apropiadamente le pondría el nombre de “Windows” que significa “ventanas”. Esta que fue la primera versión de Windows era la respuesta de Microsoft a la interfaz gráfica promovida por Apple, y no era un sistema operativo en sí sino simplemente un programa ejecutable que echaba a andar desde la ventana de línea de comandos una interfaz gráfica, acompañada de un conjunto de herramientas útiles para ser usadas a través de la interfaz gráfica. La primera introducción de Windows en su versión 1.0 que presentaba el siguiente aspecto en su interfaz gráfica que trataba de imitar el Mac OS de Apple (ampliar imagen para mayor detalle):




pasó ignorada, vista por muchos consumidores como un mero “yo también” copiándole su estilo a Apple. Esto ocurrió cuando los monitores de alta resolución a colores como hoy los conocemos no existían y lo único que había era monitores sumamente caros de baja resolución que apenas estaban siendo introducidos para reemplazar a los monitores monocromáticos en los cuales las primeras funciones de gráficado estaban siendo implementadas por tarjetas de apoyo como la tarjeta Hercules Graphics Card, esto además de que los procesadores Intel 80286 de 16 bits carecían de la potencia de cómputo necesaria para llevar a cabo cálculos intensivos de graficados. La siguiente versión de Microsoft Windows 2.0 (ampliar imagen para mayor detalle):




tampoco despertó mucho entusiasmo. La situación comenzó a cambiar cuando, finalmente, en 1990, con la convergencia simultánea del procesador Intel 80386 de 32 bits y mejores sistemas de graficado VGA, la gente comenzó a tomar nota de la interfaz gráfica Windows 3.0. Cuando la interfaz gráfica Windows 3.1 fue puesta a la venta en el verano de 1992, las ventas de software elaborado para sacarle provecho a la interfaz gráfica Windows 3.0 empezaron a superar por vez primera las ventas del software elaborado para funcionar con el sistema operativo DOS (ampliar imagen para mayor detalle).




En las capturas de imagen mostradas arriba, no hay ningún “Botón de Inicio” (Start) como el que se suele encontrar en los sistemas operativos Windows de Microsoft en la esquina inferior izquierda, esto en virtud de que todavía Windows 3 no era un sistema operativo que tomara el control de la máquina desde que era encendida.

Una cosa que no fue prevista por los ingenieros que diseñaron la PC original de IBM fue que miles de usuarios leales a la hoja de trabajo Lotus 1-2-3 (predecesora de la hoja de trabajo Excel de Microsoft), sintiéndose liberados de las limitaciones impuestas por la barrera previa de 64 Kbytes (impuesta a su vez por el uso de procesadores de 8 bits en lugar de los más avanzados procesadores de 16 bits con los que IBM lanzó sus máquinasw al mercado), empezaron a escribir hojas de trabajo Lotus y bases de datos que muy pronto se toparon con la barrera de los 640 Kilobytes. Estos usuarios constituían un enorme mercado potencial para cualquier cosa que pudiera ayudarles a romper dicha barrera pero sin tener que verse obligados a desechar y perder lo que ya estaba guardado en los archivos Lotus de muchas compañías, sin verse obligados a perder las miles de hojas de trabajo que ya se habían sido invertidas en la elaboración de tales hojas de trabajo. En virtud de esta presión para resolver lo que parecía ser un problema, se formó un consorcio integrado por Lotus, Intel y Microsoft, en el cual se concibió un método para ampliar la memoria utilizable, acordando la creación de la especificación de memoria expandida (EMS, Expanded Memory Specification), conocida también como memoria LIM (acrónimo de siglas que simboliza el consorcio Lotus-Intel-Microsoft), que consistió en agregarle una tarjeta interna con más memoria RAM a la máquina en una de las tarjetas de expansión disponibles internamente para tales efectos, con un marco de página (page frame) de 64 Kilobytes puesto en el área generalmente inutilizada entre 640 Kilobytes y 1 Megabytes, y accesarla mediante el truco de páginas de memoria o memoria paginada.

En realidad, más que simplemente apoyar el uso de una cantidad mayor de memoria RAM para atender las necesidades particulares de los usuarios de las hojas de trabajo Lotus, Microsoft tenía puestos sus ojos en algo mucho más ambicioso que ciertamente requeriría de una cantidad mayor de memoria RAM. La empresa Apple encabezada por Steve Jobs estaba convencida de que con la introducción de sus computadoras personales el gigante IBM tenía las intenciones de acabar con Apple, y Steve Jobs respondió empezando a incorporar varias innovaciones consideradas avanzadas para su época. Una de tales innovaciones (de hecho, la más importante), fue el uso de una interfaz gráfica en lugar de una interfaz de línea de comandos, apoyada por un invento reciente, el Mouse. La idea era poner en la pantalla íconos gráficos asociados con algunas de las aplicaciones más importantes, las cuales se podían echar a andar con un simple clic o doble-clic del Mouse con el cursor gráfico del Mouse posicionado dentro del ícono. Con esto, ya no era necesario andar buscando dentro de directorios y sub-directorios algún archivo ejecutable ni tener que recordar el nombre del archivo ejecutable escribiéndolo en una línea de texto de la ventana de comandos para echar a andar la aplicación. Con un clic o doble-clic sin tener que memorizar nada se podía poner en marcha cualquier programa.

La aparición de las máquinas “clones” elaboradas con componentes fabricados en países con mano de obra barata empezó a sacar fuera del mercado de las computadoras personales a IBM. Ya para entonces para atender la demanda de un sistema operativo para esas máquinas clonadas, Microsoft había puesto a la venta un sistema operativo idéntico en todos respectos al sistema operativo PC-DOS, su propio sistema operativo bautizado como MS-DOS basado en una ventana única de línea de comandos, con la garantía de plena compatibilidad entre ambos sistemas operativos. De este modo, PC-DOS era un sistema operativo elaborado por Microsoft para las computadoras vendidas por IBM bajo el logo IBM, mientras que MS-DOS era el mismo sistema operativo pero puesto a la venta para los compradores de máquinas “clones” compatibles con las máquinas IBM.

Sin esperar a que hiciese su aparición un procesador más potente de 32 bits (en lugar del procesador de 16 bits que estaba siendo usado en las computadoras IBM y sus clones compatibles), y sin esperar a que cayese en forma dramática el precio de las memorias RAM, pero aprovechando el hecho fortuito de que ya para entonces estaban apareciendo los discos duros que hacían posible el almacenamiento en las computadoras personales de una cantidad mayor de archivos accesibles rápidamente, inspirada en la innovación introducida por Apple la empresa Microsoft lanzó al mercado su programa Windows 3.0, el cual fué substituído rápidamente por Windows 3.1. Ambos son frecuentemente referidos como Windows 3.x. No era un sistema operativo, era simple y sencillamente un programa de aplicación que se echaba a andar desde la línea de comandos. La máquina seguía siendo encendida y arrancada desde el sistema operativo MS-DOS. Pero Windows 3.0/3.1 incorporaba ya muchos de los elementos que vemos en las máquinas de la actualidad. Y no tardaría en ser substituído por Windows 95, el primer sistema operativo en toda la extensión de la palabra con una verdadera interfaz gráfica elaborado por Microsoft.

En su esfuerzo por retomar el liderazgo en la venta de computadoras personales, IBM introdujo una nueva máquina con su propia arquitectura propietaria diferente de las computadoras PC, PC XT y PC AT, la Personal System/2, con su propio sistema operativo exclusivo de IBM, el OS/2, para el cual contrató nuevamente los servicios de Microsoft con la expectativa de que Microsoft incorporaría dentro de OS/2 la nueva tecnología informática que estaba siendo implementada en Windows NT, el cual era un verdadero sistema operativo en toda la extensión de la palabra con capacidades para interconexión en redes y del cual su línea más conocida fue Windows NT 3.51.

La alianza entre IBM y Microsoft se tornó tensa, y eventualmente ambas empresas se desentendieron tomando cada una de ellas su propio camino.

Al romper su asociación con Microsoft, IBM perdió el apoyo a los vastos recursos de software desarrollados por Microsoft para su línea de productos Windows NT, algo que IBM inclusive con todos sus vastos recursos no podía remediar de un día para otro. Por otro lado, al poner a la venta su propia línea de computadoras PS/2 que no podían ser clonadas con un sistema operativo caro de uso exclusivo de IBM, la demanda por las computadoras personales IBM cayó aún más, e IBM jamás se pudo recuperar de los golpes que se dió a sí misma por lo que fueron malas decisiones gerenciales.

Los microprocesadores por otra parte continuaron aumentando en grado de sofisticación, pero no había ya una empresa fuerte como IBM que marcara el camino a seguir para los sucesores clonados de las máquinas IBM PC XT y AT. Para llenar este vacío, se crearon dos consorcios independientes de estándares, el primero dando apoyo a la estandarización de las convenciones de hardware para el modelo SCSI (Small Computer Systems Interface), y el segundo dando apoyo a la estandarización de las convenciones de hardware para el modelo EISA.

Las primeras computadoras personales que antecedieron a las computadoras personales IBM usaban procesadores de 8 bits, lo cual implicaba que un procesador solo podía manejar un byte a la vez. La primera computadora casera IBM introdujo el procesamiento de 16 bits, que más que doblaba la velocidad de procesamiento porque el doble de la cantidad de datos podían ser movidos al procesador usando la mitad del número de operaciones requeridas. A partir de la introducción del circuito integrado 80386, el hardware quedó habilitado para poder ejecutar programas de 32 bits, aunque el sistema operativo DOS y la interfaz gráfica Windows 3.1 permanecieron como programas de 16 bits. Por otro lado, aunque los sistemas operativos OS/2 de IBM, Windows NT de Microsoft y algunos “sabores” de UNIX tenían la capacidad para poder manejar programas de 32 bits, estos sistemas operativos nunca fueron abrazados en forma significativa por el gran público consumidor. Esto empezaría a cambiar con la introducción por parte de Microsoft de su sistema operativo Windows 95, el primer sistema operativo de 32 bits que logró ganar aceptación comercial universal. Obsérvese que estamos hablando de Windows 95 como un sistema operativo y no como una mera interfaz gráfica; esta es la gran diferencia entre Windows 3.1 y Windows 95, el primero era una interfaz gráfica, un programa ejecutable que corría al ser invocado desde la ventana de líneas de comandos DOS, mientras que el segundo se apoderaba desde un principio y en forma automática de los recursos de la máquina al ser encendida la máquina sin tener que ser ser invocado por el usuario desde la línea de comandos DOS.

Es en esta época crucial cuando se conjugan al mismo tiempo avances significativos tanto en el hardware como en el software. Es en esta época cuando empiezan a popularizarse los lectores de CD-ROM capaces de poder “quemar” discos CD y no solo leerlos, y empiezan a ser instaladas masivamente en las ranuras de expansión de las computadoras las tarjetas de sonido Sound Blaster elaboradas por la empresa Creative, dándole de este modo a las computadoras una capacidad para la cual primeras computadoras no habían sido creadas: la reproducción de música de alta calidad a través de bocinas externas.

La introducción de Windows y su interfaz gráfica trajo forzosamente consigo un nuevo paradigma de programación. Anteriormente, bajo el sistema operativo DOS, los programas que podían ser elaborados en algún lenguaje como BASIC consistían principalmente de diálogos interactivos. El usuario echaba a andar el programa, el programa le pedía al usuario algún dato o estaba a la espera de alguna acción del usuario, el usuario proporcionaba el dato o llevaba a cabo alguna acción, la computadora procesaba y tras ello volvía a pedir otro dato o quedaba a la espera de otra acción, hasta que el programa era cerrado por el usuario. La interfaz gráfica trajo de inmediato algo que no era factible con la interfaz basada en líneas de comandos de texto: la capacidad de poder tener abiertos dos o más programas ejecutándose simultáneamente (por ejemplo, un editor de texto como el Bloc de Notas y la Calculadora) sin necesidad de tener que estar cerrando un programa para poder abrir otro, en lo que hoy se conoce como la capacidad multitareas, algo que tiene que ser tomado en cuenta al momento de elaborar un programa de aplicación para este tipo de entorno para que no haya conflicto con otros programas que se estén ejecutando al mismo tiempo. Sin embargo, hay otro cambio más radical y de fondo que impuso el abandono de los lenguajes tradicionales de programación para poderle sacar el máximo provecho a una interfaz gráfica. No se requiere experimentar mucho con un entorno gráfico Windows para darse cuenta de que varias de las cosas que tenemos puestas en el “Escritorio” (el Desktop, la pantalla principal desde la cual el usuario puede lanzar programas de aplicación y manipular archivos y recursos de su máquina) pueden y deben ser consideradas como objetos de un tipo muy especial, objetos que poseen datos (llamados propiedades), que poseen funciones especializadas que se pueden echar a andar desde un objeto (llamadas métodos) y que son capaces de poder responder a eventos iniciados por el usuario a través de manejadores de eventos. Estos conceptos derivan directamente del entorno gráfico que trajo consigo Windows. Puesto en términos sencillos, un objeto es una entidad en la memoria de la computadora que contiene datos y el código necesario para poder actuar sobre esos datos. Tomemos por ejemplo el ya arcaico sistema operativo Windows 95 y sus actualizaciones hasta Windows XP, en el cual un atajo (en inglés, shortcut) es un objeto que sabe acerca de un programa, carpeta o documento; y también posee el programa para reaccionar ante diferentes tipos de eventos tales como un clic del botón derecho del mouse con el puntero del mouse colocado dentro del objeto para abrir un menú de opciones, un doble-clic del botón izquierdo para echar a andar un programa, un clic manteniendo presionado el botón para arrastrar el objeto hacia otro archivo, etc. El sistema operativo Windows genérico utiliza el Escritorio para presentarle al usuario todo lo que hay en el sistema como un objeto. Todo lo que aparece y es puesto en el Escritorio por otras ventanas es un objeto asociado con algún recurso subyacente como una impresora, un disco duro, o una escaneadora. Podemos darnos cuenta de que un objeto en Windows posee todas las características que se han descrito con el solo hecho de posicionar y mantener posicionado el puntero del mouse dentro del objeto, con lo cual obtendremos las propiedades o datos del objeto. Si con el puntero del mouse dentro del objeto hacemos un clic en el botón derecho, dependiendo del objeto obtendremos un menú de opciones. Y si hacemos doble-clic en el objeto, echaremos a andar un programa de aplicación si el objeto es un programa ejecutable (como la hoja de cálculo Excel) o abriremos una carpeta si el objeto es una carpeta que nos permitirá inspeccionar los contenidos de la carpeta (archivos, y quizá otras carpetas):




De este modo, podemos dar por hecho de que cada ícono en Windows representa un objeto. En este modelo, el sistema operativo Windows es manejado mediante eventos (en inglés este tipo de respuesta es conocida como event-driven), lo cual significa que permanece sentado en el fondo adjudicando servicios del sistema en respuesta a eventos que el usuario ocasiona que sean activados. Cuando ocurre un movimiento del mouse, cuando ocurre un clic del mouse, la opresión de una tecla en el teclado o algún otro evento iniciado por el usuario, el sistema operativo se da cuenta de ello y responde generando un mensaje de evento. Un mensaje es la manera que tiene Windows de hacerle saber a un objeto que tiene que hacer algo. Al igual que los humanos, todos los objetos son individuales pero comparten las mismas características, lo único que los hace diferente son los datos de los que son portadores. El hecho de que todo dentro de Windows y sistemas operativos similares pueda ser representado y manejado como un objeto es lo que conduce en forma directa e inevitable a lo que se conoce como la programación orientada-a-objetos, lo cual rompe por completo con los viejos paradigmas de programación en lenguajes clásicos de alto nivel como FORTRAN, APL, PL/1, Pascal, etcétera, aunque esto es algo de lo que no se da cuenta el usuario común y corriente sino el programador de sistemas y el programador de programas de aplicaciones.

Precisamente por ser Windows 95 un sistema operativo y no una simple interfaz gráfica invocada como un mero programa de aplicación, tras este sistema operativo aparece en todas las versiones de Windows algo que estaba ausente en Windows 3.1: la barra de tareas en el borde inferior de la pantalla que permite minimizar las ventanas de aplicaciones que se están ejecutando, así como el botón de “Inicio” (Start) usualmente puesto en la esquina inferior izquierda de la pantalla, mismo botón a través del cual se llevan a cabo las rutinas para el apagado de la computadora.

El sistema operativo Windows 95 fue reemplazado por una versión todavía más estable y robusta del mismo, el sistema operativo Windows 98 capaz de poder manejar programas de 16 bits y de 32 bits, que resolvió conflictos de hardware y software que estaban siendo encontrados previamente, y el cual fue actualizado a su vez con Windows 98 Second Edition. Con Windows 98 se consolida la introducción de los puertos USB que terminará haciendo obsoleto el uso de diskettes magnéticos para el almacenamiento permanente de archivos así como el respaldo de materiales que previamente eran guardados en el disco duro. La obsolescencia de los diskettes magnéticos es acelerada con la introducción de dispositivos portátiles de memoria USB capaces de almacenar inicialmente 512 Megabytes para empezar a almacenar posteriormente decenas de Gigabytes. Este apoyo al uso de puertos USB ya había empezado con la introducción de una versión actualizada de Windows 95, el Windows 95 OSR 2, requiriendo un proceso previo dedicado de instalación para poderse activar y reconocer los puertos USB. Sin embargo, aún con Windows 98 Segunda Edición era necesario instalar en el disco duro de la máquina los programas device drivers (controladores de dispositivos) para que Windows 98 pudiera reconocer cada dispositivo USB que fuese conectado a la máquina por vez primera. Con la introducción posterior de Windows XP y aprovechando el aumento en la capacidad de memoria de los dispositivos USB, el proceso de primera instalación de los dispositivos USB es automatizado al ser suministrados los controladores de dispositivos dentro de los dispositivos USB en vez de ser suministrados en un disco CD de instalación.

La versión posterior de Windows que siguió a Windows 98, Windows Millenium o Windows Me, resultó un sistema operativo tan inestable plagado de tantos problemas que en Microsoft muchos prefieren no recordar esa triste experiencia, la cual fue corregida con la puesta en venta del sistema operativo Windows XP.

Como el paso necesario para enfrentar la introducción y adopción de procesadores de 64 bits, Microsoft lanzó su iniciativa .NET. Microsoft NET. Del mismo modo, la programación visual fue actualizada y mejorada complementando la metodología usada en el entorno de desarrollo Visual Studio para impulsar en cambio la adopción de un nuevo lenguaje de programación bautizado por Microsoft como C#, que debe leerse como “C sharp” o “C sostenido” en virtud de que el símbolo “#” representa lo que en música equivale al “do sostenido” o “C sostenido” en notación inglesa, con la intención de dar a entender que este nuevo lenguaje de programación es superior “en tono” al lenguaje C y demás versiones del mismo.


Computación para las masas


La continuada microminiaturización de los circuitos integrados aumentando la densidad de integración de los mismos al ponerse más y más componentes en espacios cada vez más reducidos posibilitó la aparición de las tabletas, y los teléfonos celulares equipados con capacidades de procesamiento. El teléfono celular de hoy es de hecho el resultado de una simbiosis entre los teléfonos celulares de antaño con los cuales sólo se podían hacer y recibir llamadas telefónicas inalámbricas y las microcomputadoras en las cuales se han integrado todas las funciones propias de una computadora portátil, y las calculadoras que vienen integradas en los teléfonos celulares son prueba de ello. A esta revolución informática ha contribuído también el diseño de interfaces gráficas cada vez más inutuitivas en todas las aplicaciones que se ejecutan en los dispositivos de cómputo.

Para completar y redondear la aceptación masiva del enorme poder de cómputo que se empezó a vender a un costo relativamente bajo en los inicios de la década de los noventas, además del uso que se les daba a las computadoras caseras para elaborar documentos de texto y hojas de cálculo se empezó a popularizar el uso de los módems caseros para conectarse a lo que era una novedad en aquél entonces: la red de redes Internet. Y para que esta dejara de ser una herramienta confinada a una muy reducida élite de científicos compartiendo trabajos especializados alrededor del mundo, hizo su aparición un navegador que rompió el esquema del lenguaje críptico de comandos de línea reemplazando todo por una interfaz gráfica, el navegador Mosaic lanzado el 22 de abril de 1993:




a lo cual siguió la introducción del navegador Netscape Navigator (ampliar imagen para mayor detalle):




que en su época de oro fue el navegador más vendido alrededor del mundo, abriendo la puerta para el uso de Internet a través de la computadora doméstica a millones de usuarios alrededor del mundo. El crecimiento explosivo del uso de Netscape y la posibilidad de que, al no estar basado el navegador Netscape en una plataforma en particular o en un sistema operativo exclusivo de una empresa privada como Microsoft, dicho navegador pudiera actuar como una especie de sistema operativo mundial sin costo alguno reemplazando los sistemas operativos instalados en las máquinas, fue algo que asustó en su momento a Microsoft y prácticamente obligó a dicha empresa a entrar al ruedo para no quedar fuera de la revolución explosiva que se dió con el nuevo fenómeno informático, introduciéndose Microsoft a la competencia con la introducción de su navegador Internet Explorer que fue ofrecido no solo como parte integral de todos sus sistemas operativos sino inclusive ofrecido sin costo alguno (descargable en forma gratuita) a cualquiera que quisiera instalarlo en su máquina. A estos navegadores siguieron otros navegadores como Mozilla Firefox y Chrome, llevándonos a lo que disfrutamos ahora con comunicaciones audiovisuales y correos electrónicos instantáneos. De este modo, viendo los hechos históricos en su conjunto, podemos concluír que el avance explosivo en el uso de la computadora, puesta en manos de prácticamente cualquier persona, ha sido el resultado combinado de varias historias diferentes entrelazadas entre sí en combinación con avances espectaculares que se han estado dando en cuestiones de microelectrónica.