tisdag 27 maj 2008

Skattjakt som programmeringskurs på universitetet

Jag tyckte att de rena programmeringskurserna under min civilingenjörsutbildning i medieteknik ofta var ganska fantasilösa. Visst, man behöver gå igenom teorin ordentligt och det blir lätt lite torrt, men det kan man ta. Sedan finns det nästan alltid en labbserie, och där har läraren alla möjligheter att ta ut svängarna och hitta på något som inte är torrt. Men det gör hon eller han mycket sällan.

Jag minns ett undantag, och det var inte i en programmeringskurs. I kursen "Kompression av ljud och bild" fanns det en labb som gick ut på att på valfritt sätt komprimera (duh) en ljudfil så att storleksminskningen blev så stor som möjligt medan kvaliteten skulle hålla sig över en viss nivå. Sedan när man kände sig klar så skickade man in sina resultat och sin Matlabkod och läraren uppdaterade en topplista över alla labbgruppers prestationer. I och med att man kunde se topplistan hela tiden så var det lätt att bara sitta en liiiten stund till och tweaka för att klättra några placeringar. Kom man på en smartare lösning i efterhand gick det bra att skicka in nya resultat.

Nyckelorden här tycker jag är "valfritt" och "topplista". Eftersom det hela var en (vänskaplig) tävling så var det roligt att försöka förstå vad det var man faktiskt gjorde och lägga ner energi och tid. Och visst, en del var säkert helt ointresserade och bara skickade in första bästa godkända resultat, och det är ju såklart helt okej. Men jag tror många gottade sig utmaningen.

Utmaningen är det som saknas i många programmeringslabbkurser tycker jag. Visst, ibland är uppgifterna svåra, men det finns oftast ett sätt att lösa dem som är det bästa eller det som läraren tänkt sig (och det som labbassistenten kommer att peka dig mot om du frågar). Om uppgifterna istället var lite friare och lockade till kreativt tänkande så tror jag många skulle få ut mer av hela kursen.

Anledningen till att jag överhuvudtaget kom att tänka på detta nu är att jag för några veckor sedan fick nys om Google Treasure Hunt. Detta är en skattjakt för programmeringsintresserade, skulle man kunna säga. Deltagaren ställs inför miniuppgifter av stigande svårighetsgrad - det kan handla om att dekryptera en ledtråd eller att räkna ihop tal som gömmer sig i filer med särskilda namn i en stor struktur, eller något helt annat. Det hela är etappbaserat, så nya utmaningar publiceras efter hand. Man kan se det som en tävling (Google delar ut pris till de som är snabbast) eller bara gotta sig åt att klura på problemen i sin egen takt.

Jag har själv inte genomfört Googles skattjakt, men jag tilltalas verkligen av konceptet. Skulle man inte kunna ha något liknande som en slags labbserie som löper under kanske en hel termin, med nya utmaningar typ varje eller varannan vecka? Man lägger den kanske andra eller tredje året på utbildningen så att studenterna har hunnit lära sig grunderna och har de verktyg som behövs. Kan det funka?

4 kommentarer:

  1. Du har så fruktansvärt rätt min vän. De generiska labbarna man får göra brukar vara så fruktansvärt tråkiga. Speciellt i grundkurser.

    Maila någon programmeringslärare och föreslå detta?

    SvaraRadera
  2. David Andersson28 maj 2008 11:37

    Jävlar var jag kämpade med någon prediktiv kodning som i slutändan var värdelös. Blev en tråkig transformkodning med färdiga Matlab-funktioner till slut. Men det var mycket roligt och jag lärde mig mycket under tiden! Jag håller med!

    Och vad jag tror behövs för att folk ska gilla och inte dö av programmering, en felsökningskurs som berättar hur man faktiskt går tillväga när koden strejkar, det blir en vit php-sida, eller minnesfel. Ett minnesfel till exempel, vad betyder det egentligen, vad är det som ofta brukar åsamka minnesfel. Null pointer exception tror jag inte många vet vad det faktiskt betyder.

    Om det lärdes ut programmeringens grunder på riktigt, det vill säga felsökning eftersom det är 50-75 % av programmerandet, skulle det vara mycket lättare och programmeringen skulle inte ha lika hög tröskel.

    SvaraRadera
  3. Ja, och något annat som fattades helt under min utbildning var tester - inte ett ord om unit testing exempelvis, som ju faktiskt kan minska antalet oväntade fel som är relaterade till själva implementationen avsevärt. Jag gick ut som färdig civilingenjör utan att ens veta vad begreppet innebär.

    SvaraRadera
  4. Jag håller med om att det var betydligt mer givande än vanliga programmeringslabbar.

    Nämndes inte enhetstestning i kursen programvaruutveckling?

    Ibland slumpar min iPhone fram en låt med titeln blink.wav -- fem år efter att jag gick TSBK35. Får nämna det till Harald när jag ser honom nästa gång.

    SvaraRadera