Gerard Dummer

Alles over Onderwijs en ICT.

Browsing Posts tagged computational thinking

In mijn vorige blogpost vatte ik het artikel van Weintrop et al over Computational Thinking (CT) binnen Science en Math samen om een overzicht te krijgen hoe zij de verbinding zien tussen CT en deze vakgebieden. Ik concludeerde dat zij vooral Science als leidend uitgangspunt hebben genomen. Rekenen-wiskunde wordt vooral in de toepassingssfeer genoemd. Dat hoeft misschien niet altijd zo te zijn maar in dit artikel stond (naar mijn idee) science toch vooral centraal.

Ik gaf ook aan dat ik wilde kijken op welke manier er een vertaling gemaakt zou kunnen worden naar het basisonderwijs en dan specifiek naar rekenen-wiskunde en wetenschap en technologie (W&T). Ik wil met dat laatste beginnen. En dan van de W&T in eerste instantie de W, die ik kort door de bocht vertaal met onderzoekend leren. De vraag die ik daarbij vooral wil beantwoorden is:

Hoe kan CT zoals genoemd in het artikel van Weintrop et al ingebed worden in de cyclus van onderzoekend leren?

Cyclus van onderzoekend leren
Vooropgesteld dat onderzoekend leren meer inhoudt dan een cyclus en dat het al helemaal meer inhoudt dan het afwerken van een cyclus, wil ik kijken op welke manier de verschillende aspecten van CT gekoppeld kunnen worden aan de cyclus van onderzoekend leren. Ik gebruik hiervoor de cyclus zoals wij die op de HU Pabo aanbieden aan onze studenten. Dat is deze cyclus (afkomstig van Universiteit Utrecht):

onderzoekend_leren_klein

1. Confrontatie.

In de fase van Confrontatie (verwonderen, afvragen) zie ik niet direct linken met de invulling van CT zoals Weintrop et al die geven. Ik zie die wel buiten dit model om, omdat de leefwereld van kinderen vol zit met computational practices. De publicatie van Hanno van Keulen, Wetenschap en Techniek, ijkpunten voor een domein in ontwikkeling, beschrijft de mogelijkheden van W&T in het dagelijks leven van kinderen. Deze zou gemakkelijk aangevuld, aangescherpt kunnen worden met CT.

2. Verkennen

In de fase van Verkennen zie ik verschillende mogelijkheden om met CT aan de slag te gaan. Mogelijkheden vanuit het model van Weintrop et al zijn naar mijn idee:

  • 2a. Using computational models to understand a concept
  • 4a. Investigating a complex system as a whole
  • 4b. Understanding the relationships within a system
  • 4c. Thinking in levels

Kinderen kunnen door middel van een computational model kennis maken met een bepaald concept. Met voorgeschreven opdrachten verkennen leerlingen dan dit concept. Kinderen kunnen kennis maken met verschillende systemen en proberen hier inzicht in te krijgen. Daarbij zouden gerichte opdrachten helpen om de relaties binnen een systeem duidelijk te maken en zouden ze uitgedaagd kunnen worden om de denken in verschillende niveaus.

3. Opzetten experiment

Bij het opzetten van een experiment (bedenken en plannen) zouden de volgende punten aan bod kunnen komen:

  • 2b. Using computational models to find and test solutions
  • 2d. Designing computational models
  • 2e. Constructing computational models
  • 3a. Preparing problems for computational solutions
  • 3b. Computer programming
  • 3c. Choosing effective computational tools
  • 3d. Assessing different approaches/ solutions to a problem
  • 3e. Developing modular computational solutions
  • 3f Creating computational abstractions
  • 4e. Defining systems and managing complexity

Het gaat bij alle punten om het voorbereiden van een experiment waarbij je bestaande tools gaat inzetten of zelf iets gaat maken. Het laatste punt (defining systems and managing complexity) gaat over de vraag, naar mijn idee, naar het afbakenen van je onderzoeksterrein.

4. Uitvoeren van het experiment

Bij het uitvoeren van het experiment (experiment doen en resulaten noteren) zouden de volgende punten aan bod kunnen komen:

  • 1a. Collecting Data
  • 1b. Creating Data
  • 3g. Troubleshooting and debugging

Uit een experiment dat je doet komt namelijk data (in welke vorm dan ook) en kun je tegen problemen aanlopen die je moet oplossen.

5. Concluderen

Bij het onderdeel concluderen (beantwoord je onderzoeksvraag) zouden de volgende punten aan bod kunnen komen:

  • 1c. Manipulating Data
  • 1d. Analyzing Data

De data die je hebt gekregen uit je experiment moet je namelijk interpreteren. Daarvoor kan het noodzakelijk zijn om je data te manipuleren zodat je het gemakkelijker kunt analyseren.

6. Communiceren

Bij het onderdeel Communiceren (presenteren, discussiëren en vergelijken) zouden de volgende punten aan bod kunnen komen:

  • 1e. Visualizing data
  • 4d. Communicating information about a system

De data die je hebt genanalyseerd ga je tijdens de communicatiefase visualiseren zodat je ze kunt presenteren. Dat geldt ook voor punt 4d.

7. Verdiepen

