Programmeren KI

Studiewijzer
Herfst 2021

Dit vak begint bij het begin. Je leert over programmeren in het algemeen, en je leert programmeren in drie programmeertalen. Je maakt kennis met allerlei technieken voor het omzetten van een probleemomschrijving naar een programma dat het probleem oplost. Je leert over het verband tussen de computer en de programma’s die er op draaien. De opdrachten beslaan het grootste deel van het vak en gaan over allerlei problemen uit bijvoorbeeld de wereld van cryptografie, biologie, economie en gaming.

Docenten en assistenten

De docenten bij dit vak zijn Jelle van Assema, Richard Both, Robin Langerak en Martijn Stegeman. Zij geven het vak vorm en verzorgen de organisatie. Je kunt ze bereiken via e-mail op progki@mprog.nl.

Daarnaast zijn er veel student-assistenten, die de cursus goed kennen omdat ze ‘m zelf gedaan hebben, en die jou gaan helpen op de momenten dat het nodig is. Eén van de assistenten zal je mentor zijn; deze zie je wekelijks bij de werkgroep en kijkt bovendien je werk na.

Opdrachten en eindcijfer

Bij dit vak werk je aan verschillende soorten opdrachten. Samenwerken is een essentieel onderdeel van het vak, maar een deel van de opdrachten is juist individueel. De cursus bestaat uit de volgende onderdelen:

  • Aftekenen oefenopdrachten (25%). Je moet alle opdrachten helemaal gedaan hebben om het vak te kunnen halen. Er zijn drie soorten:

    • Zelfstandige oefenopdrachten doe om de theorie goed in je vingers te krijgen. Het is geen probleem als een medestudent of assistent het een keer voordoet.
    • Samenwerkopdrachten doe je samen met een medestudent. Deze opdrachten helpen je oefenen met het oplossen van problemen en het schrijven van programma’s.
    • Basisboek-oefeningen doe je liefst gezamenlijk, maar er zijn individuele toetsjes om te checken of je het al voldoende beheerst.

    Cijfer: Als je dus alle opdrachten hebt gedaan krijg je een 10 voor dit deel. De Python-opdrachten zijn optioneel en niet van invloed hier.

  • Beoordeling individuele programmeeropdrachten (75%). Ze worden automatisch gecheckt op correcte werking, en als dat helemaal goed gaat, dan kijkt je mentor ze na en geeft punten en feedback. Deze opdrachten doe je alleen, omdat je er een beoordeling voor krijgt. Je kunt wel altijd hulp krijgen van de docenten en assistenten.

    Cijfer: Je kunt 6 x 6 punten halen, dus cijfer = punten / 36 * 9 + 1. De eerste 30 punten kun je halen via de reviews, de laatste 6 punten via de Python-opdrachten. Punten voor extra opdrachten tellen hier ook mee.

  • Beoordeling tentamen (0%). We checken hier in gecontroleerde omstandigheden je programmeerskills. Het telt niet mee voor je eindcijfer, maar je moet een voldoende halen om het vak af te kunnen ronden.

Voordat je een eindcijfer kunt krijgen moet je alle opdrachten werkend hebben ingeleverd en aan alle minimumeisen (zie onder) hebben voldaan, tenzij je een schriftelijke uitzondering hebt gekregen van de docenten. Voel je vrij om te overleggen of jouw omstandigheden een uitzondering rechtvaardigen. We denken graag mee! Let op dat je mentor of een assistent geen uitzonderingen kan verlenen.

Minimumeisen

Alle opdrachten en toetsjes netjes (volgens schema) werkend inleveren is de basiseis om het vak te halen. Het is dus niet mogelijk om opdrachten over te slaan! Daarnaast is het nodig dat je zichtbaar actief meedoet en leert van het vak. Dat doe je onder andere op de volgende manieren:

  1. meedoen aan alle wekelijkse werkgroepen
  2. enkele keren individueel contact met je mentor
  3. meerdere keren per week contact met assistenten over je opdrachten
  4. laag scoren op de “plagiaatschaal”

