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)))

Kata

(Finns – eventuellt – en poäng i slutet även för den som inte är så värst intresserad av hur man kan sortera grejer…)

Häromveckan fick jag för mig att implementera en sorteringsalgoritm från scratch, lite som en övning, dvs en liten kodsnutt som ordnar en sekvens av saker så de hamnar minst till störst.

Att göra någonting sånt är egentligen meningslöst. Det finns super-optimerade sorteringsfunktioner redo att använda i vartenda programspråk. Att implementera själv är oftast, om man inte har något speciellt problem, bara slöseri med tid.

Jag testade iaf att slänga ihop en s k quicksort. Och det gick ju alldeles utmärkt. Ett par, tre minuter och det funkade på första försöket. Oj. Att jag minns vad quicksort var ens, utan att kolla upp den eller någonting.

(Quicksort: välj ett element – ett pivotelement – från sekvensen, lägg allt som är mindre i en hög och sortera den enligt quicksort, lägg allt som är större i en hög och sortera den enligt quicksort. Resultatet är den mindre högen följt av allt som är pivotelementet eller lika följt av den större högen.)

Så jag testade att göra om det, men öh… mergesort. Jamen det minns jag ju också. Och det var också lätt. Två, tre minuter, funkade på första. Oj. Jaha. Lite förvånad.

(Mergesort: dela upp sekvensen i två högar, spelar inte så stor roll hur. Högarna kör du mergesort på. Sen tittar du om och om igen på det minsta elementet i båda högarna och plockar det minsta av de två till din resultatsekvens. Tar en hög slut innan den andra, lägg på det som är kvar till resultatet. Klart!)

Quicksort och mergesort är två väldigt bra – effektiva – sätt att sortera på (och sortera är ju någonting fundamentalt för datorer). Industristandard sen datorernas barndom. Men kanske inte den första sorteringsalgoritm man brukar få implementera som student, även om man inte ska överdriva svårighetsgraden. Förmodligen har det att göra med att de är rekursiva – dvs använder anrop till sig själva i sin definition.

Men lite nyfiken blev jag. Så jag gav mig på nybörjarnas sorteringsalgoritm. Den som alla får testa att implementera det första de gör, för att den är så enkel. Bubblesort. Den är dock väldigt ineffektiv och duger egentligen inte till så mycket annat än just nybörjarövning.

Bubblesort var… kanske inte svår, men tog ett tag att få rätt. Märkligt. Varför är quicksort och mergesort pissenkla att implemtera om bubblesort, som ska vara pissenkel, ger mig bryderier?

(Bubblesort: gå igenom sekvensen element för element, jämför med grannen och byt plats vid behov. Upprepa tills du gått igenom hela sekvensen utan att göra något byte.)

Jaha. Fått blodad tand – och bryderier – så jag implementerade en selection sort (egentligen värdelös i praktiken) och insertion sort (som är effektiv för kortare sekvenser). Också knepigare att få till än quicksort och mergesort.

(Selectionsort: leta upp minsta elementet i sekvensen, lägg till som största elementet i din resultatsekvens. Upprepa tills du inte har något kvar att sortera.)

(Insertionsort: plocka ut nästa element i din insekvens och stoppa in det på rätt plats i en resultatsekvens som till slut innehåller alla element.)

Funderade mer varför jag upplevde de icke-rekursiva bubblesort, selectionsort och insertionsort som knepigare. Skrev ett par nya varianter där jag gjorde insertionsort eller om det var selectionsort rekursiv, dvs använde anrop till sig själv i definitionen. Gjorde om de versionerna till iterativa igen, på andra sätt.

Skrev väl 10 olika sorteringsalgoritmer på en timme. Funderade en hel del. Lärde mig en del, trots att ingenting egentligen var någonting nytt.

Jaha.

Programmerare gör såhär ibland. Tränar ibland på egentligen simpla saker. Går tillbaka till början. Varför – på riktigt! – blir det si om man gör så? Utmanar sig själv att lösa ett problem på ett annat sätt. Och ett till. Ett till. Ett till. Ett till. Ett till. Tills man inte kan lösa det på något nytt sätt. osv osv

Det kallas för kodkatas.

Kommer från det japanska ordet för form: “kata”.  Norm. Sätt att göra saker.

Inom olika kampsporter har man ju ofta en massa kända katas – sekvenser av slag och sparkar, blockeringar, kast av tänkta motståndare. För att gradera till olika bälten krävs det ofta att man kan utföra vissa förutbestämda katas på ett tillfredsställande sätt.

Programmeringen har hämtat ordet från kampsporten.

Undrar om man håller på såhär inom andra konstformer, hantverk?

