fredag 3. desember 2010 Julekalender
I går fikk du høre om verdens første, programmerbare datamaskin – den analytiske maskinen. Babbage fikk aldri fullført maskinen, men det hindret ikke Ada Lovelace i å lage verdens første program ment for å kjøres på den. Ada kalles derfor den første programmereren!
Programmet Ada designet for Babbages analytiske maskin var en algoritme for å kalkulere noe som heter Bernoulli-tall. Adas tekst om den analytiske maskinen finner du her (om du er veldig interessert og har god tid) – et diagram som viser selve algoritmen ser du her. Nedefor har jeg implementert min versjon av programmet i Ruby:
Dette er forresten en ypperlig anledning til å demonstrere hvor mye mer elegant en rekursiv implementasjon i Clojure er enn den typiske imperative løsningen. Ruby-koden ser ut som et øst-europeisk kullkrafverk, mens Clojure-algoritmen fremstår som selveste Taj Mahal. Estetikk har alltid hatt en viktig rolle i design av algoritmer. Så kanskje det ikke er så tilfeldig at den første programmereren var en kvinne? :)
Clojure-implementasjonen er omtrent bare definisjonen av hva et Bernoulli-nummer er for noe, mens en imperativ løsning er full av array-manipuleringer og andre implementasjonsdetaljer. Dessuten bestemmer Clojure helt av seg selv at det her er lurt å returnere svarene som brøk.
I likhet med Pascal (luke 1) har forresten også grevinnen av Lovelace fått oppkalt et programmeringsspråk etter seg. Ada er et objektorientert, statisk typet språk utviklet for det amerikanske forsvarsdepartementet. Utenfor forsvaret har språket også blitt brukt til å implementere systemer innenfor luftfart.
La meg så avslutte "dagens tekst" med et par Ada Lovelace-sitater. Først et som viser at hun tenkte som en god programmerer, og var opptatt av ting som vi også er i dag:
"In almost every computation a great variety of arrangements for the succession of the processes is possible, and various considerations must influence the selections amongst them for the purposes of a calculating engine. One essential object is to choose that arrangement which shall tend to reduce to a minimum the time necessary for completing the calculation."
Og her er et vakkert sitat som sammenligner den første datamaskinen med veven Babbage hentet ideen om programmering via hullkort fra:
"The Analytical Engine weaves algebraic patterns, just as the Jacquard loom weaves flowers and leaves."