Op die manier kunnen je mentor en de docenten een goed beeld vormen van jouw voortgang en constateren dat je aan de leerdoelen van het vak hebt voldaan. Daarnaast is er een tentamen waarin we in feite checken of je hebt geleerde in de praktijk kleine programmeerproblemen effectief op te lossen.

Lukt het niet om systematisch laag te scoren op de plagiaatschaal, dan moet je bovendien je opdrachten bij de afsluiting van het vak presenteren en er vragen over beantwoorden, zodat er geconstateerd kan worden dat je voldoet aan de leerdoelen. Ben je niet systematisch aanwezig of doe je niet systematisch mee met samenwerkopdrachten, dan kun je het vak niet halen.

Team en mentor

Je zit bij dit vak in een team met twaalf à vijftien andere studenten. In het team zul je onder andere samen werken aan het ontwerpen van oplossingen voor de opdrachten en het bespreken en verbeteren van jouw code. De teamindeling wordt na de eerste week bekend gemaakt.

Je mentor is een studentassistent die het vak eerder heeft gevolgd of een docent die alles over onze cursus weet. Je mentor helpt je wegwijs maken, doet voor hoe je het beste de opdrachten kunt aanpakken, kijkt je werk na, en kan je helpen om vragen over de organisatie van het vak te beantwoorden, bijvoorbeeld door mee te kijken in deze studiewijzer.

Let op: een mentor is niet hetzelfde als een tutor. Je tutor is de assistent die jou begeleidt bij de opleiding kunstmatige intelligentie en die ook werkgroepen academische vaardigheden geeft. Je mentor is de assistent die specifiek voor dit vak werkt.

Met je mentor heb je elke week een werkgroep waar alle teamleden aan deelnemen. Deze vindt bijna altijd plaats tijdens het laptopcollege op dinsdag.

Aanwezigheid

In het algemeen werken we bij dit vak op locatie bij de universiteit. Bij het programmeren is het vooral belangrijk om veel over de opdrachten te praten met je medestudenten, en om goed hulp te kunnen krijgen van studenten, assistenten en docenten.

Voor de volgende onderdelen geldt een verplichte aanwezigheid:

  • Laptopcollege voor samenwerken of zelfstandig werken
  • Werkgroepen met je mentor

Er zijn verschillende redenen waardoor het misschien nodig is vanuit thuis te werken, bijvoorbeeld als iedereen 1,5m afstand moeten houden, maar ook als je verkoudheidsklachten hebt, in quarantaine moet, of als je door omstandigheden niet veilig op locatie kunt werken.

Mochten we door een algemene regel niet altijd iedereen op locatie kunnen laten werken, dan zullen wij via een mededeling laten weten wat de consequenties zijn voor de roostering van laptopcolleges en werkgroepen.

Als jij niet op locatie kunt werken, of je bent ziek en je kunt helemaal niet aan het vak werken, dan ben je verplicht om dit direct te laten weten aan de docenten via e-mail. De docent zal dan een regeling voorstellen die voor jou persoonlijk geldt.

Vragen stellen

Tijdens dit vak zul je vaak de hulp inroepen van de assistenten en medestudenten. Er zijn diverse opties voor het stellen van vragen. De beste optie hangt af van het soort vraag dat je wil stellen.

Assistentie: tijdens de laptopcolleges, voor hulp bij programmeren.

  • je weet niet waar te beginnen
  • een onvindbare bug, of alles loopt vast
  • moeite met verzinnen oplossing
  • de tijd is beperkt dus moet eerlijk verdeeld worden

Programmeerbalie: direct contact met een assistent, voor hulp bij programmeren.

  • hulp op locatie (lokaal A1.22) of via een videogesprek
  • je weet niet waar te beginnen of een onvindbare bug, of alles loopt vast
  • moeite met verzinnen oplossing
  • dagelijks beschikbaar, vooraf afspraak maken via afsprakensysteem
  • beperkt ruimte voor inloop bij urgente vragen

Spreekuur en e-mail: contact met de docenten.

  • maken van persoonlijke planningsafspraken
  • meedenken over grote problemen met het vak
  • andere officiële zaken
  • administratie na afloop van het vak
  • aanmelden via afsprakensysteem of mail help@mprog.nl
Kom je helemaal niet verder en heb je even geen hulp?

