Kode er poesi

[Udkast]

I læreplanerne for skole og gymnasie tør man knap nok nævne ordet programmering og kode-færdigheder er stadig så godt som ikke-eksisterende blandt lærere, inklusive på læreruddannelsen.

Der er noget grundlæggende universelt over kodning. Den er kommet for at blive og vi må af skolesystemet forvente, at dets fornemste opgave er at give næste generation de bedste forudsætninger for at begå sig i fremtidens samfund.

Så lad os se det i øjnene: Hvis de unge mennesker skal lære at kode, skal lærerne lære det først.

Koncis og udtryksfuld, enkel og subtilt struktureret; god kode handler i høj grad om at finde le mot juste, det rette ord.

Strukturen i alle programmeringssprog er bygget op omkring:

  • løkker (for, while): maskinens “puls”
  • forgreninger (if): gør det muligt for maskinen at tilpasse output afhængigt af input
  • variable: maskinens “hukommelse” over tid
  • lister, funktioner og objekter: hjælper programmøren med at holde koden enkel og overskuelig

I grunden et enkelt begrebsapparat, som åbner op for en uendelighed af muligheder, kreativitet og innovation. Den værdi, kode har skabt i samfundet er uden sidestykke, har i løbet af de seneste årtier vendt verdens magtbalance på hovedet og gjort økonomerne helt rundtossede. Superkræfter kalder nogen det, eller det 21. århundredes alfabetisering.

At lære at kode er som at lære sprog: før man har opbygget et vist ordforråd, er det ren volapyk. Ligesom sprog læres programmering bedst vha. chunking og sprogbad: Start ud med små, enkle eksempler og opsøg læringsrelationer.

Chunks

Chunking tager tid. Rent neurologisk er det synapser, der skal etableres – en forholdsvis langsom biokemisk proces.

Her følger fire eksempler på korte og nyttige programmer i forskellige sprog, der kan bruges som chunks:

P5

P5 er et sprog møntet på gøre det let for ikke-programmører at lave grafiske produkter, herunder animationer. Eksemplet nedenfor illustrerer en enkel fjederbevægelse:

var position = 0;
var hastighed = 0;
var draw = function() { //starter løkken
    hastighed += - 0.001 * position + 0.1;
    position += hastighed;
    ellipse(200, position, 10, 10);
};

Prøv selv.

Octave

Octave bruges til modellering og statistik af forskere, ingeniører, statistikere mm. Har man brug for fx at vise data i et histogram kan det gøres koncist, som følger:

antalEleverPerAargang = [8 9 6 3 6 3 1 0 0 0 1]
bar(antalEleverPerAargang) 

Prøv selv.

Sprogene Python og R er ligeledes velegnede til denne kategori af opgaver.

C/C++

C og C++ er verdens mest udbredte sprog og bruges i alt fra rumraketter til computerspil. Arduino gør det let at komme i gang med elektronikprogrammering, fx med dataindsamling eller robotter. Med nedenstående C program kan et Arduino kredsløb bruges til at finde, hvor et strømkabel løber i en væg:

void loop() { //loop() er en løkke
    int aflaesning = analogRead(A0);
    int taerskelvaerdi = 200;
    if (aflaesning > taerskelvaerdi) {
        digitalWrite(LED_BUILTIN, HIGH);
    } else {
        digitalWrite(LED_BUILTIN, LOW);
    }
}

OpenSCAD

I OpenSCAD bruger man geometriske figurer til at lave 3D-modeller, en meget motiverende, kreativ og lærerig aktivitet for eleverne.

intersection() {
    translate([-10, 0, 0]) sphere(20);
    translate([10, 0, 0]) sphere(20);
}

Kryptering

Kryptering er et vigtigt begreb, navnligt fordi det bruges til at underskrive dokumenter digitalt. Konceptet er overraskende enkelt og kræver kun, at man kender til division og potenser. Man bruger tre tal: d (privat nøgle, den skal man holde hemmelig), e (offentlig nøgle) og n (et fælles tal). Derefter kan en besked b laves om til en underskrevet besked c ved at gøre følgende c = bd mod n, eller med ord: man opløfter b i d‘te potens, dividerer med n og tager resten. Derefter sender man beskeden c til modtageren, som af-underskriver den med b = ce mod n. For eksempel kunne tallene være n=21, d=23 og e=11. Hvis man vil signere beskeden “3” udregner man 323 mod 21 = 12. Den signerede besked (12) sender man til modtageren, som allerede forventes at have ens offentlige nøgle (tallene n=21 og e=11), som af-signerer den ved at udregne 1211 mod 21 = 3. Eller i kode:

