Computational Thinking

Computational Thinking is een verzameling van verschillende probleemoplossende vaardigheden gebaseerd op de vaardigheden die nodig zijn om een programmeur te zijn. Deze vaardigheden zijn echter niet alleen nuttig bij het programmeren, ze zijn ook toepasbaar buiten de informatica.

De zes probleemoplossende vaardigheden waar we in het project mee werken, gebaseerd op een compilatie van Bocconi et al. (2016), zijn:

Voor een betere uitleg gebruiken we hier een alledaags voorbeeld om de individuele mogelijkheden te beschrijven.

Algoritmisch denken:

Een recept om soep te maken is in de kern niets meer dan een algoritme – een stapsgewijze gids om een doel te bereiken. Algoritmisch denken is nodig wanneer we zelf een recept willen maken.

Ontleding:

Bij het maken van het recept is het nodig om het grote probleem op te splitsen in kleinere problemen. We kunnen ons bijvoorbeeld eerst afvragen welke ingrediënten we willen gebruiken en dan nadenken over de verschillende manieren om de groenten te bereiden.

Automatisering:

Groenten snijden en soep roeren zijn taken die repetitief zijn en weinig menselijke input vereisen. In plaats daarvan kan de taak worden overgedragen aan een machine.

Debuggen op:

De mogelijkheid om te “debuggen” heeft betrekking op twee verschillende startpunten van het proces:

  1. Aan de ene kant is het de mogelijkheid dat als het resultaat onjuist is (bijvoorbeeld een soep die niet lekker smaakt), we de fout kunnen vinden en corrigeren.
  2. Aan de andere kant is het ook de mogelijkheid om fouten op te sporen nog voor de uitvoering van het recept en deze ook te corrigeren.

Generalisatie:

Een oplossing die werkt voor een bepaald probleem kan in sommige situaties worden uitgebreid zodat het werkt voor een hele klasse van vergelijkbare problemen. Om bij het soepvoorbeeld te blijven: Als we eenmaal weten hoe soep werkt, kunnen we een vergelijkbare aanpak gebruiken voor andere soorten soep.

Abstractie:

Het herkennen van patronen in complexere processen en deze abstraheren tot de essentie is altijd een van de belangrijkste menselijke vaardigheden geweest bij het oplossen van problemen. Dit vermogen om te focussen op de kern van de logica in plaats van overweldigd te worden door elk technisch detail is cruciaal bij het programmeren. We komen echter ook veel abstracties tegen in de analoge wereld. Zo kan een formeel geschreven recept voor het koken van een soep vaak verder worden geabstraheerd en gepresenteerd, bijvoorbeeld in de vorm van een stroomschema dat alleen de kernlogica weergeeft en alle overbodige details weglaat.