Alan Turing – og lineær algebra

20110817-022428.jpg

I et indlæg giver Alexandre Borovik et interessant indblik i lineær algebras historie.

I dag ved de fleste, der har bestået et kursus i lineær algebra, at vi kan løse n lineære ligninger i n ubekendte ved at se dem som en ligning A\vec{x} = \vec{b}, hvor A er en n \times n-matrix, og finde \vec{x} = A^{-1}b (hvis A er invertibel).
Vi ved også godt, at man i stedet kan bruge Gaussisk eliminering, men at invertering af A er en god strategi, hvis man har flere lineære ligningssystemer med samme A. Så koster ligningsløsning ikke nær det samme mht. dyre matrixoperationer.

Det er tilsyneladende vores alle sammens Alan Turing, vi kan takke for denne indsigt – der både har at gøre med lineær algebra og er et tidligt forvarsel om kompleksitetsteori.

Om at gøre køleskabet rent

Her sidder jeg allerede med dagens første overspringshandling. Foran mig venter arbejdet med at bevise to sætninger (som egentlig kun er formodninger i skrivende stund), der er hovedresultaterne i en artikel, jeg er ved at skrive. Det er ikke overraskende resultater; de handler om det, der hedder sundhed og sikkerhed af et typesystem. For at bevise disse resultater skal jeg først etablere nogle lemmaer. I denne del af teoretisk datalogi laver jeg en masse induktive definitioner af relationer, og når jeg skal bevise egenskaber ved disse relationer, er bevisstrategien oplagt: induktionsbeviser. Hele herligheden minder om at gøre køleskabet rent og derefter manuelt afrime fryseren: jeg ved præcis, hvad jeg skal gøre, jeg ved, i hvilken rækkefølge det skal gøres og cirka hvor lang tid det vil tage og det er ikke særlig spændende, men man er nødt til det.

I sædvanlig matematik er der selvfølgelig også fyldt med kedelige beviser for kedelige sætninger, men heldigvis er der også de overrumplende – og overrumplende smukke – beviser for vigtige sætninger. Når man ser dem, ved man hvorfor ordet “elegant” har sin berettigelse også i denne verden. En interessant bog propfyldt med denne form for elegance er Proofs From The Book af Martin Aigner, Günter M. Ziegler og Karl H. Hofmann. Her er der smukke beviser for alt fra Pythagoras’ sætning til noget nyere, men stadig klassiske resultater fra bl.a. analyse, algebra og grafteori. Bogen – “The Book” – er Paul Erdös’ navn for “den store bog i himlen”, hvor alle de bedste beviser for sætningerne findes.

Mine egne køleskabsbeviser står temmelig sikkert ikke i bogen i himlen. Men én ting lærer jeg, når jeg laver dem: det store udredningsarbejde består i virkeligheden i at få tryllet definitionerne frem på en form, så beviserne falder let ud. Måske er det i virkeligheden typisk sådan, metodologien er. Og hvis det er tilfældet, er det vel et argument for den omdiskuterede matematikfilosofiske påstand, at matematiske udsagn er analytiske – dvs. at deres sandhed er selvindeholdt og derved følger af udsagnet selv.

 

Epsilon og delta og store O

Når jeg har vejledt projekter, hvor studerende skulle anvende asymptotisk notation til at analysere funktioners vækstrate, er der altid nogle hindringer for forståelsen. Definitionen er egentlig enkel nok.

Lad f og g være funktioner over de naturlige tal. Vi siger at f = O(g), hvis der findes en positiv reel konstant c og et naturligt tal n_0 således at f(n) \leq c \cdot g(n) for alle n > n_0.

Hvis betingelsen gælder, når det bløde ulighedstegn ovenfor gøres skarpt, har vi at f = o(g).

Vi kan så indføre notationen O(f) for at skrive et led h, hvorom vi blot ved at h = O(f) og skrive f.eks.

(x+4)^2 = x^2 + O(x)

Asymptotisk notation stammer fra talteori og dukker op første gang hos Paul Bachmann helt tilbage i 1894. Datalogistuderende kender dog asymptotisk notation fra algoritmeteori, hvor de funktioner, der bliver sammenlignet, er kompleksitetsfunktioner. Derfor kan man opleve forbløffende mange studerende sige at “O-notationen bruges til at måle kompleksitet” eller, om muligt endnu værre, at “O-notationen bruges til at måle funktioners kompleksitet”.

Den legendariske amerikanske matematiker og datalog Donald Knuth skrev i 1988 et kort brev til AMS (American Mathematical Society), hvori han slog til lyd for, at man skulle lære de studerende differential- og integralregning ved brug af netop O-notation. Hans tanke er, at dette skulle være nemmere i læringssammenhæng. Om det er rigtigt, ved jeg ikke. Men når man skal definere f.eks. den afledede af en reel funktion, bliver det nemmere. For da kan vi sige, at f for værdien x er differentiabel med afledet f'(x), hvis der for et tilstrækkeligt lille \epsilon gælder at

