Rubber Duck Debugging

Projecttitel: Rubber Duck Debugging
Vakgroep/Dienst: Vakgroep Toegepaste Wiskunde, Informatica en Statistiek (WE02)
Promotor: Prof. Peter Dawyndt
Projectmedewerkers: Cizar Al-Malak, Bart Mesuere, Dieter Mourisse, Niels Neirynck, Annick Van Daele

Korte beschrijving van het onderwijsinnovatieproject

Onderstaande figuur toont het resultaat van een experiment waarbij een week lang de hersenactiviteit van een student werd gemeten (Poh MZ, Swenson NC, Picard RW (2010). A wearable sensor for unobtrusive, long-term assessment of electrodermal activity. IEEE Transactions on Biomedical Engineering 57(5), 1243-1252). Hieruit blijkt duidelijk dat het leereffect van studenten tijdens klassieke hoorcolleges niet bijzonder groot is: studenten zijn dan nagenoeg even hersendood als wanneer ze voor de TV hangen.

Het leereffect is duidelijk een heel stuk hoger als studenten zelfstandig opdrachten aan het uitvoeren zijn, bijvoorbeeld tijdens werkcolleges of practica. Wanneer studenten zelfstandig oefeningen, projecten of andere opdrachten aan het uitwerken zijn buiten de contacturen, dan stelt zich vaak het probleem dat ze geen direct feedbackkanaal hebben dat ze kunnen raadplegen als ze ergens vastzitten. Sommige studenten hebben dan al snel de neiging om vroegtijdig op te geven, of online op zoek te gaan naar kant-en-klare oplossingen (Stack Overflow, Facebook, …), terwijl het leereffect net het grootst is om zelfstandig te blijven zoeken naar de oplossing.

 

rubberduck_1

Figuur 1: Hersenactiviteit van een student tijdens verschillende activiteiten.
Hierbij valt vooral het verschil in leereffect op tussen de verschillende soorten
didactische werkvormen die gebruikt worden.

 

Binnen een aantal opleidingsonderdelen waarin studenten basisvaardigheden aangeleerd krijgen om te programmeren met de programmeertaal Python (BA1 biochemie & biotechnologie, BA1 chemie, BA2 geologie, BA1 geografie, BA1 informatica, MA1 biologie) willen we daarom het ecosysteem uitbreiden van hulpmiddelen die de studenten uitdagen en helpen om zelfstandig naar de oplossing van aangereikte problemen te zoeken.

Onder de noemer rubber duck debugging zullen drie initiatieven uitgewerkt worden die de studenten moeten helpen om te experimenteren met Python en hun fouten te leren opsporen: i) ontwikkeling en integratie van de Online Python Tutor, een visuele debugger voor ingediende programmeeroplossingen, ii) aanbieden van een lokale UGent-installatie van iPython, een browser-gebaseerd notitieboekje voor het uitwerken, documenteren en delen van stukken Python code (ook beschikbaar voor andere programmeertalen zoals Haskell en Julia) en iii) uittekenen van een prioriteitssysteem voor studenten die vragen aan begeleiders en/of lesgevers willen stellen tijdens of buiten de werkcolleges. Het doel van dit laatste initiatief is trouwens breder inzetbaar dan programmeervakken, en zou algemeen inzetbaar moeten zijn bij opleidingsonderdelen waarbij de studenten zelfstandig probleemoplossend te werk moeten gaan en daarbij hulp kunnen inroepen van begeleiders indien ze ergens vastgeraakt zijn en waarbij de vraag op sommige momenten groter kan zijn dan het aanbod.

Doelstellingen van het project + tijdsbesteding

Rubber duck debugging is een term uit de software-ontwikkeling die verwijst naar een bepaalde manier om fouten op te sporen in broncode. De naam verwijst naar een anekdote uit het boek The Pragmatic Programmer waarbij een programmeur getuigt dat hij altijd een rubberen eendje met zich meedraagt en fouten opspoort in zijn broncode door zichzelf te verplichten om de code regel-voor-regel uit te leggen aan het rubberen eendje.

