Wat was de vraag ook weer, ChatGPT?

Alleen wie de laatste twee maanden onder een steen leefde kan de tomeloze opmars van ChatGPT ontgaan zijn. Dit is artificiële intelligentie die het begrip hype herdefinieert. Scholieren gebruiken het kennelijk al massaal voor hun huiswerk en vallen prompt door de mand met opstellen zonder belabberde grammatica en spelfouten. Iedereen heeft het erover, dus ik ben rijkelijk laat. Commentaren lopen uiteen van techno-euforisch, stoïcijnse berusting tot lichte paniek over de toekomst van onze banen en het lot van de mensheid in het algemeen. Ik heb geen glazen bol, maar mijn onderbuik zegt me dat onze baan als ontwikkelaar veilig is. Voorlopig dan.

Dankzij mijn achtergrond in taalkunde en korte carrière als vertaler was ik altijd al geïnteresseerd in automatische vertaling. Maar ik ben nog steeds allesbehalve onder de indruk van de huidige state of the art. De computer slaat de plank nog te vaak finaal mis. Dat hoeft niemand te verbazen. Perfecte beheersing voor mensentaal door een machine is de heilige graal van kunstmatige intelligentie, en niet de zelfrijdende auto. Als die net zulke flaters sloegen als Google Translate zouden ze elkaar voortdurend in de prak rijden op het testcircuit.

Zeesluis van IJmuiden

De intuïtie van de moedertaalspreker voor wat wel of niet een betekenisvolle zin is hoef je niet op school te leren. Daarmee begin je al als baby. Scholen zijn een relatief nieuwe uitvinding in de geschiedenis van de mensheid, en toch konden we elkaar al tienduizenden jaren prima verstaan – binnen hetzelfde dorp, dat wel. Dit vermogen ligt aan de basis van onze natuur. We zijn gemaakt om te praten. Het brein kent geen duidelijke scheiding in software en hardware, en dat maakt mensentaal enorm lastig te vangen in algoritmes.

Machines voelen zich veel meer thuis in logische systemen die wij bedacht hebben, met voorspelbare regels zonder uitzonderingen. Er is geen enkel bordspel meer waar AI niet de vloer met je aanveegt. Dat doet trouwens geen greintje af aan de indrukwekkende mentale krachtpatserij van professionele schakers. De computer is er gewoon beter in, net als een hert harder kan rennen en een zalm beter in zwemmen is. Het verpest ook niet onze zin om met elkaar te wedijveren, voor de lol of in de Tour de France. Zolang het maar eerlijk gaat.

Maar de verbluffende vondsten van AI zijn vernuftig jat- en plakwerk. Het kan de aankleding verzinnen van de kamer waar de originele Giaconda poseerde voor da Vinci, maar het is nog steeds de output van een algoritme en daarmee voorspelbaar. Voorspelbaar is saai. Grote kunst ontstaat juist uit de grillige combinatie van alledaagse elementen (woorden, noten, akkoorden of penseelstreken) die samen meer zijn dan de som. Dat kun je niet voorspellen en al helemaal niet forceren. Weinig artiesten zijn in staat om consistente topkwaliteit af te leveren. Ze hebben ook hun mindere dagen.

Wanneer AI een vervolg op Macbeth kan schrijven, of een nieuw origineel Beatles album dat zich kan meten met Shakespeare respectievelijk McCartney op hun best, dan zij we pas goed in de aap gelogeerd. De mensheid kan dan wel inpakken. Ik hoef het niet mee te maken, en ik zie het niet snel gebeuren. Laten we de lat dus wat lager leggen. Het kan ons vast helpen met Java code schrijven, toch?

Dat kan ChatGPT zeker. De feestelijke, competitieve sfeer rond de jaarlijkse Advent of Codeprogrammeerwedstrijd kreeg een knauw toen bleek dat het orakel behoorlijk goed was in de dagelijkse breinkraker. Het verbaast me niks. Al deze puzzels zijn variaties op problemen die we al lang opgelost hebben en verspreid over het internet voor het oprapen liggen. Dat is de kracht van AI: opsporen, sorteren en verpakken van zulke collectieve kennis.

Ik hou niet van puzzels en was nooit goed in wiskunde, dus de Advent of Code is niet aan mij besteed. Ik ben wel eens afgewezen tijdens een sollicitatie omdat ik niet snel genoeg een linked list implementatie kon neerpennen. Mijn gesprekspartner beschouwde dat als basiskennis. Ja, het is inderdaad basaal en daarom hebben we het al lang geleden opgelost, zodat we ons met grotere abstractieniveaus kunnen bezighouden. Ik wil het niet opnieuw hoeven op te lossen, ook niet als proeve van bekwaamheid. Er zijn vast niches binnen ons vakgebied waar je zulke vaardigheden elke dag nodig hebt, maar ik heb er niet in gewerkt. Ik heb ooit het bewijs gezien voor de stelling van Pythagoras op een schoolbord in Venlo in de jaren tachtig. Dat vind ik genoeg.

Terug naar ChatGPT. Ik maakte een account aan en begon met een simpele vraag waarvan ik aannam dat hij er wel raad mee wist. “Write me a piece of Java code that checks if a String is in camel case”. Controleer of een stukje test zonder spaties ergens een kleine letter gevolg door een hoofdletter bevat zoals inDitVoorbeeld. Uiteraard kwam er een prima antwoord terug. Maar wat een verspilling van processorcapaciteit en bandbreedte! Van alle verstandige opties koos ik de meest luie, verkwistende en minst onderhoudbare. Ik had eerst moeten kijken of zo’n check niet allang in een standaard String utility zat, wellicht in Java zelf. Ik had het ook zelf kunnen schrijven in tien minuten, maar dat was te saai. In plaats daarvan wendde ik me regelrecht tot het orakel.

