Code Challenge Workshop

Workshop · 2. Semester · Forår 2026 · UCL · Seebladsgade · Odense · Underviser: Marc Altfuldisch

En dag på fabrikken — hvor det visuelle gav plads til det logiske

En endags-workshop bygget som et spil: 10 levels på “Fabrikken”, hvor pakker skal flyttes fra inbox til outbox. For hver level dukker en ny kommando op — og pludselig sidder man med grundstenene i programmeringslogik uden at have skrevet en linje kode.

Format

Workshop · 1 dag · gruppe på 4

Tema

“Fabrikken” — inspireret af Human Resource Machine

Output

10 løste levels · fysiske instruktionsark · gruppediskussioner

Læringsmål

Programmeringslogik · algoritmetænkning · pseudokode

Velkommen til jeres første dag på fabrikken Inbox → Outbox
01
Konceptet
Inbox, Outbox og en håndfuld kommandoer
Programmeringslogik forklædt som fabriksarbejde

Workshoppen var bygget som et spil. Vi fik udleveret instruktioner til 10 stigende levels, hvor man gradvist lærer at kombinere kommandoer til at løse stadigt mere komplekse opgaver. Hele rammen var en “fabrik”, hvor man skulle flytte pakker fra et inbox-bord til et outbox-bord — i rigtig rækkefølge, med så få kommandoer som muligt.

Det lyder enkelt. Og det er det også — indtil man rammer level 6, hvor man pludselig skal bruge betingede hop og holde styr på hvilken pakke man står med i hånden. Der bliver det hurtigt til kode, selvom ingen af os skrev en linje JavaScript.

Workshoppen trak på spillet Human Resource Machine og blev faciliteret af Marc Altfuldisch. Hvert level introducerede én ny kommando, og instruktionerne var bevidst minimale — man skulle selv regne ud, hvordan kommandoerne kunne kombineres. Ærligt talt var det en opgave, der var til at gå til — men den var god, fordi den satte rammen om hvad kode egentlig er, uden at det blev tungt og teknisk.

De otte kommandoer

Gennem de 10 levels blev disse kommandoer introduceret én efter én. Farverne følger workshoppens eget system — bevægelse (gul), kontrol (blå), kopiering (pink), regning (orange).

Inbox
Saml den forreste kasse op fra inbox. Holder du allerede noget, bliver det tabt.
Outbox
Placér kassen du holder på outbox. Holder du intet, sker der intet.
Jump
Hop til et andet sted i instrukserne — grundstenen i loops.
JumpIfZero
Hop kun, hvis værdien i hånden er 0. Første gang vi bruger en betingelse.
JumpIfNegative
Hop kun, hvis værdien er negativ. Giver os fortegnstjek.
CopyFrom
Kopiér kassen fra en valgt plads på bordet ind i hånden.
CopyTo
Læg en kopi af det du holder på en bestemt plads på bordet.
Add / Sub
Læg sammen eller træk fra — mellem hånden og en plads på bordet.

“Det rammer faktisk meget godt, at man allerede efter level 3 har ‘skrevet’ sit første lille program — uden at have rørt en tastatur. Kommandoer. Loops. Betingelser. Det er kode. Bare i en anden form.”

Min umiddelbare kritik er timing. Workshoppen burde være lagt i starten af 2. semester, inden vi gik i gang med JavaScript — ikke efter. For det, den gør rigtig godt, er at give en mental model for hvad kode er: en række trin, et flow, en betingelse. Den forståelse ville have gjort de første JS-forelæsninger markant lettere at bygge oven på. Nu kom den lidt som et “ahh, så var det dét, der lå bag” i stedet for at være fundamentet.


02
Refleksion · hovedpointe
Fra visuel til logisk tænkning
Og hvorfor det var mere ubehageligt, end jeg havde regnet med

Jeg havde faktisk et lille forspring. Jeg sidder en del med kode i min fritid — ikke som nogen ekspert, men nok til at jeg har en fornemmelse for hvordan loops og betingelser opfører sig. Det mærkede jeg her. Der hvor jeg for et halvt år siden ville være gået i stå på level 5-6, kunne jeg denne gang se mønsteret ret hurtigt. Så det var mindre “aha” og mere “nå ja, det er jo sådan det hænger sammen”.

Det, der alligevel rykkede noget, var formatet: at tvinge sig selv til at skrive tankegangen ned, før man vælger kommandoer. I stedet for at kaste sig ud i at prøve løsningen ved gætteri. Det er nærmest pseudokode — en arbejdsform jeg normalt springer over, men som jeg nu tager med videre i JavaScript-forløbet.

# Level 6 — “Ingen nuller” (min løsning)
# Send alt der ikke er 0 fra inbox til outbox