En författare eller journalist, som skriver människospråk exempelvis… utmanar de sig någonsin att skriva en kort nyhetsnotis om någonting? För att sedan skriva om samma sak som en krönika? Ett rent referat? Som om Björn Ranelid hade skrivit det? Som en tweet? Utan bokstaven e? Som en haiku eller fri vers? Som någonting som skulle funka i tv?

Nätverksrekrytering

Jahopp. Det gick ju bra till slut.

Vi fick en regering.

Och tur är väl det, för Stefan Löfven proklamerade ju, som vanligt, att svenska folket vill ha en regering, svenska folket kräver en regering och allt vad det var. Och en övergångsregering är ju – även om det inte står i lagboken – helt bakbunden och även om den uppenbarligen ibland fattar beslut även i svåra och kontroversiella frågor a la Cementa och vad det nu kan vara så kan den ju inte göra det. Den gör inte det. Svenska folket vill ha en riktig regering. En riktig regering med mandat, som är fri. Fri att regera på oppositionens budget.

Är förresten intressant att förklara för en sexåring att “Nej, även om jag sa det i morse, så blev det inte för första gången en kvinna som bestämmer i Sverige? Varför inte? Jadu…”

Hursomhelst.

Jobbar ju i rekryteringsbranchen och vi har t ex verktyg för s k nätverksrekrytering. Dvs att istället för att gå ut med annonser osv så letar man i de egna kretsarna och försöker få medarbetare att tipsa om lämpliga kandidater… Det ska inte alls vara någon fara för inavel, brist på mångfald och förstärkande av den monokultur man kanske redan har. Nä, just det. Så blir det ju inte om man bara plockar in folk man redan känner.

Så… men… när någon glatt utbrast att vi nu för första gången fått en transperson som statsråd och könsfördelningen uppenbarligen är helt jämn i regeringen och oj vilket steg framåt för mångfalden klickar det till i skeptikern som redan blivit triggad av det där med nätverksrekrytering.

För regeringsbildning är ju en extrem form av nätverksrekrytering. På bara ett par, tre dagar ska du som statsminister snyta ur dig en regering med ett tjugotal säkerhetskollade människor. Då går man, såklart, till de man redan känner, eller?

Så hur blir det då om den som rekryterar – statsministern – är 54 år, vit heterosexuell kvinna med “svensk” bakgrund från Stockholm? Vilka får de mest prominenta posterna?

Finansminister? 50 år. Vit, heterosexuell man med “svensk” bakgrund. Från Stockholm.

Utrikesminister? 59 år. Vit, heterosexuell kvinna med “svensk” bakgrund. Från Stockholm. Jajo, hon kanske ursprungligen är från Skåne, men hon har vad jag kan se bott här i Enskede ett antal år iaf…?

Justitie- och inrikesminister? 51 år. Vit, heterosexuell man med “svensk” bakgrund. Från Lund (!). Är/var (?) tillsammans med klimat- och miljöministern.

Socialminister? 47 år. Vit, heterosexuell kvinna med “svensk” bakgrund. Från Kalmar (!). Kalmar kan tyckas anmärkningsvärt, men kan det ha något att göra med att vårdområdet är inmutat av Kalmar? Iaf på SKR och Inera som ju är politiskt styrda hade vi exempelvis ständigt olika VD och ordföranden från… Kalmar. Det pratades om det.

Näringsminister? 56 år. Vit, heterosexuell man med “svensk” bakgrund. Från Stockholm. Ja, någon kan invända att han här och var uppges vara från Kronoberg, men vad jag kan se så uppger han själv att han flyttade till Stockholm när han var 20. Cirka 1985 dvs.

Försvarsminister? 62 år. Vit, heterosexuell man med “svensk” bakgrund. Från Dalarna (!).

Utbildningsminister? 62 år. Vit, heterosexuell kvinna med “svensk” bakgrund. Från Stockholm. Förvisso född i Mora och därför räknas hon väl tillsammans med försvarsministern som att vi har två (?) statsråd från Dalarna… men om hon bor här, gick gymnasiet i Bromma, sen Stockholms universitet, jobb i Huddinge osv? Det låter ju ganska lite som en kulla och ganska mycket som en 08:a?

Klimat- och miljöminister? 46 år. Vit, heterosexuell kvinna med “svensk” bakgrund. Från Stockholm. Eller ja, det står att hon är från Göteborg och hon verkar ha gjort facklig karriär osv där så hon kanske är mer icke-08:a än vissa, men tydligen bor hon iaf sedan ett antal år på Värmdö? Och riksdagsplats för Stockholms stad? Är/var (?) tillsammans med justitie- och inrikesministern.

Integrations och migrationsminister, idrottsminister? 51 år. Vit, heterosexuell man man “svensk” bakgrund. Från Stockholm.

Ja, det var väl den mer prominenta halvan av regeringen. Mångfald?

