Terug naar de hoofdpagina

Waarom BJOC?

Programmeren kan zeer voldoenend zijn. Je kan niet alleen creatief maar ook inventief bezig zijn. Daarnaast geeft programmeren een hoeveelheid controle die je niet terugziet in de meeste andere activiteiten. Dit is wat Seymour Papert “lastig leuk” noemt, omdat het breinbrekend is, maar wel onder je eigen controle. En ook omdat jijzelf degene bent die bepaalt of je programma werkt, in plaats van bijvoorbeeld een docent. Het is een spel waar je vaardigheid in moet krijgen, zoals schaken, maar dan zonder het competitieve aspect en met andere nuttige resultaten naast het leren programmeren zelf. Dit is de beste reden om informatica als vak te leren, en wij willen dat alle kinderen, niet alleen diegene die aan het stereotype ‘nerd’ voldoen, de vreugde van programmeren kunnen ervaren.

We vinden ook dat computerprogramma's (en niet alleen de afbeeldingen die zij kunnen creëren) mooi kunnen zijn. Ja, die programma’s kunnen ook lelijk zijn, als ze lange opeenvolgingen of taak verklaringen zonder structuur zijn. Maar goede programmeurs ontwikkelen een gevoel voor programmeer esthetiek. Dit is een van de redenen waarom het belangrijk is om recursion in het curriculum mee te nemen: een recursive programma kan een complex, gedetailleerd process genereren uit een klein stukje code, wij herinneren deze openbaring als het moment waarop wij de schoonheid van programma’s ontdekte.

Het is niet makkelijk om schoonheid en vreugde te bewaren wanneer lessen vertaald moeten worden voor een curriculum dat door velen bruikbaar moet zijn. Te veel aanpassingen en het plezier van het project is weg; te weinig aanpassingen en de leerling voelt zich hulpeloos en incompetent. Dat is waarom de oorspronkelijke auteurs van de Universiteit van Californië, Berkeley, partners zijn geworden met de curriculumexperts van EDC (Education Development Center). Probeer het curriculum uit om erachter te komen wat jij er van vindt.

Computer Science Principles

BJOC is gebaseerd op het kader van de Amerikaanse AP CS Principles, wat draait om zeven 'Grote Ideeën' (dingen om te leren) en zes "Oefeningen met denken als een computer" (dingen om te doen):
Geen Afbeelding

Elk curriculum dat dit kader volgt moet al deze punten onderwijzen, maar het kan de hoeveelheid nadruk die op de punten wordt gelegd aanpassen. (De taartpunten in de grafieken zijn niet daadwerkelijk kwantitatief, het is een suggestie hoe BJOC is opgebouwd.)

Er is veel overlap tussen de Ideeën en Oefeningen. Creativiteit is een idee, maar creëren is een toepassing. Je moet het eerste taartdiagram zien als de teksten gegeven in het lesmateriaal van het curriculum, en het tweede taartdiagram moet je zien als hoe verwacht wordt dat de leerlingen hun tijd gaan besteden. De cirkels in het midden van de taartdiagrammen wijzen op het idee dat programmeren en creëren het centrum van BJC vormen, en overlappen met alle andere punten.

Ten eerste, de Grote Ideeën. BJC legt een zware nadruk op het punt Programmeren. Wij geloven dat Snap!, de programmeertaal die we gebruiken, ons in staat stelt om een diverse samenstelling van beginners te bereiken, die in de eerste instantie niet geïnteresseerd in programmeren hoeven te zijn. We denken dit omdat Snap! het gemak van visual programmeren combineert met de kracht die eerder alleen gevonden kon worden in geavanceerde, traditionele programmeertalen. (meer hierover onderaan de pagina.) We gaan ver voorbij de CS Principles vereisten, met de geavanceerde technieken van recursie en functies van hogere ordes.

We zien Abstractie als het centrale idee van informatica, en we leggen de nadruk op het gebruik van abstractie in de context van programmeren. Dit omvat zowel het abstraheren van functies als van data, om de implementatie van een abstract data-type los te koppelen van zijn gebruik.

Onze tweede grootste nadruk ligt op de Globale Impact, de sociale betrekkingen van programmeren. We gebruiken lezingen en discussies om verschillende aspecten van dit onderwerp te verkennen in ieder hoofdstuk van de lessen. Details over de onderwerpen en leerdoelen staan verderop in deze tekst.