f(x+\epsilon) = f(x) + f'(x)\epsilon + O(\epsilon^2)

Nu er det nemt at finde den afledede af f(x) = x^2, for

(x+\epsilon)^2 = x^2 + 2x\epsilon + \epsilon^2

Kontinuitet kan formuleres således: f er kontinuert i x hvis

f(x+\epsilon) = f(x) + o(1)

Jeg ved som sagt ikke, om ideen er god i didaktisk sammenhæng. Men den giver en interessant vinkel på reel analyse. Det gode er, at de kvantorer, der hærger epsilon-delta-definitionerne i analyse, nu i stort omfang er skjult i definitionen af asymptotisk notation. Det er stadig mandag formiddag, og jeg har ikke tænkt over, om det ved brug af asymptotisk notation bliver nemmere at forstå f.eks. den kontraponerede udgave af kontinuitetsdefinitionen, som trækker tænder ud på mange matematikstuderende. Men nogen bør tænke over det.

Man kan finde \TeX-filen med Knuths brev her (og husk, at det er \TeX, ikke \LaTeX!).

En toprocentsløsning ?

Så er optagelsestallene for datalogi- og software-uddannelserne på Aalborg Universitet klar. Blandt de datalogi-studerende er der 2%, der er kvinder. Også på software-uddannelsen er der kun optaget én kvindelig studerende.

Hvorfor er det bekymrende? vil nogle sikkert spørge. Det er så bare ikke nogle fag, der tiltrækker kvinder, og sådan er dét, vil de sige. Men de, der bagatelliserer problemet, glemmer, at der faktisk engang var langt flere kvindelige studerende på datalogi. I 1970’erne var det op mod 40 procent. Og i andre lande – f.eks. Italien – er kønsfordelingen også i vore dage langt mindre skæv end i Danmark. Så noget er gået galt.

Hvad man skal gøre ved det, ved jeg ikke. For nogle få år siden prøvede jeg at starte en diskussion på mit institut, og der var da også en del interesse. Men derved blev det, og nogle egentlige større initiativer er det desværre aldrig blevet til. Tingenes tilstand er i al fald en kilde til undren og ærgrelse for mig, og det giver heller ikke vores fag noget særlig godt image. På dén måde kan problemet være selvforstærkende.

En amerikansk bog, Unlocking the Clubhouse af Jane Margolis og Allan Fisher, omtaler en række initiativer i USA med basis i Carnegie-Mellon University i Pittsburgh. Mange af disse initiativer drejer sig om kontakten til ungdomsuddannelserne. Og initiativerne har båret frugt – fra en andel af kvindelige studerende ved Carnegie-Mellon på 7% i 1995 steg andelen til 42% i 2000. Hvorfor gør vi ikke noget lignende her i Danmark?

Og for en god ordens skyld: Billedet ovenfor er forside på et nummer af en amerikansk tegneserie, som man kan læse mere om på dens eget websted.

3n + 1

Et velkendt problem på grænsefladen mellem talteori og algoritmeteori er Collatz’ formodning. Det skyldes den tyske matematiker Lothar Collatz, stammer fra 1937 og er meget nemt at forklare:

Vælg et naturligt tal n som x_0.

Sæt nu x_{i+1} = 3n+1 hvis n er ulige og x_{i+1} = n/2 hvis n er lige.

På denne måde får vi en følge af værdier x_0, x_1, x_2, \ldots. Det er ikke svært at se, at hvis x_k = 1, vil følgen fra da af være periodisk med elementerne 1,4,2,1,4,2,\ldots. Det er meget nemt at skrive et lille program, der beregner værdierne i følgen, og det viser sig hurtigt, at med alle de startværdier man kan komme i tanke om, ender vi på et tidspunkt med værdien 1. Hvis det er ved x_k, vi når til 1 første gang, kalder vi k for følgens længde.

På grafen ovenfor kan man se følgens længde som funktion af startværdien for mindre værdier af denne.

Men gælder det virkelig altid at en følge har en længde? Dvs. når vi altid frem til 1 til sidst? Collatz’ formodning er, at det altid er tilfældet. I matematik er det som bekendt ikke nok med anekdotisk evidensgrundlag; der skal et generelt argument til. Den tyske matematiker Gerhard Opfer, som i sin tid havde Collatz som vejleder, har i år hævdet at have bevist Collatz’ formodning, men han har for nylig måttet trække sin påstand tilbage. Et lidt kynisk argument for at der måtte være en fejl er, at et påstået bevis på kun 11 sider næppe kan være korrekt! Paul Erdös sagde i sin tid, at matematikken endnu ikke er rede til at kunne levere et bevis – og tilbød 500 dollars i præmie til den, der kunne.

