De meeste hoofstukken hebben kleine opgaves op diverse plaatsen in de tekst. Die opgaves zijn bedoeld om iets uit te leggen of als een snelle test of je alles nog steeds begrijpt. Je moet die opgaves meteen doen als je ze tegenkomt. Ik geef zelden antwoorden voor die opgaves, want als je de stof snapt zijn ze erg eenvoudig, en als je ze niet kunt maken moet je de voorgaande tekst opnieuw bestuderen totdat je het wel kunt. Als het dan nog steeds niet lukt, kun je beter om hulp vragen.
Aan het einde van ieder hoofdstuk is een sectie getiteld “Opgaves,” met daarin één of meerdere genummerde opgaves. Je moet al die opgaves proberen te maken, en je moet ze zelfstandig maken (dus zonder hulp en zonder de antwoorden op te zoeken). Antwoorden voor die opgaves zijn opgenomen achterin het boek, in appendix 341. Je kunt ze ook downloaden via http://www.spronck.net/pythonbook2. Ik wil de volgende punten expliciet onder de aandacht brengen:
Je moet aan de opgaves werken totdat je ze opgelost hebt. Het volstaat niet om een beetje te proberen en dan het antwoord op te zoeken. Een dergelijke aanpak is volstrekt zinloos. Je zult nooit leren programmeren als je niet nadenkt over oplossingsmethodieken, code schrijft, en code test. Als je een opgave niet kunt oplossen zelfs als je er lange tijd aan hebt gewerkt, doe je er beter aan hulp te vragen dan het antwoord op te zoeken. Het niet kunnen oplossen van een opgave betekent dat er iets in het materiaal zit dat je nog niet begrijpt, en het is belangrijk dat je ontdekt wat dat is, zodat je dat gebrek kunt verhelpen.
Je moet alle opgaves maken. De enige manier om te leren programmeren is te oefenen. Je zult veel code moeten schrijven om de praktijk van het programmeren te internaliseren. De paar opgaves die ik aan het einde van ieder hoofdstuk op heb genomen zijn nog niet voldoende om dat te bereiken, maar ze zijn een begin. Als je niet de moeite neemt om al die opgaves te doen, hoef je ook niet de moeite te doen om te proberen programmeren te leren.
Je moet de opgaves zelfstandig maken. Aan de opgaves werken in groepsverband laat één persoon leren terwijl de rest erbij zit en toekijkt. Studenten vertellen me vaak dat ze een leermethode hebben waarbij ze aan opdrachten werken in groepsverband en antwoorden bediscussiëren. Dat werkt misschien voor het analyseren van teksten en het opzetten van experimenten, maar werkt meestal niet voor coderen. Toekijken hoe iemand anders code schrijft leert je erg weinig over het schrijven van code. Je moet zelf code schrijven.
Voor geen van de opgaves is informatie nodig die nog niet naar voren was gebracht op het moment dat de opgave in het boek verschijnt. Vaak zijn er wel betere manieren om een opgave op te lossen door gebruik te maken van Python constructies die later in het boek komen. Maar die zijn op zich niet nodig. Het doel van de opgaves is te oefenen met het materiaal dat je op dat moment kent. Ze zijn niet bedoeld om toekomstig materiaal te bestuderen. Zelfs als je bekend bent met andere manieren van oplossen, probeer je dan toch te beperken tot het materiaal dat voor de opgave staat. Als je dat eenmaal gedaan hebt, en je wilt later terugkeren bij een opgave om het op een andere manier te doen, is dat natuurlijk uitstekend.
Als je een opgave hebt opgelost en je je oplossing goed getest hebt, kun je je oplossing vergelijken met het antwoord dat ik geef. Je zult vaak zien dat mijn antwoord anders is dan het jouwe. Dat betekent niet dat jouw antwoord fout is! Er zijn meestal veel verschillende manieren om een programmeerprobleem op te lossen. Sommige zijn “beter” in bepaalde opzichten dan andere. Vele zijn “precies even goed.” Wat van belang is dat je een probleem kunt oplossen door code te schrijven, niet dat je een probleem kunt oplossen door de meest efficiënte code te schrijven. Het volstaat om het probleem op te lossen; oplossingen efficiënt maken is van veel minder belang. Bijvoorbeeld, “efficiëntie” is minder belangrijk dan “begrijpbaarheid” en “onderhoudbaarheid.”
Hieronder staan alvast twee genummerde opgaves voor dit eerste hoofdstuk. Leer ervan.