Fulltime Programmeren 1

Studiewijzer
Lente 2022

“Introduction to the intellectual enterprises of computer science and the art of programming. This course teaches you how to think algorithmically and solve problems efficiently. Topics include abstraction, algorithms, data structures, encapsulation, resource management, security, software engineering, and web development. Languages include Scratch, C and Python. Problem sets inspired by real-world domains of biology, cryptography, finance, forensics, and gaming. Designed for concentrators and non-concentrators alike, with or without prior programming experience.” — CS50 at Harvard.

Docenten en assistenten

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

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

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.
  • 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.

  • 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 (dagelijks!) 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. bijwonen van alle checkups met je team
  3. enkele keren individueel contact met je mentor
  4. regelmatig contact met assistenten over je opdrachten (hulp vragen!)
  5. laag scoren op de “plagiaatschaal”
  6. algemene aanwezigheid van 10 tot 17 uur

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 geleerd om kleine programmeerproblemen effectief op te lossen. Ben je niet systematisch aanwezig of doe je niet systematisch mee met samenwerkopdrachten of werkgroepen, dan kun je het vak niet halen.

Team en mentor

Je zit bij dit vak in een team met twaalf à veertien 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 indeling wordt na de eerste dag 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 jouw vragen over de organisatie van het vak beantwoorden. Je ontvangt van je mentor een uitnodiging voor een chatomgeving (Slack), vooral bedoeld voor snelle coördinatie met je mentor en team.

Met je mentor heb je elke week een werkgroep waar alle teamleden aan deelnemen. Via Slack zal je mentor laten weten wanneer de eerste werkgroep is. Mochten we genoodzaakt zijn online-werkgroepen te houden dan ontvang je van je mentor een Zoom-link. Als je een probleem voorziet met het gebruik van een webcam dan moet je vooraf contact opnemen met de docenten om een oplossing te verzinnen, omdat je anders niet kunt meedoen.

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.

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

  • hulp op locatie (lokaal A1.16) of via een videogesprek
  • je weet niet waar te beginnen of een onvindbare bug, of alles loopt vast
  • moeite met verzinnen oplossing
  • dagelijks beschikbaar, zet jezelf in de rij via het menu:

Slack: direct contact met je team.

  • onderlinge support
  • snelle vragen over deadlines, contact met samenwerkpartner
  • mentor doet mededelingen en is bereikbaar voor ziekmeldingen
  • je mentor is alleen beschikbaar tijdens beperkte werktijden

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 volledig kunt aanhouden, en dat je elke opdracht inlevert zodra je die af hebt. Er zijn dus dagelijkse deadlines.

Heb je een keer een dag waarop je niet zo goed kunt focussen, of de opdracht ligt je niet zo goed, dan krijg je de opdracht misschien niet af. Geen probleem. Je gaat de volgende dag naar het docentenspreekuur om afspraken te maken over het weer op gang komen, of om gewoon even je hart te luchten.

Voor de individuele opdrachten zijn er steeds twee 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. De deadline wordt bepaald door het dagschema.

  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 zijn de uiterste deadlines voor de verbeterde versies:

opdrachten deadline
Mario wo 16 feb 17:59
Readability wo 23 feb 17:59
Find wo 2 mrt 17:59

Bovenstaand schema is afhankelijk van de werkgroeproostering en onder voorbehoud. Het geeft wel een indicatie van wat de bedoeling is.

Ziekte en inhalen

Als je ziek bent dan meld je het in ieder geval meteen even aan je mentor via een berichtje op Slack. 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 of je hebt de opdracht niet af, dan ga je de volgende morgen direct naar het docentenspreekuur (maak een afspraak). Let op dat systematisch achterlopen niet mogelijk is. Ga je regelmatig één of twee dagen achterlopen dan zullen we je naar de parttime-versie van het vak verwijzen.

  • Heb je een medisch noodgeval en ben je hierdoor bijvoorbeeld een hele week uit de running? Dan bespreek je naderhand met een docent hoe je dit kunt oplossen (houd wel contact!). 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 becijferde 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 drie “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
Credit vr 11 feb 17:59
Crack vr 18 feb 17:59
Fifteen vr 25 feb 17:59

Het is standaard 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 een 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 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. De oefeningen worden inhoudelijk besproken tijdens de werkgroepen.

Werkuren

Tijdens de werkuren, dagelijks van 10 tot 17 uur, word je geacht te werken aan dit vak. Je ontwerpt en programmeert dan aan je opdrachten en je wisselt ideeën en oefeningen uit met de studenten uit je mentorgroep. Let daarbij wel op dat je op een “redelijke” manier samenwerkt, zoals vermeld aan het einde van deze studiewijzer.

Checkups

Elke dag om 10:00 doe je een checkup met je mentorgroep, maar zonder je mentor. Daarbij laat je weten hoe je ervoor staat met je opdracht, waar je aan gewerkt hebt en vooral waar je vandaag aan wil werken. Je kunt ook om advies vragen over je aanpak, bijvoorbeeld als je vastzit. Misschien is er een groepsgenoot die hetzelfde probleem al is tegengekomen.

Aanvullende literatuur

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

Programming in C, Fourth Edition
Stephen G. Kochan
Pearson Education, 2015
ISBN 9780321776419

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.

  • 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 je mentor als je denkt dat je in de problemen komt met de planning en/of je cijfers. Ook de coördinator spreekt 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 semester waarin het vak wordt gegeven.

  • Alle modules die niet af waren (en dus niet beoordeeld) moeten opnieuw of alsnog worden ingeleverd.

  • Modules die af en beoordeeld waren mogen niet opnieuw worden ingestuurd. Het oude cijfer blijft staan, met uitzondering van opdrachten die zijn vervangen door nieuwe.

  • 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 semester 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.