Bij het onderdeel Verdiepen (verbreding, verdieping) het volgende punt kunnen passen:

  • 2c. Assessing computational models

Als een soort discussie op je eigen onderzoek kun je terugkijken in hoeverre de gebruikte modellen iets zeggen over de werkelijkheid.

Conclusie

Naar mijn idee is het goed mogelijk om in de verschillende fasen van onderzoekend leren CT te integreren. Hoe dit er concreet in het basisonderwijs uit kan zien wil ik beschrijven in een volgende post. Ik kan me voorstellen dat niet alles aan bod hoeft te komen in één project. Ik kan me ook voorstellen dat in de onderbouw van het basisonderwijs de mogelijkheden beperkter zijn dan in de bovenbouw van het basisonderwijs. En ik kan me voorstellen dat leerlingen die meer ervaring hebben met onderzoekend leren of met CT weer meer aankunnen dan leerlingen die daar nog nooit mee gewerkt hebben.

Dat is de titel van een artikel van Weintrop et al (2016) waarin ze een opzet geven voor het integreren van computational thinking (CT) in het wiskunde en science onderwijs. Een interessant artikel omdat dit een beeld geeft hoe je aandacht kunt besteden aan CT buiten het vakgebied computer science. De opzet die ze kiezen voor het integreren van CT is een taxonomie van doelen toegespitst op wiskunde en science. Op basis van eigen onderzoek komen ze uiteindelijk tot 4 categorieën: data practices, modeling and simulation practices, computational problem solving practices en system thinking practices. Belangrijkste reden voor de auteurs om CT te integreren binnen wiskunde en science is dat deze vakken daarmee beter aansluiten op de werkelijkheid van de wetenschap van nu. Daarnaast, geven de auteurs aan, kan het gebruik van computational tools en vaardigheden het begrip van wiskunde en science vergroten.

In het artikel gaan ze verder in op CT zelf, CT in K12 education, de steeds groter wordende rol van computation in wiskunde en science en de methode die ze gebruikt hebben om te komen tot hun taxonomie. Over de steeds groter wordende rol van computational methodes geven ze aan dat door de toegenomen rekenkracht steeds ingewikkeldere problemen kunnen worden opgelost, dat daardoor de wetenschap verandert en dat leerlingen daarop moeten worden voorbereid.

De Taxonomie

screen-shot-2017-03-17-at-10-14-34

Zoals gezegd bestaat de taxonomie uit vier categorieën. Elke categorie is weer onderverdeeld in een aantal practices. Ik weet niet hoe practices zich het beste laat vertalen aangezien de auteurs zelf daar een apart punt van maken. In eerste instantie spreken ze over skills (vaardigheden) maar…

but concerns were raised, such as a request we move from the terms skills to the broader and more actionable practices to reinforce what it means to use these concepts as well as to reflect larger changes in the mathematics and science standards landscape.

Misschien dat werkwijze, praktijken of competenties een vertaling hiervoor zou kunnen zijn. Voor nu laat ik het maar even bij practices.

In het artikel lichten ze elke practice toe en daarna per practice alle onderdelen. Ik zal daarvan een korte samenvatting geven.

1. Data-practice

Data, zo geven de auteurs aan, is de kern van wetenschappelijk en wiskundige bezigheden. De manier waarop data wordt verzameld, gemaakt, geanalyseerd, gemanipuleerd en gevisualiseerd verandert snel. Leerlingen moeten leren dat data niet is geordend in structuren maar dat je die zelf nog moet aanbrengen.

1a. Collecting Data (dataverzamelen)
Door het observeren en meten kan data worden verzameld. Computational tools kunnen worden ingezet om data te verzamelen. Aan het eind van het artikel noemen de auteurs een voorbeeld van zo’n computational tool: De Tracker Video:

1b. Creating Data (Data maken)
Met behulp van computersimulaties kunnen wetenschappers data maken. Bijvoorbeeld om de evolutie van een melkwegstelsel te onderzoeken. Deze data is anders niet beschikbaar omdat dit soort processen bijvoorbeeld te lang zouden duren zonder simulaties.

1c. Manipulating Data (Data manipuleren)
Met data manipuleren wordt bedoeld het kunnen sorteren van data, filteren, opschonen, normaliseren en datasets kunnen samenvoegen. Hierbij moet ik denken aan het kunnen werken met Excel bijvoorbeeld. De auteurs noemen elders in het artikel nog tools zoals Tinkerplot, Fathom en SimCalc.

1d. Analyzing Data (Data analyseren)
Bij data analyseren gaat het er om dat je op zoek gaat naar patronen, afwijkingen, regels kunt definiëren om data te categoriseren, trends kunt vaststellen en verbanden kunt leggen. Nu er zoveel data beschikbaar is (big data) is het belangrijk dat je computational tools kunt gebruiken om de data te analyseren.

1e. Visualizing data (data visualiseren)
Computational tools kunnen helpen om data te visualiseren zodat je er ook met anderen over kunt praten. Denk hierbij aan diagrammen en grafieken. Maar ook aan dynamische, interactieve visualisaties.

2. Modeling and simulation practices (modellen en simulaties)

