En fælles basis?

I dag kan jeg læse om endnu et initiativ, der skal gøre noget ved den sørgelige tendens det er, at der næsten ingen kvinder er, der studerer datalogi. Denne gang er det et initiativ ved University of Waterloo i Canada.

Her er der både en massiv indsats ved ungdomsuddannelserne og en anderledes tilgang på universitetets uddannelser, der bliver satset på. Blandt andet skal alle matematikstuderende have et kursus i datalogi på første år.

Netop dét er noget, der er forsvundet på Aalborg Universitet. For mange år siden, da der fandtes en teknisk-naturvidenskabelig basisuddannelse, skulle alle studerende have et kursus i datalogi. Det var ikke et fantastisk kursus (jeg var selv med til at holde det flere gange), men i det mindste var der da noget. Nu er der rigtig mange studerende, der ikke møder datalogi overhovedet – herunder specielt dem, der vil studere matematik. Det er en voldsom ændring fra dengang, hvor en stor procentdel af kandidaterne i matematik fra AAU havde et sidefag/bifag i datalogi – og omvendt.

Der var mange ulemper ved basisuddannelsen; fra min egen studietid husker jeg min ærgrelse over ikke at kunne komme til at beskæftige mig med matematik før på 3. semester. Men der var faktisk også nogle fordele forbundet med at udskyde det endelige studievalg bare lidt. (Og så har vi ikke talt om hvor nemt dette gjorde det at fortryde sit valg uden at det havde voldsomme konsekvenser for den studerendes SU mv.)

På én måde har vi faktisk en rest af basisuddannelsen endnu på datalogiuddannelserne, for de første fire semestre af datalogi- og softwareuddannelserne er helt identiske. Og det sker da også, at studerende skifter fra den ene uddannelse til den anden.

Anonym bedømmelse?

I den akademiske verden sender vi forskningsartikler ind til bedømmelse ved konferencer og tidsskrifter, og bedømmelsen er anonym. Jeg ved ikke, hvem der har bedømt mine artikler.

Men noget af det mest ærgerlige, når man får en indsendt artikel afvist, er netop at man ikke kan tage til genmæle over for en bedømmelse, man synes er urimelig. Nogle gange har jeg været ude for bedømmere, der helt har misforstået min artikel. Heldigvis har nogle konferencer inden for datalogi derfor inden for de seneste år indført rebuttal-faser, hvor man kan tage til genmæle over for bedømmelserne i håb om at få dem ændret til det bedre.

Men hvorfor skal bedømmelse af akademiske artikler overhovedet være anonym? Bertrand Meyer, der er professor i datalogi i Zürich, stiller netop dét spørgsmål i et debatindlæg, og jeg synes, at han har fat i noget vigtigt. Anonyme bedømmelser skulle gøre det muligt at fremføre kritik uden risiko for repressalier, men det kan nemt føre til useriøs og overfladisk kritik. Dette kender vi allerede i ikke ringe omfang fra studerendes evaluering af undervisning.

Hvis man ved, hvem bedømmeren er, lægger det et større pres på bedømmeren for at skrive en grundig og seriøs bedømmelse. Og et andet argument mod anonymiteten er at anonymitet kan gøre det meget sværere at opdage videnskabelig uredelighed. Anonym bedømmelse gør det meget nemmere at stjæle andres ideer uden at blive opdaget: Hvis man får fat i en lovende artikel, kan man give den en dårlig bedømmelse, så den ikke bliver godkendt, og derefter skrive en artikel selv om det samme.

At bygge og forstå

Institut for datalogi ved AAU.

For mange år siden, da jeg studerede matematik, brugte jeg det meste af projektarbejdet på femte semester på ørkesløse diskussioner om hvad matematik mon var for et fag. Senere kom de ørkesløse diskussioner om hvad datalogi mon er for et fag,

For otte år siden var jeg med til at udarbejde de nye studieordninger for datalogi- og softwareuddannelserne på Aalborg Universitet, og nu er der endnu en revision på trapperne. Denne gang er jeg dog ikke med.

