domingo, 19 de enero de 2014

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