I den andra halvan finns ju t ex sådana som finansmarknadsministern, en kompis från Handelshögskolan och senare statsapparaten (bl a Anderssons statssekreterare under de sju åren som finansminister). En del som är typ 55, pursvenska och från Stockholm (eller som uppges vara någonannanstans ifrån även om de gjort karriär och bott här i typ 20 år).

Men även en del folk inte är det. Javisst, transpersonen, exempelvis… är ju tyvärr inte bara trans, utan även 51 år, “svensk” och från Stockholmsområdet (Södertälje-Haninge-Nynäshamn…). Men iallafall: tre norrbottniniska statsråd (!). Eller? Ett av dem verkar förvisso ha varit kommunalråd i Anderssons hemkommun Nacka de senaste åtta åren? Gör inte det honom till 08:a? Fast man kanske bara ska sluta gräva? För man kan väl inte ha t ex en civilminister eller landsbygdsminister från Stockholm? Och Andersson har ju, trots allt, lyckats få in inte bara en utan två (!) 80-talister i regeringen.

Det ser ju bra ut. Ett par unga bönder, som alibi.

Nätverksrekrytering.

Jahopp.

Katarinavägen

Tänker ju inte så ofta på det när man hastar fram, men Katarinavägen är faktiskt en rätt okej liten promenad att ha till kontoret. Även när vintern och grådasket smyger sig på.

171025

Vaknar. Eller… Blir väckt. M ska gå. A är vaken. Inte jag. Inte jag.

Lakritsyoghurt och havrefras. Mysa i soffan med en bok. Hur svårt kan det vara? Gå på toaletten. Borsta tänderna. Göra sig i ordning. Ta på sig. Att så enkla saker kan vara så svåra. Så jävla jävla svåra. Så frustrerande. Men ändå så fint. Argh.

Regn och lämning. Tre lager på benen, fem på kroppen. Galon. Dubbla strumpor i ofodrade gummistövlar. Tillräckligt?

I ärlighetens namn; en timme eller två hemma med Virtanen och all sån skit.

Onsdag. Jobba-hemifrån-dagen. Ingen på kontoret. J undrar till sist om mat. Ljuger om att…minns inte vad, J är för tråkig. Glömmer bort, blir ingen lunch. Ångest över jobbannons. Snart! Gör annat.

Till sist: leverans. Årets stora händelse. Egentligen. Publicerar mina 178 sidor tjänstegränssnittsbeskrivning för Sil SOAP API. Det regnar utanför.

Upptäcker små skitfel. A och E är (tydligen!) på kontoret för årsleveransen. Inte så lätt att veta. Snackar, skojar. Kul. SOPA – SOAP. Ny runda.

Det regnar utanför.

Klockan blir fyra. Har fortfarande inte skrivit klart jobbanannonsen för systemutvecklare. Fuck it! Går hem.

Dåligt samvete. Tänk om A varit ute sedan… tre? Regnat, regnat, regnat? Ensam i REGNET med uttråkade pedagoger?

Inne. Samling. A vill inte gå hem, men underbara kramar.

Torkrum. Påklädning. Vagn! Så jävla vagn. Haha! Hunden har regnjacka!

Hamburgare och pommes frittes på food courten. Igenkänningsnick med kollega – han heter nog kanske Robert och vi pratade en kvart om it-säkerhet för tre år sen.

Hemma. Skönt. Jag älskar dig. Allting rätt: kläder, tvätta, tandborste,

Pippifilm i paddan. I sängen. M är på utbildning på Lärarhuset, men…

Somnar i sängen. Pippifilm i paddan.

M kommer hem.  Småtjafs. A på väg bort.

Hinner ner till gallerian för att kolla fodrade barnstövlar innan åtta. Har ni storlek 27?

En flaska vitt från Uruguay. Stekta tortillas till henne, överblivna ostbollar till mig. Holländsk ost.

Jag älskar dig. En timme för oss själva. Eller mer, jag vet inte. Fantastiskt. Snack. Om saker som betyder någonting.

Hon hänger tvätt, jag tar disken; whiskey och cola och Frida Hyvönen.

Så skönt att få undan och hon ligger i sängen och pratar med sin moster, klagar på att jag spelar Frida på volym i köket. Jag blir deprimerad är vad hon säger. Och det är klart… jag förstår henne.

Sitter på golvet bredvid sängen. En timme går. Säkert två. Pratar.  Jag älskar henne. Så mycket. Konjak och cola.

Kommer kanske vara lite bakis i morgon, men vem bryr sig?

Jag älskar mitt liv.

Alla sover. A hostar och gråter i sömnen. Vi kramas.

På något sätt känner jag att det här är en dag jag vill minnas. Även om den egentligen inte varit någonting speciellt. Den har bara varit som det är.

Älskar mitt liv. Mina tjejer.