I dag var jeg til et møde i min faggruppe på instituttet, hvor de seneste tanker fra det nuværende udvalg blev præsenteret. Ingen af mine kolleger virkede til at være særlig glade; det nye forslag til ny struktur af uddannelserne virkede på mange af os mest som en kluntet ikke-angrebspagt mellem nogle temmelig forskellige opfattelser af hvad datalogi er. For der er bestemt ikke enighed; forslaget er sikkert resultatet af ørkesløse diskussioner. Jeg håber, at det nye udvalg en dag vil komme frem til et bedre bud på en ny struktur af vores uddannelser. Ellers ville jeg egentlig hellere beholde den gamle struktur (og det siger jeg ikke kun, fordi jeg selv var med til at udarbejde den).

Efterhånden er det gået op for mig, at jeg på én og samme tid slet ikke kan give en kort forklaring af hvad datalogi er og samtidig har en temmelig klar idé om hvad der er særligt for denne nye naturvidenskab. Nu afdøde Robin Milner sagde i sin tale, da han blev æresdoktor ved universitetet i Bologna, at

For twenty-five years I have been trying to merge programming, the prescriptive or synthetic activity, with the task of description or analysis in computing.

Det er en fin opsummering af det, også jeg nu mener at vide. Jeg vil hævde, at datalogi er en videnskab, der handler om at bygge og om at forstå programmer og data. For at kunne bygge, skal man først forstå. Men for at kunne forstå, skal man også prøve at bygge selv, præcis ligesom en vordende matematiker skal kunne formulere egne definitioner og bud på sætninger og prøve at bevise/modbevise dem. Og de fleste, der får en uddannelse i datalogi, får et arbejde, hvor de både skal bygge og forstå.

Når vi skal analysere programmer, skal vi bruge matematiske teorier for at forstå deres adfærd. Men vi skal selvfølgelig også forstå, hvordan programmerne påvirker det enkelte menneske og samfundet – og det kræver nogle helt andre analyseredskaber. Begge former for forståelse og analyse er vigtige.

Datalogiens murermestervillaer

Foto: Mikkel Hede.

Fordi konflikten er blevet udsat, kan jeg få afsluttet dette års forløb af kurset Syntaks og semantik. Forhåbentlig kan dette kursus og det projektarbejde, de fleste studerende, der følger kurset, laver samtidig, skabe en god forståelse for de teorier og teknikker, der skal til, når man laver et programmeringssprog.

Det er altid lidt ærgerligt for mig at skulle fortælle de studerende, at de fleste af de programmeringssprog, de kender, faktisk ikke er særligt teoretisk velfunderede. Man kommer let til at miste troværdighed, for når de berømte programmeringssprog ikke har fulgt de samme teoretiske principper som man bliver undervist i, hvordan kan underviserne så tillade sig at kræve den slags af de studerende?

De allerfleste udbredte programmeringssprog er faktisk en slags “datalogiens murermestervillaer”. En murermestervilla er en hustype, der var populær i Danmark i det 20. århundrede. De var ikke tegnet af arkitekter, men var udtryk for solidt håndværk. Det gjorde, at de på den ene side var grundigt konstruerede og på mange måder driftssikre, på den anden side måske ikke så kreativt designede og heller ikke godt fremtidssikrede. F.eks. er det ikke altid nemt at energisikre en murermestervilla, og ofte er loftsetagen lidt underlig. Men der er mange, der stadig bor i murermestervillaer, og de kommer sikkert til at stå i mange år endnu.

Udbredte programmeringssprog som C, C++, Javascript mm.  er selvfølgelig i et vist omfang produkt af viden fra datalogi.  Men nogle af dem blev til inden der fandtes et solidt grundlag for hvordan man kunne definere semantikken af et programmeringssprog, og andre blev skabt af nogen, der ikke vidste ret meget om den slags. Seneste velkendte eksempel er vel det nu så populære Python, der blev til i 1991. Engang sagde Guido van Rossum, der er hovedmanden bag dette sprog, i et interview at