Op twee van de vier onderwerpen die overblijven wordt minder nadruk gelegd dan op de anderen. Leerlingen passen Creativiteit toe in hun programmeerprojecten, maar we bespreken het punt niet zoveel als de andere onderwerpen. Op dezelfde manier ontwikkelen leerlingen Algoritmes tijdens het programmeren, maar er wordt niet vaak over algoritmes gesproken als een apart onderwerp, behalve dan als het analyseren van algoritmes en asymptotische volgordes van groei wordt onderwezen.

De laatste onderwerpen, Data en Het internet, zijn belangrijk en worden uitvoerig behandeld, maar waar mogelijk neemt deze behandeling de vorm aan van activiteiten met programmeren in plaats van, bijvoorbeeld, het gebruik van commerciële databasesoftware.

Nu, over de oefeningen: De zin “Computational Artefacten” slaat op video's, presentaties, blogs, programma’s, muziek, spreadsheets -- en wat je nog meer met de computer kan creëren. Creëren vinden wij het belangrijkste aan de Oefeningen en we zien computerprogramma's als de belangrijkste artefacten die de leerlingen zullen maken, omdat er 2 dingen gemaakt worden als een leerling een programma schrijft. De leerling is geïnteresseerd in het product, een spel bijvoorbeeld, en past zijn creativiteit toe in het ontwerp van het spel. Maar zij maakt de spel door. Maar de leerling laat ook creativiteit zijn in het ontwerpen van de structuur van het programma. Die laatste is echte informatica.

Net als dat het idee van abstractie centraal staat in, en onafscheidelijk is van, het idee van programmeren, staat het beoefenen van abstractie centraal bij programmeren. We moedigen leerlingen constant aan om lagen van abstractie toe te passen in de structuur van een programmeerproject.

Connecting Computing” kan betekenen dat je het programmeren aan hobby's of aan de industrie verbindt, of misschien zelfs aan de wetenschap. Maar nog belangrijker, voor ons, is dat leerlingen programmeren verbinden aan hun sociale toepassingen, onze tweede grootste focus.

Bijna net zo belangrijk als het analyseren van programma’s: debugging, het voorspellen van het gedrag van iemands code, en in acht nemen van de efficiëntie. Maar we benadrukken dat deze vaardigheid niet het uiteindelijke doel is; uiteindelijk is het de bedoeling dat men op zijn of haar werk programma’s kan maken. We zijn lang niet zo geïnteresseerd in het analyseren van “artefacten” als we zijn in het analyseren van programma’s.

De twee laatste toepassingen zijn belangrijk, maar bij BJC ligt er minder de nadruk op. Zoals de meeste CSP curricula, gebruiken wij pair programming, zodat leerlingen constant overleggen met hun partners en het werk verdelen. Aan het begin van de les onderwijzen we het process van pair programming, en in de discussie van sociale toepassingen van programmeren moeten leerlingen hun ideeën overleggen, maar communiceren en samenwerken zijn niet exclusieve leerpunten voor het vak informatica.

Visueel Programeren 

Snap!, de programmeertaal ontworpen om deze les te ondersteunen, maakt gebruik van hetzelfde ontwerp als Scratch waar blokken met code aan elkaar worden gezet.

De visuele onderwijsmethode van Scratch maakt het laagdrempelig, waardoor het al op veel scholen zelfstandig gebruikt wordt door achtjarigen. De vormen en kleuren van de blokken herinneren de gebruikers aan de categorieën waarin de blokken vallen.
Geen Afbeelding

Het blok met een C-vorm is bijvoorbeeld een lus, en omsluit ook visueel de code die herhaald wordt. De groene blokken slaan op tekenen en de blauwe blokken op bewegen.

Maar omdat Scratch ontworpen is om gebruikt te worden door achtjarigen, hebben de ontwerpers van het programma cruciale onderdelen voor het leren van informatica weggelaten. Bij Snap! zijn de nodige mogelijkheden voor abstractie toegevoegd, zonder de zorgvuldig ontworpen visuele metaforen te verstoren die waar Scratch zo goed gebruik van maakt.

Voor abstractie van functie kunnen de gebruikers van Snap! hun eigen blokken bouwen.
Geen Afbeelding    Geen Afbeelding    Geen Afbeelding

Deze functie is essentieel voor het grote idee van abstractie, maar zorgt er ook voor dat we recursie kunnen aanleren, waardoor een klein programma een complex resultaat kan opleveren:

Geen Afbeelding    Geen Afbeelding

Omdat blokken van Snap! andere blokken of scripts als invoer kunnen gebruiken, en omdat de notatie voor anonieme functies erg simpel is, kunnen we de nog krachtigere functies van hogere orde aanleren:
Geen Afbeelding

