Programmeren kan fantastisch zijn. Je bent niet alleen creatief maar ook inventief bezig. Daarnaast geeft programmeren een hoeveelheid controle die je niet terugziet in de meeste andere activiteiten. Jijzelf bent degene 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. Dit is de beste reden om informatica als vak te leren en wij willen dat alle kinderen de vreugde van programmeren kunnen ervaren.
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):
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 Informatie 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 term “Computational Artifacts” 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 onafscheidelijk is van het idee van programmeren, is het beoefenen van abstractie onafscheidelijk van 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 het 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 oefeningen, communiceren en samenwerken 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.
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.
Het blok met een C-vorm is bijvoorbeeld een lus, en omsluit ook visueel de code die herhaald wordt. De groene blokken worden gebruikt om te tekenen en de blauwe blokken om objecten te bewegen.
Omdat Scratch ontworpen is om gebruikt te worden door achtjarigen, hebben de makers 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 waar Scratch zo goed gebruik van maakt.
Voor abstractie van functies kunnen de gebruikers van Snap! hun eigen blokken bouwen.
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:
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:
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:
Als laatste, omdat lijsten ook eersteklasdata zijn in Snap!, kunnen we abstracte datatypes
bouwen en deze gebruiken in nog grotere datastructuren, zoals deze driehoek:
Voor leerlingen die erop staan om te programmeren met tekst, geeft Snap! toegang tot een
Javascript-omgeving waarin dit mogelijk is:
(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.