But Python’s compiler has no idea what your code means, and that’s useful too.

Den slags er lidt ærgerligt at læse. Der er ikke andet for end at minde de studerende om at vi ikke uddanner murermestre på et universitet, men at godt håndværk selvfølgelig er vigtigt at kende til, også for akademikere.

En lang dag i Lissabon

I dag var det så tid til mødet om Horizon 2020-ansøgningen, som var min egentlige grund til at rejse til Lissabon, og for første gang var alle deltagere samlet. Det var mig, der havde taget initiativ til mødet og skulle prøve at styre slagets gang.

Vi begyndte mødet kl. 9.00, holdt en (lidt for) lang (men god) frokostpause og var først færdige kl. 19.30. Vi fik en masse nyttige kommentarer fra det konsulentbureau, vi havde hyret, og bagefter fik vi en meget grundig diskussion af alle de andre ting, vi også skulle have på plads i den lange ansøgning, som vi nu er ved at udarbejde. En del misforståelser blev ryddet af vejen, og vi lærte en hel masse om hinanden nu, hvor vi for første gang sad over for hinanden.

Det var et udbytterigt møde, men bagefter var vi også pænt trætte. De fleste af de portugisiske deltagere tog hjem med det samme, mens de fleste af resten af os tog på restaurant, hvor vi endte med at tale om musik og mad og forskellen på ravne og krager.

Nu mangler vi bare at få skrevet 165 sider og så afvente evalueringspanelets dom. Forhåbentlig går det bedre denne gang.

Tilbage til fortiden

Sammen med Didier Caucal, Rennes 1990
Byvandring under LICS 1991 i Amsterdam
Giuseppe Rosolini og Samson Abramsky, Logic at Botik 1989

I dette forår genbesøger jeg helt uvilkårligt min akademiske fortid på flere måder. To af de projektgrupper, jeg er vejleder for, har grupperum på Fredrik Bajers Vej 7G, hvor jeg havde kontor, mens jeg besøgte Institut for matematiske fag i 2016. Det er underligt at gå rundt på de samme gange igen, nu uden at se én eneste kollega.

Den ene af grupperne (som faktisk sidder i Diego Ruanos gamle kontor) er begyndt på et projekt, hvor der er en overraskende forbindelse mellem noget, jeg interesserer mig for i dag (sessionstypesystemer) og noget, jeg arbejdede med helt tilbage i min PhD-afhandling (afgørbarhedsproblemer for uendelige transitionsgrafer). Ligesom alle andre forskere har jeg lige så stille bevæget mig et andet sted hen i faget, dels fordi faget flytter sig, dels fordi man falder over noget nyt og spændende. Men i dag sad jeg og fortalte de studerende om noget, jeg fordybede mig i for snart 30 år siden, før de selv blev født. Der kom også en anekdote eller to fra mig undervejs.

De tre år, hvor jeg arbejdede på min PhD-afhandling, var på én gang en begyndelse og en afslutning for mig. Det var en tid, hvor det endnu var almindeligt at kunne komme i gang med en egentlig akademisk løbebane bagefter. Og det var en uskyldig tid, hvor man stadig kunne fordybe sig. I 1989 var jeg til min første “rigtige” konference med en artikel. Det var i Sovjetunionen, som det hed dengang, og jeg husker hvordan jeg for første gang fik sat ansigt på en masse kendte personer inden for det område af teoretisk datalogi (logik og semantik), som var og stadig er der, hvor jeg færdes. Blandt andet mindes jeg en lang gåtur rundt om en russisk sø sammen med engelske Samson Abramsky, der også dengang var et stort navn.

I 1990 havde min vejleder nævnt en artikel af Didier Caucal fra IRISA i Rennes, som han mente kunne være relateret til mit PhD-arbejde. Ikke bare var den relateret, den var faktisk helt central. Den var så også på fransk, og det blev første gang, jeg læste en artikel med matematisk indhold på fransk. Nogle måneder efter besøgte jeg Didier på IRISA i Rennes og blev vel taget imod af ham og hans familie.

