Forvirret? Godt. Det er de studerende også.
Analogier er et kraftfuldt redskab i undervisningen. Når mennesker møder et nyt, abstrakt begreb, søger hjernen instinktivt efter noget velkendt at hæfte det på. Vi har brug for en mental model, der kan bære den nye viden. En god analogi bygger den bro mellem det ukendte og det allerede forstået.
Det er særligt vigtigt i datalogi hvor begreberne er abstrakte og fremmedartede. Studerende møder disse begreber uden et eneste ankerpunkt i deres eksisterende verden, og derfor er gode analogier ikke bare rare at have men nødvendige. Forskning viser at det virker. Saxena et al. (2023) fandt at studerende der blev undervist med analogier præsterede over en hel karakter bedre end dem der ikke gjorde.
Men en dårlig analogi er ikke bare unyttig. Den er aktivt skadelig. En dårlig analogi lover en mental model og leverer støj. Den aktiverer din eksisterende viden om et domæne og bruger den imod dig. De studerende sidder tilbage og tvivler ikke bare på det nye begreb. De er mere forvirrede end inden de blev præsenteret for analogien.
Lad os tage et konkret eksempel.
Når osten er en pizza#
Decorator pattern er et klassisk designmønster der bruges til dynamisk at tilføje funktionalitet til et objekt uden at ændre dets struktur. Det er et mønster mange studerende kæmper med, hvilket er forståeligt, for det kræver at man forstår rekursiv wrapping og fælles interfaces på samme tid.
En udbredt analogi forsøger at forklare decorator pattern ved hjælp af en pizzabutik. Idéen er at forskellige pizzaer kan få forskellige toppings, og at den samlede pris beregnes ved at lægge priserne sammen. Det lyder umiddelbart fornuftigt. Men lad os se på hvad koden faktisk siger:
class VegPizza implements BasePizza {
public int cost(){
return 200;
}
}
class Margherita implements BasePizza {
public int cost(){
return 210;
}
}class ExtraCheese implements BasePizza {
private BasePizza basePizza;
ExtraCheese(BasePizza pizza) {
this.basePizza = pizza;
}
public int cost() {
return this.basePizza.cost() + 40;
}
}ExtraCheese implementerer BasePizza. Ekstra ost er en pizza.
Og det bliver værre. Fordi alle toppings og alle pizzaer implementerer det samme interface, er følgende fuldstændig lovlig kode:
new ExtraCheese(new ChickenTikka(new ExtraCheese(new Margherita())))En ost der indeholder en kylling der indeholder en ost der indeholder en margherita. Ingen pizzabager i verden ville acceptere denne bestilling. Det er her analogien kollapser fuldstændigt. Den studerende sidder nu med to problemer i stedet for et. De forstår stadig ikke decorator pattern, og de er begyndt at tvivle på deres egen pizzaforståelse.
Problemet er ikke at pizza er et dårligt domæne. Problemet er at pizza simpelthen ikke fungerer sådan. Toppings wrappes ikke ind i hinanden. Ost er ikke en pizza. Analogien lyver om strukturen og det er præcis den struktur der er mønsteret.
Når det er for simpelt til at betyde noget#
Pizza-analogien fejler fordi den er strukturelt forkert. Men der findes en anden og lige så udbredt fejltype, nemlig analogien der er så forsimplet, at den ikke giver nogen mening i kontekst.
Guy Brousseau beskriver i sin didaktikteori det han kalder topaz-effekten. Det er det der sker når en underviser forsimpler et begreb så meget for at gøre det tilgængeligt, at selve meningen forsvinder undervejs. Eleven lærer at udføre en handling, men forstår ikke hvorfor den giver mening og kan derfor ikke overføre den til nye situationer.
Det klassiske eksempel fra objektorienteret programmering er Animal, Cat og Dog. Du har sikkert set det:
class Animal {
public String speak() { return "..."; }
}
class Cat extends Animal {
public String speak() { return "Meow"; }
}
class Dog extends Animal {
public String speak() { return "Woof"; }
}Strukturen er teknisk korrekt. Der er ikke noget galt med koden. Men hvad skal den bruges til? Hvem ejer disse dyr? Hvorfor har vi brug for et system, der ved hvad de siger?
Det ved ingen fordi der ikke er en kontekst. Uden kontekst er der heller ingen transfer. Den studerende kan reproducere mønsteret i en opgave, men når de seks måneder senere sidder med et rigtigt system og skal vælge om de skal bruge arv eller ej, har Cat og Dog ikke givet dem noget at trække på.
Man kunne forsøge at redde det ved at sætte det ind i en kontekst som “forestil jer, at vi laver et system til en dyrlæge.” Men det hjælper ikke nødvendigvis for de fleste studerende har ikke dyb nok viden om biologiske forskelle mellem dyr til at det giver strukturel mening. Man ender hurtigt med at opfinde regler, der ikke holder som “lad os sige at katte kun må komme til dyrlæge om onsdagen.” Og så er vi ude i det samme problem som pizzaen, nemlig at analogien kræver, at man bøjer virkeligheden for at den passer.
En god kontekst er derimod en der holder som den er. Medarbejdere for hvem løn beregnes forskelligt for eksempel. Timelønnede, funktionærer, freelancere, provisionslønnede. Alle ved hvordan det virker. Forskellene er reelle og relevante og ingen behøver at opfinde noget.
Hvad gør en analogi god?#
Ud fra de to eksempler tegner der sig tre kriterier for en god analogi i undervisningen.
1. Domænet skal være kendt — inklusive de relevante strukturelle forskelle
Det er ikke nok at vælge et domæne studerende genkender. De skal også kende de forskelle inden for domænet, der er relevante for det begreb de skal forstå. Domænet må ikke i sig selv kræve kognitiv kapacitet at forstå. Hvis de studerende bruger energi på at afkode domænet, er der ingen kapacitet tilbage til selve analogien og slet ingen til det begreb man egentlig forsøger at lære dem. En god analogi skal være umiddelbart gennemskuelig, så al opmærksomheden kan rettes mod det nye.
Pizza er et kendt domæne, men de færreste tænker over pizzaer som toppings, der wrapper hinanden rekursivt - fordi det ikke er sådan pizza fungerer. Løn er også et kendt domæne, og her kender de fleste allerede til de relevante forskelle: timeløn, månedsløn, honorar, provision. Analogien kan trække på viden, som er der i forvejen.
2. Konteksten skal give mening
Analogien skal placeres i en situation, hvor det giver mening at nogen ville bygge det pågældende system. Animal, Cat og Dog flyder i et vakuum. De studerende kan ikke se hvorfor nogen ville lave klasserne. Medarbejdere og lønberegning eksisterer derimod i en verden studerende kender. Virksomheder har forskellige medarbejdertyper, og de skal aflønnes forskelligt. Det er et system der giver mening i sig selv.
3. Analogien skal holde som den er
En god analogi kræver ingen disclaimers. Den behøver ikke indledes med “lad os forestille os at…” eller “vi leger at…”. Hvis man er nødt til at bøje virkeligheden for at analogien passer - hvis toppings skal være pizzaer, eller katte kun må komme til dyrlæge om onsdagen - er analogien allerede fejlet. Strukturen i analogien skal afspejle strukturen i det begreb man forsøger at forklare, uden at man behøver at forklare analogien først.
Så hvad gør vi i stedet?#
Lad os slutte med noget konkret. Her er en analogi der faktisk holder:
Geometriske figurer og arv. Et program skal beregne areal og omkreds for cirkler, rektangler og trekanter. Alle er figurer, men formlerne er forskellige. Strukturen er matematisk korrekt og velkendt fra folkeskolen. Vi kan sætte det i kontekst ved at sige, at vi laver et system, der beregner forbrug af maling og lister. Der er ikke brug for at bøje algoritmen.
Og hvad så med decorator pattern? Design patterns er menneskeskabte løsninger på problemer der kun opstår når man skriver kode. De er ikke abstrakte versioner af noget vi allerede kender fra hverdagen, men opfundet til at håndtere kompleksitet i software. Det er derfor ikke overraskende at det er svært at finde en god hverdagsanalogi til decorator pattern. Ingen pizzabager i Napoli i 1889 spekulerede over om hans pizza var objektorienteret.
Her er det mere ærligt og mere nyttigt at motivere mønsteret med et konkret kodeeksempel alle kan genkende sig i, frem for at presse en hverdagsmetafor ned over noget den ikke passer til. Du finder en vejledning til decorator pattern specifikt her, hvis du vil se hvordan det kan se ud i praksis.
Analogier er et område hvor AI kan være en reel hjælp. En sprogmodel er ikke god til at generere analogier på egen hånd, fordi den så også vil reproducere de gængse pizza og animal metaforer, men den kan generere dem i samspil med de studerende. Bernstein et al. (2024) viste at når studerende selv specificerede emnet for analogien i deres prompt til ChatGPT, blev resultatet langt mere personligt relevant og lettere at huske end de generiske analogier modellen producerede uden styring. AI kan altså hjælpe studerende med at finde deres egen gode analogi, men kun hvis de ved hvad de leder efter.
Som undervisere er det værd at bruge tid på at finde analogier der opfylder kriterierne. Ikke bare bruge den første der falder en ind fordi man tilfældigvis elsker pizza eller fodbold. En dårlig analogi er ikke neutral. Den efterlader de studerende mere forvirrede end de var, og med en mental model der skal afmonteres før den rigtige kan bygges op.
En god analogi kræver forarbejde. Det er ikke nok at vælge noget velkendt og håbe på det bedste. Man er nødt til at tænke den igennem. Holder analogien til alle de pointer jeg gerne vil frem til? Eller ender vi på et tidspunkt i “wrap en ost i en anden ost”?
Det tager tid at finde en god analogi, men det tager meget længere tid at reparere en dårlig.
