¿Qué hizo realmente el programa Ada Lovelace?

imagen

El episodio fundador de Microsoft es uno de los más famosos en la historia de la computadora. En 1975, Paul Allen voló a Albuquerque para demostrar el intérprete BÁSICO que él y Bill Gates habían escrito para la microcomputadora Altair. Como no tenían una computadora Altair en funcionamiento, probaron su intérprete utilizando un emulador escrito por ellos que funcionaba en el sistema informático de Harvard. El emulador se basó solo en las especificaciones publicadas del procesador Intel 8080. Cuando Allen finalmente lanzó el intérprete en una computadora Altair real, frente a la persona que esperaban que comprara su software, ni siquiera sabía si el programa funcionaría. Ella se lo ganó. Al mes siguiente, Allen y Gates fundaron formalmente la nueva compañía.

Más de cien años antes del intérprete de BASIC Allen y Gates, Ada Lovelace escribió y publicó un programa de computadora. También escribió un programa para una computadora, que solo conocía de la descripción. Pero su programa, a diferencia del intérprete BASIC, nunca se ejecutó, porque la computadora para la que fue escrita nunca fue construida.

Lovelace a menudo se llama el primer programa de computadora del mundo. Pero no todos están de acuerdo en que debería llamarse así. El legado de Lovelace resulta ser uno de los temas más candentes en la historia de la computadora. Walter Isaacson escribió que el debate sobre el alcance y los méritos de sus contribuciones es de "poca importancia académica". Inevitablemente, la disputa es alimentada por el hecho de que Lovelace era una mujer. Los historiadores han citado todo tipo de evidencia para demostrar que los honores otorgados a ella son consistentes con el caso o, por el contrario, no merecidos. Pero pasan mucho menos tiempo explicando los detalles técnicos de su trabajo publicado, lo cual es una pena, ya que son los detalles técnicos los que representan la parte más interesante de esta historia. ¿A quién no le interesaría saber cómo debería funcionar el programa escrito en 1843?

Honestamente, el programa Lovelace es difícil de explicar a la gente del pueblo. Pero son las complejidades de su programa las que la hacen tan notable. Ella merece ser llamada la primera programadora, o no, su programa fue grabado con tal precisión que superó todo lo que era antes. Pensó cuidadosamente qué operaciones se pueden combinar en grupos que se pueden repetir, inventando así un ciclo. Se dio cuenta de lo importante que era hacer un seguimiento del estado de las variables cambiantes, y se le ocurrió un registro que refleja estos cambios. Yo, como programador, me sorprendió lo mucho que el trabajo de Lovelace se parece a la experiencia de escribir software hoy.

Así que echemos un vistazo más de cerca al programa Lovelace. Ella lo diseñó para calcular los números de Bernoulli . Para comprender qué es, debe retroceder un par de milenios al pasado, al comienzo de uno de los problemas más antiguos de las matemáticas.

Suma de grados


Los pitagóricos vivían a orillas del mar Mediterráneo y adoraban a los números. Uno de sus pasatiempos era hacer triángulos de guijarros.



Una piedra, seguida de una fila de dos piedras, juntas forman un triángulo de tres piedras. Agrega otra fila de tres piedras para hacer un triángulo de seis piedras. Este procedimiento puede continuar, agregando cada vez una fila con el número de piedras aumentando en uno. Un triángulo de seis filas contiene 21 piedras. ¿Y cuántas piedras habrá en el triángulo de 423 filas?

Los pitagóricos estaban buscando una manera de calcular la suma de la siguiente fila sin sumar:

1 + 2 + 3 + ⋯ + n

Como resultado, se dieron cuenta de que si colocas dos triángulos del mismo tamaño uno al lado del otro para que formen un rectángulo, puedes encontrar el área del rectángulo y dividirlo en dos para obtener el número de piedras en cada uno de los triángulos:

1 + 2 + 3 + ⋯ + n = n (n + 1) / 2