Juist even niet aan de opdracht werken kan je verder helpen!

  • Neem een halfuurtje echt even afstand van je computer; dit helpt je brein afstand nemen van het probleem. Met een frisse blik kom je dan toch weer verder.

  • Ga even door met de volgende opdracht van de module om te kijken hoe je daar mee gaat.

  • Of ga oefenen in het basisboek, want dit staat helemaal los van de opdrachten.

Deadlines

Voor de hele cursus is er een dagschema dat het gewenste tempo aangeeft. De hoeveelheid werk is afgestemd op beginnende programmeurs, dus zonder ervaring. De bedoeling is dat je dit schema goed kunt aanhouden, en dat je elke opdracht inlevert zodra je die af hebt. Natuurlijk kun je een dagje schuiven als dat nodig is voor je planning van een ander vak.

Voor de opdrachten zijn er steeds twee uiterste deadlines:

  1. De deadline voor het volledig werkend hebben van de opdracht. Met de tool check50 kun je nagaan of je uitwerking helemaal aan de eisen voldoet. Is dat zo, dan lever je de uitwerking meteen in op de website. Je hoeft de uitwerking nog niet netjes te maken.

  2. De deadline voor de verbeterde versie van je uitwerking. Tijdens de werkgroep zul je een code review doen met een medestudent, op basis waarvan je je uitwerking helemaal kunt verbeteren. Dat is de versie waarvoor je punten en feedback krijgt van je mentor.

Dit is een overzicht van de deadlines per week. Op de deadline “werkend” moet je alle opdrachten van de week hebben ingeleverd.

module deadline werkend deadline verbeterd
Week 1 vr 5 nov 17:59 di 9 nov 17:59
Week 2 vr 12 nov 17:59 di 16 nov 17:59
Week 3 vr 19 nov 17:59 di 23 nov 17:59
Week 4 vr 26 nov 17:59 di 30 nov 17:59
Week 5 vr 3 dec 17:59 di 7 dec 17:59
Week 6 vr 10 dec 17:59 -
Week 7 vr 17 dec 17:59 -

De opdrachten van week 6 en 7 kunnen punten opleveren als ze goed werken én netjes van stijl zijn.

Ziekte en inhalen

Als je ziek bent dan meld je het in ieder geval meteen even aan via een mail naar progki@mprog.nl. Je hoeft het niet uitgebreid uit te leggen, maar wel meteen melden. Het contact hierover houden is het belangrijkste dat je kunt doen en een harde eis als je later een uitzondering nodig hebt.

  • Ben je één of twee dagen ziek dan is dat geen probleem en kun je de deadline vaak nog halen. Kom je toch niet uit met de laatste opdracht van de week, dan meld je heel duidelijk de stand van zaken aan de docenten via een mail naar bovenstaand adres. Je doet dit natuurlijk vóór de deadline en niet pas daarna.

  • Heb je een medisch noodgeval en ben je hierdoor bijvoorbeeld een hele week uit de running? Dat meld je dit zo snel mogelijk via een mail. Naderhand bespreek je met een docent of je achterstand nog in te halen is, en hoe. Daarbij speelt natuurlijk ook mee hoe makkelijk het programmeren je af gaat en hoeveel energie je hebt om te steken in het inhalen. Op basis van al die informatie kijken we samen wat mogelijk is.

  • Raak je helemaal uit tempo omdat je bijvoorbeeld toch teveel andere dingen te doen hebt of niet genoeg focus kan vinden? Het is belangrijk dat je dit snel bespreekt met een docent (niet je mentor). Stuur maar een mailtje!

Opdrachtcijfers

De wekelijkse individuele opdrachten kunnen elk maximaal 6 punten opleveren. Voor elke opdracht zijn diverse aspecten aangegeven op basis waarvan de punten voornamelijk (maar niet uitsluitend) worden bepaald. Deze aspecten gaan over codekwaliteit, waarover je in de eerste weken meer leert. De schaal is als volgt:

  1. uitzonderlijk goede kwaliteit op basis van een doordacht ontwerp
  2. zeer goede kwaliteit, beperkt ruimte voor verbetering
  3. degelijke kwaliteit op alle genoemde aspecten, met ruimte voor verbetering
  4. net voldoende aandacht voor alle genoemde aspecten, erg veel ruimte voor verbetering
  5. enige zichtbare aandacht voor een beperkt aantal aspecten
  6. onvoldoende zichtbare aandacht voor de kwaliteitsaspecten

