2022-01-28: Ada Lovelace

Ada Lovelace har fått en sorts rockstjärnestatus bland datanördar, speciellt datatjejer.

Hon tillskrevs både det ena och det andra. Den första programmeraren. Konstruerade den första datorn. Förstod möjligheterna med IT hundra år innan någon annan. Utan henne hade vi inte haft internet. Eller?

Allt det där är ju fantastiskt. Eller… det är fantastiskt vilken kraft och vilket självförtroende hon verkar ge unga tjejer – speciellt datanördar – idag, sissådär 200 år senare. Hon är given typ topp-10 i alla de där kolla-vilka-duktiga-kvinnor-det-funnits-böckerna.

Problemet är väl bara att det som tillskrivs henne kanske inte riktigt håller. Inte bara de rena missuppfattningarna. Börjar man rota och har ett kritiskt förhållningssätt faller den fantastiska legenden om pionjären Ada Lovelace isär. Lite beroende på. Om man ska vara petig.

För den som missat henne föddes Ada Lovelace 1815 i den engelska adelsklassen. Hon skolades i matematik och naturvetenskap och visade tydligen intresse och fallenhet för dylikt. När hon var arton år gammal kom hon i kontakt med Charles Babbage.

Babbage, 25 år äldre, var en genialisk uppfinnare, vetenskapsman, filosof, matematiker och så vidare. Han konstruerade bland mycket annat världens första dator. Mekanisk, såklart. Det var hans stora livsprojekt, även om han aldrig fick den byggd (skulle ha kostat ofattbara pengar och kanske ändå aldrig skulle ha gått, rent praktiskt).

Lovelace och Babbage brevväxlade iaf flitigt och hennes claim to fame kom 1843 när hon från franska översatte en artikel om Babbages analysmaskin. 22 sidor av Luigi Federico Menabrea, italiensk matematiker, professor, general, och senare premiärminister (!).

Claim to fame, ja. Till översättningen la hon nämligen 50 sidor med översättarens anmärkningar. Speciellt omtalad är den sista kommentaren, Note G. Det är nämligen världens första publicerade, icke-triviala algoritm. Ett program som är avsett att stansas in i hålkort och köras i Babbages analysmaskin.

Babbages maskin blev aldrig verklighet. Den och Lovelaces anteckningar glömdes bort och återupptäcktes och uppmärksammades på riktigt först mer än hundra år senare. När tiden sprungit ifrån dem. För det är ju så att historien alltid verkar nå en punkt då en uppfinning eller upptäckt blir oundviklig. Och då uppfinns/upptäcks den av flera personer mer eller mindre samtidigt, oberoende av varandra.

Så blev det med datorn, som uppfanns helt utan hjälp av Babbage (som ju var banbrytande och inte av den oundvikliga typen) eller Lovelace. Om de aldrig hade funnits hade världen sett exakt likadan ut ändå. Typ.

Och Lovelace då?

Jo, hon var uppenbarligen en väldigt skärpt kvinna. Exakt hur skärpt råder det delade meningar om. Det finns t ex dokumenterat i korrespondens med en lärare hur hon kämpar med relativt enkel matte bara ett år innan sina legendariska kommentarer. Det finns korrespondens med Babbage (de brevväxlar intensivt) där hon ang Note G ber om “Give me the necessary data and formulae.” osv.

Men samtidigt verkar hon ha koll. Ha någonting att komma med.

Visst, det kanske “bara” handlar om hur man kan använda någon annans uppfinning? Med en metod denne andre i slutänden försett eller iaf hjälpt dig med? Ada verkar hursomhelst onekligen har förstått analysmaskinen, på djupet. Och antagligen mer än någon annan insett vilka möjligheter den skulle öppna upp.

Låt gå att hon kanske inte klarade av att genomföra Note G själv eller iaf utan hjälp. Det finns dokumenterat att idén med Note G är hennes. Att det skulle vara ett bra sätt att visa vad som är möjligt.

Så hon var inte den första programmeraren? Nja, Babbage och förmodligen andra typ Menabrea hade redan konstruerat program. Kanske inte lika avancerade, men om själva genomförandet i Note G alltså är Babbages?

Så hon konstruerade inte världens första dator? Nej. Det är väl bara önsketänkande att se henne som medkonstruktör även om hon och Babbage hade kontakt.

Så det är inte tack vare henne vi har datorer och internet? Nej, nej.

Så var hon den första som insåg vad en dator skulle kunna vara? Möjligvis, förmodligen. Babbage och Menabrea och alla andra intresserade verkar bara ha tänkt på maskinen som en… computer/beräknare. Någonting som kan göra beräkningar av tal. Hjälpa till att räkna fram logaritmtabeller och liknande.

Jag tycker ändå hon är häftig, även om hon inte var första programmeraren eller datorns uppfinnare. Även om det hon gjorde och uppnådde är mer svårdefinerat än att sticka ner första flaggan i marken någonstans. (så himla patriarkalt?)

Jag tänker också på hur svårt det var. Att även om man har någonting att komma med och även om man är född priviligierad så hjälper det inte om man också är kvinna och ung/yngre (28) på 1800-talet. Det man kan hoppas på är att skriva någonting eget som en anonym tilläggskommentar/efterord till någon annans artikel.

Hade man funderat på vilken hjälp hon sökt, vilken förmåga hon egentligen hade, om arbetet och tankarna faktiskt var hennes egna om hon varit man? Förmodligen inte.

Hade man tyckt att Ada varit lika häftig om hon varit man? Förmodligen inte.

Hade Ada blivit en rockstjärna om hon inte varit kvinna? Förmodligen inte.

Sååå… frågan som kvarstår, vilket faktiskt var ingången till min djupdykning i Lovelace…

Vad gör världens första icke-triviala datorprogram?

Världens första icke-triviala datorprogram beräknar Bernoullital. En talserie som tydligen dyker upp lite här och var i matematiken.

Uppenbarligen finns det många definitioner, men den Lovelace (eller/och Babbage) använde tydligen sig av den här, rekursiva:

Jag implementerade. Det gick ok. Det blir ett par rekursiva funktioner, fakultet och binomialkoefficent, en liten loop. Memoiserade för prestanda. osv.

Analysmaskinen hade inga funktioner, ingen callstack osv. Men Ada fick till detändå. Men det ser ju lite svårare ut. Inte helt trivialt.

Någon gång kanske jag försöker göra det mer bare-bones, som Ada. Men det var ändå lite kul att känna historiens vingslag.

Bernoullital. Jaha.

Ada typ ba 1843…

Jag typ ba 2022…

from fractions import Fraction
from functools import cache

@cache
def bernoulli(m):
    t = 1
    for k in range(m):
        t -= binomial(m, k) * Fraction(bernoulli(k), (m - k + 1))
    return t

@cache
def factorial(n):
    if n < 1:
        return 1
    return n * factorial(n-1)

@cache
def binomial(m, k):
    if k > m:
        return 0
    return Fraction(factorial(m), (factorial(k)*factorial(m-k)))