Arquímedes estudió un problema similar. Estaba interesado en la siguiente secuencia:

1 2 +2 2 +3 2 + ⋯ + n 2

Se puede imaginar como una columna de cuadrados cada vez más grandes (que consisten en pequeños cubos), uno encima del otro en forma de pirámide. Arquímedes quería saber si había una manera fácil de decir cuántos cubos se necesitarían para crear una pirámide con, digamos, 423 niveles. Escribió una solución al problema, que también permite una interpretación geométrica.



Se pueden hacer tres pirámides juntas para que formen un prisma rectangular, en un extremo del cual hay una pequeña repisa de un cubo de altura. Esta repisa es un triángulo que obedece las mismas reglas que los triángulos de piedra de los pitagóricos. Por lo tanto, el volumen de toda la figura viene dado por la siguiente ecuación:

3 (1 2 +2 2 +3 2 + ⋯ + n 2 ) = (n + 1) n 2 + (1 + 2 + 3 + ⋯ + n)

Sustituyendo la ecuación de Pitágoras por la suma de los primeros n enteros, y habiendo realizado algunas operaciones algebraicas, obtenemos:

1 2 +2 2 +3 2 + ⋯ + n 2 = n (n + 1) (2n + 1) / 6

En 499, el matemático y astrónomo indio Ariabhata publicó su trabajo, conocido como Ariabhatia, que dio una fórmula para calcular la suma de cubos:

1 3 +2 3 +3 3 + ⋯ + n 3 = (1 + 2 + 3 + ⋯ + n) 2

La fórmula para la suma de los primeros n enteros positivos al cuarto grado se publicó solo 500 años después.

En este momento, es posible que tenga una pregunta: ¿hay algún método universal para calcular la suma de los primeros n enteros elevados a la potencia de k? Los matemáticos también estaban interesados ​​en esto. Johan Faulhaber, un matemático alemán, ligeramente avanzado en numerología, pudo derivar fórmulas para la suma de enteros hasta el grado 17, y las publicó en 1631. Pero le llevó muchos años y no dio una solución general. Blaise Pascal finalmente ideó un método generalizado en 1665, que, sin embargo, dependía de contar la suma de los números enteros elevados a grados anteriores. Por ejemplo, para calcular la suma de los primeros n enteros positivos elevados al sexto grado, primero debe aprender cómo calcular la suma de los primeros n enteros positivos elevados al quinto grado

Una solución generalizada más práctica fue dada en un artículo publicado póstumamente por el matemático suizo Jacob Bernoulli , quien murió en 1705. Bernoulli comenzó derivando fórmulas para calcular las sumas de los primeros n enteros positivos generados en el primer, segundo, tercer y cuarto grados. Los escribió en forma de polinomios:

1 + 2 + 3 + ⋯ + n = 1 / 2n 2 + 1 / 2n

1 2 +2 2 +3 2 + ⋯ + n 2 = 1 / 3n 3 + 1 / 2n 2 + 1 / 6n

1 3 +2 3 +3 3 + ⋯ + n 3 = 1 / 4n 4 + 1 / 2n 3 + 1 / 4n 2

Usando el triángulo de Pascal , Bernoulli se dio cuenta de que estos polinomios siguen un patrón predecible. De hecho, Bernoulli dividió los coeficientes de cada término en dos factores, uno de los cuales pudo determinar usando el triángulo de Pascal, y el otro para derivar de una propiedad interesante por la cual todos los coeficientes en el polinomio sumaban uno. No fue difícil entender qué exponente colocar para cada miembro, ya que también siguieron un patrón predecible. Los factores de cada coeficiente, que tenían que calcularse de acuerdo con la regla "la suma es igual a uno", formaron una secuencia que se conoció como números de Bernoulli.

