Tävlingar som pedagogiskt verktyg i programmeringskurser

Följande är en sammanfattning av ett pedagogiskt projekt utfört av Fredrik Heintz och Tommy Färnqvist, finansierat av PUG.

Introduktion

Att skriva datorprogram är ett hantverk. Universitetskurser i programmering lär ut fundamentala begrepp och grundläggande kunskaper, men för att bli en riktigt duktig programmerare behöver mycket tid läggas på högkvalitativ träning. Det finns studier som tyder på att det tar upp till tio år att gå från att vara novis inom programmering till att bli expert. Detta synsätt stödjs av Ericsson et al. som menar att ungefär 10000 timmar av så kallad deliberate practice krävs för att bli expert inom ett område. Vi hävdar att tävlingsmoment kan höja kvalitén på programmerings- och algoritmkurser. För att locka studenter till att ägna mer tid åt att träna på programmering har vi undersökt olika sätt att införa tävlingsmoment i en kurs på grundnivå i datastrukturer och algoritmer.

Projektets mål

Syftet med projektet var att utvärdera användandet av tävlingar som inlärningsstöd i programmeringskurser. Våra långsiktiga mål är dels att öka studenternas programmeringsfärdigheter genom tävlingslika moment i grundläggande programmeringskurser och dels att ta fram generella principer för hur tävlingar kan användas i undervisningen för att motivera och utmana studenter.

Genomförande och resultat

Vi hävdar att tävlingsmoment kan höja kvalitén på programmerings- och algoritmkurser. För att testa detta har vi använt vår erfarenhet från att organisera lokala, nationella och internationella programmeringstävlingar för att utforma och utvärdera två olika tävlingar i kursen TDDC70 "Datastrukturer och algoritmer". Kursen är obligatorisk för andrårsstudenter vid C- och D-programmen. Även studenter från IT-programmet deltog, som kontrollgrupp, då kursen samläses med dessa studenter.

Den första tävlingen gjorde om laborationerna till en tävling, där två grupper tävlade internt och två var kontrollgrupper som inte tävlade. Den andra, frivilliga tävlingen, bestod av femton problem av typisk programmeringstävlingskaraktär och var utformad för att understödja studenternas lärande och färdighetsträning genom att tillhandahålla tillfällen för deliberate practice.

I laborationstävlingarna tävlade en grupp om att bli färdiga så snabbt som möjligt, samtidigt som de fick straffpoäng ifall det visade sig att laboration behövde kompletteras efter redovisning i labbsal. Den andra tävlande gruppen försökte istället skriva så effektiv kod som möjligt: Både med avseende på tids- och minnesåtgång men också med avseende på kodkomplexitet. Samtliga studenter fick skicka in sin programkod till ett webbaserat system så fort de tyckte sig färdiga med respektive uppgift.

Vi fann att tävlingsmoment faktiskt påverkar studenternas beteende. Ett exempel på detta ses i figuren nedan, där vi kan se inskickningsmönstret för de två tävlande grupperna och de två kontrollgrupperna. Det är tydligt att grupp 1, vars tävling var baserad på hur snabbt de blev klara, påverkades att arbeta mycket snabbt, medan grupp 2 arbetar lite snabbare än kontrollgrupperna. Resultatet blir än mer påtagligt när man tar i beaktande att föreläsningarna inte behandlade materialet för den första laborationsuppgiften förrän i kursvecka två.

Våra huvudsakliga slutsatser från försöket är att studenter verkligen gillar tävlingar, att tävlingens utformning är mycket viktig för studenternas beteende och att aktiva studenter klarar sig bättre på slutexaminationen.

Projektet har presenterats vid:

Vidare läsning