zondag 19 april 2015

Wat is computational thinking?

Wat is computational thinking? Deze term hoor ik steeds vaker als het gaat over programmeren, robotica en 3D printen in het onderwijs. Afgelopen vrijdag heb ik zelfs nog gebrainstormd over een mogelijke leerlijn computational thinking (zie mijn vorige blogbericht). Maar wat is het precies?

Wikipedia
Op Wikipedia is helaas geen Nederlandstalige pagina van computational thinking. Ik neem hieronder de vrijheid om een deel van het Engelstalige artikel op Wikipedia te vertalen. Ik hanteer de Engelse term, aangezien deze (tot nu toe) steeds in Nederland wordt aangehouden:

Computational thinking (CT) is een proces dat een oplossing voor open problemen generaliseert. Open problemen vragen om volledige, betekenisvolle oplossingen, gebaseerd op meerdere variabelen. Computational thinking vereist het ontleden van het gehele beslissingsnemingsproces, de betrokken variabelen en alle mogelijke oplossingen, waardoor je verzekert bent dat de juiste beslissing genomen wordt op basis van de corresponderende parameters en beperkingen van het probleem. Computational thinking kan gebruikt worden om algoritmisch grootschalige problemen op te lossen en wordt vaak gebruikt om grote efficiëntieverbeteringen te realiseren.

Belangrijke onderdelen van computational thinking zijn onleden, datarepresentatie, generaliseren en algoritmes. Door een probleem te ontleden, de betrokken variabelen te identificeren door middel van datarepresentaties en algoritmes te creëren, ontstaat er een algemene oplossing. Deze algemene oplossing is generalisatie die gebruikt kan worden voor vele variaties van het initiële probleem.

Deze afbeelding is een bewerking.
Het origineel staat op http://www.bbc.co.uk/education/guides/zp92mp3/revision

Wikikids
Hoewel bovenstaande definitie volgens mij een aardig beeld geeft wat computational thinking nu inhoudt, is het ook nog behoorlijk abstract. Of in elk geval in ingewikkeld Nederlands. Ook op Wikikids.nl bestaat (nog) geen pagina over computational thinking, maar ik probeer hieronder een uitleg te geven die wellicht geschikt zou zijn voor Wikikids:

Computationeel denken (of robot-denken) is een manier om problemen op te lossen. Dit kan een eenvoudig probleem zijn, zoals hoe kan ik een peer eten? Of een ingewikkeld probleem, zoals hoe kan ik een wereldreis maken?

Door computationeel denken kun je de oplossing zo vertellen dat een computer (of een mens) het begrijpt. Dus in kleine logische stapjes.

Computationeel denken bevat vaak de volgende onderdelen (let op, dit is geen stappenplan!):
  • Goed nadenken over alle informatie.
  • Informatie in logische stukjes verdelen.
  • Een schema of tekening van de informatie maken.
  • Informatie versimpelen.
  • Mogelijke oplossingen bedenken en uitproberen.
  • Oplossingen automatiseren door algoritmisch te denken (een stroomschema maken).
  • De oplossing algemeen maken en toepassen op soortgelijke problemen.



Als voorbeeld staat hieronder het eenvoudige probleem van het eten van een peer in stapjes uitgelegd:
  • Pak een aardappelschilmesje in je voorkeurshand.
  • Pak de peer in je andere hand.
  • Schil de peer.
  • Snijd de peer in stukjes.
  • Verwijder het klokhuis.
  • Gooi de perenschilletjes en het klokhuis bij het GFT-afval.
  • Eet de stukjes peer.
  • Was je handen.

Natuurlijk is bovenstaand lijstje niet perfect, sommige mensen eten een peer liever ongeschild! Maar het geeft wel een aardig beeld van hoe het probleem van het eten van een peer in kleine stukjes opgeknipt kan worden. Je kunt je nu hopelijk voorstellen hoe deze je deze oplossing ook kunt gebruiken voor het eten van een appel, kiwi of paprika. Je zal er dan achter komen dat niet alle stapjes altijd hetzelfde zullen zijn...


Conclusie
De afgelopen maanden wordt de term computational thinking steeds vaker genoemd als belangrijk (nieuw) onderdeel van het Nederlands onderwijs. Onderwerpen zoals programmeren, robotica, 3D printen zijn ontzettend populair. Ik denk dat het goed is om tot een (gezamenlijk) beeld te komen van wat computational thinking precies inhoudt en hierboven doe ik een eerste poging om het (ook voor kinderen) begrijpelijk te maken. Bewust gebruik ik hierbij even geen theoretische modellen en indelingen zoals sommige instanties al hebben gemaakt. Ik ben echt op zoek naar de inhoud van het begrip zelf. Ik ben erg benieuwd naar reacties en aanvullingen op dit blogbericht!

6 opmerkingen:

  1. Hallo Don
    Ik weet niet of je dit artikel kent mbt computation
    http://ubiquity.acm.org/article.cfm?id=1922682

    Koos (CodeUur )

    BeantwoordenVerwijderen
  2. Dag Koos,

    Ik ken het artikel niet. Ik heb het snel gescand. Volgens mij zit ik er dus niet ver naast, of wel?

    Groet,

    Don

    BeantwoordenVerwijderen
  3. Hallo Don
    In UK is een docent PO die zijn ervaringen mbt het Engelse curriculum programmeren deelt op een blog
    http://philbagge.blogspot.nl/ Ook zit er een schat aan materiaal achter.
    Vr Gr
    Koos

    BeantwoordenVerwijderen
  4. Dank voor de duidelijke uitleg.
    Zelf had ik het woord computable in eerste instantie vertaald met logisch redeneren / "berekenend" (niet in de betekenis van sluw) denken, maar na het lezen van uw uitleg, begrijp ik dat we voorlopig beter de Engelse term kunnen blijven hanteren, omdat die behalve de denkwijze / denkstappen ook handelingen en vaardigheden omvat.
    Logisch denken lijkt me wél de belangrijkste component van computational thinking. Zonder logica mogelijk geen aritmetica, dynamica, kinematica, technika,robotica en "futurica";-)

    BeantwoordenVerwijderen
  5. Doet me toch wel erg denken aan model DI voor strategisch handelen in een nieuw jasje.

    BeantwoordenVerwijderen
    Reacties
    1. Hoi Karin,

      Dank voor je reactie! Het zou heel goed kunnen dat er (veel) overlap is. Heb je een bron/artikel voor me dat volgens jou een goed beeld geeft van het DI model voor strategisch handelen?

      Overigens, als je meer wil lezen over computational thinking, dan is het eerste artikel hier: https://www.cs.cmu.edu/~15110-s13/Wing06-ct.pdf

      D.

      Verwijderen