El descubrimiento de Bernoulli no significaba que la suma de los primeros n enteros positivos elevados a cualquier potencia pudiera calcularse ahora de manera trivial. Para calcular la suma de los primeros n enteros positivos elevados a la potencia de k, fue necesario encontrar todos los números de Bernoulli hasta el kth. Y cada número de Bernoulli podría calcularse solo conociendo todos los anteriores. Pero calcular una larga secuencia de números de Bernoulli fue incomparablemente más fácil que contar cada suma de números elevados a una potencia, por lo que el descubrimiento de Bernoulli fue un gran avance para las matemáticas.

Repollo


Charles Babbage nació en 1791, casi cien años después de la muerte de Bernoulli. Siempre tuve una idea sobre él que desarrolló, pero no construyó, una computadora mecánica. Pero nunca entendí realmente cómo se suponía que debía funcionar esta computadora. Al final resultó que, las ideas básicas son bastante fáciles de entender. Se suponía que el programa Lovelace funcionaba en una de las máquinas Babbage, por lo que debemos tomar otra pequeña digresión y hablar sobre cómo funcionaban estas máquinas.

A Babbage se le ocurrieron dos computadoras mecánicas separadas. La primera se llamaba máquina de diferencia . Antes de la invención de las calculadoras de bolsillo, las personas dependían de logaritmos para calcular el producto de grandes números. Las tablas logarítmicas grandes no son básicamente tan difíciles de compilar, pero la cantidad de cálculos necesarios para compilarlas condujo al hecho de que en el momento de Babbage a menudo contenían errores. Molesto por esto, Babbage decidió crear una máquina capaz de crear mecánicamente tablas de logaritmos sin cometer errores.

La máquina de la diferencia no era una computadora, porque solo podía sumar y restar. Ella utilizó el método inventado por el matemático francés Gaspard de Prony , quien rompió el proceso de construir una mesa en pequeños pasos. Estos pasos solo requerían suma y resta, lo que significaba que un pequeño ejército de personas sin habilidades matemáticas podía usarse para construir la mesa. El método de Proni, conocido como el método de diferencias divididas , podría usarse para compilar una tabla para cualquier polinomio. Y los polinomios ya podrían usarse para el cálculo aproximado de funciones logarítmicas y trigonométricas.

Para imaginar cómo funcionó este proceso, considere la siguiente función polinómica simple:

y = x 2 +1

El método de diferencia dividida encuentra la diferencia entre los sucesivos valores de y para diferentes valores de x. Luego están las diferencias entre estas diferencias, y luego, posiblemente, las diferencias entre las últimas diferencias, hasta que aparece una diferencia constante. Esta diferencia se puede utilizar para obtener el siguiente valor polinómico mediante la suma.

Como el polinomio indicado tiene solo el segundo grado, podemos encontrar la diferencia constante después de solo dos columnas de diferencias:

xyDiferencia 1Dif. 2
12
25 53
3105 52
4 4177 72
5 5??2
............


Ahora, sabiendo que la diferencia constante es 2, podemos encontrar el valor de y cuando x es 5, usando una suma. Sumando 2 y 7, el último valor en la columna Diff 1, obtenemos 9. Sumando 9 y 17, el último valor en la columna y, obtenemos 26 - nuestra respuesta.

La máquina de diferencia de Babbage para cada columna de diferencia de la tabla tenía su propia columna física con engranajes. Cada engranaje representaba una posición decimal, y la columna completa representaba un número decimal. La máquina de diferencia tenía ocho columnas con engranajes, por lo que podía compilar tablas de polinomios hasta el séptimo grado. Las columnas se establecieron inicialmente en valores que coinciden con la primera fila de la tabla de diferencias, calculada de antemano. Luego, el operador tuvo que rotar el cigüeñal, lo que causó una diferencia constante para moverse alrededor de la máquina cuando los valores almacenados en cada una de las columnas se agregaron a lo siguiente.

Babbage logró construir una pequeña parte de la máquina de diferencia y usarla para demostrar sus ideas en las fiestas. Pero incluso habiendo gastado tanto dinero que habrían sido suficientes para construir dos grandes buques de guerra, no pudo terminar su auto. A principios del siglo XVIII, Babbage no encontró a nadie que pudiera producirle la cantidad adecuada de equipo con la precisión correcta. La versión funcional de la máquina de diferencia fue construida solo en la década de 1990, después del advenimiento de las máquinas de alta precisión.