I juli 1991 var den store begivenhed for mig Logic in Computer Science 1991 i Amsterdam. To måneder efter var min afhandling afleveret, og tre dage derefter stod jeg i Aalborg og holdt min første forelæsning, fuldstændig uerfaren og uden pædagogisk indsigt. Her blev jeg kastet lige ud i en helt anden side af tilværelsen og blev bl.a. et ufrivilligt vidne til de mange interne magtkampe, som ofte er blandt universitetslærere og som længe satte sit præg på stemningen, hvor jeg var havnet. På dén måde begyndte et langt uskyldstab, og fordybelse var fra nu af en undtagelse, ikke et grundvilkår. Til gengæld lærte jeg efterhånden at holde af at være underviser.

Banebrydende og banalt?

I dag læste jeg en klumme af Susan Knorrenborg, der nu forlader stillingen som debatredaktør på dagbladet Information til fordel for en stilling hos UNICEF. I klummen ser hun tilbage på nogle af de kronikker og andre debatindlæg, hun antog og som siden valgte genklang. Her har hun en meget interessant betragtning, der (så vidt jeg kan se) er fuldstændig generel:

Det slående er, at de mest geniale indlæg; dem, der for alvor vender op og ned på ens verdensbillede, ofte er dem, der hurtigst bliver banale. Det ligger i selve konceptet. De er som et par briller, man ikke kan lade være med at tage på. Man forundres. Hvorefter man vænner sig til sit nye udsyn. Det, der for et øjeblik siden var en afgørende ny tanke, bliver nu ens udgangspunkt. Noget, man tager for givet.

Jeg kom her til at tænke på, at jeg i går igen underviste studerende i det, der kaldes delmængdekonstruktionen i automatteori. Ideen bag konstruktionen er enkel at forklare, og heldigvis lykkes det de fleste studerende at forstå den.

Men hele ideen bag var engang dristig og nyskabende. Det var tilbage i 1959, den amerikanske matematiker Dana Scott og hans polsk/israelske kollega Michael Rabin, der begge var ved Princeton University, publicerede artiklen Finite Automata and Their Decision Problems.   Det var dette arbejde, der mange år senere, i 1976, gav dem Turing-prisen, der er datalogiens svar på Nobelprisen. I denne lille artikel dukker mange af de helt grundlæggende resultater om endelige automater op for første gang.

Derfor er det meget fascinerende at tænke på de dybe ideer fra for knap 60 år siden nu virker så banale, at de er blevet en del af det tidlige pensum på datalogiuddannelserne, ikke kun på Aalborg Universitet, men verden over. Men ideerne er jo netop slet ikke banale; hvis de var det, havde de ikke overlevet.

Derfor er det bedste kriterium for om et forskningsresultat er vigtigt, formodentlig ikke en måling af antal citationer mm. men om resultat en dag ender med at fremstå fuldstændig banalt.

Danmarksmesterskaberne i poetry slam 2018

Sara Hauge gør det igen!

I går aftes var der Danmarksmesterskab i poetry slam, og endnu engang blev det afholdt i Aalborg. Sidst det skete, var i 2014, og dengang blev Sara Hauge en meget overbevisende dansk mester.

Det er ikke så tit, jeg har deltaget i poetry slam som tilskuer (og når det sker, rykker det da altid lidt i mig for selv at kunne være med), men aftenens arrangement var et af de bedste poetry slam-arrangementer, jeg har været til. Slamfrø–arrangørerne i Aalborg er nu særdeles erfarne, og Mark Jensen-Skovgaard, der i (gymnasie)tidernes morgen selv var udøvende poetry slammer, er i dag en særdeles rutineret konferencier og arrangør.

