Creatief programmeren

Virtual Reality Learning Lab

Creatief programmeren

Laatste column voor het vak Wikisofie.

In deze column wil ik een licht werpen op de volgende stelling:

 Door leden van de samenleving toegang te geven tot een gemeenschappelijk fonds van probleemoplossingen en handelingsmogelijkheden, wordt enerzijds de cognitieve druk op het individu ontlast, maar zou de samenleving anderzijds ook aan creativiteit en originaliteit kunnen inboeten.

Laten we hiervoor kijken naar een cognitieve taak waarbij het oplossen van problemen centraal staat: het programmeren van software. Gedurende de afgelopen decennia is het proces van programmeren steeds verder komen te staan van het aansturen van fysieke processen in de hardware. Door de creatie van hogere programmeertalen kan de computer op een abstractere wijze worden aangestuurd. In plaats van directe instructies aan de processor te geven in de vorm van nullen en enen, kunnen we gebruik maken van ingebouwde functies als if-statements en for-loops. Deze abstractie van de onderliggende processen is nog verder doorgezet met het object-georiënteerd programmeren en de opkomst van grafische programmeeromgevingen. Door deze laatste ontwikkeling is het jargon van ‘het schrijven van een programma’ achterhaald geraakt. In omgevingen als Max/MSP, Labview, of Google’s nieuwe Android gebruikerstool Appinventor, sleep je grafische elementen rond op een virtueel bureaublad en leg je functionele verbindingen tussen de verschillende modules aan.

Software die geproduceerd is in een hogere programmeertaal steunt voor een belangrijk deel op de werkzaamheden van de ontwikkelaars van de programmeertaal. Een deel van de oplossing die het programma levert voor het gestelde probleem ligt besloten in hoe de programmeertaal onderliggende processen aanstuurt . Door het gebruik van de hogere programmeertaal hoeft de programmeur niet na te denken over deze onderliggende structuur, waardoor de cognitieve druk op de individuele programmeur wordt verminderd.

De opkomst van het Web 2.0 zet deze vermindering van cognitieve druk op het individu voort. Op het Web zijn talloze fora te vinden waar programma’s in welke programmeertaal dan ook worden besproken. Waarschijnlijk heeft een andere gebruiker al eens een soortgelijk probleem moeten oplossen als jij; mogelijk is dit programma zelfs openlijk beschikbaar gesteld. Of je vindt een handige library met voorgeprogrammeerde functies die relevant zijn voor het probleem dat je moet oplossen.  Of misschien kun je een deel van de taak laten uitvoeren door een ander programma, met welke je communiceert via een online API. In plaats van zelf een functie te schrijven die grafieken maakt van data, kun je hiervoor bijvoorbeeld ook de Google Chart API gebruiken. Wanneer je een webshop wilt op zetten hoef je geen tijd meer te besteden aan het schrijven van de code hiervoor. Je kunt de code van een bestaande webshop gebruiken, of nog handiger: gebruik de Google Check-out API.

De online beschikbare mogelijkheden bieden gedeeltelijke probleemoplossingen op een presenteerblaadje aan, daarbij vergezeld van handige adviezen over de implementatie van de code, mogelijke foutmeldingen in diverse besturingssystemen, een inleiding tot het aanroepen van de API, enzovoort. Het is niet verwonderlijk dat programmeurs graag gebruik maken van deze aangereikte oplossingen, zeker gezien de aanwezigheid van economische prikkels als deadlines en prestatieafhankelijke vergoedingen. Hiermee maken programmeurs gebruik van “een gemeenschappelijk fonds van probleemoplossingen en handelingsmogelijkheden”. Mede doordat deze verzameling wordt doorzocht met behulp van hulpmiddelen die automatisch informatie filteren, zoals zoekmachines, bestaat het gevaar van uniformisering. Nicholas Carr omschrijft deze eigenschap van zoekmachines in zijn boek The Shallows uit 2010 als volgt:

“[they] tend to serve as amplifiers of popularity, quickly establishing and then continually reinforcing a consensus about what information is important and what isn’t.

De symptomen van dit gevaar zijn duidelijk. Wanneer je een programma moet schrijven waarbij een taak als gezichtsherkenning moet worden gedaan, zul je hier niet snel zelf een algoritme voor schrijven. In plaats daarvan google je wat, waarna je ergens in de eerste hits de benodigde oplossing zult vinden. Aangezien veel andere programmeurs een soortgelijke aanpak hebben, zal er nauwelijks variatie zijn in de verschillende oplossingen voor een dergelijke taak. Hierdoor ontstaat een eenheidsworst, waar iedereen het populairste algoritme gebruikt, bepaald door de wisselwerking tussen zoekmachines en gebruikers.

Terwijl ik dit stuk aan het typen ben laten mijn medestudenten de andere kant van het verhaal zien. Naast me maakt een groepje studenten een programma in een visuele programmeeromgeving dat het proces van beslissingen in videobewerking automatiseert. Anderen schrijven een spel dat bediend kan worden met de Kinect, de in 2010 uitgebrachte bewegingssensor voor de Xbox. Zonder gebruik te maken van het ‘gemeenschappelijke fonds van probleemoplossingen’ was dit de studenten waarschijnlijk nooit gelukt. Ze maken gebruik van de onderliggende structuur van een visuele programmeertaal, een library met functies om de data van de Kinect te interpreteren en allerlei documentatie en bestaande code voor hun projecten. Hierdoor konden de studenten de nieuwste technieken gebruiken en zo hun creativiteit inzetten om op een hoger niveau nieuwe dingen te doen.

In het algemeen denk ik dat we kritisch moeten zijn over hoe we omgaan met informatie en probleemoplossingen op Internet. Het netto effect van dit fonds van probleemoplossingen op de creativiteit binnen het voorbeeld van programmeren is mijns inziens positief. Van andere taken kan echter niet worden verwacht dat deze geheel analoog zijn hieraan. Bij de in deze column besproken activiteit van programmeren is het gevaar van uniformisering reëel. Uit dit voorbeeld blijkt echter ook dat de vermindering van de cognitieve druk op het individu als gevolg heeft dat het individu zijn of haar creativiteit kan gebruiken om de probleemoplossingen op nieuwe manier toe te passen. Bij bepaling van de invloed van het Internet op de creativiteit bij een bepaalde activiteit, zullen deze aspecten tegen elkaar moeten worden afgewogen.

 

Leave a Reply

Your email address will not be published.