Como resultado, Babbage perdió interés en la máquina de diferencia, al darse cuenta de que puede crear una máquina mucho más potente y flexible. Su " máquina analítica " se conoce hoy como la computadora mecánica de Babbage. La máquina analítica se basaba en las mismas columnas de engranajes que la diferencia, pero si la última tenía solo ocho columnas, entonces la analítica debería tener varios cientos. Una máquina analítica podría programarse con tarjetas perforadas, como un telar jacquard , y podría dividirse y multiplicarse, no solo sumar y restar. Para realizar una de estas operaciones, una parte de la máquina llamada "fábrica" ​​se reconstruiría en la configuración deseada, leería operandos de otras columnas utilizadas para almacenar datos y luego escribiría el resultado en otras columnas.

Babbage lo llamó una máquina analítica porque era lo suficientemente potente como para hacer algo parecido al matanálisis. La máquina de diferencia podría producir tablas polinómicas, pero la máquina analítica podría calcular, por ejemplo, los coeficientes de multiplicación polinomiales de otra expresión. Era una máquina increíble, pero el gobierno británico tomó la sabia decisión de rechazar la solicitud de financiación. Entonces Babbage fue al extranjero, a Italia, para tratar de encontrar apoyo allí.

Notas del traductor


En Turín, Babbage se encontró con un ingeniero italiano y futuro primer ministro, Luigi Federico Menabrea. Persuadió a Menabrea para que escribiera una descripción general de las capacidades de la máquina analítica. En 1842, Menabrea publicó un trabajo sobre este tema en francés. Al año siguiente, Lovelace publicó una traducción del trabajo de Menabrea al inglés.

Lovelace, entonces conocida como Ada Byron, conoció a Babbage en una fiesta en 1833, cuando ella tenía 17 años y él 41. Lovelace fue golpeado por la máquina de diferencia Babbage. Pero fue capaz de descubrir cómo funciona, ya que en la infancia le enseñaron matemáticas de manera activa. Su madre, Anabella Milbank, decidió que la sólida base matemática de la educación de su hija la desanimaría de la naturaleza salvaje y romántica que poseía su padre, Lord Byron , un famoso poeta. Después de reunirse en 1833, Lovelace y Babbage permanecieron en el círculo social general y a menudo correspondían.

Ada Byron se casó con William King en 1835. King más tarde se convirtió en conde de Lovelace, con lo que Ada se convirtió en condesa de Lovelace. E incluso después de haber dado a luz a tres hijos, continuó estudiando matemáticas, tomando como maestro a Augustus de Morgan, quien descubrió las leyes de Morgan . Lovelace reconoció de inmediato el potencial de la máquina analítica y aceptó trabajar con él para avanzar en esta idea. Su amiga la invitó a traducir el trabajo de Menabrea para una audiencia inglesa.

El documento contenía una breve descripción del funcionamiento de una máquina de diferencia, y luego se mostró hasta qué punto la máquina analítica lo superaría. Se suponía que la máquina analítica era tan poderosa que podría "formar el resultado de multiplicar dos números, cada uno de los cuales consta de veinte caracteres, en solo tres minutos". Menabrea dio otros ejemplos de la posibilidad de una máquina, demostrando cómo resolvería un sistema simple de ecuaciones lineales y descompondría el resultado de multiplicar dos binomios. En ambos casos, Menabrea presentó lo que Lovelace llamó "cuadros de desarrollo" que describe la secuencia de operaciones necesarias para calcular la respuesta correcta. Estos eran programas, en el mismo sentido que el programa Lovelace era un programa, y ​​se publicaron un año antes de su trabajo. Pero, como veremos, los programas de Menabrea fueron solo ejemplos de lo posible. Todos ellos eran triviales en el sentido de que no requerían ninguna ramificación o ciclos.