In de wetenschap is het maken, verfijnen en gebruik van modellen over fenomenen een belangrijk uitgangspunt. Je kunt hierbij denken aan stroomschema’s, diagrammen, vergelijkingen, chemische formules, computersimulaties en fysische modellen. Modellen kunnen worden gebruikt om te voorspellen hoe iets in de werkelijkheid zal gaan. De auteurs noemen hierbij specifiek niet statische representaties van fenomenen die gesimuleerd kunnen worden door de computer. Modellen maken het mogelijk om vragen te onderzoeken en hypotheses te testen die anders te duur, te gevaarlijk, te moeilijk of onmogelijk zijn uit te voeren.

2a. Using computational models to understand a concept (Computationele modellen gebruiken om een concept te begrijpen.
Een computational tool kan een goed leermiddel zijn om een concept te begrijpen zoals de afhankelijkheden in een ecosysteem en hoe objecten in een wrijfingsloze omgeving zich gedragen. Op zoek naar voorbeelden kwam ik op Wikipedia deze uitgebreide lijst tegen met computational models. Maar ik moest ook denken aan de GoLabs zoals Ton de Jong die beschrijft en de onderzoeken naar simulaties van Wouter van Joolingen met bijvoorbeeld SimSketch.

screen-shot-2017-03-17-at-11-30-10

2b. Using computational models to find and test solutions (computational modellen gebruiken om oplossingen te vinden en testen)
Verschillende hypothesen testen zonder dat het teveel geld en tijd kost.

2c. Assessing computational models (computationals models beoordelen)
Hoe verhoudt het fenomeen zich tot de werkelijkheid? Welke abstracties zijn in het model ingebouwd? En welke invloed hebben de abstracties op de betrouwbaarheid van het model?

2d. Designing computational models (computational modellen ontwerpen)

Hierbij moeten technologische, methodologische en conceptuele beslissingen worden genomen. Hierbij gaat het om een ontwerpproces nog op papier.

2e. Constructing computational models (het construeren/ bouwen van computational modellen)
Hierbij gaat het echt om het bouwen van computational models. Hiervoor is programmeerkennis nodig.

3. Computational problem solving practice (computationeel probleemoplossend vermogen)

Het gaat hierbij om de toegepaste informatica die helpt om de wetenschap verder te helpen. Als leerlingen programmeren, algoritmes ontwikkelen en computationele abstracties maken kan dit een positief effect hebben op het bestuderen van wiskundige en wetenschappelijke fenomenen.

3.a Preparing problems for computational solutions (problemen zo formuleren dat ze computationeel kunnen worden opgelost)
Problemen lenen zich niet altijd automatisch om door een computerprogramma te worden opgelost. De kunst is om het probleem zo te formuleren dat het geschikt is om er met een computational tool mee aan de slag te gaan.

3b. Computer programming (programmeren)
Het gaat hierbij om het kunnen begrijpen van computerprogramma’s van anderen en zelf programma’s schrijven. Programmeerconcepten die hierbij belangrijk zijn: conditionele logica, iteratieve logica, herhaling, abstracties (waaronder subroutines en datastructuren). Niet iedereen hoeft een programmeur te worden, geven de auteurs aan, maar een basiskennis is wel belangrijk.

3c. Choosing effective computational tools (effectieve computationele middelen kiezen)
Het gaat hierbij om de vraag welk programma het beste past bij het probleem dat je hebt. Wat zijn de mogelijkheden en wat zijn de beperkingen?

3d. Assessing different approaches/ solutions to a problem (aanpakken en oplossingen beoordelen)
Als er meer mogelijkheden zijn om iets te doen dan is het belangrijk dat je de juiste keuze kunt maken. Je kunt denken aan de kosten, de tijd, duurzaamheid, herbruikbaarheid en flexibiliteit.

3e. Developing modular computational solutions (modulaire computationele oplossingen ontwikkelen)
Het gaat om het in stappen of stukjes op kunnen knippen van een proces. Zodanig dat ze gemakkelijk kunnen worden hergebruikt, voor andere doeleinden kunnen worden ingezet en fouten makkelijker kunnen worden opgespoord.

3f Creating computational abstractions (in staat zijn om abstracties te maken)
Vaststellen wat de hoofdlijnen zijn en wat de details. Dit helpt bij het schrijven van een computerprogramma, generaliseren, visualiseren van data en het vaststellen van de reikwijdte of schaal van een probleem.

3g. Troubleshooting and debugging (probleemoplossing en debuggen)
Bij het oplossen van problemen gaat het om het vaststellen van het probleem, het systematisch testen van het systeem om het probleem te isoleren en het reproduceren van het probleem om mogelijke oplossingen te testen.

4. System thinking practices (systeemdenken)

Er zijn problemen die je alleen op kunt lossen als je kijkt naar het systeem in het geheel en niet naar de afzonderlijke onderdelen. Systeemdenken is daarom een belangrijke vaardigheid. Voorbeelden van systemen die je in z’n geheel zou moeten bestuderen zijn natuurlijke selectie en populatieveranderingen in de natuur, het menselijk ademhalingssysteem en de algemene gaswetten. Ze benoemen daarbij ook de term cross-cutting concepts die ook al een keer was tegengekomen bij theorie over Wetenschap & Technologie. Computationele middelen kunnen een krachtig middel zijn om systemen te begrijpen.

4a. Investigating a complex system as a whole (een systeem als geheel bestuderen)
Soms is het effectiever om een systeem in het geheel te bestuderen in plaats van de afzonderlijke onderdelen. Dat betekent dat je sommige details moet kunnen weglaten. Computationele middelen zoals modellen en simulaties zijn hierbij handig om te gebruiken.

4b. Understanding the relationships within a system
Alhoewel het handig is om systemen als geheel te bestuderen is het ook handig om te weten hoe afzonderlijke onderdelen op elkaar reageren.

4c. Thinking in levels (in niveaus denken)
Het gaat hierbij om het kunnen onderscheiden van verschillende niveaus in een systeem en op basis daarvan onderzoek te doen.

4d. Communicating information about a system (communiceren over een systeem)
Als je een systeem onderzoekt is het de kunst om over de resultaten te kunnen communiceren. Visualisaties en infographics kunnen daarbij helpen. Belangrijk daarbij is de vraag wat je wel en niet presenteert.

4e. Defining systems en managing complexity (systemen definiëren en complexiteit managen)
Wat zijn de grenzen van het systeem dat je wilt gaan onderzoeken? Een systeem moet zo gedefinieerd zijn dat het bruikbaar is en productief.

De auteurs hebben een mooie opzet gemaakt waarin ze kijken hoe CT binnen wiskunde en science een rol kan spelen. Mijn idee is dat vooral science (onderzoekend leren) hierbij leidend is geweest. Ik heb tenminste het idee dat de opbouw zich als geheel vooral leent voor onderzoekend leren. De afzonderlijke onderdelen zouden naar mijn idee weer goed kunnen worden ingebed binnen rekenen-wiskunde. Rekenen-wiskunde is hierbij vooral een toepassing en niet zozeer het doel. In een volgende blogpost zal ik kijken of er op basis van bovenstaande ook vertalingen naar het basisonderwijs zijn te maken. En dan specifiek naar rekenen-wiskunde en wetenschap en technologie.

In het document K12 Computer Science Framework formuleren The Association for Computing Machinery, Code.org, Computer Science Teachers Association, Cyber Innovation Center, en National Math and Science Initiative de core concepts (kernconcepten) en core practices (kernpraktijken) van K12 Computer Science.

screen-shot-2017-03-14-at-14-02-09

Computational Thinking maakt in hun overzicht deel uit van de core practices. Daarnaast hanteren ze nog crosscutting concepts. De uitleg daarvan is dat:

These “crosscutting concepts” provide thematic connections across the core concepts. The criteria for selection of a crosscutting concept was that it should

  • apply across multiple core concepts,
  • illuminate connections between different core concepts of computer science,
  • build familiarity with fundamental themes in computer science through repetition in different
    contexts, and
  • create a richer understanding of a concept statement in which it is integrated

 
De Crosscutting Concepts zijn:

1. Abstraction
2. System Relationships
3. Human–Computer Interaction
4. Privacy and Security
5. Communication and Coordination

Zoals gezegd maakt Computational Thinking dus deel uit van de core practices.

1. Fostering an Inclusive Computing Culture
2. Collaborating Around Computing
3. Recognizing and Defining Computational Problems
4. Developing and Using Abstractions
5. Creating Computational Artifacts
6. Testing and Refining Computational Artifacts
7. Communicating About Computing

Ze geven de volgende uitleg over waarom CT op deze manier in de core practices staat:

Computational thinking plays a key role in the computer science practices of the framework as it encompasses practices 3, 4, 5, and 6. Practices 1, 2, and 7 are independent, general practices in computer science that complement computational thinking. Multiple research articles and documents informed the delineation of computational thinking practices, such as Operational Definition of Computational Thinking for K–12 Education (ISTE & CSTA, 2011) and Assessment Design Patterns for Computational Thinking Practices in Secondary Computer Science (Bienkowski, Snow, Rutstein, & Grover, 2015).

Interessant vind ik ook dat ze schrijven dat ze nog niet in staat zijn om die core practices per niveau te omschrijven:

The practice statements delineate specific expectations by the end of 12th grade and are followed by a narrative that describes the progression leading to those end points. This structure differs from the grade-band delineation of the core concepts because the current research base and practitioner experience with practices in computer science do not provide enough information to create clear, grade-banded expectations. The narratives describe the practice progressions in a manner that is less prescriptive about developmental appropriateness to emphasize flexible expectations.

In mijn eerdere post van vandaag verwijs ik naar de CSTA-standaarden waar de SLO zich op baseert als het gaat om Computational Thinking (CT). Deze standaarden zijn in 2011 geformuleerd. CT is een onderdeel van computer science (CS) en CS bestaat naast CT uit: Collaboration, Computer Practice and Programming, Computer and Communication Devices, Community, Global and Ethical Impacts.

In het document van 2011 beschrijven ze het belang van CT als volgt:

We believe that computational thinking (CT) can be used across all disciplines to solve problems, design systems, create new knowledge, and improve understanding of the power and limitations of computing in the modern age. The study of computational thinking enables all students to better conceptualize, analyze, and solve complex problems by selecting and applying appropriate strategies and tools, both virtually and in the real world.

In het document van 2016, dat nog in conceptversie online staat wordt computational thinking niet meer als een apart onderdeel genoemd. De indeling die in dit document wordt aangehouden is: Computing Systems, Networks and the Internet, Algorithms and Programming, Data and Analysis, and Impacts of Computing.

Over computational thinking wordt in deze versie gezegd:

We believe that computational thinking is a problem solving methodology that expands
the realm of computer science into all disciplines, providing a distinct means of
analyzing and developing solutions to problems that can be solved computationally.
With its focus on abstraction, automation, and analysis, computational thinking is a
core element of the broader discipline of computer science and for that reason it is
interwoven through these computer science standards at all levels of K–12 learning.

CSTA kiest hier dus voor de lijn om CT te integreren in CS. Ben benieuwd hoe SLO en Kennisnet tegen deze verandering aankijken…

In mijn blogpost van 16 februari 2017 over computational thinking benoem ik verschillende definities van computational thinking. Mijn eigen definitie voegde ik daar aan toe:

Het oplossen van problemen waarbij je gebruik maakt van de ideeën uit de informatica.

Later bedacht ik me nog dat dit nog niet compleet was want andersom geldt dit, zeker volgens uitgangspunt van Wing, ook. Wing het noemt dit het automatiseren van abstracties. Waarbij abstracties als het ware de denkkapstok is van de informatica. Als ik mijn eigen definite aanvul met dit uitgangspunt dan kom ik uit op:

Computational thinking is enerzijds het oplossen van problemen waarbij je gebruik maakt van de ideeën uit de informatica en anderzijds het gebruiken van informatica om problemen op te lossen.*

Als ik het heb over ideeën dan bedoel ik zaken zoals algoritmes en patronen. Als ik het heb over problemen dan kan dat slaan op een zakelijke insteek (zoals het uitvoeren van een project) als een creatieve insteek (zoals het maken van een kunstwerk).

Een volgende stap die ik wil zetten in mijn denkproces/zoekproces is het volgende: de voorbeelden die rondom computational thinking worden gegeven vind ik nogal hap-snap. Ik zie nog geen duidelijke lijn in de opbouw van computational thinking. Websites zoals CSunplugged bieden allerlei activiteiten aan maar die staan naar mijn idee nog niet in een lijn. Dat komt misschien omdat ik nog niet goed heb gekeken of mijn kennis nog niet groot genoeg is rondom dit onderwerp. Ik weet bijvoorbeeld ook nog niet of dit überhaupt moet of niet.

Als ik een vergelijking zou maken met rekenen-wiskunde dan lijkt het of de activiteiten die benoemd worden de ene keer gaan over sommen als 3 + 4 dan weer over 34 x 35 en dan weer over de vraag hoeveel seconden er in een dag zitten. Sommen die komen uit verschillende plekken van de leerlijn of zelfs uit verschillende leerlijnen.

De website van Kennisnet en de SLO over de leerlijn programmeren komt al meer in de richting. Zij hebben zich gebaseerd op de SLO die zich weer heeft laten inspireren door ISTE en CSTA. Tijd om me daar verder in te verdiepen.

Een idee dat ik ook heb over CT is om te kijken in hoeverre het zinvol is om dit te koppelen aan een taxonomie zoals die van Bloom. Omdat in de stukken die ik tot nu toe lees het vooral gaat over het onderdeel Computational en nog niet zozeer over het onderdeel Thinking. Een idee dat verder wordt ingegeven door het feit dat ik denk dat je eerst aspecten van computational thinking zou moeten herkennen voordat je in staat bent om er iets mee te doen. En dat idee wordt weer getriggerd doordat ik me in de afgelopen jaren ook bezig heb gehouden met de invoering van Wetenschap en Technologie (W&T) op onze Pabo. Een mooi document dat daarin een belangrijke rol speelt is die van Hanno van Keulen waarin hij laat zien hoeveel W&T in ons dagelijks leven een rol speelt. Bij veel voorbeelden die hij noemt is naar mijn idee moeiteloos CT te koppelen. Dat doet hij in zijn publicatie niet. Daarom ter afsluiting Linda Liukas die dat wel doet 🙂

 

*Aanvulling op mijn definitie van 14 maart 2017 op 12 januari 2018: ideeën zou beter vervangen kunnen worden door het begrip “fundamentele ideeën”. Dit sluit beter aan bij auteurs zoals Schwill (1994), Denning (2004) en Zendler en Spannagel (2008) die benadrukken dat computer science op school zich bezig moet houden met de fundamentele ideeën (of great principles of central concepts) omdat het veld zo dynamisch is.

Op 15 februari 2017 mocht ik een workshop verzorgen over computational thinking voor de basisscholen die mee hebben gedaan aan het traject Leren in de 21ste eeuw. In mijn workshop ben ik ingegaan op de vragen: wat is computational thinking, uit welke aspecten bestaat CT, waarom is het belangrijk en zijn we ook praktisch aan de slag gegaan hiermee. En dat alles in 50 minuten. Dat was dus wel keuzes maken. Hieronder de presentatie die ik voor de bijeenkomst gebruikt heb.



Waar ik tijdens de presentatie zelf achter kwam (had ik dus willen toevoegen) was dat er een mooi overzicht van Beat Döbeli Honegger ontbrak die computerscience (en indirect vind ik ook CT) mooi plaatst in een oplopend rijtje (zie dia 5) en die de redenen om met computerscience (en indirect vind ik dus nogmaals met CT) aan de slag te gaan (zie dia 16).

Op 23 maart zal ik nogmaals over CT praten, dan op het symposium ter gelegenheid van het afscheid van Dick de Wolff. Dan zal ik stilstaan bij de verschillende curricula die inmiddels zijn ontworpen rondom CT.

Het artikel van Wing (2006) is waarschijnlijk heet meest geciteerde artikel op dit moment als het gaat over het onderwerp computational thinking. Maar ook in 2008, 20110 en 2016 schrijft Wing over de ideeën en ontwikkelingen rondom computational thinking (CT).

Ik heb de verschillende artikelen van haar op een rijtje gezet en de (naar mijn idee) belangrijkste aspecten uitgehaald.

Definitie van computational thinking

Wing hanteert verschillende omschrijvingen om duidelijk te maken wat ze precies onder CT verstaat. In 2006 geeft ze aan dat CT te maken heeft met het oplossen van problemen, het ontwerpen van systemen en het begrijpen van menselijk gedrag door voor te borduren op de fundamentele concepten van computerscience (CS).

In 2010 omschrijft ze CT als het denkproces dat nodig is in het formuleren van problemen en hun oplossingen zodanig dat de oplossingen op zo’n manier worden weergegeven dat ze effectief uitgevoerd kunnen worden door een information-processing agent.

Informeel omschreven als de denkactiviteiten bij het formuleren van een probleem om te komen tot een computationele oplossing. De oplossing kan worden uitgevoerd door een persoon of een machine, of in de meeste gevallen door een combinatie van een persoon en machine.

Wing geeft aan dat CT het wiskundig en technisch denken combineert (Wing, 2006, 2008, 2010).

In mijn eigen woorden zou ik bovenstaande omschrijven als het oplossen van problemen waarbij je gebruik maakt van de ideeën uit de informatica.

Aspecten van CT

In het artikel van 2006 beschrijft Wing verschillende aspecten van CT die rechtstreeks voortkomen uit het programmeren zoals het herkennen van de voor- en nadelen van aliasing, de baten en kosten van indirect adressing en procedure call.

In het artikel van 2008 geeft ze aan dat de essentie van CT abstractie is. Dat komt terug in het artikel van 2010. De kern is om abstracties te kunnen definiëren waarbij gewerkt wordt met meerdere lagen en waarbij je de relatie tussen deze lagen ook moet kunnen begrijpen. Abstracties zijn de mentale gereedschappen van computing geeft Wing (2008) aan. En computing is het automatiseren van onze abstracties. In 2008 en 2010 geeft Wing aan dat abstractie gebruikt wordt om patronen te definiëren, te generaliseren op basis van gevallen en parameters. Het wordt gebruikt om de essentie weer te geven en irrelevante informatie weg te laten. Verschillende lagen van abstractie zorgt er voor dat we ons kunnen focussen op verschillende aspecten.

Er zijn een paar zaken die me hier bij opvallen. In 2006 zit Wing nog erg dicht aan tegen de concrete begrippen die gebruikt worden in de informatica. Een paar jaar later kiest ze als kapstok abstractie als belangrijkste aspect van CT. Alle andere aspecten worden hier van afgeleid. Wat ik hier opvallend aan vind is dat ik dit nu niet meer terugvind in de leerlijnen die nu worden geformuleerd rondom CT. Zo hanteert de leerlijn programmeren/ computational thinking van Kennisnet tien aspecten die zo op het eerste gezicht redelijk gelijk worden behandeld. Het eerste aspect (algoritmes) lijkt niet onder te doen van abstractie (begrip 7) of representatie (begrip 10).

Toepassingen in het onderwijs en wetenschap

Naar mijn idee het belangrijkste punt dat Wing noemt is de toepassingen van CT in onderwijs en wetenschap. Wing (2010, 2016) geeft aan dat computation erkent wordt als de derde pijler onder de wetenschap naast theorie en experimenten.
Ze noemt veel voorbeelden van disciplines die veranderd zijn en waarbij CT een belangrijke rol speelt: statistiek, biologie (onder andere doorzoeken van enorme hoeveelheid data op zoek naar patronen. Deze patronen worden dan weer gebruikt voor nieuw onderzoek bijvoorbeeld bij het ordenen van het menselijk DNA), economie (door computational gametheorieën), nanocomputing beïnvloedt de scheikunde en quantumcomputers beïnvloeden natuurkundigen (Wing, 2006), algoritmische geneeskunde, computational archeologie, financiën, journalistiek, recht, sociale wetenschappen, fotografie, digitale geesteswetenschappen, computermuziek (Wing, 2010).

In het artikel van 2016 geeft Wing aan dat CS-cursussen ook gegeven worden aan studenten die niet afstuderen in CS zelf. Deze cursussen focussen op de kernconcepten van CS. Wing (2016) vind het verrassend en verheugend om te zien dat ook in het middelbaar en basisonderwijs initiatieven zijn ontstaan. Ze noemt daarbij de ontwikkelingen in Engeland (CAS) en het opstarten van code.org in 2013. Als derde noemt Wing de snel toenemende belangstelling in het onderwijzen van CS op de basis- en middelbare school in Australië, Israël, Singapore en Zuid-Korea.

Computational Thinking in het dagelijks leven

Het minst sterk (maar misschien wel meest herkenbaar) vind ik de relatie die Wing legt met CT in het dagelijks leven. Bijvoorbeeld (Wing, 2006) bij het inpakken van een rugzak (prefetching and caching), het terugvinden van verloren handschoenen (back- tracking), het nadenken over huren of kopen van ski’s (online algoritmes), het kiezen van een rij in de supermarkt (performance modeling voor multi-server systemen), het blijven werken van je telefoon gedurende een stroomuitval (independence of failure en redundancy in design), doostroming van geslaagden op een dipoma-uitreiking (Wing, 2010) als voorbeeld van pipelining en het opbergen van LEGO-blokjes zodat je gemakkelijk een specifiek blokje terug kunt vinden (hashing).

Hoe moet je computational thinking aanleren?
Deze vraag stelt Wing (2008 en 2016) zichzelf. Ze vraagt zich af wat effectieve manieren zijn om CT aan te leren bij kinderen, wat de basisconcepten zouden moeten zijn (Wing, 2008, 2016), in welke volgorde moeten de concepten worden aangeboden, verschilt dit per leerling, welke tools (waaronder computers) zijn het meest bruikbaar voor het aanleren van concepten, wanneer zetten we deze tools in, hoe verhoudt informeel en formeel leren zich tot elkaar bij het aanleren van de concepten.

Ze verwijst hierbij vooral naar andere initiatieven zoals http://csprinciples.org, een serie workshops van de National Academies’ Computer Science and Telecommunications Board, CE21 van de NSF, Computing At School (CAS) in Groot-Brittannië, CS4HS, Carnegie Mellon Center for Computational Thinking, Exploring Computational Thinking van Google, Computer Science Unplugged en CSTA.

Voor de precieze uitwerking van computational thinking in het onderwijs moet je dus niet bij Wing zelf zijn maar bij alle andere de initiatieven die ze noemt. Nog maar eens verder kijken dus!

Gisteren heb ik voor de Da-Vinci groep van Montessorischool Pallas Athene uit Amersfoort een Scratchles verzorgd. Oud-student Nienke de Jong, nu werkzaam op Pallas Athene had me gevraagd of ik hier aan mee wilde werken. Zij is met de kinderen bezig met een project over water in Nederland. De kinderen maken over dit project een animatie in Scratch. Voorafgaand aan deze les hadden de kinderen zich al verdiept in het onderwerp water in Nederland en hadden ze een begin gemaakt van een storyboard. De les die ik gaf was dus de derde in een reeks. In deze les heb ik hen handvatten gegeven om met Scratch een animatie te maken.

Mijn eerste evaluatie van deze les, twitterde ik gisteren ook al:


Een les van een uur is voor de kinderen precies lang genoeg maar om hen helemaal op weg te helpen net te kort, vond ikzelf.

Hoe heb ik het aangepakt?
In de les wilde ik verschillende aspecten aan bod laten komen. Belangrijkste doel van de les was natuurlijk dat kinderen in staat zijn om een animatie te maken in Scratch. Maar ik wilde hen ook nog een aantal andere zaken meegeven. Zoals leren dat debuggen hoort bij Scratch, dat ze een groot project leren opknippen in kleinere stukken (decompose) en dat ze een projectplanning kunnen gebruiken om overzicht te houden waar ze mee bezig zijn.

Het eerste doel heb ik, denk ik, behaald. De overige doelen niet of minder. De oefeningen rondom debuggen heb ik overgeslagen. Het opknippen en plannen heb ik alleen genoemd.

Ter introductie heb ik hen een animatie laten zien waarin ik mijzelf voorstel:




Het idee van voorstellen heb ik uit het boek Creative Computing van ScratchEd dat in het Nederlands is vertaald door Cobi van de Ven.

Daarna heb ik hen, met minimale instructie over Scratch (dit is Scratch, dit zijn de scripts, zo kun je ze aan elkaar klikken, zo kun je ze laten beginnen) Scratch laten verkennen. Ook deze opdracht komt uit het boek Creative Computing.

Opdracht 2 was bedoeld om de kinderen te wijzen op de Tips-functie in Scratch en hen kennis te laten maken met de scripts die helpen om een animatie te maken.

Ik merkte dat de kinderen bij opdracht 1 heel fanatiek al met Scratch aan de slag waren gegaan en het een beetje jammer vonden dat ze nu opeens een andere opdracht moesten doen. Voor een volgende keer zou ik de beginopdracht dus iets meer sturen en er voor zorgen dat het animeren van je naam meer aansluit op de verkenningsfase.

Ik merkte ook dat het handig was om steeds naar een tijdje gewerkt te hebben, gezamenlijk even een paar belangrijke hobbels door te spreken. Een paar bekende hobbels waar iedereen tegenaan loopt zijn:
* als ik mijn sprite heen en weer laten lopen tot de rand dan loopt hij op de kop terug

Oplossing is om de draaistijl van de sprite aan te passen.

* Ik wil mijn sprite laten draaien maar ik zie niets gebeuren:

Oplossing is dat je het draaien tijd moet geven:

Verder gaf ik in de loop van de les steeds meer tips over Scratch:
* Wist je dat een sprite verschillende uiterlijken kan hebben?

En dat je die uiterlijken na elkaar kunt laten verschijnen:

Materialen
Ik had een Scratchanimatie gemaakt waarin alle aspecten die aan bod moesten komen al verwerkt zaten:bewegen, muziek, wisselen van achtergrond, verschijnen en verdwijnen van teksten. Dat was heel handig om steeds weer erbij te pakken. Zo van: kijk, zo kun je het aanpakken.

Ik had ook een presentatie gemaakt om mijn verhaal te ondersteunen




En tot slot een website waarop alle opdrachten en linken te vinden waren die we gingen gebruiken.

Verder had ik nog een studio klaargezet voor de animaties. Maar daar hebben we geen gebruik meer van gemaakt.

Tot slot
Zoals je waarschijnlijk merkt, had ik meer dan genoeg materiaal om te gebruiken. Teveel voor een te korte tijd. Ik wilde aan teveel aspecten aandacht besteden (die heb ik deels overgeslagen). Een volgende keer ben ik in staat om het nog meer te stroomlijnen.

Belangstelling om ook leerlingen ook kennis te laten maken met Scratch? Ik kom graag langs om hen te helpen! Of samen met jullie na te denken over de mogelijkheden.

Gisteren was bij ons ook pakjesavond en voor die gelegenheid had ik een surprise gemaakt. Omdat het natuurlijk leuk is maar ook omdat ik graag mijn eigen ontwerpopdracht die ik aan studenten had gegeven verder wilde uitvoeren.

Opdracht 4 MakeyMakey

Nu ben ik nog helemaal niet zo bedreven in het maken van surprises dus dat was voor mij best ook nog een uitdaging. Het cadeau waarbij de surprise gemaakt moest worden waren zakdoeken. Daarbij dacht ik direct een een neus. En daarbij dacht ik direct aan een loopneus. Die heb ik dan ook gemaakt.

Hieronder het maakproces in een aantal foto’s weergegeven.

Eerste versie van de LEGO WE DO motor

Tweede versie in een Dubbelfrispak
MakeyMakey ligt in deze versie boven op de motor

Derde versie met MakeyMakey op zijn kant

Vierde versie waarin de LEGO WE DO motor iets naar rechts is verplaatst
Om ruimte te geven aan alle kabeltjes moest de motor verplaatst worden.

Kabels wegwerken

Bedieningspaneel om aan te sluiten op de MakeyMakey

Contact maken met zilverfolie

Kern van de surprise

Verdere surpriseontwikkeling

Scratchproject
Om de motor en het bedieningspaneel aan te sturen moest ik in Scratch nog een klein programmaatje schrijven.




Resultaat

Tot slot
Ik was voor dit jaar zeker tevreden over mijn surprise. Het was leuk om te maken en heb er met plezier een paar avonden aan besteed. Maar helemaal tevreden was ik er nog niet over. Zat in een paar dingen. Ten eerste wilde ik eigenlijk ook nog de Raspberry Pi er op aansluiten. In de Bendoobox zit deze. Dat wilde ik doen zodat de surprise nog mobieler zou zijn. Maar ik had geen monitortje dat ik er op aan kon sluiten. Te laat kwam ik online nog wel een display tegen die eventueel zou kunnen. Benieuwd of anderen ervaring hebben met displays.

Ten tweede dacht ik: om dit te maken gebruik ik een LEGO We DO set en een Makey Makey. Dat maakt de kern van de surprise toch al snel zo’n 200 euro. En eigenlijk zou het mooi zijn als het onder de maximaal 25 euro had kunnen blijven. Iemand al ervaring met goedkopere spullen die hetzelfde kunnen?

Ten derde was mijn surprise zelf nog voor verbetering vatbaar. Had nog niet echt gezocht online van te voren maar nu ik dat wel doe (zie hier, hier en hier en op nog veel meer plekken) dan had ik vast nog iets slimmers bedacht.

Ten vierde. Ik was best tevreden over mijn opdracht! Zou te vertalen moeten zijn naar het basisonderwijs. Betrokken vakken hierbij zijn dan Natuur en Techniek en Beeldende Vorming naar mijn idee. Benieuwd hoe anderen hier over denken.

Ten vijfde. Zoals ik al in mijn vorige blogpost liet zien, bieden thema’s mooie ontwerproblemen. Lijkt me leuk om met anderen na te denken over ontwerpproblemen voor onderbouw tot en met bovenbouw! Insteek daarbij is dan ontwerpend leren, creativiteit en computational thinking. Laat me maar weten!