Men er Collatz’ formodning overhovedet vigtig? Som i så mange andre tilfælde er svaret, at det afhænger af definition af vigtighed. I en grundforskningssammenhæng er svaret et ubetinget ja, for som det er tilfældet for så mange andre åbne problemer i de matematiske fag, har arbejdet med Collatz’ formodning kastet en masse interessante matematiske opdagelser af sig. På Wikipedias udmærkede side om Collatz’ formodning kan man læse meget mere om disse.

F.eks. viste Kurtz og Simon i 2007, at man kan generalisere problemet til såkaldte Collatz-funktioner og bevise, at det er uafgørbart om en given Collatz-funktion og en given startværdi vil give en følge, der ender i 1. Beviset bygger på en generalisation af et resultat af John Conway, der kun kan håndtere startværdier på formen 2^k. Det spændende ved sådanne beviser for uafgørbarhed er, synes jeg, at de afslører at et begrebsapparat er “tilpas interessant”.

Kurtz og Simons resultat siger ikke noget om Collatz’ formodning. Formodningen handler ikke om afgørbarhed, og selve formodningen er trivielt afgør – den er jo enten sand eller falsk. Hvad der så faktisk er tilfældet, ved vi derimod ikke.

Alle har mødt hver deres Frege

Gottlob Frege, den tyske logiker og filosof, der levede fra 1848 til 1925, er en legende, og alene hans navn ansporer tilsyneladende til en rejse i fantasiens verden. En af mine gamle medstuderende kaldte ham Lille Frække Frege, og en kollega fandt senere på sangen “Jeg går og hedder Frege”. Historien om Freges korrespondance med Bertrand Russell i forbindelse med Russells paradoks er lavet af det stof, romaner er lavet af – og dukker da også op i tegneserien Logicomix, som Palle Raabjerg har anbefalet mig. Mere om det en anden gang.

I går sad jeg til et seminar, hvor en PhD-studerende fremlagde resultaterne fra første år af sit forløb. Jeg nævnte i den forbindelse lineær logik og her til morgen bestemte jeg mig til at kigge i mit gamle eksemplar af Proofs and Types, som er det første sted (mig bekendt) hvor Jean-Yves Girard præsenterer lineær logik i bogform. Bogen, forfattet af Girard sammen med Yves Lafont og Paul Taylor er i øvrigt nu frit tilgængelig i PDF-format fra Paul Taylors webside.

Jeg faldt over dette citat fra første kapitel, hvor Girard (skrivestilen afslører ham!) er i det filosofiske hjørne og taler om Gottlob Frege:

So, one of the most fundamental distinctions in logic is that made by Frege: given a sentence A, there are two ways of seeing it:

  • as a sequence of instructions, which determine its sense, for example A \vee B means “A or B”, etc..
  • as the ideal result found by these operations: this is its denotation.
    “Denotation”, as opposed to “notation”, is what is denoted, and not what denotes. For example the denotation of a logical sentence is t (true) or f (false), and the denotation of A \vee B can be obtained from the denotations of A and B by means of the truth table for disjunction.

Frege kaldte det første for Sinn, det andet for Bedeutung og skrev en hel bog med denne titel, Über Sinn und Bedeutung. Hvorfor blev jeg fanget ind af dette sted i teksten? Vel netop fordi det er her, vi kan se en stor forhindring i undervisning i både matematik og datalogi: mange studerende taler konsekvent om Sinn, mens vi underviser i Bedeutung.

Enhver, der har undervist i automatteori, vil opleve at mange studerende opfatter determinisering af nondeterministiske endelige automater som først og fremmest fortællingen om en algoritme, man skal udføre, mens vi i undervisningen opfatter determinisering som en udvidelse af overføringsfunktionen \delta fra at være \delta : Q \times \Sigma \rightarrow Q til at være en funktion over mængder \delta : \mathcal{P}(Q) \times \Sigma \rightarrow Q. Tilsvarende kan man opleve mange studerende, der opfatter en matematisk funktion f ikke som en binær relation, men som en forskrift, der fortæller os hvordan vi, givet et argument x beregner f(x).