Ook bij studenten die voor het eerst leren programmeren merken we heel vaak dat als ze hun probleem proberen uit te leggen aan één van de begeleiders tijdens de werkcolleges of aan één van hun medestudenten - het hoeft zelfs niet noodzakelijk iemand te zijn die iets van programmeren afweet - dat ze halverwege hun uiteenzetting van het probleem plots zelf bedenken wat de oplossing is. Door te beschrijven wat de broncode zou moeten doen en te observeren wat er eigenlijk wordt uitgevoerd, wordt het vaak snel duidelijk waar het verschil tussen de twee zit. Door gebruik te maken van een levenloos voorwerp - zoals bijvoorbeeld een rubberen eendje - kan een programmeur proberen om zichzelf een klankbord aan te meten zonder daarbij een andere persoon te betrekken.
In het kader van dit onderwijsvernieuwingsproject willen we daarom drie werkpakketten uitwerken, die de studenten helpen om zelfstandig te zoeken naar oplossingen van aangereikte opdrachten, door hen telkens het spreekwoordelijke rubberen eendje voor te houden.

WP1. Online Python Tutor

De Online Python Tutor (pythontutor.com) is een open source en vrij beschikbare educatieve tool die kan ingezet worden voor groepen studenten die voor het eerst leren programmeren. Deze software werd ontwikkeld door prof. Philip Guo (University of Rochester, VSA) en werd reeds door meer dan 500.000 studenten gebruikt in meer dan 165 landen.

Tijdens de zomer van 2014 hebben we een eerste integratie gedaan van de Online Python Tutor, door die in te bouwen in het Pythia platform dat we sinds 2011 aan het uitwerken zijn. Aangezien het Pythia platform vanaf academiejaar 2014-2015 ook wordt ingezet als ondersteuning voor de programmeercursussen aan de UGent Campus in Korea, en de lessen daar van start gingen op 1 september 2014, konden de studenten daar dan ook voor het eerst gebruik maken van de geïntegreerde Online Python Tutor. Wesley De Neve, lesgever van de opleidingsonderdelen programmeren aan de UGent Campus in Korea, schreef hierover het volgende:

Ik heb de Online Python Tutor nu gebruikt in twee hands-on sessions, en ik moet zeggen dat ik hierover heel tevreden ben. Het is een heel intuïtieve en gebruiksvriendelijke manier om studenten te laten zien hoe hun instructies worden uitgevoerd, en waar de fouten precies gemaakt worden. Om jullie een reactie te geven van een student: "Wow, that is cool!".

De Online Python Tutor helpt studenten om een belangrijke horde te overwinnen bij het leren programmeren: begrijpen wat er precies gebeurt als een computer de opeenvolgende instructies uitvoert die werden neergeschreven in een computerprogramma. Het voordeel van deze debugger is dat hij volledig kan uitgevoerd worden in een web browser, de stappen die de computer uitvoert op een visuele manier voorgesteld worden terwijl het programma aan het uitvoeren is, en er zowel vooruit als achteruit doorheen de broncode kan gestapt worden.

 

rubberduck_1

Figuur 2: Weergave van de Online Python Tutor in een web browser tijdens het debuggen van een codefragment.

 

De eerste integratie van de Online Python Tutor in het Pythia platform en de eerste ervaringen van het gebruik ervan door de studenten toonden meteen het grote potentieel van deze toepassing, maar legden meteen ook enkele tekortkomingen bloot. Zo ontbreekt bijvoorbeeld de mogelijkheid om te werken met breekpunten of om dynamisch expressies (of delen van expressies) te evalueren. Gegevensverwerking waarbij moet gelezen of geschreven worden uit bestanden is ook niet mogelijk. Bovendien zijn de visualisaties voorlopig enkel praktisch bruikbaar voor vrij kleine datastructuren, en wordt de voorstelling van objecten snel onoverzichtelijk wanneer grotere datastructuren op het scherm weergegeven worden.
Omdat de Online Python Tutor wordt ontwikkeld als een open source project, willen we een aantal verbeteringen en uitbreidingen toevoegen aan de bestaande software, zodat die kan ingezet worden voor alle oefeningen die wij binnen de basiscursussen programmeren met Python van de UGent behandelen. Op die manier kunnen we niet alleen optimaal gebruik maken van deze softwaretoepassing, maar kunnen we als compensatie ook een bijdrage leveren aan de verdere ontwikkeling ervan.

