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.