Hvorfor skal man lære at programmere?

Engang for snart mange år siden havde Aalborg Universitet en basisuddannelse, hvor alting var fælles. De studerende var under et fælles optag, så man kom til at tilbringe de første to semestre sammen med studerende, der enten ville studere et helt andet fag eller var i tvivl. På dén konto fik jeg lavet projekter om henholdsvis bølgeenergi og vindmøller placeret på skibe. Jeg smuglede selv nogle formler ind, og fordi jeg var den eneste, der havde lyst til at programmere – i Pascal – fik jeg æren af dét, da vi skulle undersøge vores snedige fluiddynamiske model for vindmøller på skibe. Vi havde fælles kurser i mekanisk fysik, funktioner af flere variabler, differentialligninger/lineær algebra og programmering – i Pascal!

Efterhånden blev mange meget trætte af denne fælles indgang, og efterhånden var det kun kurserne, der var fælles. Reelt var der nu mange forskellige projektforløb. Da var det, at jeg 16 år efter at jeg selv gik der, fik æren af at undervise i programmering – i Pascal. Ud over at vi måtte slås med en allerede da forældet udgave af Borlands Turbo Pascal, som de studerende ikke selv kunne anskaffe sig og kun kørte under Windows NT, var det en blandet oplevelse; mange studerende våndede sig helt enormt over at skulle lære at programmere, og især hvis man fik kemi/bioteknologi-holdet, kunne det være en kamp op ad bakke. Igen og igen fik jeg spørgsmålet om hvorfor man dog skulle lære at programmere. Det var legitimationsproblemet, som man kender fra fagdidaktik (og især fra matematikkens didaktik, hvor det altid truer), der stak sit ækle hoved frem. Selv ikke et vue ud over de mange computere og tale om computeren som en programmerbar maskine hjalp. Hvorfor skal man dog lære noget så meningsløst?

Og hvad værre var: der var allerede dengang tre slags studerende:

  • dem, der allerede kunne programmere og programmerede godt; de var et bittelille mindretal, og der var
  • dem, der allerede troede, de kunne programmere og programmerede elendigt; dem var der en hel del af, og så var der
  • dem, der aldrig havde programmeret før, og de var flertallet.

Den første gruppe er aldrig kritisk, den sidste var der faktisk håb for, mens dem i midten…

Efter nogle år fik jeg omsider lov at lave kurset om, og jeg bestemte sammen med en kollega, at alle skulle lære – ML. Ikke OCaml, men gode gamle Standard ML. Tanken var dels at lave en stor `nulstilling’ ved at vælge et sprog, som ingen kendte, dels at undervise i et sprog, der havde en ordentlig matematisk teori i ryggen. Ikke, at vi skulle lære de studerende typet lambda-kalkyle, men at vi kunne give en systematisk forklaring af meningen med galskaben i stedet for at pege tilbage på alle hoc-beslutningerne bag Pascal.

Det fik jeg lov til i et år med blandede erfaringer – den første gruppe ovenfor blev udfordret, og den tredje gruppe var tilsyneladende nemmere at fange. Den midterste gruppe troede, de kunne fortsætte med at Basic-programmere, bare i SML nu. De fik et chok, når programmerne ingen ting lavede! På den måde skete der også omsider noget nyt for (nogle af) dem. Nogle blev bare forargede, andre blev nysgerrige. Og alle blev undervist i typer, typer, typer og polymorfi og mere polymorfi. De fleste studerende fandt ud af, at der er en voldsom forskel på tekststrengen "hest" og listen [ "hest" ]. Den første har typen string, den anden har typen string list. De fleste studerende fandt også ud af, at en funktion har en argumenttype og en resultattype.

Og stadig blev jeg spurgt af mange studerende, hvorfor man dog skulle lære at programmere.

Så besluttede nogen, at kurserne på basisuddannelsen også skulle være forskellige, og hermed døde det fælles programmeringskursus. På kemi/bioteknologi åndede de lettet op og begyndte at drømme henført om den dag, hvor den sidste computer ville blive smidt i havnen eller kun ville være i stand til at køre Microsoft Word.

I dag er det kun bestemte studieretninger, der har programmeringskurset, mens alle skal lære matematik (og det har jeg selvfølgelig ikke det fjerneste imod). Nu vil jeg tillade mig at stille det provokerende modspørgsmål: Hvorfor skal man ikke lære at programmere? Hvorfor skal man især ikke lære at programmere i et stærkt typet sprog?

Jeg kunne selvfølgelig i faglig stolthed godt hævde, at den erkendelse som Turing m.fl. gjorde af, at man kan konstruere en generelt programmerbar maskine er en af de helt store naturvidenskabelige erkendelser fra de seneste 100 år – men nogle ville så indvende, at det samme kan siges om opdagelsen af DNA-molekylets struktur, og det betyder vel ikke, at alle skal undervises i dét?

Jeg kunne også tale om glæden ved at kunne se matematiske objekter realiseret; det var sådan, jeg selv opdagede at programmering er interessant. Men der er også Maple og Matlab og Mathematica og selv om det selvfølgelig også indebærer en form for specialiseret programmering, er det heller ikke her, nogen bliver overbevist.

Der må være et bedre argument, og det tror jeg, der er. Nogle af de store problemer i matematikundervisningen kan føres tilbage til problemer, som man direkte må gøre noget ved, når man skal lære at programmere:

  • Mange studerende ikke kan kende forskel på elementet a og mængden \{ a \}. Matematik har sit eget typebegreb, men ingen taler om det. Professionelle matematikere og dataloger med matematisk baggrund ved at dette typebegreb findes, men der er ikke noget godt sprog at tale om denne fundamentale skelnen i.
  • Mange studerende har ikke noget klart begreb om hvad en funktion er, og at en funktion f : A \rightarrow B har definitionsmængde A og værdimængde B. Dette er typebegrebet igen – de kan godt hævde, at f(7) = 8, men at f(42) = sand. (Og nej, det er ikke fordi de har opdaget sumtyper.)
  • Mange studerende skriver matematiske udtryk, hvor der dukker ukendte størrelser op, og de opdager det aldrig selv.  Så spørger man dem, hvor z kommer fra, og de melder pas. I moderne programmeringssprog skal alle størrelser erklæres, før de kan bruges, og man får pænt at vide, hvis det ikke er blevet gjort.
  • Rigtig mange studerende kan ikke læse en definition, fordi de ikke kan skelne mellem hvordan en definition angiver betingelser som det definerede objekt skal overholde (det, man i datalogi kalder en specifikation), og hvordan objektet rent faktisk skal bringes til at eksistere (det, man i datalogi kalder en implementation).

Omvendt er der mange studerende, der gerne vil programmere, men ikke ved, at det, de programmerer, egentlig realiserer et (ofte meget lille og måske noget knudret) matematisk univers.

Så igen: hvorfor er det, man ikke skal lære at programmere, når vi ved, at det er vigtigt at lære matematik?

(Visited 91 times, 1 visits today)
Loading Facebook Comments ...

Skriv et svar