WP2. IPython

IPython is een interactieve commandoshell die initieel werd ontwikkeld voor Python, maar ondertussen ook beschikbaar is voor verschillende andere programmeertalen (Haskell, Julia) en kan gebruikt worden voor integratie tussen meerdere programmeertalen (CPython, R, Octave, Bash, Perl, Ruby).

Sinds versie 0.12 werd IPython ook voorzien van een web interface: Notebook. Notebook is opgebouwd uit twee componenten: een JSON-gebaseerd bestandsformaat dat kan gebruikt worden om Python broncode en de bijhorende documentatie te delen en de web-interface zelf die kan gebruikt worden om interactieve documenten op te stellen.
Het doel van dit werkpakket is om erin te voorzien dat alle studenten en personeelsleden van de UGent gebruik kunnen maken van een IPython Notebook installatie waarmee ze gedocumenteerde interactieve sessies kunnen aanmaken en delen. Hiervoor werden reeds afspraken gemaakt met de Directie ICT van de UGent, zodat gebruikers zich zullen kunnen aanmelden aan de hand van hun UGent account en Notebook bestanden rechtstreeks zullen kunnen opslaan, ofwel lokaal op hun PC ofwel op een gedeelde netwerkschijf.

 

rubberduck_3

Figuur 3: Interactieve IPython Notebooksessie die wordt uitgevoerd in een web browser. Merk op dat naast het interactief uitvoeren van Python statements, er ook bijkomende commentaar en structuurindelingen aan het document kunnen toegevoegd worden.

 

IPython is bijzonder geschikt voor de data-analist die via interactieve commando’s inzicht wil krijgen in zijn data via een brede waaier aan analysetools en visualisatietechnieken. Een dergelijke interactieve interface is zeker ook bekend bij gebruikers van R, Matlab, Maple of Mathematica, maar het grote voordeel van de Notebook toepassing is dat eindgebruikers enkel hoeven te beschikken over een web browser. Een voordeel voor studenten die leren programmeren in Python is dat ze via interactieve sessies kleine codefragmenten stap voor stap kunnen opbouwen, documenteren en delen met lesgevers of begeleiders als er vragen opduiken over de werking van bepaalde stukken programmacode.

We verwachten hierdoor dat het aanbieden van een IPython Notebook installatie voor studenten en medewerkers van de UGent breed inzetbaar zal zijn, zowel bij het onderwijs waarin programmeer- en data-analysetechnieken worden aangeleerd, als voor data-analyse binnen het kader van onderzoeksactiviteiten. IPython zelf is vrij beschikbaar. Enkel de installatie moet afgesteld worden zodat deze optimaal geïntegreerd kan worden binnen UGentNet.

WP3. prioriteitssysteem voor Q&A tijdens en buiten werkcolleges

In opleidingsonderdelen waar we de studenten leren programmeren met de programmeertaal Python, proberen we de studenten zoveel mogelijk technieken aan te leren die helpen bij het debuggen van hun broncode. Tijdens de werkcolleges zijn er echter vaak meer studenten die aan het wachten zijn op een helpende hand van één van de begeleiders, dan dat er begeleiders in de PC-klas aanwezig zijn. Daarom proberen we de studenten aan te sporen om zelf een poging te doen om hun fouten op te sporen terwijl ze aan het wachten zijn, in plaats van passief met hun hand in de lucht te zitten wachten tot één van de begeleiders bij hen kan langskomen. Het probleem hierbij is echter dat het nogal moeilijk is om te debuggen terwijl je met je hand in de lucht zit.

