[*MiIT}– Computación Personal, herramienta indispensable. 5: Lenguajes y programas.

Carlos M. Padrón

Un programa está compuesto por instrucciones que le dicen a la computadora, paso por paso, lo que debe hacer para obtener lo que de ella se quiere. Estas instrucciones se le daban inicialmente de una en una (MARK I) y luego, al aumentar la capacidad de memoria (ENIAC), se pudo almacenar en ella un programa completo, siempre y cuando el total de instrucciones de que constaba el programa cupiera en la memoria que la computadora tenía disponible para ese fin.

Con el concepto de programa apareció el de Lenguaje de Programación, o conjunto de comandos ideado para escribir programas destinados a obtener soluciones en un área específica —como el FORTRAN (FORmula TRANslation), para matemáticas; o el COBOL (COmmon Business Oriented Language) para negocios— o, para ahorrar espacio de memoria, el ASSEMBLER, llamado también en español Ensamblador.

Así, para un científico resultaría más apropiado y fácil programar en Fortran que en Cobol, pero para un especialista financiero sería mejor el Cobol que el Fortran. Con el tiempo surgieron más y más lenguajes (Pascal, Algol, PL/1, Basic, C, C+, etc.). Y en muchos casos era posible —y sigue siéndolo con los lenguajes en uso hoy— que para programar la solución a un determinado problema, un programador usara Fortran, otro Cobol, otro Assembler, etc.., y todos obtuvieran el mismo resultado.

Los lenguajes de programación se dividen, además de por la especialización, por su grado de aproximación al lenguaje humano. Si son parecidos a éste, se les califica como orientados al usuario, pero sin son más parecidos al lenguaje de las computadoras que al humano, se les califica como orientados a la computadora, o “lenguajes de máquina”.

Los primeros, que generalmente son más fáciles de aprender y usar, requieren de un traductor ya que, al fin y al cabo, la computadora sólo entiende su propio lenguaje, y si esperamos que entienda el nuestro necesitaremos lo mismo que cuando, si no hablamos chino, queremos que un chino nos entienda: un traductor.

El traductor, o “compilador”, no es más que otro programa que traduce a lenguaje de máquina los lenguajes de otro tipo, y que, si bien antes efectuaban su trabajo de traducción en una operación aparte y dedicada sólo a eso, desde principios de los años 60 se les comenzó a almacenar, al igual que los programas que ellos deben traducir, en la memoria de la computadora.

Es común que oigamos decir que ciertos lenguajes ocupan más memoria que otros, pero en realidad es el compilador de ese lenguaje —cada lenguaje necesita su propio compilador— el que ocupa la memoria, pues éste recibe el programa en forma “fuente” (tal y como lo escribió el programador), y lo convierte a forma “objeto” (a lenguaje de máquina), forma ésta que ocupa menos memoria.

Un compilador será tanto más complejo y ocupará tanta más memoria cuanto más parecido al lenguaje humano sea el lenguaje de programación que debe traducir. Y, en general, un programador necesitará menos tiempo, pero usará más memoria de la computadora, cuando programa en un lenguaje orientado al usuario.

Pero hoy día, dada la abundancia de memoria y su bajo precio, las complejidades antes descritas son casi “transparentes” para el programador —o sea, no le causan mayor problema—, pues resulta más barato comprar memoria en abundancia que pagar el tiempo de programación que requeriría el uso de lenguajes de máquina. De aquí que los lenguajes de programación sean cada vez más orientados al usuario, y con comandos que son términos del lenguaje humano común, como podrían ser “Ve a”, “Transfiere”, “Imprime”, “Almacena”.

La ya referida abundancia de memoria permitió que en el ámbito de los lenguajes y compiladores se crearan las macro-instrucciones, que son instrucciones complejas que desatan la ejecución de cientos o miles de instrucciones simples, algo equivalente a cuando entrenamos a un perro para que, p.ej., a nuestra orden de “periódico”,
1) se pare
2) vaya hacia la puerta
3) se alce sobre las patas traseras
4) abra la puerta