Het zou me niets verbazen als deze tien regel regelrecht uit een Apache commons library kwamen. Daar hadden ze moeten blijven, netjes geïmporteerd als een afhankelijk, samen met tien andere functies, her en der bijeengesprokkeld en toegevoegd aan je eigen StringUtils.java. Ja, ik weet dat volmaakt hergebruik een utopie is. We schrijven heus niet pas een nieuwe regel code als we zeker zijn dat het een originele oplossing voor een nieuw probleem is. Je moet niet dogmatisch zijn over do not repeat yourself. Maar tools als Github Copilot en ChatGPT zijn als StackOverflow in de hoogste versnelling. Ze maken ondoordacht knip- en plakwerk veel te makkelijk waar verstandig hergebruik geboden is. Ik pleit voor meer drop: don’t repeat other people.

Uit zakelijk oogpunt is nieuwe code vooral een kostenpost, vooral in complexe organisaties met een hoog verloop. Senior ontwikkelaars hebben veel met code te maken, maar schrijven er verrassend weinig van. De meeste tijd zijn we bezig om wat er al is in goede staat van paraatheid te houden en de jonge honden in toom te houden. Dat is ook prima. Als je graag veel code voor de lol wil schrijven doe je dat maar in je eigen tijd met een hobbyproject.

Ik kan in mijn dagelijkse werk ook niet veel momenten aanwijzen die ik met een gerust hart aan AI zou kunnen overlaten. Vaak raak ik een hele dag geen regel code aan, hoe graag ik het zou willen. Coderen is namelijk het formuleren van het antwoord, en ze hebben me nog niet verteld wat de vraag is. Ja, de projectmanager heeft een kladje in de mail gezet, maar ik wil de vraag in heldere mensentaal, geformuleerd op een manier die voorkomt dat we vanaf de eerste dag al iets bouwen dat niet de bedoeling is. En daar gaat ChatGPT ons niet bij helpen.

Er is een absurde, beroemde scene uit de Hitchhiker’s Guide waar supercomputer Deep Thought het kernachtige antwoord gevonden heeft op de ultieme vraag, na zeven miljoen jaar rekenen. Het antwoord is 42. Gebrand om een antwoord te vinden waren we vergeten hoe complex de vraag eigenlijk was.

Zelfs als AI de meeste antwoorden en vragen kan formuleren, dan wil je toch niet met een beker koffie naar een scherm staren en elk kwartier drie handmatige aanpassingen doen? Daar is toch geen lol aan?

Misschien is het helemaal niet zo gek dat ontwikkelaars nu de hete adem van een techniek in hun nek voelen die hun broodwinning in gevaar brengt. Dat hebben we andere sectoren immers al een halve eeuw aangedaan. We zijn heus niet zo gemeen dat we andermans professionele ervaring graag obsoleet maken, maar automatiseren om het automatiseren is gewoon zo leuk. En daarmee nemen we soms veel te makkelijk aan dat we anderen een plezier doen door een taak weg te nemen die alleen in onze kortzichtige ogen monotoon en triviaal is. Een praktisch voorbeeld.

Acht jaar geleden werkte ik voor het Havenbedrijf Rotterdam in een team dat software bouwde voor de scheepsverkeersleiding. Een van de uitbreidingen was een module waarmee de sluiswachters in IJmuiden visueel de passages van de schepen door het Noordzeekanaal van en naar Amsterdam konden beheren. Dit is een waterwerk waar je U met een hoofdletter tegen zegt. Elk schip krijgt naar zijn grootte een tijdslot en plaats toegewezen in een van de zes sluizen. De verkeersleiding wil zo veel mogelijk schepen tegelijk schutten, zoals dat heet, want het is een tamelijk traag proces en tijd is geld. Maar het moet ook veilig.

Als ontwikkelaar wil ik dat de software elk binnenkomend schip een tijdslot en locatie in de sluis toekent, zodat de capaciteit optimaal benut is en hiermee de doorstroming optimaal. Mooi verwoord, maar dat wilden we vooral omdat het zo’n coole opdracht was.

Maar die user story ging mooi niet door. De verkeersleiding wilde niet meer dan een grafische weergave van de schepen op schaal die ze met de hand in een van de zes sluizen konden slepen.

Als ontwikkelteam hadden we het probleem over-geabstraheerd. We kenden de precieze omvang van sluizen, zelf van elk schip uit de maritieme database. Dit was niet meer dan een variant op het klassieke Travelling Salesman Problem, alleen stukken simpeler. En een oplossing had misschien 90% van de tijd goed gewerkt, maar wat wisten we nu eigenlijk? Was de lading eigenlijk van invloed? Diepgang zal er toch zeker wel toe doen? En harde wind? Dan mogen de schepen vast niet te knus naast elkaar liggen. Nog een paar van die chaotische parameters en je hebt een epische user story.

De verkeersleiding wilde een simpel systeem niet om ons werk te besparen of hun werkgever geld. De planning maken was juist een hoogtepunt van de dag, een gelegenheid om hun intuïtie en jarenlange ervaring fris te houden. Dat lieten ze zich niet afpakken. Ik hoop dat ze het nog steeds met de hand blijven doen.