
Nota G [ a ] es un algoritmo informático tradicionalmente atribuido a Ada Lovelace que fue diseñado para calcular los números de Bernoulli utilizando la hipotética máquina analítica diseñada por Charles Babbage .
El algoritmo fue la última nota de una serie etiquetada de la "A" a la "G", que se emplearon como ayudas visuales para acompañar la traducción al inglés de Lovelace de la transcripción francesa de 1842 de Luigi Menabrea de la única conferencia de Charles Babbage sobre la máquina analítica. [ 1 ] [ 2 ] Su traducción, junto con sus extensas notas sobre las posibilidades de la máquina analítica, se publicaron en 1843. [ 3 ] [ 4 ] [ 1 ]
En sus memorias de 1864, Babbage habla con Lovelace sobre la creación de las distintas notas, incluida la nota "G". Proporcionó las fórmulas matemáticas para el cálculo de los números de Bernoulli, que Ada convirtió en una tabla de instrucciones paso a paso para la máquina analítica; también le detectó un error [ 5 ] :
Discutimos juntos las distintas ilustraciones que se podrían incluir: yo sugerí varias, pero la selección fue enteramente suya. Lo mismo ocurrió con la resolución algebraica de los diferentes problemas, salvo, claro está, la relativa a los números de Bernoulli , que me ofrecí a resolver para ahorrarle el trabajo a Lady Lovelace. Ella me la devolvió para que la corrigiera, al haber detectado un grave error que yo había cometido.
— Charles Babbage, Pasajes de la vida de un filósofo (1864)
Historiadores como Allan G. Bromley han señalado varias docenas de programas de muestra preparados por Babbage entre 1837 y 1840 (todos sustancialmente anteriores a las notas ilustrativas), aunque nunca se publicaron y eran sustancialmente más simples [ 6 ] , lo que ha llevado a que, en la cultura popular, la Nota G sea generalmente considerada el primer algoritmo específicamente para una computadora, [ 7 ] [ 8 ] [ 9 ] [ 10 ] y Lovelace sea considerado el primer programador de computadoras . [ 11 ] [ 4 ] [ 1 ] [ 12 ]
El programa descrito en la Nota G no fue probado durante la vida de Babbage ni de Lovelace, ya que la máquina analítica nunca se construyó. En la era moderna, el algoritmo se ha probado utilizando métodos de computación modernos y se ha descubierto que contiene un error de software debido al intercambio de dos variables en una operación de división. [ 13 ] [ 14 ]
Origen

