We snappen niets meer van de apparaten waar we mee werken, de software die er op draait en de interactie die we ermee hebben. Het einde is nabij! Dat is misschien een tikkeltje gedramatiseerd. Toch maak ik me ernstig zorgen over ons verminderend inzicht in de complexiteit waar we dagelijks mee te maken hebben.
We leven met apparaten waar we onze grip op verliezen. Dagelijks zie ik mensen hun ongenoegen uiten naar de meest complexe systemen die ogenschijnlijk simpel lijken. Even een zoekopdracht uitvoeren in Google? Het starten van je auto? De beste route vinden? Allemaal ontzettend ingewikkeld en met maar één knop te bedienen.
De afgelopen decennia is de complexiteit van software en de onderliggende infrastructuur bijna exponentieel gestegen. Onze menselijke capaciteit om dit te begrijpen stijgt ook, maar minder gestaag. Velen van ons hebben het contact met de techniek al verloren, al hebben sommigen het misschien nooit gehad. We versimpelen systemen tot een punt waar we vastlopen en vanuit de ‘reguliere’ IT markt afhankelijk worden van de grote IT innovators. We moeten gaan inzien dat we in een software bubbel leven.
Complexe systemen
Wanneer we het hebben over systemen, kunnen we alles aangrijpen. Een voorbeeld hiervan haal ik uit dit interview op radio 1 met Martijn van Calmhout over de zwaartekracht. Hij stelt de vraag: “Zwaartekracht, snap je dat nu echt?”. Je begrijpt natuurlijk dat als je iets loslaat dat het naar de grond valt en dat een koelkast heel zwaar is. We kennen het, maar dit begrijpen is een illusie. Ditzelfde hebben we met IT, we denken te begrijpen hoe de systemen werken, maar vaak is dit enkel een externe observatie. Stel je een IT systeem voor als een zwarte doos. Je stopt er iets in en er komt iets uit, zoals een rekenmachine. 2 + 2 er in, 4 er uit. Maar als ik niet weet met welke beperkingen de software gemaakt is, weet ik ook niet waar het systeem toe in staat is of hoe het tot die 4 komt.
Laten we het voorbeeld van de rekenmachine even vasthouden; die is simpel, toch? Maar wat gebeurt er als ik een 2 intoets? Ogenschijnlijk simpel zie ik dit op mijn scherm, maar onder water moet er een hoop gebeuren om die 2 te tonen, van toetsenbord tot scherm. Dus begrijp je echt hoe die 2 op het scherm komt? En begrijp je vervolgens ook echt hoe 2 + 2 tot 4 komt?
Maar waarom zou je dat moeten weten? Je hoeft die rekenmachine inderdaad niet opnieuw te bouwen, die is gebouwd en die werkt. Dus bouwen we hier op voort, maken we iets nieuws waar deze rekenfunctionaliteit in zit. En zo hebben we op den duur allemaal bouwblokken waarmee en waarop we verder bouwen, het resultaat daarvan wordt ook weer een bouwblok. We verliezen dan het contact en de controle met waar het allemaal begon en bouwen we onszelf in.
Abstractie en versimpeling
Het probleem en de oplossing is: abstractie en versimpeling. Systemen worden groter en complexer. Geen monolithische software meer, maar modulaire oplossingen. Door de jaren heen hebben programmeurs ontzettend hard gewerkt om generieke componenten te bouwen en code te abstraheren. Zo kunnen er sneller oplossingen geïmplementeerd worden. Bibliotheken met functies en een grote verscheidenheid aan programmeertalen en frameworks resulteren onvermijdelijk in meer complexiteit.
Aan de zijde van de gebruikers vinden we de versimpeling in de visuele representatie. Aan de ene kant is dit een noodzaak om de complexe technologieën toegankelijk te maken, maar vaak is het doorgeschoten. Een schijnbaar simpel uiterlijk zorgt voor een illusie van begrip van de werking, waardoor het resultaat niet altijd aan de verwachtingen voldoet. Begrip is niet langer het doel van die versimpeling. De representatie heeft als doel aantrekkelijk gevonden te worden.
Maar is de ultieme versimpeling naar 1 knop niet juist makkelijk? Nee, juist complex! Om daadwerkelijk functionaliteit uit die knop te halen moeten er verschillende modi zijn waarin de knop zich kan bevinden. Wat weer verwarring met zich meebrengt: de knop (of aanraakscherm) kan meerdere keren worden ingedrukt, vastgehouden, naar links of rechts worden geveegd, met 1 of zelfs 5 vingers kunnen allemaal ingewikkelde combinaties worden uitgevoerd. Je zal ze maar moeten onthouden.
Tijdens het schrijven van deze blog kwam de zaterdagkrant van de NRC met daarin een artikel van prof. Robbert Dijkgraaf, niet te verwarren met Eibert Dijkgraaf van de testersethiek. Een citaat:
„ … Machines kunnen door kunstmatige intelligentie en robotica zelf leren, …. Ik voel dat we door een muizengaatje gaan en in een enorm veel grotere kamer terecht komen met ontzettend veel meer technologische mogelijkheden, die we nu moeilijk kunnen voorzien.”
„Spannend. Maar ik maak me er ook zorgen over. Verliezen we de controle? En wat krijgt de gemiddelde persoon er nog van mee? Veel gebeurt buiten ons zicht. We hebben het bijna niet meer door hoe we door technologie en vooruitgang worden gecontroleerd.”
Bron: https://www.nrc.nl/nieuws/2017/04/28/de-wereld-is-meer-verstrengeld-dan-we-denken-8463753-a1556461
Bijna niet te programmeren
Zoals normaal in de menselijke vooruitgang bouwen we voort op wat er is. Zo wordt er ook in de IT voortgebouwd op opgedane kennis. Zo wordt er gewerkt om herhaling van werk te reduceren, maar ook om steeds sneller meer functionaliteit te kunnen leveren. Er bestaat inmiddels een grote verscheidenheid aan talen die ieder weer hun eigen doel dienen.
Er wordt steeds makkelijker geroepen: “Doe mij nog zo’n knop, maar dan eentje die iets anders doet” of “implementeer je ook even een a-la-google zoekfunctie?”. Mocht je nieuwsgierig zijn naar hoe Google werkt, lees dan even deze uitleg. Als je niet begrijpt wat je vraagt, dan is de enige oplossing: vragen stellen om te begrijpen, voordat je vraagt.
De kennis en vaardigheden die een IT ‘er moet bezitten is de afgelopen jaren exponentieel gestegen. De gemiddelde ontwikkelaar moet kennis hebben van besturingssystemen, software architectuur, programmeertaal syntax, data structuren, algoritmes, tools en de ‘best practices’. De ontwikkelingen gaan zo snel dat in de code van veel applicaties verschillende lagen van voortgang te zien zijn. Het resultaat waarvan het onderhoud veel kennis en kunde vraagt.
IT bevat dan ook een voortdurend onderschatte complexiteit door een ogenschijnlijk visuele versimpeling. Zijn de systemen die ontwikkeld worden dan te complex? Niet voor de gebruiker. Die heeft een beperkte set aan vaardigheden nodig om iets te bedienen en dit verhoogt de adoptie en emotionele acceptatie van het product. Maar op het moment dat er iets gerepareerd, aangepast of toegevoegd moet worden, is er veel meer nodig. Ik hoorde ooit het volgende verhaal, sommigen misschien wel bekend. Het ging ongeveer zo:
“De motor van een groot schip stopte met werken. Niemand kon het probleem vinden, dus werd er een expert binnen gehaald. De expert observeerde de motor en liep naar zijn gereedschapskist, pakte een hamer en sloeg een keer hard op de motor. De motor startte en draaide als een zonnetje. De expert werd bedankt en gevraagd om de rekening. 10.000 Euro! Dat was wel erg veel voor een tikje met de hamer. Waarop de expert zei: “5 Euro voor het slaan met de hamer. 9.995 Euro voor de kennis en ervaring nodig om te weten waar je moet slaan”.”
Met het grote aanbod van vergelijkbare systemen moeten nieuwe systemen unieker, sneller, stabieler, flexibeler en intuïtiever zijn. Hoe kunnen we van ontwikkelteams verwachten dat ze die wensen omzetten van juiste probleemstelling naar een goede oplossing?
Onszelf voorbij
Net als Robbert Dijkgraaf maak ik me ook zorgen om deze technologische vooruitgang en onze controle hierop. We bouwen voort op een basis gelegd door specialisten die binnenkort met pensioen gaan; een basis onderhouden door een handvol experts. Een omgeving waarin verwacht wordt dat, wat we hebben een gegeven is en een constante vooruitgang behouden kan worden. We stijgen boven onszelf uit.
Verwacht ik dan dat iedereen nu alles gaat begrijpen? Nee, dat zal zeker niet nodig zijn. Maar we klagen en vragen te gemakkelijk, verwachten te veel voor te weinig. Natuurlijk heb je het recht om lekker te klagen, maar verwacht er geen verandering uit. Systemen als het weer, spoorwegen en zoekmachines zijn dusdanig complex dat we er best wat meer ontzag voor mogen hebben, voor de rest hebben we specialisten.
We hebben die specialisten nodig, nu harder dan ooit. Niemand kan meer simpelweg programmeur zijn en alles bouwen wat de wereld van techniek ons te bieden heeft. Dit vraagt om meer specialisten aan de kant van de IT, wat vraagt om meer samenwerking en communicatie.
Maar net als natuurkundigen bij zwaartekracht, moeten wij met z’n allen in de IT niet blijven leven in de illusie dat we alles kunnen begrijpen. Geef een specialist niet een opdracht, maar stel hem een vraag. Leg het probleem neer bij diegene die de kennis en de kunde hebben om zich het probleem eigen te maken om met een technisch zuivere oplossing te komen.
Als we blijven doen alsof we de IT systemen begrijpen, dan zijn we in de IT niet beter bezig dan de banken in de financiële wereld en leven we in een bubbel, die op knappen staat.