Inicio | Editorial | Secciones | Carlín | eH? | Galería | Agenda | Números anteriores | Contacto

Escribe Federico Larumbe [+]

Ilustra Marina Gerosa (www.marinagerosa.com.ar)

La primera programadora

Ada Lovelace

Ada Lazodeamor

Ada Lazodeamor

¿En qué lenguaje se programó el primer programa? ¿En Java, en PHP, en C, en Assembler? Sería muy difícil que se programara en uno de estos lenguajes porque en 1842 faltaba más de un siglo para que se inventaran. El primer programa fue desarrollado por Ada Lovelace en ese año desarrollando en el mismo artículo científico el primer lenguaje de programación[1]. ¿Cómo puede ser que se haya programado en ese momento, si todavía la electricidad no se utilizaba en forma industrial y no existían las computadoras? De hecho fue en esos años cuando Charles Babbage ideó la primera computadora, la “máquina analítica”. El desarrollo científico que realizó Ada lo hizo en la traducción al inglés de un artículo que describía la máquina y lo firmó únicamente con sus iniciales para evitar que lo censuraran por ser mujer. Ada tuvo la posibilidad de dedicarse al estudio científico en esa época porque pertenecía a la clase alta, ya que era hija del poeta romántico Lord George Gordon Byron y luego se casó con William King nombrado Conde de Lovelace. El tamaño del artículo con las notas de traducción que agregó triplicaba el tamaño del artículo original. Si no hubiera tenido la necesidad de ocultar su identidad, el desarrollo de las notas hubieran constituido un artículo independiente con Ada no sólo como traductora sino también como autora.

La máquina analítica se utilizaría para realizar cálculos en forma eficiente y permitir a los matemáticos concentrarse en temas más interesantes que realizar cuentas. Además, la posibilidad de que estos cálculos sean hechos por una máquina, reduciría enormemente la cantidad de errores de los mismos. Sin embargo, la característica de esta máquina, a diferencia de otras propuestas anteriormente, es que puede hacer una serie de cálculos programados sin la intervención de un ser humano más que para ingresar el programa y los datos y para obtener el resultado. Además, esta serie de cálculos incluye todos los cálculos que podrían realizarse y de esta forma puede representarse cualquier programa. ¿Se puede programar un juego de fútbol o un programa para escribir textos? Sí, se puede programar esos programas también en la máquina analítica, porque se puede realizar cualquier programa que exista. La computadora actual es conceptualmente igual que la máquina de Babbage. La diferencia principal es la cantidad de memoria, ya que las computadoras que actualmente se compran en cualquier negocio tienen 50.000 veces más memoria que la ideada por Babbage[4]. La otra diferencia es la forma en que una persona interactúa con la computadora. Las primeras, utilizaban una pila de tarjetas perforadas para ingresar la información y actualmente usamos teclados. Antes se utilizaba una impresora que arrojaba los resultados una vez finalizados los cálculos, ahora usamos monitores que nos muestran la información.

¿Qué es un programa?

Charles Babbage

Charles Babbage

En un principio, Ada Lovelace y Charles Babbage se relacionaron mediante numerosas cartas y luego trabajaron en conjunto para definir la máquina analítica. La idea era que la máquina haría una serie de cálculos sin la necesidad de que intervenga una persona. Sin embargo, no se quería crear una máquina que haga siempre los mismos cálculos. Se necesitaba permitir la programación de la serie de cálculos. En otro ámbito distinto, a partir de la revolución industrial, se fabricaron máquinas que producían tejidos. Una máquina producía un mismo motivo miles de veces y también se necesitaba poder utilizar una misma máquina para producir diferentes diseños. Así fue como en 1801 se inventó el Telar de Jacquard que permitía diseñar motivos mediante una pila de tarjetas perforadas. Según si un casillero de la tarjeta estaba perforado o no, una de las agujas del telar debía subir o bajar. Entonces, la secuencia de tarjetas perforadas, determinaba una secuencia de instrucciones al telar y así se producía el tejido.

De este telar se tomó la idea para darle una serie de instrucciones a la máquina analítica. En este caso las instrucciones eran cálculos a realizar entre las distintas variables de la máquina. Conceptualmente una variable es un casillero que puede almacenar un número en un momento del proceso del cálculo y otro número en otro momento. En la máquina, una variable se implementa con una pila de discos uno arriba del otro. Cada disco contiene los diez dígitos decimales y de acuerdo al ángulo de giro del disco, vale un número u otro.  Sería como un reloj de aguja con diez números donde la aguja queda fija y lo que se mueve es el disco, no por el tiempo que pasa, sino por los cálculos que hace la máquina. Entonces, cada disco representaba un dígito y la columna un número entero. Supongamos que la máquina tiene 100 columnas de 10 discos cada una, entonces podrá manejar 100 números de 10 dígitos. A las columnas podemos llamarlas v1, v2, v3, y así siguiendo hasta v100. Una operación que puede realizar la máquina es calcular la suma de v1 y de v2 y el resultado ponerlo en la columna v10. Otra operación posible es restar dos números. Es necesario también trabajar con números negativos, por lo cual no sólo deben almacenarse los dígitos, sino también si el signo positivo o negativo. En lugar de utilizar otra forma para almacenarlo, el signo también se almacena con un disco del mismo tipo que vimos antes, con los diez dígitos posibles. Si este dígito especial es par, se considera que el número es positivo y si es impar, el número es negativo.