INBOX
JUMPIFZERO → a # hvis 0, hop tilbage
OUTBOX
a: JUMP → start # loop igen
Pseudokode
først
Nedskriv i ord, før du vælger kommando. Det lyder banalt, men for mig var det den største læring. Når jeg sprang den fase over og gik direkte på kommandoerne, endte jeg altid i en blindgyde omkring level 5-6.
Løsning vs.
smuk løsning
Et “hard mode” på hvert level tvang os til at optimere. Der er stor forskel på at løse en opgave og at løse den elegant. Det minder faktisk meget om design — den første version virker, men den fjerde version er den, der fungerer.
Binær
feedback
Enten virker det, eller også gør det ikke. Ingen mellemvej, ingen æstetisk vurdering. Det er en helt anden type feedback end den, jeg får i tatoveringen eller i Figma — og det var faktisk befriende.
Mønster-
genkendelse
Hvert level havde et skjult mønster. Når man først så det, kom løsningen hurtigt. Det minder om at se kompositionen i et motiv, før man tegner det — bare i et andet sprog.

03
Refleksion · hovedpointe
At forklare kode er at forstå den
Fire hjerner om samme level

Vi var fire om at løse levelsene sammen, og det var faktisk den del af dagen, der rykkede mig mest. Man kan sagtens løse et level alene — men man forstår det først, når man skal forklare sin løsning til andre.

Flere gange oplevede jeg, at jeg havde en løsning i hovedet, som fungerede — men i det øjeblik jeg skulle forklare den trin for trin, opdagede jeg selv hullerne. “Hvorfor hopper du her? Hvad sker der, hvis pakken er negativ?” Det er spørgsmål, man ikke stiller sig selv, når man sidder alene med det.

Det er en arbejdsform, jeg kender fra tatovering — hvor man sparrer med en kollega om sammensætningen af en rygtatovering, fordi to øjne ser noget andet end ét. Men her var det med ord og logik i stedet for linjer og farver. Samme princip, anden muskel.

01
Forklaring som test
Hvis jeg ikke kan forklare min kode uden at henvise til “det virker bare” — så forstår jeg den ikke. Den forskel er blevet tydeligere for mig her.
02
Fire hjerner, fire løsninger
Vi endte næsten aldrig med samme løsning internt i gruppen. Det var ikke et problem — det var ofte der, indsigten lå.
Refleksion · samarbejde
Der var noget næsten legende ved at arbejde sammen om noget, der tydeligvis var et puslespil. Ingen af os kunne gemme os bag “det ser fint ud” — vi skulle forsvare vores logik overfor tre andre. At tvinge sig selv til at formulere “hvorfor” før “hvad” er en disciplin, jeg gerne vil bruge mere aktivt — også når jeg sidder alene med kode derhjemme.

04
Udvalgte levels
Tre levels der ændrede noget
De øjeblikke hvor logikken fik form
02
Introduktion til loops
Jump — min første løkke
Level 2 var der, det klikkede. “Max tre kommandoer” tvang mig til at se, at et loop ikke er en smart trick — det er bare at lade programmet pege tilbage på sig selv. Pludselig gav alle de JavaScript-forelæsninger mening.
Inbox Outbox Jump
06
Hard mode — Ingen nuller
JumpIfZero — den første betingelse
Her blev det skarpt. Ikke nok med at lave et loop — man skal også filtrere ugyldige pakker undervejs. “Brug max 4 kommandoer, max 23 trin” er lige den type begrænsning, der tvinger én til at tænke én gang ekstra inden man handler.
Inbox Outbox Jump JumpIfZero
10
Et binært problem
Kombinér alt — fortegnstjek i praksis
Det sidste level. Ingen nye kommandoer — bare alt det, vi havde lært, sat sammen. Her mærkede jeg, at min tankegang var ændret: I stedet for at prøve mig frem, begyndte jeg at tegne flowet på papir først. Det hjalp.
Inbox Outbox Jump JumpIfZero JumpIfNegative CopyFrom CopyTo

Samlet refleksion
Hvad jeg tager med mig
Fra fabrikken til resten af semesteret

Jeg kom ind i workshoppen med en forventning om, at det ville være teknisk og tungt. Det var det faktisk ikke — og det er både dens styrke og min største kritik. For mig personligt var opgaven forholdsvis nem at gå til, fordi jeg allerede sidder og roder med kode derhjemme og har en fornemmelse for hvordan loops og betingelser opfører sig. Det gav mig et tydeligt forspring på dagen.

Men netop derfor står det også klart for mig, at workshoppen er lagt forkert i forløbet. Den burde ligge i starten af 2. semester, inden vi rører JavaScript. Så havde de af os, der ikke har kodet privat, fået en mental model at hænge syntaksen op på — frem for at skulle lære logikken og koden på samme tid.

Det jeg konkret tager med mig er to ting: at bryde et problem ned i pseudokode, før jeg begynder at skrive. Og at forklare det højt, selv når jeg arbejder alene. Den visuelle hjerne er min styrke — den logiske hjerne er den, jeg bygger op lige nu.

“Kode er ikke en anden verden end design. Det er den samme disciplin — bare med et andet alfabet.”

Næste skridt: bruge pseudokode aktivt i JavaScript-forløbet. Tegne flowet før jeg skriver en linje. Og fortsætte med at lege med kode privat — for det er tydeligvis dét, der gør den største forskel, når det bliver seriøst.

Scroll to Top