5) salga al jardín
6) ubique en qué lugar cayó el periódico esa mañana
7) lo tome con sus mandíbulas
8) y nos lo traiga.

Antes, el programador tenían que ocuparse de dar, una a una y correctamente, estas 8 instrucciones; ahora basta con que use la macro “periódico” porque ya el perro está “programado” para desarrollarla, ejecutando, una a una y en perfecta secuencia, las 8 instrucciones que la componen.

Al igual que el perrito del ejemplo operan las computadoras: sólo obedecen instrucciones. A muy alta velocidad, pero sólo hacen eso. Y si se les da basura (instrucciones o datos erróneos), entregarán basura.

[*MiIT}– Computación Personal, herramienta indispensable. 4: Procesamiento

Carlos M. Padrón

Las velocidades de procesamiento de la memoria principal de la computadora, que determinan cuántas operaciones puede hacer ésta por unidad de tiempo, aumentaron exponencialmente con el paso del tiempo —primero de los años y ahora de los meses—, y si la velocidad de procesamiento de la MARK I se midió en segundos, la de sus sucesoras pasaron a medirse en milisegundos (un segundo dividido entre mil), microsegundos (un segundo dividido entre un millón), nanosegundos (un segundo dividido entre mil millones), y picosegundos (un segundo dividido entre un millón de millones, o billón). Son cifras que dan vértigo cuando tomamos conciencia de que un nanosegundo es a un segundo,… ¡lo que un segundo es a treinta años!.

La MARK I recibía las instrucciones por vía de una cinta de papel perforada, y las leía y ejecutaba de una en una. Pero la ENIAC (Electronic Numerical Integration And Computer) fabricada en 1946 por la Universidad de Pennsylvania para el ejército de EEUU y especialmente para cálculos científicos (con sus 30 toneladas de peso y sus 18.000 tubos ocupaba una superficie de 180 metros cuadrados, podía efectuar 300 multiplicaciones por segundo y hacer en dos horas el trabajo que a 100 ingenieros les tomaría un año), fue la primera computadora electrónica y la primera en usar programa (conjunto de instrucciones) por tablero, que representó un gran avance con respecto al programa vía cinta de papel. Se adjunta foto.

Y en 1948 aparece por primera vez, desarrollado también por científicos de la Universidad de Pennsylvania, el concepto de “programa almacenado”, o sea, residente en la memoria principal de la computadora, concepto que rige en las computadoras modernas y que permite, dadas las altísimas velocidades de procesamiento, la ejecución de varias instrucciones en forma simultánea, lo cual contribuye al aumento de la cantidad de operaciones realizadas por unidad de tiempo.

Con esto llegamos ya a los componentes básicos, capacidades de almacenamiento y velocidades de procesamiento de las computadoras de nuestros días, incluida, por supuesto, la PC (Computadora Personal).

Y el que hoy hasta la más modesta PC efectúe a velocidades de vértigo millones de operaciones por segundo, y pueda tener varias unidades de entrada, de salida y hasta mixtas, no cambia en nada el esquema básico: suministro de información, suministro de instrucciones de operación, proceso de los datos según las instrucciones, y obtención de resultados. La computadora no pueden hacer otra cosa.

[*MiIT}– Computación Personal, herramienta indispensable. 3: Almacenamiento

Carlos M. Padrón

La MARK I ya incluía en su diseño, como las modernas computadoras, el concepto de “hecha a imagen del hombre”, pues tenía un CPU (Central Processing Unit o Unidad Central de Procesamiento); unidades de input (entrada): la lectora de tarjetas/cinta perforada; y unidad de output (salida), que era una máquina de escribir eléctrica.

Con el tiempo, no sólo evolucionaron las tecnologías para construir la memoria principal de la computadora —la residente en el CPU— desde el relé hasta el chip, pasando por el tubo o válvula de vacío y el transistor (que, en comparación con el tubo, era 10 veces más rápido, 200 veces más confiable, 200 veces menos costoso, y requería 100 veces menos energía), sino también las unidades de I/O (Input/Output) llamadas, en conjunto, unidades periféricas, que están fuera del CPU.