En 1840, Charles Babbage fue invitado a dar un seminario en Turín sobre su máquina analítica, [ 15 ] la única explicación pública que jamás dio sobre la máquina. [ 16 ] Durante la conferencia de Babbage, el matemático Luigi Menabrea escribió una descripción de la máquina en francés. [ 15 ] Un amigo de Babbage, Charles Wheatstone , sugirió que, para contribuir, Lovelace debería traducir la descripción de Menabrea. [ 15 ] [ 17 ] Babbage sugirió que ampliara la descripción con apéndices, que ella compiló al final de su traducción como una serie de siete "notas" etiquetadas como AG. Su traducción se publicó en agosto de 1843, [ 15 ] en las Memorias Científicas de Taylor , [ 17 ] [ 18 ] donde el nombre de Lovelace fue firmado como "AAL". [ 15 ] [ b ] En estas notas, Lovelace describió las capacidades de la máquina analítica de Babbage si se utilizara para computación, presentando un plan más ambicioso para la máquina que el que incluso el propio Babbage había concebido. [ 9 ] [ 18 ] [ 19 ]
Las notas de Lovelace para el artículo eran tres veces más largas que el artículo mismo. [ 20 ] En las primeras notas, explora más allá de las ambiciones numéricas que Babbage tenía para la máquina y sugiere que la máquina podría aprovechar la computación para abordar los ámbitos de la música, los gráficos [ 21 ] y el lenguaje. [ 12 ] [ 22 ] [ 23 ]
De nuevo, podría actuar sobre otras cosas además de los números, si se encontraran objetos cuyas relaciones fundamentales mutuas pudieran expresarse mediante las de la ciencia abstracta de las operaciones, y que además fueran susceptibles de adaptación a la notación y el mecanismo de funcionamiento de la máquina. Suponiendo, por ejemplo, que las relaciones fundamentales de los sonidos melódicos en la ciencia de la armonía y la composición musical fueran susceptibles de tal expresión y adaptación, la máquina podría componer piezas musicales elaboradas y científicas de cualquier grado de complejidad o extensión.
— Ada Lovelace, Notas sobre las memorias «Bosquejo de la máquina analítica inventada por Charles Babbage» de la traductora Ada Augusta, condesa de Lovelace, Nota A
Ella explica a los lectores cómo la máquina analítica era independiente de la máquina de diferencias anterior de Babbage , [ 24 ] y compara su función con la máquina de Jacquard , [ 25 ] en que usaba tarjetas perforadas binarias para denotar el lenguaje de máquina . En la nota C, este punto se amplía con el hecho de que la máquina puede realizar acciones simultáneas e iteradas , asegurando que cualquier tarjeta o conjunto de tarjetas se puede usar varias veces en la solución de un solo problema, [ 23 ] anticipando esencialmente los métodos modernos de flujo de control y bucles. [ 20 ] [ 26 ] Estas ideas se llevaron a su punto culminante en la nota final, G, donde Lovelace buscó demostrar un ejemplo de computación .
Nota G solo hizo uso de las cuatro operaciones aritméticas : suma, resta, multiplicación y división, la implementación de la visión de Babbage:
Ante la imposibilidad de explicar aquí el proceso mediante el cual se alcanza este fin, debemos limitarnos a admitir que las cuatro primeras operaciones aritméticas —suma, resta, multiplicación y división— pueden realizarse directamente mediante la intervención de la máquina. Dicho esto, la máquina es capaz de realizar cualquier tipo de cálculo numérico, ya que todos estos cálculos, en última instancia, se reducen a las cuatro operaciones que acabamos de mencionar.
— Charles Babbage, "Bosquejo de la máquina analítica inventada por Charles Babbage"
También utiliza la idea de Babbage de almacenar información en columnas de discos, cada una denotada por(para la variable ) y un número de subíndice que indica a qué columna se hace referencia.
Función
El algoritmo utilizó una ecuación recursiva para calcular los números de Bernoulli, [ 15 ] en la que utilizó los valores anteriores de una ecuación para generar el siguiente. El método se ejecutó de la siguiente manera: [ 27 ]
dóndees un coeficiente binomial ,
- .
Los números de Bernoulli se pueden calcular de muchas maneras , pero el autor eligió deliberadamente un método elaborado para demostrar el poder del motor. En la Nota G, Lovelace afirma: "Terminaremos estas Notas siguiendo en detalle los pasos a través de los cuales el motor podría calcular los Números de Bernoulli, siendo este (en la forma en que lo deduciremos) un ejemplo bastante complicado de sus poderes". [ 23 ] El algoritmo particular utilizado en la Nota G genera el octavo número de Bernoulli (etiquetado como, como empezó con.) [ 27 ]
Notación
La tabla del algoritmo organiza cada comando en orden. Cada comando denota una operación que se realiza sobre dos términos. La segunda columna indica solo el operador que se está utilizando. Las variables se denotan como "", [ c ] donde el superíndice que lo precede representa la cantidad de valores diferentes que se le han asignado a la variable, y el subíndice que lo sigue representa la asignación ordinal de la variable, es decir, qué variable es. (Por ejemplo,se refiere a la segunda asignación de la variable número 4. Cualquier variable aún no definida tiene un superíndice de 0.) Las variables se numeran a partir deLa tercera columna le indica al ordenador exactamente qué comando se está ejecutando (por ejemplo, en la línea 1, el comando ejecutado es "" - la primera iteración de la variable 2 se multiplica por la primera iteración de la variable 3.) y solo incorpora una operación entre dos términos por línea. La columna 4 - "Variables que reciben resultados" toma nota de dónde se debe almacenar el resultado de la operación en la columna 3. De esta manera, cualquier variable en esta columna tiene su número en superíndice incrementado en uno cada vez. (por ejemplo, en la línea 1, el resultado dese asigna a las variables,, y.)
La columna 5 indica si alguna de las variables utilizadas en la operación del comando ha sido modificada. Entre llaves, dos filas por comando colocan la variable original a la izquierda de un signo igual y la nueva variable al otro lado; es decir, si la variable ha sido modificada, su superíndice se incrementa en uno, y si no, permanece igual. (p. ej., la línea tres asigna el resultado dea la segunda iteración de la variabley la quinta columna refleja esto al señalar;
ha cambiado, perono lo ha hecho.
En la columna 6, "Declaración de resultados", se muestra el resultado asignado a la variable en la columna 4 en su valor exacto basado en los valores de los dos términos asignados previamente. (por ejemplo, en la línea 1 --se estableció al principio que sería, yse estableció como la variable. Por lo tanto,(en notación matemática ). Esta columna aparentemente no es calculada por el motor y parece tener como objetivo principal la claridad y la capacidad del lector para seguir los pasos del programa. (Por ejemplo, la línea 5 tiene una fracción que se divide entre dos, la cual se anota como si se multiplicara por un medio, probablemente para mayor coherencia y debido a la complejidad tipográfica de una fracción anidada). También utiliza notación de variables separada fuera del programa, layvariables, que se multiplican sucesivamente para hallar el valor final,, por lo tanto: [ 13 ]
Además, cada columna sucesiva muestra los valores de una variable determinada a lo largo del tiempo. Cada vez que una variable cambia o su valor se vuelve relevante al ser uno de los términos del comando actual, su valor se indica o se repite en su columna correspondiente. De lo contrario, se marca con puntos suspensivos para indicar su irrelevancia. Esto presumiblemente imita la necesidad del ordenador de disponer únicamente de información relevante, registrando así el valor de una variable mientras el programa la analiza . [ 13 ]
Método
El programa buscaba calcular lo que se conoce por convención moderna como el octavo número de Bernoulli, que se enumera como, mientras Lovelace comienza a contar desde. [ 27 ]
Error
En la operación 4, la división que supuestamente tiene lugar es "", para ser almacenado en variableSin embargo, el "Informe de resultados" indica que la distribución debería ser:
De hecho, la división está al revés;es la segunda iteración de, como puede verse en la operación 2. Asimismo,es la segunda iteración de, como se puede ver en la operación 3. Por lo tanto, la operación 4 no debería ser, sino más bien. Este error significa que si el motor alguna vez ejecutara este algoritmo en este estado, no generaría correctamente los números de Bernoulli y encontraría su valor objetivo final ( el octavo número de Bernoulli,) ser.
Implementaciones modernas
El programa de Lovelace se puede implementar en un lenguaje de programación moderno , aunque debido al error mencionado anteriormente, si se transcribe exactamente devolvería un valor final incorrecto paraEl programa original generalizado en pseudocódigo es el siguiente:
V[1] = 1 V[2] = 2 V[3] = n /* n = 4 en el programa de Lovelace. */ /* Comenzar */ V[4], V[5], V[6] = V[2] * V[3] V[4] = V[4] - V[1] V[5] = V[5] + V[1] V[11] = V[5] / V[4] V[11] = V[11] / V[2] V[13] = V[13] - V[11] /* Las variables son inicialmente cero, véase más abajo. */ V[10] = V[3] - V[1] V[7] = V[2] + V[7] V[11] = V[6] / V[7] V[12] = V[21] * V[11] V[13] = V[12] + V[13] V[10] = V[10] - V[1] MIENTRAS V[10] > 0: V[6] = V[6] - V[1] V[7] = V[1] + V[7] V[8] = V[6] / V[7] V[11] = V[8] * V[11] V[6] = V[6] - V[1] V[7] = V[1] + V[7] V[9] = V[6] / V[7] V[11] = V[9] / V[11] V[12] = V[22] * V[11] V[13] = V[12] + V[13] V[10] = V[10] - V[1] V[24] = V[13] + V[24] V[3] = V[1] + V[3]
La implementación en pseudocódigo resalta el hecho de que los lenguajes de programación definen las variables en una pila , lo que obvia la necesidad de rastrear y especificar la iteración actual de una variable. Además, el programa de Lovelace solo permitía que las variables se definieran realizando suma , resta , multiplicación o división en dos términos que fueran variables previamente definidas. La sintaxis moderna sería capaz de realizar cada cálculo de forma más concisa. Esta restricción se hace evidente tan pronto como en la operación 6 (). Aquí Lovelace define una variable hasta ahora indefinida () por sí misma, asumiendo así que todas las variables no definidas son automáticamente iguales a 0, donde la mayoría de los lenguajes de programación modernos devolverían un error. Lo que ella pretendía era "", pero se había limitado a usar solo variables como términos. Asimismo, en la operación 8 (), la notación estricta de la aritmética de dos términos se vuelve engorrosa, ya que para definircomo 2, Lovelace asigna su valor (0) a sí mismo más(2). Es debido a esta notación restrictiva quese define así.
Notas
- ↑ Su título completo es "Diagrama para el cálculo mediante la máquina de los números de Bernoulli", pero se la conoce sinécdocalmente como "Nota G".
- ↑ En las memorias, sus iniciales fueron impresas erróneamente como "ALL" [ 17 ]
- ↑ Estas variables técnicamente se refieren a columnas de discos, a sugerencia de Babbage de que así es como deberían notarse. [ 23 ]
Referencias
- 1 2 3 "Ada Lovelace | Biografía, informática y datos" . Enciclopedia Británica . Consultado el 1 de junio de 2022 .
- ↑ Stein 1984 , pág. 44.
- ↑ Menabrea, LF (1843). «Esbozo de la máquina analítica inventada por Charles Babbage Esq.» . En Taylor, Richard (ed.). Memorias científicas . Vol. III. Traducido por AAL London. pp. 666–731 .
- 1 2 "Ada Lovelace | Máquina de Babbage | Museo de Historia de la Computación" . www.computerhistory.org . Consultado el 1 de junio de 2022 .
- ↑ Babbage, Charles (1864). Pasajes de la vida de un filósofo . Archivo de Internet. New Brunswick, NJ : Rutgers University Press; Piscataway, NJ : IEEE Press. Nueva edición 1994. ISBN 978-0-8135-2066-7
- ↑ Bromley, Allan G. (julio-septiembre de 1982). "La máquina analítica de Charles Babbage, 1838" (PDF) . IEEE Annals of the History of Computing . 4 (3): 197–217 . Bibcode : 1982IAHC....4c.196B . doi : 10.1109/mahc.1982.10028 . S2CID 2285332. Archivado del original (PDF) el 26 de febrero de 2021. Recuperado el 25 de diciembre de 2015 . pág. 197.
- ↑ Demming, Anna. "Ada Lovelace" . New Scientist . Consultado el 1 de junio de 2022 .
- ^ Krysa, Joasia. Ada Lovelace - Nunca hubo una nota G.
- 1 2 "Ada Lovelace, la primera visionaria de la tecnología" . The New Yorker . 15 de octubre de 2013. Consultado el 2 de junio de 2022 .
- ↑ Hertz 2009 , pág. 59.
- ↑ "Celebrando a Ada Lovelace: la 'primera programadora del mundo' - Ciencia breve y concisa - New Scientist" . 27 de marzo de 2009. Archivado del original el 27 de marzo de 2009. Consultado el 1 de junio de 2022 .
- 1 2 "Ada Lovelace: La primera programadora informática" . Mental Floss . 13 de octubre de 2015. Consultado el 2 de junio de 2022 .
- 1 2 3 "¿Qué hizo realmente el programa de Ada Lovelace?" . twobithistory.org . Consultado el 1 de junio de 2022 .
- ↑ "Ada Lovelace y la historia de la nota G" . Archivado del original el 11 de mayo de 2021.
- 1 2 3 4 5 6 "Cómo las notas de Ada Lovelace sobre la Máquina Analítica crearon el primer programa informático" . Revista BBC Science Focus . Consultado el 1 de junio de 2022 .
- ↑ "Charles Babbage dejó un programa informático en Turín en 1840. Aquí está" . Wired . ISSN 1059-1028 . Consultado el 1 de junio de 2022 .
- 1 2 3 "Tesoro matemático: Notas de Ada Lovelace sobre la máquina analítica" . Asociación Matemática de América . Archivado del original el 30 de junio de 2024. Recuperado el 30 de junio de 2024 .
- 1 2 Lovelace y Babbage y la creación de las 'Notas' de 1843
- ↑ Stein 1984 , pág. 46.
- 1 2 "Ada Lovelace" . Biografía . 2 de abril de 2014. Consultado el 2 de junio de 2022 .
- ↑ Toole, Betty Alexandra (23 de septiembre de 2004). «Byron, (Augusta) Ada [ nombre de casada (Augusta) Ada King, condesa de Lovelace ] (1815–1852), matemática y pionera de la informática» . Oxford Dictionary of National Biography . Vol. 1 ( edición en línea). Oxford University Press. doi : 10.1093/ref:odnb/37253 . ISBN 978-0-19-861412-8.(Se requiere suscripción, acceso a la biblioteca de Wikipedia o ser miembro de una biblioteca pública del Reino Unido ).
- ↑ "Ada Lovelace - Biografía, datos y fotografías" . Consultado el 2 de junio de 2022 .
- 1 2 3 4 "Boceto del motor analítico" . www.fourmilab.ch . Consultado el 2 de junio de 2022 .
- ↑ Woolley 1999 .
- ↑ "Celebrando a Ada Lovelace" . MIT Press. 11 de octubre de 2016. Consultado el 2 de junio de 2022 .
- ↑ "Ada Lovelace" . Historia . 26 de febrero de 2021. Consultado el 2 de junio de 2022 .
- 1 2 3 "Nota G de Ada Lovelace | Proyecto Lovelace" . projectlovelace.net . Consultado el 1 de junio de 2022 .
Fuentes
- Stein, Dorothy K. (1984). "Las notas de Lady Lovelace: texto técnico y contexto cultural" . Victorian Studies . 28 (1): 33– 67. ISSN 0042-5222 . JSTOR 3826758 .
- Woolley, Benjamin (February 1999), The Bride of Science: Romance, Reason, and Byron's Daughter, AU: Pan Macmillan, ISBN 978-0-333-72436-1, retrieved 7 April 2013
- Hertz, Paul (2009). "Art, Code, and the Engine of Change". Art Journal. 68 (1): 58–75. doi:10.1080/00043249.2009.10791336. ISSN 0004-3249. JSTOR 40598953. S2CID 194010431.
- 1843 introductions
- Algorithms
- Ada Lovelace