Wil je goed scoren (rond de 4 punten), dan bestudeer je goed de aspecten die we aangeven, doe je actief mee aan de code review, en loop je kritisch elke regel code na met de aspecten en voorschriften in het achterhoofd. Zo leg je een perfecte basis om verder te leren.

Wil je erg hoog scoren (richting 6 punten), dan zul je niet alleen de aangeleverde materialen moeten bestuderen, maar ook externe bronnen. Bij de aspecten zijn verwijzingen te vinden naar hoofdstukken met meer informatie, en je kunt zelf ook op zoek naar kritische bronnen (overleg even of ze van voldoende kwaliteit zijn!).

Extra opdrachten

Er zijn vier “extra opdrachten” in de cursus. Deze zijn bedoeld voor studenten die zich wat comfortabeler voelen met programmeren en extra uitdaging zoeken. Wil je die inleveren, zorg dan dat je éérst de andere opdrachten maakt en inlevert. Dat zijn namelijk de opdrachten waarvoor je een review doet en die beoordeeld zullen worden.

Toch kan het leuk zijn om de extra opdrachten te doen, omdat het uitdagende puzzels zijn waar je veel van leert. Per extra opdracht kun je een extra punt verdienen voor het onderdeel individuele opdrachten. Maar als je niet genoeg tijd hebt gewoon overslaan! De volgende deadlines gelden:

extra opdracht deadline
Figure vr 5 nov 17:59
Goldbach vr 12 nov 17:59
Decryptor vr 19 nov 17:59
Ontwerpprincipes vr 26 nov 17:59
Find vr 3 dec 17:59

Deze deadlines voor extra opdrachten zijn 100% strikt. Er worden geen uitzonderingen gegeven om welke reden dan ook.

Het is niet mogelijk om bij de assistenten hulp te krijgen voor de extra opdrachten. Het is aan te raden om te kijken of je er medestudenten bij kunt betrekken en samen de oplossing te ontwerpen voordat je deze zelf gaat implementeren in code.

Onderdelen

Hoorcolleges

In hoorcolleges bespreekt David Malan van Harvard de theorie waarmee je programmeerproblemen kunt oplossen en die je voorbereidt op de oefeningen. De video’s zijn een voorbereiding op de opdrachten en bevatten allerlei voorbeelden die je vaak direct kunt toepassen.

Werkgroepen

Werkgroepen zijn bijeenkomsten van 1 à 2 uur met je mentor. In de werkgroepen krijg je de kans om samen de voortgang te bespreken, de oefeningen door te nemen, tips uit te wisselen over het aanpakken van problemen en om je medestudenten en mentor beter te leren kennen. Gebruik van camera is vereist als de werkgroep in bijzondere omstandigheden online plaatsvindt.

Basisboek

Wekelijks zijn er oefeningen waarin de stof van de vorige weken wordt herhaald en aangescherpt. Je studeert in het Basisboek Programmeren dat vrij beschikbaar is. Sommige oefeningen worden inhoudelijk besproken tijdens de werkgroepen.

Naslag

Wil je naast de videocolleges nog eens rustig lezen over de verschillende onderwerpen, dan kunnen de volgende boeken je verder op weg helpen. Ze zijn niet noodzakelijk voor het halen van het vak.

Voor mensen die nog nooit geprogrammeerd hebben

C Programming Absolute Beginner’s Guide, Third Edition
Greg Perry, Dean Miller
Pearson Education, 2014
ISBN 9780789751980

Voor studenten met iets meer ervaring

Beej’s Guide to C Programming
Brian “Beej Jorgensen” Hall
2021
http://www.beej.us/guide/bgc/html/split/

Voor meer uitleg over Python vanaf week 6

De Programmeursleerling
Pieter Spronck
http://www.spronck.net/pythonbook/dutchindex.xhtml

Tentamen