Der var mange fine optrædender undervejs, og der var “DM for offerlam”, hvor Emil Nygård (dansk mester 2016), Peter Dyreborg (dansk mester 2008 og en central skikkelse i dansk poetry slam) og Dennis Buchleitner (endnu ikke dansk mester, men det kommer nok) alle tre leverede suveræne præstationer og gik suverænt meget ud over de tre minutter og ti sekunder, som man skal holde sig inden for.

Finalen var dog i særklasse god. Her mødtes Michael Dyst (dansk mester i 2013), Sara Hauge (dansk mester 2014) og Lasse Nyholm Jensen (dansk mester 2015 og 2017). Klichéprægede musikanmeldere ville kalde den slags for en “magtdemonstration”. Jeg ville selv bare sige, at vi i går aftes overværede hvordan tre af de allerbedste udøvere af poetry slam i Danmark gennem det seneste årti gør det, når de gør det allerbedst.

Og vinderen af denne finale? Det blev helt fortjent Sara Hauge, der nu også kan kalde sig for dobbelt Danmarksmester i poetry slam – og for anden blev hun mester på aalborgensisk grund. Sara er ud over at have ordet i sin magt og hjertet på rette sted også et stort komisk talent. Et stort, stort tillykke til Sara herfra!

Hvordan lærer man rekursion?

Når jeg holder eksamen i et kursus, kommer jeg altid til at overveje nye tilgangsvinkler til faget, for eksamen markerer ved sin blotte tilstedeværelse, at endnu et undervisningsforløb er slut. Da jeg i efteråret igen, efter et års pause, igen skulle være en af kursusholderne på kurset Programmeringsparadigmer, ved vores kandidatuddannelser i datalogi og software, begyndte jeg igen at overveje hvordan man kan undervise i begrebet rekursion. Rekursion er nemlig helt centralt for dette kursus. Og i disse dage, hvor jeg taler med de studerende om kurset ved mundtlig eksamen, dukker overvejelserne op til overfladen igen. Nogle gange virker det som om rekursion er et stedbarn på vores datalogiske uddannelser på Aalborg Universitet; emnet dukker op mange gange rundt omkring, men det det bliver formodentlig aldrig rigtig grundigt belyst.

Mange mennesker uden for datalogi og matematik kender rekursion fra naturfænomenet selvsimilaritet. Se bare dette romanesco-kålhoved:

Kålhovedet består af en masse mini-kålhoveder, der har samme form som det store kålhoved. Og mini-kålhovederne består af endnu mindre mikro-kålhoveder, der har samme form som mini-kålhovederne. Og så fremdeles.

Christian Rinderknecht, der er en fransk datalog, fik i 2014 publiceret en rigtig interessant oversigtsartikel om de mange forskellige overvejelser og tilgange, der er blevet gjort til at undervise i rekursion.

Det vil selvfølgelig føre alt for vidt at gentage artiklens hovedpointer her; de er mange. Især Rinderknechts redegørelse for undersøgelserne af hvordan børn, unge og voksne forstår rekursion gennem mentale modeller er interessante.

Men to af hans konklusioner slår mig. Den første er at kålhoved-eksemplet i sig har et problem: Det får det til at se ud som om rekursive strukturer er uendelige. Det er de jo ikke; kålhoveder er meget endelige størrelser; et kålhoved kan sagtens være i en stor gryde, et sted i kålhovedet er vi nede på molekyle-niveau, og et kålhoved-molekyle består selvfølgelig ikke af endnu mindre kålhoved-molekyler (faktisk stopper rekursionen jo længe før).

Den anden er at der faktisk er to måder at tænke på rekursion på. Den ene er den dynamiske/procedurelle, hvor man tænker på rekursion som “at kalde sig selv”. Den anden er den statiske/strukturelle, hvor man definerer rekursion strukturelt: At en rekursiv størrelse indeholder “en kopi af sig selv”. Når jeg tænker tilbage, er det nok aldrig lykkedes mig at gøre dette helt klart i min undervisning – men det er vigtigt at skelne og at gøre forbindelsen helt klar. I det sprog, jeg har undervist i, nemlig Haskell, dukker der både rekursive programmer op (og de er dynamiske) og rekursive data op (og de er statiske, Haskells svar på kålhovederne, de rekursive datatyper). Når man skal gennemvandre en statisk rekursiv struktur, f.eks. for at spise et kålhoved, skal man bruge en dynamisk rekursiv strategi, der passer til: Spis kålhovedet ved først at spise hvert af de små kålhoveder. Og så fremderes.