Las multiplicaciones y las divisiones pueden ser implementadas con sucesiones de sumas y de restas y con este tipo de operaciones, la máquina podría hacer cualquier tipo de cálculo matemático. Luego, cada tarjeta contiene una instrucción a la máquina que dice el tipo de operación a realizar, cuáles columnas se utilizan como argumentos y en qué columna se ubica el resultado, por ejemplo, “suma v1 en v2 en v100“. Se alimenta a la máquina analítica con la sucesión de tarjetas y en cada paso se ocupa de realizar la operación especificada. Es también necesario y práctico, poder repetir un conjunto de operaciones tantas veces como sea necesario. Para hacer esto bastaría con permitir retroceder las tarjetas y volver a un punto anterior del programa bajo ciertas condiciones. Este movimiento entre las instrucciones del programa permitiría repetir un conjunto de operaciones las veces que sea necesario.

Telar de Jacquard

Telar de Jacquard

Tarjetas perforadas en el Telar de Jacquard

Tarjetas perforadas

¿Qué relación tiene esta serie de números y operaciones matemáticas con el Pacman?

Veámos cómo se representa una imagen en el monitor de la computadora con números. Una pantalla está constituida por una cuadrícula de puntos llamados pixeles. Por ejemplo, la resolución de pantalla más utilizada hoy en día es 1024 pixeles de ancho y 768 pixeles de alto. Si consideramos la cuadrícula completa, son 786.432 pixeles. A su vez, todos los colores pueden ser formados por los colores rojo, verde y azul. Podemos ver esto si utilizamos tres lámparas, una de cada uno de los tres colores. Si iluminamos una pared blanca con las tres luces, formaremos el color blanco. Si iluminamos con el rojo y con el verde, formaremos el amarillo. Si además variamos la intensidad de cada lámpara, podremos generar el color que se nos ocurra. Entonces, podemos pensar que cada pixel de una pantalla tiene tres lamparitas, una roja, una verde y una azul, que brillan con distinta intensidad (si nos ubicamos cerca de un televisor que no sea LCD se pueden ver). Si la intensidad de cada componente la medimos en porcentaje (0 apagada y 100% intensidad máxima), podemos definir un color con tres números: la cantidad de rojo, la cantidad de verde y la cantidad de azul. Luego, si queremos representar un cuadro de Kandinsky con números, podemos hacerlo con una tira de números, tres por cada uno de los 786.432 pixeles de la pantalla. Así, toda imagen se puede representar con una tira de números y cualquier tira de números de 0 a 100 representa una imagen.

Descomposición en colores de un cuadro de Kandinsky

Descomposición en colores de un cuadro de Kandinsky

Ahora hagamos este ejemplo dinámico es decir que cambie a través del tiempo. La tira de números del cuadro de Kandinsky está almacenada en la placa de video de la computadora y por esta razón se ve en nuestro monitor. ¿Qué pasa si a cada uno de los números le restamos una unidad? Esto representará que cada una de las lamparitas tenga menos intensidad y así la imagen se oscurecerá levemente. Si repetimos esta misma operación hasta dejar los números en 0, haremos el efecto de oscurecer progresivamente una imagen. Este programa sencillo se puede programar tanto en nuestras máquinas como en la máquina de Babbage. La diferencia está en la longitud de la tira de números que podemos manejar y en que actualmente podemos visualizar la imagen en un monitor.

Síntesis aditiva

Síntesis aditiva

¿Los programas son todo operaciones matemáticas y números?

Las operaciones que realiza una computadora internamente se pueden reducir a sumas y restas, sin embargo, a lo largo de la historia de la computadora se crearon lenguajes más abstractos. Por ejemplo, si se necesita almacenar la cantidad de vidas que tiene un jugador del Pacman, se eligirá un nombre arbitrario vidas y se utilizará al momento de realizar operaciones, en lugar de hablar de la columna v48.