Y así, al aplicarse la tecnología de “columna de vacío” (1950) se popularizaron.
— la cinta magnética, que puede fungir como unidad de input y también de output.
— el tambor magnético, precursor del disco magnético.
— el RAMAC (Random Access Method of Accounting and Control), primera unidad de disco magnético (1956) que constaba de un paquete fijo compuesto por 50 discos o platos que entre todos podían almacenar la para hoy más que ridícula cantidad de 50.000 caracteres, aunque era un mamotreto como puede verse en esta foto:

ramac-storage-unit

— la impresora de cadena (1959), capaz de imprimir 600 LPM (Líneas Por Minuto); y,
— la unidad de disco de paquetes removibles (1962), compuesto cada paquete por 6 discos o platos, útiles por ambas caras (ilustración 2) y con capacidad para almacenar 6 millones de caracteres por paquete.

Luego, ya en fecha reciente, apareció el disco flexible (floppy disk), el disquete, las tecnologías de impresión láser y de inyección de tinta, la pantalla, el teclado (en sustitución de la antigua consola), el escáner, el ratón, etc., y los discos duros (típicos de las PCs) cuya capacidad de almacenamiento, al igual que la de los discos usados por computadoras medianas y mainframes, se mide —a diferencia de la de sus predecesores, que se medían primero en miles de bytes (KB) y luego en millones de bytes (MB)— en GIGABYTRES (GB), o miles de millones de bytes.

[*MiIT}– Computación Personal, herramienta indispensable. 2: Bits y bytes

Carlos M. Padrón

¿Qué era la tabuladora de Hollerith? Una máquina que podía imprimir datos en una hoja con diseño de columnas —como, por ejemplo, Fecha, Concepto, Debe, Haber, Saldo— y efectuar cálculos con ellos —por ejemplo, obtención del saldo y del total vertical de los débitos y créditos—.

¿Cómo recibía esos datos? A través de las tarjetas perforadas: un pedazo de cartulina diseñada en forma de matriz de 10 filas por 80 columnas que daba un valor específico a cada perforación que con una máquina especial se hiciera en cualquiera de los puntos de intersección de las filas y las columnas.

Tarjeta perforada

Una típica tabuladora (máquina a la que sí podría llamar ordenador) leía las perforaciones, las guardaba, en su lenguaje, con el valor correspondiente, y procedía a usar esos valores según las instrucciones que se le daban a través de un tablero lleno de huecos, cada uno con funciones específicas que se activaban interconectando con cables uno ó más huecos.

Pero, ¿cuál era ese lenguaje que las máquinas entendían entonces y entienden hoy? El de los ceros (0) y los unos (1) que, por ser de sólo dos dígitos, se conoce como BINARIO, y que constituyó la gran solución lógica que hizo posible la realidad de la computación, pues aún hoy las computadoras sólo entienden cero (apagado) y uno (encendido).

Imaginemos que la memoria de una tabuladora es un gran tablero lleno de bombillos colocados en filas y en conjuntos individuales de cuatro bombillos. Se conviene que, en cada conjunto y de izquierda a derecha, el primer bombillo vale 8, el segundo 4, el tercero 2 y el cuarto 1. Si se enciende sólo el bombillo 8, pero se dejan apagados los tres restantes, el valor almacenado en ese conjunto es 8. Si se enciende el 2 y el 1, el valor es 3, etc. Y así, con sólo 4 bombillos pueden representarse todos los números del 0 al 9, y aún sobran 6 combinaciones, para un total de 16, lo que da nombre al sistema Hexadecimal (HEX).