Om hieraan te verhelpen, zijn we tijdens academiejaar 2014-2015 gestart met een nieuw experiment dat geïnspireerd is op de rubber duck methode. We vragen aan de studenten om naar de werkcolleges een rubberen eendje mee te brengen (liefst gepersonaliseerd) dat ze bovenop het computerscherm kunnen plaatsen om aan te geven dat ze hulp wensen in te roepen van één van de aanwezige begeleiders. Op die manier houden ze hun handen vrij om tijdens het wachten te debuggen, en kunnen ze misschien zelf tot een oplossing komen door het probleem al eens uit te leggen aan hun eendje.

Dit is echter slechts een eerste stap naar de oplossing van het probleem, aangezien deze werkvorm bijvoorbeeld niet toelaat om de vragen volgens een bepaald prioriteitssysteem (bijvoorbeeld first-come-first-served) af te handelen. Hierdoor krijgen studenten vaak de indruk dat hen onrecht wordt aangedaan, omdat andere studenten eerst assistentie krijgen, terwijl zij eerder om assistentie gevraagd hadden. Daarom zouden we een online platform willen ontwikkelen dat tijdens en buiten werkcolleges door de studenten kan gebruikt worden om vragen te stellen over de oefeningen die ze moeten oplossen, en dat dan door de begeleiders en lesgevers kan gebruikt worden om tijdens en buiten de werkcolleges de vragen te beantwoorden.

Het prioriteitssysteem voor Q&A tijdens en buiten werkcolleges moet minimaal voldoen aan de volgende reeks voorwaarden:

  • het systeem moet toegankelijk zijn via een web browser
  • studenten moeten in staat zijn om hun problemen zo efficiënt mogelijk te formuleren; voor wat de programmeervakken betreft waarin we het systeem wensen te gebruiken, denken we bijvoorbeeld aan integratie met Pythia (om direct te kunnen aangeven over welke opgave de vraag handelt) en IPython (om de vraag te kunnen kaderen met gedocumenteerde broncodefragmenten); de ervaring leert dat als studenten aangespoord worden om vragen op een goede manier te stellen, het stellen van de vraag vaak al voor de helft het probleem kan oplossen (cf. het rubber duck principe)
  • het systeem moet in staat zijn om een volgorde te suggereren waarin de vragen moeten beantwoord worden, bijvoorbeeld standaard volgens het first-come-first-served principe maar ook rekening houdend met het aantal vragen dat een student in het verleden reeds gesteld heeft
  • indien begeleiders en lesgevers vragen rechtstreeks wensen te beantwoorden aan studenten tijdens een contactmoment, dan moeten ze via het systeem snel kunnen achterhalen waar de vraagsteller zich bevindt; dit is vooral relevant voor grote groepen, in ons geval denken we al vooruit aan de grote PC-klas in gebouw S5 op Campus Sterre, die in gebruik zal genomen worden vanaf academiejaar 2015-2016 (100 PCs)
  • begeleiders en lesgevers moeten in staat zijn om vragen van studenten online te beantwoorden, zodat vragen ook buiten de werkcolleges kunnen beantwoord worden; dit lost het probleem op dat sommige vragen niet binnen het tijdsbestek van de werkcolleges kunnen beantwoord worden
  • antwoorden op vragen die online behandeld worden, moeten ofwel enkel zichtbaar zijn voor de vraagsteller, of beschikbaar kunnen gemaakt worden voor alle studenten of opgenomen kunnen worden in een FAQ (frequently asked questions) archief
  • platform moet meertaligheid ondersteunen

Een belangrijk deel van de uitwerking van dit werkpakket zal erin bestaan om de vereisten die aan het platform opgelegd worden breed af te toetsen, zodat het platform finaal zo breed mogelijk inzetbaar is voor het onderwijs aan de UGent. Hiervoor zullen we initieel een prototype ontwikkelen op basis van de eigen vereisten en ervaringen. Dit prototype kan dan voorgesteld worden als aanzet voor een bredere brainstorming, omdat de ervaring leert dat een brede brainstorm zonder prototype minder bruikbare feedback oplevert.
Bij het opstellen van dit project hebben we gezocht naar bestaande platformen die een mogelijke invulling zouden kunnen geven aan de eerste reeks vereisten zoals ze hierboven gesteld werden, maar voorlopig hebben we nog geen bruikbare bestaande vertrekbasis gevonden