Tijdens het tentamen ga je aan de slag met een selectie van kleine programmeerproblemen. Aan jou de taak om deze te analyseren en een mooie oplossing te schrijven (op de computer!). De kennis en ervaring die je nodig hebt om dit te doen bouw je op tijdens het maken van de verschillende opdrachten in de cursus. Om te wennen aan de vorm is er natuurlijk ook een oefententamen.

Samenwerken

De basis van alles wat je inlevert moet jouw eigen intellectuele werk zijn, behalve waar het gaat om de samenwerkopdrachten.

Natuurlijk is het nuttig om bij het maken van individuele opdrachten interactie te hebben met je medestudenten, en dat kan ook enorm helpen bij het beheersen van de stof. Maar er is een grens tussen het vragen van hulp aan een ander en het inleveren van werk van een ander. Hieronder karakteriseren we beide kanten van die grens.

Je mag niet samenwerken aan de implementatie van je programma’s. Uitzondering is dat je medestudenten om hulp mag vragen, zolang dat er niet op neer komt dat een ander een deel van het werk voor jou doet. Over het algemeen mag je, als je om hulp vraagt, jouw code laten zien, maar kijk je niet naar de code van een ander. Je laat je dus niks voorzeggen.

Waar de grens onduidelijk is vragen we je om “redelijk” te handelen. Hieronder vind je een incomplete lijst van voorbeelden die een beeld schetsen van welke handelingen we als redelijk of onredelijk bestempelen. Twijfel je of een handeling redelijk is, vraag het, en wacht tot je per e-mail toestemming hebt gekregen van een docent (niet assistent). Als je onredelijk handelt dan kan dit leiden tot een melding bij de examencommissie.

Voorbeelden van redelijke acties
  • Praten met je klasgenoten over de opdrachten in het Nederlands (of een andere natuurlijke taal).

  • Het cursusmateriaal bespreken met anderen om het beter te begrijpen.

  • Een klasgenoot helpen bij het debuggen tijdens een laptopcollege of daarbuiten, of zelfs online, door het bekijken, compileren of draaien van zijn of haar code, zelfs op je eigen computer.

  • Het in je uitwerking opnemen van een paar regels code die je online of ergens anders vindt, gegeven dat deze regels niet de essentie van de opdracht vormen en dat je de bron van de code vermeldt.

  • Het inzien van tentamens van voorgaande jaren en oplossingen daarvan.

  • Code die jij hebt geschreven versturen of laten zien aan iemand anders, wellicht een klasgenoot, zodat deze jou kan helpen bij het debuggen (alleen als deze student klaar is met de opdracht).

  • Het online delen van een paar regels van jouw code zodat anderen wellicht kunnen helpen met debuggen.

  • Een aan het vak verbonden assistent om hulp vragen.

  • Naar het internet gaan voor tutorials buiten het vak, voor referenties, en voor oplossingen bij technische problemen, maar niet voor gehele oplossingen voor (de essentie van) opdrachten.

  • Het uittekenen of uitwerken van oplossingen op een whiteboard door middel van diagrammen of pseudocode, maar niet “echte” code.

  • Werken met (en zelfs betalen voor) een tutor om je te helpen met het vak, gegeven dat de tutor niet het werk voor je doet.

Voorbeelden van onredelijke acties
  • Een oplossing van een opdracht inzien voordat je jouw opdracht hebt ingeleverd.

  • Een klasgenoot vragen om zijn of haar oplossing, voordat je jouw opdracht hebt ingeleverd.

  • Het decompileren, deobfusceren, of op andere manier achterhalen van een “staff” oplossing van een opdracht.

  • Vergeten de bron te citeren van code of technieken die je hebt opgenomen van buiten de lessen van dit vak, en hebt geïntegreerd in je eigen werk, zelfs als je wel de andere restricties aanhoudt.

  • Het aan een klasgenoot geven of laten zien van een oplossing voor een opdracht waar hij of zij (dus niet jij) moeite mee heeft.

  • Betalen, of het aanbieden om te betalen, voor het recht om werk van een ander als onderdeel van jouw eigen werk in te leveren.

  • Het beschikbaar stellen van oplossingen voor opdrachten van dit vak aan anderen die dit vak in de toekomst wellicht gaan volgen.

  • Het opzoeken van complete oplossingen voor opdrachten online of ergens anders.

  • Werk van een opdracht opsplitsen met een ander.

  • Werk van een ander, behalve een paar regels zoals eerder omschreven, inleveren.

  • Hetzelfde of bijna hetzelfde werk inleveren bij dit vak dat je hebt ingeleverd of gaat inleveren bij een ander vak.

  • Het inleveren van werk voor dit vak, waarbij je intentie is om dit ook ergens anders voor in te zetten (zeg voor een baan), zonder daar eerst toestemming voor te hebben gekregen van een docent.

  • Naar de oplossing voor een opdracht van iemand anders kijken, en vervolgens jouw oplossing daarop baseren.