octave:1> mod(3^23, 21)
ans = 12
octave:2> mod(12^11, 21)
ans = 3

Så enkelt er det, man bruger bare meget større tal i virkeligheden, således at de er sværere at gætte og at man kan signere, beskeder, der er længere end “3”.

Kodedeling og blockchains

Programmører arbejder stort set altid sammen med andre. Deres vigtigste værktøj er versioningssystemet Git: et peer-to-peer program der koordinerer indsatsen, når man sender ændringer af den fælles kode til hinanden. Kodeændringerne pakkes i blokke og ordnes i en lang kæde. På den måde kan man altid vende tilbage til en tidligere version i kæden og man har styr på, hvem der har gjort hvad hvornår. Et typisk forløb hvor man 1) downloader en kodebase fra nettet, 2) tilføjer en kodestump, 3) tilføjer sin blok til kæden 4) deler sin kæde med andre, ville se således ud:

git clone git@gitlab.com:ecolefrancodanoise/de-for-children.git
git add wavesim.m
git commit -m 'Simulering af bølger'
git push

Dette er også kerneidéen i de såkaldte blockchains. Her er det ikke kodestumper man udveksler, men værdienheder – fx beløb i Bitcoins eller digitale kunstværker og hver transaktion signeres med ens private nøgle.

Sprogbad

Sprogbade er der rig mulighed for i det moderne hyperforbundne samfund. Kodere arbejder sammen i verdensomspændende fællesskaber, med avancerede samarbejdsmetoder såsom versionering og test. Det er bare at kaste sig ud i det: som mange andre vigtige begreber assimileres de bedst gennem praksis. Deltag i læringsfællesskaber, arrangér lejre og involvér folk, der kan bidrage med læringsnøgler; særligt indenfor IT kan det gode råd på rette tidspunkt spare en for månedsvis af forfejlede forsøg.

Dopamin eller serotonin?
Ift. til de mere visuelle træk-og-slip brugerflader viser erfaringen, at børnene kan engageres lige så aktivt i tekstbaserede værktøjer. Det vigtige element er, at de kan se en ændring i programmets opførsel umiddelbart efter, at de har ændret koden.

Det er her nogle potente neurokemiske processer, der er i spil. Som ethvert andet biologisk system har den menneskelige psyke grundlæggende behov for at omdanne et komplekst sensorisk input til et enkelt output i form af handlinger. Idéen med gamification er at udnytte de belønningsprocesser, hjernen normalt opererer med i form af dopaminudladninger. Det er et enkelt informationsteoretisk filter, der tager udgangspunkt i, at det der gentager sig, nok må være vigtigt – man genfinder det i forventningens glæde. Meget kraftfuldt, ligesom narkotika.

Et andet relevant neurokemisk fænomen, sandsynligvis baseret på serotonin, handler om Aha-oplevelser: følelsen af, at brikkerne falder på plads, at man er i kontrol og man får lyst til at handle. Disse er der også rig mulighed for ifm. programmering, fx når ens program pludselig virker, ofte på måder, man ikke kunne forudse og man opnår ny indsigt. Også afhængighedsskabende, men på den gode måde.

Det er derfor afgørende, at man er omhyggelig og selektiv med at vælge og indlære de rette IT-vaner, da det er risici for afhængighed, afmagtsfølelse, depression, udbrændthed mm. der er på spil. Til gengæld er det didaktiske potentiale også helt fantastisk.

Det vilde vesten
Udviklingen inden for IT minder på mange måder om koloniseringen af det vilde vesten: Territoriet er ufatteligt stort, guldfeberen har bredt sig, tech-milliarderne flyder. Og kvaksalverne står i kø for at sælge deres lokkende løsninger: de kan genkendes på den glatte indpakning og på, at de skjuler, hvad der er indeni.

Vil man være fri for giftigt kvaksalveri, er det enkle, sikre valg at holde sig til fri / open source produkter. Da der ingen markedsføringspumper er bag, skal man her selv være opsøgende.

Kunst og håndværk

Kodning er en sublim kommunikationsform, mellem menneske og maskine, men i lige så høj grad mennesker imellem. Den har i løbet af det sidste halve århundrede katalyseret den største samfundsændring i menneskehedens historie. Og behovet for kodere vokser, hurtigere og hurtigere.

Skal vores skolesystem i fremtiden have en vis relevans, har vi travlt med at komme ind i kampen, eller fortsat føde ultrakapitalisternes zombificerede slavehær.