Existen distintos lenguajes de programación, distintos paradigmas de lenguajes de programación y cada uno de estos define lo que es un programa con un concepto distinto. Por ejemplo, el paradigma que se tiende a utilizar actualmente se llama Programación Orientada a Objetos[4] y define un programa como un conjunto de objetos que interactúan entre sí mediante el envío de mensajes. Se puede ejemplificar este paradigma con un juego como el Pacman. Algunos de los objetos que intervienen en este programa son el pacman, cada uno de los fantasmas, las píldoras, el tablero, las vidas, la pantalla, el teclado, la música de fondo y el juego completo. Veamos una posible dinámica que puede darse: el juego recibe un mensaje “comienza” que le dio el usuario para empezar a jugar, a partir de esto el juego le envía un mensaje “comienza” al tablero, el cual envía a las píldoras, fantasmas y el pacman un mensaje “comienza”. Cada uno de éstos, se envía un mensaje a si mismo “en posicion inicial” que les indica que deben tomar la posición de inicio en el tablero. Vemos que la dinámica es: cuando un objeto recibe un mensaje, envía un conjunto de mensajes a otros objetos o a sí mismo.

Mensajes iniciales

Mensajes iniciales

Por otro lado, el pacman y los fantasmas se enviarán a sí mismos un mensaje “avanza” cada una décima de segundo. Este mensaje significa que el objeto avanzará en la dirección que llevaba que en el caso del pacman se basará en la última tecla que presionó el usuario y en el caso de los fantasmas, en una determinada “inteligencia” del personaje. Entonces, en base a la dirección cambiará su propia posición con un mensaje “cambia posicion” que se envía a sí mismo. Además, le avisará al tablero que cambió su posición para que pueda coordinar las interacciones entre los distintos personajes. El tablero, que tiene acceso a todos los personajes, les envía a cada uno un mensaje “pacman se movió” y de esa forma cada uno puede realizar una acción que corresponda a ese hecho.

Mensajes de avance

Mensajes de avance

Por ejemplo, un fantasma recibe el mensaje “pacman se movió”, luego compara la posición del pacman con su propia posición y si es la misma, le envía un mensaje al tablero “pacman comido”. Entonces, el tablero le envía a todos los objetos el mensaje “pacman comido” y de esta forma cada uno se ubica en la posición inicial. El pacman además de ubicarse en la posición inicial, se resta una vida.

El fantasma come al pacman.

El fantasma come al pacman.

Recién vimos la dinámica de un programa bajo el paradigma de Programación Orientada a Objetos. Construir el programa se basa en definir las reglas que los objetos utilizarán para enviar los mensajes. Para cada mensaje que se pueda recibir se define qué método utilizará el objeto para manejarlo. El método consiste en una sucesión de mensajes que enviará a los otros objetos o a sí mismo. En el ejemplo, cuando el pacman recibe pacman comido, el método que maneja ese mensaje consiste en enviarse así mismo el mensaje una vida menos y luego, el mensaje en posición inicial. El conjunto de todas las reglas que definen el programa se escriben en un lenguaje formal y se utiliza un programa que traduce de este lenguaje a instrucciones en el lenguaje que maneja la computadora. De esa forma, la máquina se nutre del programa traducido y ejecuta cada instrucción tal como lo haría la “máquina analítica”.

Referencias

[1] 1843. Lovelace, Ada, Countess of. “Sketch of the Analytical Engine Invented by Charles Babbage, Esq. by L. F. Menabrea, of Turin, Officer of the Military Engineers: With Copious Notes by the Translator,” Scientific Memoirs, III, 666-731. Taylor, R. (ed.) London: R. & J. E. Taylor (Reimpreso en 1953. Bowden, B. V. Faster Than Thought. London: Sir Isaac Pitman & Sons.)

http://www.fourmilab.ch/babbage/sketch.html

[2] Ada Lovelace, la primera programadora.

http://www.laflecha.net/perfiles/tecnologia/ada_lovelace

[3] 1878. Professor Cayley, Dr. Farr, Mr. J. W. L. Glaisher, Dr. Pole, Professor Fuller, Professor A. B. W. Kennedy, Professor Clifford, and Mr. C. W. Merrifield. The Report of the Committee. Recomendaciones en contra de construir la máquina analítica.

http://www.fourmilab.ch/babbage/baas.html

[4] Adele Goldberg and David Robson, Smalltalk-80: the language and its implementation, Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA, 1983.

Publicado el 12 Enero de 2011
Comentarios

Si querés que tus comentarios aparezcan con una foto, podés ingresar una en
Globally Recognized Avatars (http://gravatar.com) con tu misma dirección de e-mail o también podés comentar la nota en Facebook.

Escribe tu comentario
Nombre *
Website
Comentario

Aviso: Su comentario pasará por moderación. Por favor, no lo reenvie. Gracias.