Plagiaat

Alle inzendingen worden wekelijks gecontroleerd met behulp van een detectiesysteem dat zoekt naar overeenkomsten in programmacode. Dat kunnen overeenkomsten zijn binnen de groep, met studenten van vorige jaren, of zelfs met code van internet.

Vinden we overeenkomsten, dan gaat een docent direct met je in gesprek om je voor te lichten en om af te spreken hoe je het vak zonder plagiëren kunt halen. Is er een vermoeden van plagiaat, dan moet dit gemeld worden bij de examencommissie.

In alle gevallen is het ons doel om dit soort situaties te voorkomen, omdat ze niet leerzaam zijn en veel werk opleveren voor iedereen. Vraag daarom vooral om advies als je denkt dat het misgaat! Er is vaak meer te redden dan je denkt, zelfs al is de deadline nabij.

De plagiaatregeling van de Universiteit van Amsterdam geeft algemene aanwijzingen over plagiaat en is de basis voor bovenstaande regelingen.

Herkansingen

Onderstaande regelingen zijn wat streng geformuleerd, maar het is niet de bedoeling dat ze echt nodig zijn! Als je doorzet en de opdrachten afmaakt dan zou je de cursus gewoon moeten halen. Maak je er dus niet teveel zorgen over, maar neem wel direct contact op met de docenten als je denkt dat je in de problemen komt met de planning en/of je cijfers. Ook de docenten spreken je graag met je als je advies nodig hebt.

Ik heb alles werkend, maar sta een onvoldoende en wil herkansen

Dit betekent dat je onvoldoende aandacht hebt besteed aan de kwaliteit van je programma’s. De herkansing komt erop neer dat je dit alsnog doet. Deze vorm van herkansing kan alleen direct na bekendmaking van de eindcijfers.

  • Alle individuele opdrachten, ook die voldoende waren, moeten opnieuw worden ingeleverd.

  • Deze individuele opdrachten moeten verbeterd worden ten aanzien van de kwaliteitsaspecten.

  • Het maximumcijfer is in dit geval een 6.0 en wordt alleen toegekend als alle programma’s aantoonbaar van voldoende kwaliteit zijn (waarmee je aantoont het betreffende leerdoel gehaald te hebben).

Ik heb een opdracht niet werkend ingeleverd en wil herkansen

Dit betekent dat je ergens tijdens het vak een opdracht niet af hebt gemaakt, hiervoor geen duidelijke reden had, en geen contact hebt gezocht op het moment dat het niet lukte.

  • Herkansen kan pas vanaf het eerstvolgende jaar waarin het vak wordt gegeven.

  • Alle opdrachten moeten opnieuw of alsnog worden ingeleverd volgens de geldende instructies.

  • Vernieuwde opdrachten moeten op moment van herkansen gewoon gedaan worden.

  • Alle nieuwe beoordelingen vinden plaats zoals gangbaar op het moment van herkansen.

Ik heb niet aan de verwachtingen van het vak voldaan en wil herkansen

Dit betekent dat je niet mee hebt gedaan met verplichte onderdelen of op een andere manier geen contact hebt onderhouden.

  • Herkansen kan pas vanaf het eerstvolgende jaar waarin het vak wordt gegeven.

  • Er moet een concrete afspraak zijn over het inhalen van minimumeisen vóór je start. Neem hiervoor contact op met de docenten.

  • Alle opdrachten en toetsjes moeten opnieuw gedaan worden indien de samenstelling inmiddels is veranderd.