lørdag 4. november 2017

Programmering er en sosial aktivitet

For mange er nok dette en drøy påstand. (F.eks. tror jeg min tålmodige hustru vil ha problemer med å godta den.)

Ikke desto mindre er det et aspekt som det er grunn til å legge vekt på både i en læringssituasjon og i programmering som yrkesuøvelse. I innlegget om iterativ utvikling pekte jeg på "Extreme programming" som en metode med noen interessant og anvendelige prinsipper.

  • Problemløsning foregår i grupper. Alle i en gruppe har ansvar for løsningen
  • Problemløsning foregår i små oversiktlige, veldefinerte steg.
  • Testing foregår hyppig og testene er systematiske og planlagt.
  • Parprogrammering. Det vil si at det alltid er to personer foran datamaskinen. Den ene skriver og den andre spør, foreslår og kommenterer. Rollene byttes, avhengig av oppgave eller ideer
  • De enkelte stegene sjekkes ut mot oppdragsgiver

De to punktene som peker på gruppearbeid og parprogrammering er svært relevante også for undervising. Det er dette perspektivet, læringssituasjonen, jeg har som referanse i argumentasjonen nedenfor

Parprogrammering

Med parprogrammering mener vi at det alltid skal sitte to personer foran datamaskinen. Ofte betraktes dette som en nødløsning når f.eks. en klasse ikke har mange nok datamaskiner. Tvert imot er det en arbeidssituasjone med mange fordeler.

Det skal da være slik at de to samarbeider og deler kunnskap. Den ene skriver og den andre følger med og kommenterer og gir råd. Det er flere gevinster i dette

For det første den selvsagte at de tilsammen har mer kunnskap enn de har hver for seg.

For det andre er det slik at skrivingen i seg selv ofte virker litt blokkerende på resonnementet. Den lille ekstra vurdringen som er nyttig forsvinner mens du er opptatt med innrykk og parenteser. Den som ser på har akkurat den tiden til å resonnere og stille noen spørsmål.

Et trivielt eksempel er variabelnavn. Disse har en tendens til å oppstå nesten mens fingerenn er på vei ned på tastaturet og de blir ofte veldig korte, mens de burde vært laget med tanke på leselighet og eventuell omskrivning. Selv om det kan virke som litt overdrevent i øyeblikket kan det lønne seg å kalle en variabel "antallPunkter" istedet for "n".

Sidemannen kan komme med spørsmål av typen: "hvorfor deler du på 2 før du går inn i for-løkka ?". Hvis dette skjer er grunn til enten å skrive en kommentar som forklarer hvorfor, eller kanskje det etter litt ettertanke ikke skal gjøres.

Parprogrammering er mer enn at den ene skal lære av den andre. Det er selvsagt det også men tanken er at arbeidsformen i seg selv skal på virke arbeidet i positiv retning.

Det er et viktig poeng at arbeidsdelingen mellom tastaturansvarlig og kommentator skal veksle.

Gruppearbeid

Gruppearbeid og ansvarsdeling er jo ikke noe som er spesielt for programmering, men det er mitt intrykk at det ikke har fått den plassen det fortjener og at oppgaver ikke alltid legger opp til dette.

En kan godt tenke seg at en oppgave utformes slik at ulike grupper får ansvar for ulike deloppgaver. La oss se på et eksempel (som lar seg realisere i f.eks. Processing eller p5js). Oppgaven er ikke en begynneroppgave, men jeg bruker den her for for å illustrere tankegangen.

Anta at vi vil lage en løsning som skal kunne framstille ulike typer kurver (histogram, linjer, kakediagram,..) basert på data som er tilgjengelig i ulike typer dataformater (CSV, JSON, XML). Vi kan da formulere oppgave slik at vi setter opp et skjelett der vi spesifiserer hva en datafil skal inneholde og hva datasett skal kunne levere til en tegnefunksjon, typisk: getAntallVerdier, getVerdi(n), getNavn(n), getMaxVerdi(), getTittel()

En oppgave kan da være
"lage en klasse som leser en JSON-fil og etablerer et datasett-objekt med de spesifiserte leverings funksjonene"
,( eller i programmeringstermonologi: "implemeterer det ønskede interfacet".)

En annen oppgave kan være
"Skriv en funksjon som tar et generelt datasett som parameter og tegner et histogram"

For å teste sine egne delløsninger må alle gruppene ha et skjelett som tester at det de lager fungerer. De som arbeider med datasett kan minimalisere tegningen til f.eks. å skrive ut verdier som tekst, og de som arbeider med uttegning kan etablere dataset basert på variable, uten å lese og tolke filformater.

Deling

Det går an å legge opp oppgaver slik at deling og erfaringsutveksling foregår på en mindre organisert form. I blogginnlegget En rimelig oppgave beskrives en oppgave som har som å å produsere for utskrift. En av målene med dette er å skape en situasjon der elever/studenter kan vise sine produkter, sammenligne og kanskje bruke blyant til å komme med forslag til endringer.

Dersom produksjonen foregår mot websider som kan nås av andre er selvsagt også dette en måte å dele på. Diskusjoner og forslag kan formidles på alle slags måter på nettet og i samtaler, eller kanskje i plenumsvisninger.

Ingen kommentarer :

Legg inn en kommentar

Skrv din kommentar ....