Lovelace agregó algunas notas a su traducción del trabajo de Menabrea, y en total resultaron ser más largas que el trabajo original. Fue allí donde hizo su principal contribución a la informática. En la nota A, que Lovelace hizo a la descripción inicial de la máquina analítica, explicó en detalle, y a veces líricamente, que esta máquina podría realizar operaciones matemáticas arbitrarias. Ella previó que una máquina como esta no se limitaría a trabajar con números, y sería capaz de procesar cualquier objeto "cuya interacción fundamental mutua pueda ser expresada por la ciencia abstracta de las operaciones, y que pueda adaptarse a los registros operativos y al mecanismo de la máquina". Agregó que algún día esa máquina podrá, por ejemplo, componer música. Tal predicción fue aún más notable porque el propio Menabrea consideró que esta máquina era solo una herramienta para automatizar "cálculos largos y aburridos" que liberarían las capacidades intelectuales de científicos brillantes para una investigación más avanzada. La previsión milagrosa de Lovelace, como se muestra en la nota A, es una de las principales razones por las que la honramos hoy.

Otra nota famosa es la nota de G. Lovelace, que comienza diciendo que, a pesar de sus impresionantes capacidades, la máquina analítica no puede ser "pensada". Es esta nota al pie de página que Alan Turing luego llamará la "objeción de Ada Lovelace". Sin embargo, continúa Lovelace, el automóvil es capaz de hacer cosas increíbles. Para demostrar la capacidad de manejar problemas más complejos, Lovelace le ofreció su programa para calcular los números de Bernoulli.

Su texto completo, en forma de una "tabla de desarrollo" ampliada, cuyo formato describe Lovelace en la Nota D, se puede ver aquí . Esta es esencialmente una lista de operaciones indicadas por símbolos matemáticos. No parece que Babbage o Lovelace hayan llegado a desarrollar un conjunto de códigos operativos para la máquina analítica.

Aunque Lovelace describió un método para calcular una secuencia completa de números de Bernoulli hasta cierto límite, su programa mostró solo un paso en este proceso. Contó el número que llamó B7, conocido por los matemáticos modernos como el octavo número de Bernoulli. Por lo tanto, su programa resolvió la siguiente ecuación:

B7 = −1 (A 0 + B 1 A 1 + B 3 A 3 + B 5 A 5 )

Aquí, cada término representa un coeficiente en una fórmula polinómica para la suma de enteros elevados en cierto grado. Aquí estamos hablando de la octava potencia, ya que el octavo número de Bernoulli aparece por primera vez en la fórmula para la suma de los enteros positivos elevados a la octava potencia. Los números B y A representan dos tipos de factores descubiertos por Bernoulli. Los números B1 a B7 son los diversos números de Bernoulli numerados según Lovelace.Los números A0 a A5 son multiplicadores de los coeficientes que Bernoulli podría calcular usando el triángulo de Pascal. Los valores de A0, A1 y A3 se muestran a continuación. Aquí n denota el índice de un número de Bernoulli en una secuencia de números impares de Bernoulli que comienzan con el primero. En el programa Lovelace, n = 4.

A 0 = −1 / 2⋅ (2n - 1) / (2n + 1)

A 1 = 2n / 2

A 3 = 2n (2n - 1) (2n - 2) / (2⋅ 3⋅4)

A 5 = 2n (2n - 1) (2n - 2) (2n - 3) (2n - 4) / (2⋅3⋅4⋅5⋅6) Traduje

el programa Lovelace a C , y así probablemente será más fácil de leer. Primero, su programa calcula A 0 y el resultado de la multiplicación B 1 A 1. Luego comienza el ciclo, repetido dos veces, para calcular B 3 A 3 y B 5 A 5 , ya que se leen de la misma manera. Después de contar cada multiplicación, el resultado se agrega a los anteriores, por lo que al final del programa se obtiene la cantidad total.