Deze functionaliteit, eersteklasprocedures, maakt Snap! krachtiger dan de meeste traditionele programmeertalen. De visuele representatie maakt de data van de procedure duidelijker voor leerlingen, zoals in deze lijst van procedures:
Geen Afbeelding

Als laatste, omdat lijsten ook de eersteklasdata zijn in Snap!, kunnen we abstracte datatypes bouwen en deze gebruiken in nog grotere datastructuren, zoals deze driehoek:
Geen Afbeelding

Voor leerlingen die erop staan om te programmeren met tekst, Snap! voorziet toegang tot een Javascript omgeving waarin dit mogelijk is:
Geen Afbeelding

(Op de afbeelding is maar 1 regel code te zien, maar er zit geen limiet aan de lengte of complexiteit van de Javascriptfunctie die gedefinieerd wordt door het blok.) Met deze functionaliteit krijg je het beste van beide werelden, met respect voor het (zinloze, vinden wij) argument over visuele talen tegenover traditionele talen. We leren geen Javascript bij BJOC, maar het is een mogelijkheid als verrijkende activiteit, indien gewenst.

Daarnaast, omdat Snap! op elke moderne browser beschikbaar is, kunnen leerlingen mobiele apps maken voor iOS of Android door een snelkoppeling te maken naar de URL van het project op het bureaublad van het betreffende apparaat. Vanaf een browser kan geen gebruik gemaakt worden van informatie op de telefoons, zoals contactlijsten of GPS locaties ( speciale mobiele versies zijn in de maak), maar dingen zoals gameprojecten werken prima.

Snap! kan ook verbonden worden met bepaalde robots en sensoren (Finch, Hummingbird, Sphero, Lego NXT, Wiimote, LEAP Motion, Arduino, etc.) door kleine applicaties te installeren op de computer.

Maatschappelijke invloed van programmeren  

Hier zijn de onderwerpen die worden behandeld in de hoofdstukken van BJOC:

  • Privacy en zoekmachines
  • Games en geweld
  • Ideeën bezitten (copyright en patenten)
  • Versleuteling van gegevens
  • Innovatie
  • Computers en Gemeenschappen
    • Sociale media
    • Cyberpesten
  • Computers en oorlog
  • Computers en werk
Geen Afbeelding

Wij zijn van mening dat iedere technologie voor- en nadelen heeft en dat mensen beslissen hoe ze de risico's minimaliseren en de voordelen maximaliseren. Daarom is bij elk van deze onderwerpen ons doel om alle vormen van vooroordelen te ontwijken; we kijken naar alternatieve perspectieven op het onderwerp. We nemen bijvoorbeeld niet aan dat het gebruiken van gecopyright werk slecht is; omdat veel leerlingen dit ook doen, we proberen een andere kant van het verhaal te bekijken waarom het wel oké zou kunnen zijn, en dan kijken we naar andere manieren om artiesten en schrijvers te ondersteunen. Daarnaast bevat de cursus meerdere bronnen voor extra leesmateriaal over ieder onderwerp.

Over het algemeen hopen wij dat leerlingen optimistisch kijken naar de voordelen van technologie, maar daarnaast ook kritisch kunnen nadenken over iedere soort technologie. We herinneren leerlingen er ook aan dat beslissingen over het gebruik van nieuwe technologie gemaakt worden door mensen, zijzelf daarbij inbegrepen als ze besluiten van informatica hun carrière te maken, dus ze zouden zich niet hulpeloos moeten voelen bij confrontatie met een veronderstelde technische noodzaak.

We gebruiken het geweldige Blown to Bits als tekstboek voor dit onderdeel van de cursus. (Er is geen tekstboek voor de technische onderdelen van de cursus, naast de online materialen die wij verzorgen.) Het boek is bedoeld voor volwassen lezers, en is in het Engels, dus gebruiken we korte fragmenten. Net als de rest van het lesmateriaal is ook dit boek gratis online beschikbaar, met een Creative commons BY-NC-SA license.

Het boek is een aantal jaar oud nu, dus we vullen het aan met recentere lezingen, waarbij we kijken naar onderwerpen die relevant zijn voor de leerlingen. Leerlingen kiezen hun eigen onderwerpen uit waarmee ze verder de diepte in willen; dit is een van de manieren waarop de cursus aantrekkelijk is voor een breed publiek. We starten lessen met “Programmeren in het nieuws,” waarbij artikelen van de krant van die ochtend worden behandeld, een met een positieve ondertoon en een ander over een probleem. Na wat door de leraar gekozen voorbeelden om het idee te illustreren, moedigen we de leraren aan om de leerlingen afwisselend artikelen mee te laten nemen.