Hvorfor er datalogi så svært?

Mit nedbørs-program i Haskell.

Jeg kan selv huske studerende på første studieår, der interesserede sig for matematik og planlagde at studere matematik, men til gengæld syntes at datalogi var helt urimeligt svært. Mark Guzdial, der er universitetslærer i datalogi, har et interessant indlæg om hvorfor det virker som om det virker som om det er sværere at lære datalogi end andre naturvidenskabelige fag.

En af de helt oplagte grunde er, at der er så lidt ekspertise inden for undervisning i datalogi. Danmarks Matematiklærerforening blev stiftet i 1957, og derudover er der mange års erfaring med matematikundervisning i grundskolen og gymnasiet. Det er der bestemt ikke for datalogis vedkommende Jeg har ikke kunnet finde ud af, hvor gammel IT-Lærerforeningen (der tidligere hed Datalærerforeningen for Gymnasiet og HF) helt præcis er, men den er tydeligt yngre (vedtægterne blev til 2003). Og fordi der er så lidt ekspertise om undervisning i datalogi, ved vi kun lidt om hvad der er svært ved at lære datalogi. Matematik er også svært at lære (matematikkens didaktik er et særdeles aktivt forskningsområde), men her ved vi trods alt en hel del.

Noget tyder på at der i nogle henseender er nogle kognitive udfordringer ved at lære datalogi, som man ikke ser på helt samme måde i matematik. Datalogi kræver forståelse af algoritmer og deres virkemåde, og det er tilsyneladende her, der er særlige udfordringer. Jeg husker selv, hvordan matematikinteresserede studerende nogle gange kunne have det forbløffende svært netop med at tænke algoritmisk.

Guzdial nævner denne lille programmeringsopgave:

Lav et program, der indlæser en liste af tal, der angiver mængden af nedbør dag for dag. I listen kan der stå tallet -999, og det angiver at der nu ikke kommer flere tal af interesse (men der kan også være andre negative nedbørstal i listen). Programmet skal kunne beregne gennemsnittet af de ikke-negative nedbørstal op til første forekomst af -999.

Talrige undersøgelser viser, at studerende har forbløffende svært ved at besvare opgaven korrekt. Ifølge Guzdial er det altid mindst halvdelen af et hold studerende, der svarer forkert på den tilsyneladende lille og uskyldige opgave. Den skjulte udfordring i opgaven er, at man skal frafiltrere uønskede nedbørsdata og beregne flere størrelser ud fra de data, der er tilbage. Hver af disse kræver et lille delprogram. Det er blandt andet denne opdeling, der er en kognitiv udfordring, og måske viser opgaven i virkeligheden nogle vigtige tærskelbegreber.

Interessant nok kunne en anden amerikansk universitetslærer, Kathi Fisler, i 2014 give et eksempel på hold af førsteårs-studerende, hvor det gik meget bedre – de studerende havde det fælles, at de var blevet undervist i et funktionsorienteret sprog som deres første programmeringssprog.

Ovenfor ses min løsning skrevet i Haskell (der jo er funktionsorienteret); det der tog tid, var som altid at luge typefejlene ud. Nu har jeg jo programmeret i ganske mange år efterhånden og jeg underviser også i programmering i Haskell, så jeg er ikke en typisk testperson. Men det, jeg gjorde, var “bare” at skrive en udgave af de deludtryk, der indgår i formlen for den gennemsnitlige nedbør. Den slags er nemt i Haskell; springet fra matematikkens velkendte sprog er ikke så stort. Og så har jeg i øvrigt altid syntes, at matematik er nemmere end datalogi.