Et didaktisk projekt der undersøger, hvordan man kan undervise i it-faglige begreber — algoritmer, datastrukturer, netværk og programmering — uden brug af computere eller skærme.
Baggrunden for Tech uden Tech#
Jeg startede projektet, fordi jeg havde lagt mærke til tre udfordringer, som opstår når studerende skal lære grundlæggende programmering:
- Der er en stejl indlæringskurve og de studerende forstår ikke deres fejl
- De værktøjer vi bruger bliver mere og mere avancerede og de studerende risikerer at blive “button-pushers”
- AI kollapser taksonomi som vi kender det
Stejl indlæringskurve og fejl#
Vedrørende den stejle indlæringskurve, så er det ikke nyt. Den har været der i de 20+ år, jeg har undervist i grundlæggende programmering. Udfordringen er (blandt andet) at der kræves præcis syntaks for at få kode til at kompilere. Når den studerende misser et semikolon eller staver et keyword forkert, brokker kompileren sig ofte med beskeder, som den studerende ikke forstår. Det giver en kognitiv overbelastning, hvor syntaksen støjer og overdøver den semantik, som den studerende skal lære.
Samtidig er frygten for fejl ikke blev mindre. Mange studerende i dag ser fejl som meget skræmmende og det tager modet fra dem, når de ser røde streger overalt. Vi kender det fra folkeskolen, hvor man i mange år har indført “børnestavning” for at lade børnenen opdage glæden ved at skrive inden de mødes af en rød rettepen. Kompileren er den meste rigide lærer, man kan møde, da intet fungerer hvis vi ikke har perfekt stavning og tegnsætning.
Button-pushers#
Matematikdidaktik peger på, at avancerede CAS (Computer Algebra Systems) værktøjer kan stå i vejen for de studerendes dybdelæring hvis de udelukkende bruges løsningsorienteret (Information, 2017). Hvis de studerende udelukkende fokuserer på at taste input ind i et værktøj og observere output, vil de blive såkaldt “button-pushers” som forstår værktøjet men ikke de grundlæggende koncepter.
Det samme gør sig formodentlig gældende når vi underviser i IT. Måske endda i højere grad, da koden slet ikke eksisterer udenfor værktøjerne.
AI og taksonomien#
De klassiske taksonomi har seks trin; huske, forstå, anvende, analysere, vurdere og skabe. En studerende skal mestre hvert trin for at komme op på det næste. Sådan er det bare ikke længere.
Jeg har set rigtig mange programmeringsopgaver i min tid som underviser og de har naturligvis været af svingende kvalitet og demonstreret såvel forståelse som mangel på samme. Sådan er det bare heller ikke længere. Rigtig mange af de opgaver, jeg nu ser fra studerende, er uden fejl. Det er ikke nødvendigvis fordi AI har genereret al koden, men opgaven har som regel været forbi en digital ven, der lige kunne rette op på den.
Det betyder, at de studerende kan anvende uden at huske og forstå. De kan skabe uden at kunne analysere og vurdere. Taksonomien forudsætter at hvert trin bygger på det forrige, men AI giver adgang til toppen uden fundamentet. AI kollapser taksonomien og tilbyder i stedet den studerende en techsonomi.
Tech uden Tech#
Tech uden Tech — TuT — er en didaktisk metodologi hvor studerende møder programmerings- og datalogi-koncepter gennem fysiske, analoge aktiviteter uden de åbner en computer. Det jeg gør er at designe opgaver i tre forskellige kategorier
- Analoge teknik-opgaver. Det er opgaver, som er tæt på det tekniske, men laves analogt. Det kan være at trace kode på papir og noterer hvad der vil blive udskrevet, at udfylde virtuelle tabeller på papir som resultater af SQL joins eller at sætte et Javapuslespil sammen, så det danner en klasse.
- Analogier. Nogle opgaver har klare analogier i virkeligheden. Det kan være sortering af fysiske ting eller søgning i rækker med og uden index eller træer af studerende. Her anskueliggør jeg med fysiske objekter hvad koden gør.
- Omvendt transfer. Det ligner lidt analogier, men jeg starter med det kendte fra virkeligheden og viser bagefter hvordan det modelleres digitalt. Det vigtige her er, at de studerende forstår at vi koder en verden, der skal spejle virkeligheden. Ikke omvendt. Det kan være en kø hos bageren eller en person med mange roller (polymorfi).
Selvom det gerne må være sjovt, er det ikke ment som en leg. Aktiviteterne er nøje planlagt til at give de studerende en mental model af det, der senere skal foregå digitalt i computeren. De skal have en dybdeforståelse. Derfor tvinger jeg dem ned i tempo og fjerner værktøjer som enten gør for meget af deres arbejde eller viser dem forvirrende fejlmeddelelser. De skal have ro og tid til at tænke sig om uden at bekymre sig om syntaks og en sur kompiler.
Når jeg tvinger dem ned i tempo, tvinges de også ned i taksonomien. De får brug for at huske og forstå, så de kan anvende og de får brug for at analysere og vurdere for at kunne skabe. Tech uden Tech gør det muligt for dem at vise mig - og sig selv - at de faktisk forstår komplicerede koncepter.
Når en studerende kører et program tager metodekald et splitsekund. De ser ikke hvad der sker. De ser resultatet. Med en blyant og et stykke papir er de nødt til at følge hvert eneste trin. De sidder ikke længere passivt og ser programmet køre på skærmen. De må aktivt følge flowet gennem kodelinjerne.
En af mine studerende sagde det præcist, da hans “udprint” stemte overens med hvad programmet bagefter udskrev: “Yes! Computeren skriver det samme som mig. Jeg ER computeren.”
Det er Wing’s computational thinking. Den studerende forstod hvordan kode opfører sig. Han tænkte som computeren. Og han gjorde det det uden at kompileren råbte af ham fordi han glemte et semikolon. Bagefter var han mere tryg ved at sætte sig til tastaturen, fordi han vidste, at han havde forstået kode. Det føltes mindre farligt med røde streger og fejlbeskeder, når grundforståelsen beviseligt var der.
Hvad sker der uden computeren?#
Studerende der normalt sidder passive begynder at tale. De siger “skal vi bruge static? Nej, for…” Og den sætning - nej, for - er alt. Det er ikke “nej, fordi IntelliJ siger det er forkert.” Det er “nej, fordi vi har forstået hvad static betyder.”
De studerende bliver mindre bange for at fejle. Hvis en papirstump ligger forkert, så kan vi bare flytte den. Hvis vi skrev forkert, kan vi strege det ud eller tage et nyt stykke papir. De forstår hvad der sker, modsat når IntelliJ viser fejl, som de ikke kan gennemskue. Fejl er lavrisiko og lidt sjove. Jeg har set studerende kravle rundt på gulvet for at finde et semikolon, de havde tabt, så deres puslespil på bordet kunne “kompilere”. Det var studerende, som lige havde fortalt mig, at de intet forstod af syntaks. Jeg har også set studerende, som ikke var specielt kodestærke, stå og forklare polymorfi til hinanden: “Jo, fordi for dine søskende er du Bror og så kan de bede dig om nogle ting, men for os er du Ven og så er det noget andet vi kan få dig til og…”.
Uden kompileren forsvinder også en anden fælde, nemlig compile-driven development. Man skriver, kompileren klager, man retter det kompileren siger, det kompilerer, man fortsætter. Forståelse er ikke nødvendig for at komme videre. Med AI er det endnu værre, da AI kan omskrive hele blokke og den studerende trykker accept uden at vide hvad der ændrede sig eller hvorfor. Det er techsonomien i praksis.
Hvad siger de studerende?#
De studerende har taget overraskende godt imod TuT. Det er ikke noget, jeg anvender hver gang og hele tiden, men når dybdeforståelsen skal på plads, kan de godt lide at komme lidt væk fra skærmen. De giver udtryk for at det er rart at komme ned i tempo og at de kan se hvad de laver.
Nedenstående er fra en evaluering på et 1. semesterhold hvor fem studerende har erklæret, at dette var en af de vigtigste ting, vi skulle beholde (forfatteren + de fire streger).

Det er vigtigt for mig at understrege at Tech uden Tech ikke må bliver til selskabslege, som kræver mere af de studerende, end det de giver. Læs mere om det i indlægget om Psykologisk tryghed og frygten for at fejle.
Eksempler på aktiviteter#
Her er en liste over aktiviteter, der er prøvet af i klasserummet. Du vil finde beskrivelser, tidsestimater, materiale, der er lige til at printe ud. Jeg hører meget gerne om dine erfaringer på mail.
Kodeflow
Backtracking
Interfaces
Grådige algoritmer
Javaklasser
Joins i SQL
Big O
Pull Requests