Obviamente, traducir a C no puede ser una reproducción exacta del programa Lovelace. Declara variables en la pila, y las variables de Lovelace eran más como registros. Pero hace más obvia la parte más profética del programa Lovelace. Un programa C tiene dos bucles while, uno dentro del otro. El programa Lovelace no tenía bucles while, pero agrupaba las operaciones y describía en una nota por qué deberían repetirse. La variable v10 del programa original y traducida a C funciona como un contador, disminuyendo con cada paso del ciclo; un diseño similar es familiar para todos los programadores. En general, además de la abundancia de variables con nombres oscuros, un programa en C no parece desconocido.

También vale la pena señalar que traducir el programa Lovelace a C no fue muy difícil, gracias a un detalle en su diagrama. A diferencia de las tablas de Menabrea, su tabla tiene una columna "signo de un cambio en el valor de una variable", lo que facilita mucho el seguimiento de un cambio de estado. Agrega un superíndice a cada variable para indicar valores sucesivos almacenados en ellas. El índice 2, por ejemplo, significa que el valor utilizado es el segundo valor asignado a la variable desde el comienzo del programa.

Primer programador?


Después de traducir el programa Lovelace a C, pude ejecutarlo en la computadora. Para mi decepción, el resultado fue incorrecto. Después de buscar errores, finalmente me di cuenta de que el problema no estaba en mi código: ¡el error estaba contenido en el programa original!

En el "cuadro de desarrollo", Lovelace escribe en la cuarta operación v5 / v4. Pero v4 / v5 será correcto. Este error puede aparecer en la impresión, pero no en Lovelace. De una forma u otra, este es el error informático más antiguo. Me sorprendió que pasé unos diez minutos buscando el primer error en la historia.

Jim Randall, otro blogger que tradujo el programa Lovelace a PythonTambién noté este error de división y otros dos problemas. ¿Cuáles son los pequeños errores en el programa Ada Lovelace publicado que nos dice? Es posible que ella intentara escribir no solo una demostración, sino un programa real. Después de todo, ¿no puedes escribir algo más que programas de juguetes, evitando errores?

Un artículo de Wikipedia dice que Lovelace fue el primero en publicar un "programa complicado". Quizás así es precisamente cómo vale la pena percibir su logro. Menabrea, en su trabajo, publicó "cuadros de desarrollo" un año antes de la publicación de la traducción de Lovelace. Babbage también escribió más de veinte programas que nunca fueron publicados. Por lo tanto, no es del todo correcto escribir que Lovelace escribió o publicó el primer programa, aunque siempre se puede discutir sobre lo que constituye un programa. Y aún así, el programa Lovelace está muy por delante de todo lo que se publicó antes. En el programa más largo, Menabrea tenía 11 operaciones y no había bucles ni ramas. El programa Lovelace tenía 25 operaciones y un bucle anidado (y, por lo tanto, ramificado). Menabrea al final de su trabajo escribió lo siguiente:

Después de la construcción de la máquina, las dificultades se reducirán a hacer tarjetas; pero como esto es solo una traducción de fórmulas algebraicas, por medio de una notación simple, será bastante simple delegar su ejecución a algún trabajador.

Ni Babbage ni Menabrea estaban particularmente interesados ​​en aplicar la máquina analítica a problemas que iban más allá de los problemas matemáticos que inspiraron a Babbage a crear computadoras. Lovelace se dio cuenta de que la máquina analítica era capaz de mucho más de lo que Babbage y Menabrea podrían haber imaginado. Lovelace también se dio cuenta de que "hacer tarjetas" no sería un trabajo mecánico, y que esto podría hacerse mal o bien. Es difícil evaluar esto sin comprender su programa de la Nota G, y sin ver cuánto cuidado tuvo en desarrollarlo. Pero, una vez hecho esto, puede aceptar que Lovelace, incluso sin ser el primer programador, fue el primer programador en merecer este nombre.

Source: https://habr.com/ru/post/es422169/


All Articles