Pero 16 diferentes combinaciones no son suficientes para representar, además de los números del 0 al 9, todas las letras del alfabeto y los caracteres especiales (como #, $, &, %, ¿, ¿, etc..) necesarios para la expresión escrita. Sin embargo, si se amplía el conjunto a ocho bombillos se tiene capacidad para representar 256 caracteres diferentes, que fue lo que se hizo, y así nació el BYTE que no es más que la unidad de memoria, compuesta por 8 bits (cada bombillo sería un bit), en la que puede almacenarse un caracter.

Bits y bytesLa memoria mínima para una máquina de aquellos tiempos fue de 1.000 Bytes, cantidad a la que se le conoce como 1KB (1 kilobyte, o sea, mil bytes, pues K = 1000). Pero como la memoria se mide por su capacidad de almacenar bits, y ésta se mide en hexadecimal (16 combinaciones en cada byte de 8 bits), a efectos de direccionamiento, 1KB son en realidad 1.024 direcciones de memoria, lo cual explica la natural confusión que nos invade cuando se nos dice que, por ejemplo, un disquete es de 1.44MB (1.44 millones de bytes, por M = un millón) y luego descubrimos que en realidad son 1.474.560 bytes a efectos de direcciones de memoria, o de capacidad real de almacenamiento, que es lo que nos interesa.

Lo que en los ejemplos previos llamamos bombillos fueron inicialmente relés, piezas electromecánicas pero siempre funcionando en base al concepto del byte compuesto por bits que, según estuvieran encendido (relé conectado) o apagados (relé desconectado) dentro de un byte, representaban un caracter diferente.

Y con estos elementos, en 1944 (¿producto de la guerra?) Howard Aiken, de la Universidad de Harvard, diseñó —e IBM construyó y envíó a Harvard— la MARK I, considerada hoy la primera computadora. Se la conoció también por las siglas ASCC (Automatic Sequence Controlled Calculator) y por el diminutivo Bessie. Su para entonces impresionante record —absolutamente ridículo hoy en día— incluía la capacidad de sumar, en apenas 3 décimas de segundo, dos números de 23 dígitos cada uno; y de multiplicar esos dos mismos números en apenas 6 segundos. Tenía 3.300 relés y 800 metros de cables, y pesaba 5 toneladas. Los datos se le suministraban vía tarjeta perforada, y las instrucciones vía cinta de papel perforada (concepto parecido al de la tarjeta). Por 15 años fue lo mejor en su campo, pero a partir de ahí comenzaron a acortarse los tiempos entre innovaciones, y así después del relé vino el tubo o válvula de vacío (1946), que había sido desarrollado por la industria de la radio; el núcleo magnético (1955); el transistor (1957), que le había dado el premio Nóbel a sus inventores en 1948; y el chip (1964), cuya tecnología ha venido mejorándose sensiblemente, primero año tras año y ahora casi mes a mes.

Así, con el tiempo la computadora ha ido obteniendo mayor velocidad, más memoria, menos peso, menos precio, …. pero sigue siendo lo mismo de tonta.

[*MiIT}– Computación Personal, herramienta indispensable. 1: Introducción

Carlos M. Padrón

Comenzando en febrero de 2002, el diario Notitarde (de Valencia, Edo. Carabobo, Venezuela) empezó a publicar en su revista dominical una serie de artículos que, bajo el título ‘Computación personal, herramienta indispensable’, escribí acerca de ese tema y como contribución con ese diario.

Para mi tranquilidad —porque me angustiaba el saber que yo tenía que escribir algo nuevo cada semana—, después de la publicación del artículo número 19, Notitarde canceló mi contribución.

En la esperanza de que estos artículos puedan ser de utilidad para alguien, los publicaré de nuevo aquí, uno a la vez, bajo la sección  MiIT y numerados del 1 al 19.

~~~

Conozco a muchas personas, hombres y mujeres de mi generación y hasta más jóvenes (o menos viejos), que manifiestan —a veces no muy abiertamente, otras sí— indiferencia o hasta aversión por la computación personal porque, según argumentan, no la necesitan, pueden vivir sin ella, es cosa de jóvenes, etc. Creo que el motivo que aleja de la computación a estas personas es el miedo; un miedo, muy natural, a no entender, a no poder y, por ello, a hacer el ridículo ante otros.

Acepto que para quienes pasen de los 50 y no hayan estado nunca cerca de esta disciplina, resulte cuesta arriba aceptarla a las primeras de cambio, pero no hay motivo para que no traten de aprender el uso práctico, y hasta me atrevería a decir que “coloquial”, de una herramienta que es hoy día casi indispensable, y lo será cada vez más, para quien quiera o necesite tener presencia y contacto activos en nuestra sociedad.

El miedo al que antes me referí lo veo como normal.

A comienzos de la década de los 80s, y por encargo expreso del presidente de un Banco, armé y comencé a dictar un seminario al que puse por nombre “Introducción a la Computación” que estaba destinado a ejecutivos bancarios de un promedio de edad de 35 años y que tenía el expreso propósito de sacarles el miedo que, según su presidente —quien, paradójicamente, rondaba los 60— tenían ellos a la computación de entonces, que era para todos, tanto programadores como usuarios, mucho menos simple que ahora.

Una vez que, después de un recorrido por los orígenes y evolución de lo que hoy llamamos computadora, entendieron que ésta es una máquina tonta que sólo puede hacer lo que se le diga que haga, y que todo el truco reside en la forma de decírselo, el miedo comenzó a remitir, y la mayoría de aquellos ejecutivos terminó conformando un grupo de entusiastas y creativos usuarios de la computación que, apoyándose en ésta como herramienta, llevaron a su Banco a una posición de privilegio.

En esta serie de pequeños artículos me propongo intentar, una vez más, sacar el miedo a la computación, en particular a lo que hoy conocemos como computación personal, y haciendo énfasis en su manifestación más común: el correo electrónico.

Para ello comenzaré con un recuento muy somero de los orígenes y evolución de la computadora, lo cual me ha dado pruebas de ser una medicina muy efectiva contra los posibles temores de estos usuarios potenciales, de quienes espero que, con las nociones que así recibirán más lo que con su estudio alcancen, pasen en poco tiempo a activos, competentes y satisfechos. Y recuerden: en esto, como en casi todo en la vida, conviene aplicar el proverbio hindú que dice que “Es la pregunta, no la respuesta, el principio de toda sabiduría”. Por tanto, pregunten sin temor al ridículo. Éste fue el principio que marcó el cambio de los ejecutivos antes mencionados.

No pretendo dictar cátedra de nada ni hacer análisis exhaustivos de los diversos conceptos que mencionaré. Sólo tocaré de tales conceptos los aspectos que resulten útiles para el propósito que señalé al comienzo: entender qué es y cómo funciona una computadora, para así perderle el miedo.

Algunos estudiosos del tema fijan los orígenes de la computadora en una máquina de sumar que, a base de engranajes, fue ideada por el francés Blas Pascal en 1642. En 1694, el alemán Godofredo Leibnitz da un paso adelante inventado una máquina que, además, multiplicaba. Y 140 años después, en 1834, un inglés, Charles Babbage, —inspirándose en un telar que, en base a unas placas con perforaciones, había inventado el francés Joseph Jacquard en 1799— inventó a su vez una máquina calculadora que fue lo mejor en su ramo por 37 años. Inspirado en ésta, el norteamericano Herman Hollerith inventó en 1890, y en base a tarjetas perforadas, una máquina tabuladora que ganó la licitación para el censo nacional de población de EE.UU.

Esta tarjeta perforada, con su diseño y el uso que de ella hacía la tabuladora de Hollerith, fue la base para el desarrollo de la máquina que aparece en 1944 y a la que, en análisis retrospectivo, se le concedería después el título de primera computadora, aunque si reiteramos en ese análisis podemos concluir que fue ésa máquina y algunas de sus sucesoras, como las llamadas ‘de registro directo’, las únicas que ameritan el nombre de ‘ordenadores’ por cuanto su principal función era ordenar datos. Opino que llamar ordenadores a los computadores o computadoras —el DRAE registra ambos términos— a partir de la aparición del sistema operativo y hasta las de hoy, es casi un insulto.

Así que fue un pedazo de cartulina lo que —con un sistema de perforaciones que podían representar los números del 0 al 9, todas las letras del alfabeto y varios caracteres especiales (ver ilustración)— se constituyó en el primer medio simple y barato para alimentar a una máquina con datos que ésta pudiera procesar. Por eso al dúo tabuladora más tarjeta perforada se la considera la “madre” de la moderna computadora.