Også i programmering støder man på forskellen – imperative sprog som C og dets mange efterkommere (C++, C#, Java osv.) er Sinn-sprog, mens applikative sprog stræber efter at være Bedeutung-sprog (men trods alt skal implementeres på en maskine!). Mange studerende hævder at kunne forstå imperative sprog, men også at have gevaldige kvaler med de applikative.

Jeg grubler over, hvordan vi kan få de studerende til bedre at forstå, at der både er Sinn og Bedeutung, så vi ikke kun forstår hver vores halvdel af Den Lille Frække Frege.

Lands foreningen af Dårlige Staverer (LSD)

Kilde: thomasdamgaard.dk

Jeg kender en, der arbejder for Amnesty International. Hun har beskæftiget sig med en hel masse af denne verdens urimeligheder, men hvad skriver hun hyppigst om på Facebook? Ganske rigtigt: stavefejl. Selv er jeg også sådan indrettet: bestemte slags stavefejl kan få mig til at brokke mig i timevis, og nu gør jeg det så også her på bloggen. Det er selvfølgelig ikke dét, at man kan have svært ved at skrive f.eks. navnet på den ungarske psykolog Mihaly Csikszentmihalyi korrekt, der bekymrer mig. Det, der bekymrer mig, er derimod de systematiske stavefejl, der så hårdnakket nægter at forsvinde.

For nu at citere den gamle protestsang: When will they ever learn? Det vil aldrig holde op med at undre mig, at man kan læse danske tekster hver dag og skrive dansk måske ikke hver dag, men så dog alligevel tit, og stadig blive ved med at lave de samme stavefejl. Især de strukturelle stavefejl: r-fejl, deling af sammensatte navneord og manglende d’er i lange tillægsformer dukker op igen og igen. Hvorfor kan et voksent menneske med studentereksamen og det, der deraf følger, ikke bringes til at forstå, at man ikke på dansk kan skrive Han køre på cykel eller Stave fejl er iriterene ?

Min kone er uddannet ordblindelærer; fra hendes erfaringer ved jeg, at man skal passe på med at drage forhastede konklusioner. Der er faktisk folk, der har umenneskeligt svært ved at læse og stave. Og der er selvfølgelig også folk, der er vokset op med et andet sprog end dansk. Men jeg er selv universitetslærer, og det betyder, at jeg i egenskab af projektvejleder skal læse en masse skriftlige arbejder af studerende, der hverken er ordblinde eller udenlandsk fødte. Mange arbejdsblade er formelig fyldt med stavefejl, og jeg nægter at tro, at så mange studerende er ordblinde.

Nogle vil her indvende, at stavefejl ikke er et problem: det er ikke sproget, men indholdet, vi skal kommentere på. Hertil har jeg (mindst) to indvendinger:

  • Stavefejl gør det sværere at forstå indholdet. Læsehastigheden hos den læsende går ned, hvis teksten er fyldt med stavefejl.
  • Stavefejl giver forventninger om et dårligt indhold; hvis den skrivende ikke kan skrive på sit eget sprog, har han/hun så overhovedet styr på det, teksten omhandler? Stavefejlene giver derved et mindre positivt billede af den skrivende.

Andre vil indvende, at det hele blot skyldes det svære danske sprog. Kan de studerende da ikke i stedet skrive på engelsk? Det er jo så nemt osv. Her skæmmer stavefejl om muligt endnu mere, thi man læser en tekst på et andet sprog på en anden måde. Jeg gør i al fald; der er et større element af dekodning forbundet, det går langsommere.

Da jeg for nylig så et arbejdsblad forfattet på en form for engelsk, hvor de studerende havde forsynet teksten med overskriften Summery, følte jeg mig således ikke overbevist om, at den pågældende opsummering ville være sommeragtigt let.

Stavefejlenes eksistens er tydeligvis blevet en form for blodtryksforhøjende præparat for mig. Hvad er modgiften? Undervisning er ikke nok. En anden form for ikke-voldelig modstand er påkrævet som supplement.

Jeg har været vejleder på to interessante projekter på første studieår på datalogi her i foråret, og det ene handlede om – kontrol for stavefejl! Ikke stavekontrol á la Microsoft Word med ordbogsopslag, næ, en stavekontrol, der kunne påpege r-fejl. De studerendes software var selvklart proof-of-concept, men ideen er der stadig: Nogen bør lave et stykke software, der kan detektere strukturelle stavefejl.

Der findes allerede værktøjer som f.eks. OrdRet, udviklet på Syddansk Universitet. OrdRet er et prisværdigt initiativ, men systemet er lukket betalingssoftware og har ordblinde som primær målgruppe. Det, der for alvor vil kunne rykke, vil være et stykke software, der er frit tilgængeligt (og open source) og som kan anvendes af ‘almindelige dårlige stavere’, ideelt set en plug-in, der ikke er bundet op på f.eks. Microsoft Word (sådan som OrdRet er det). Der findes – OrdRet er bevis herpå – en del forskning inden for området, og der er på den konto udviklet frit tilgængelige algoritmer, som bør kunne danne grundlag for de første skridt.

Ideen er hermed givet videre.

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?