Vibe Coding

Toen ik begon met programmeren, zo rond de eeuwwisseling, vond ik het maar wat fijn dat er speciale editors waren die de programmeertaal begrepen en deze zo konden weergeven dat die beter leesbaar was dan wanneer je het gewoon, zwart-op-wit, in een normale teksteditor zou bewerken. Ik weet niet meer welke inmiddels doodnormale features ik vanaf het begin al tot mijn beschikking had, maar automatisch uitlijnen van de code, autocomplete en met een ctrl-klik of cmd-klik van bestand naar bestand springen waren al gauw essentieel. Vooral het gegeven dat je editor, of 'IDE' zoals we het ook gingen noemen (voor Integrated Development Environment, een applicatie waarmee je meer doet dan alleen bestanden bewerken), een functienaam waarvan je de eerste tekens begint te typen kon aanvullen was superhandig. Je kon veel sneller programmeren, gewoon af en toe op tab drukken en hoppa! (Ik vraag me nog steeds af waarom er developers zijn die zweren bij editors die dit allemaal niet bieden, maar ieder z'n ding, natuurlijk.)

Jarenlang was dat het wel een beetje. Natuurlijk kwamen er meer intelligente formatters en kreeg je hints in de code over wat er mogelijk fout was, een beetje zoals de rode kringeltjes die in een tekstverwerker onder onbekende of verkeerd gespelde woorden staan, maar met tab een functienaam aanvullen was het wel zo'n beetje, qua intelligentie.

Totdat Copilot op de markt kwam. Daar zat AI in. Die kon niet alleen je functienaam aanvullen, maar hele regels code, en toen hele functies, en toen hele implementaties. Alles door alleen maar op tab te drukken!

Mijn ervaring met een dergelijke tool (ik heb nooit Copilot gebruikt, maar wel concurrenten) kwam pas laat op gang; toen presentators op conferenties tijdens live demo's af en toe hun AI-suggesties moesten wegklikken omdat dat niet was wat ze aan ons wilden laten zien (het was op dat punt al geen nieuwigheid meer), deed ik het meeste gewoon nog met de hand. Maar toen ik éénmaal zoiets had, wow, wat cool. Je hebt iets in gedachten, begint te typen en hop, je editor-met-ai doet een suggestie die eigenlijk precies is wat je wilde. Dat voelde als magie.

Copilot, toen het voor het eerst beschikbaar kwam als tool van GitHub (tegenwoordig stopt Microsoft het overal in, maar toen was het nog puur een GitHub-tool) was gebaseerd op GPT, van een versie voordat ChatGPT uitkwam. Het was misschien wel de eerste zichtbare glimp van de huidige AI-hype.

Tegenwoordig doet een AI-programmeertool meer dan een beetje naar je code kijken en met behulpzame suggesties komen. ChatGPT, en daarmee het voor iedereen beschikbare concept van een AI-chatbot waar je mee kunt converseren, is nu grofweg 3,5 jaar oud en chatbots kunnen al een tijdje zelfstandig programmeren. En hoe zelfstandig ze dat kunnen is continu aan het veranderen. Een gebruiker hoeft eigenlijk niets meer zelf te kunnen: leg gewoon aan je AI-editor (want alleen een eenvoudige chatbot is net niet voldoende) uit wat je wilt, en hele applicaties worden uit het niets in elkaar gezet. Je kunt het ter plekke uitproberen, suggesties aangeven, de nieuwe functionaliteiten beoordelen, weer suggesties geven en zo steeds verder itereren, zonder je druk te maken over de onderliggende code.

Het wordt 'vibe coding' genoemd, en hoewel dat allemaal erg leuk is, is het soms ook hoe er wordt gerefereerd naar hoe ouderwetse developers nu steeds meer met AI beginnen te doen. Ook ik; mijn AI-aanvullingstool is allang in onbruik geraakt, want met tools als Cursor en Claude Code laat ik de 'agent' gewoon doen wat ik wil dat die doet. Ik vraag, de agent draait. Maar ik vind niet dat ik aan het vibe coden ben.

Bij vibe coding heb ik het idee dat het draait om ofwel een developer die maar wat aanrommelt (gewoon, voor de lol), of iemand die geen programmeerkennis heeft, die dankzij deze technologie toch in staat is iets werkends te krijgen. Vibe coding is eigenlijk niet-coding, want je kijkt niet naar de code. Het zou, door al je opeenvolgende prompts, een compleet zooitje kunnen worden voor een developer die vervolgens met het eindproduct moet werken, maar het idee is dat dat niet erg is, want die developer is toch ook weer een AI-agent, dus wat maakt het uit. Vibe coding gebruik je in zinnen als "dat is even snel in elkaar gevibecode". Zo'n zin is per definitie denigrerend en vaak ook zo bedoeld.

AI voor programmeren is heel waardevol. Hoe waardevol precies, zijn mijn collega's en ik momenteel op dagelijkse basis aan het ontdekken. Het lijkt in ieder geval flinke winst op te leveren bij het uitvoeren van programmeertaken op het punt van het schrijven van code. Dat kun je vergelijken met hoe reguliere tekst in een chatbot veel sneller tot je komt dan je kunt antwoorden; er is tijdswinst in het pure schrijfwerk, en mijn gebruik van AI in programmeren is vooralsnog dat: ik weet wat ik wil en laat de agent dat doen. Ik denk, agent schrijft. Of: ik chat met de agent over een onderwerp, laat achtergrondinformatie analyseren, vraag om mogelijke benaderingen, maak keuzes en laat de agent aan de slag gaan. Dat is alweer een stap verder, maar dan nog zit de grote winst in de snelheid waarmee je iets gedaan krijgt.

Waar het minder goed mee helpt is het beoordelen van code. Een AI agent kan, als die niet onder controle gehouden wordt, eindeloos code blijven schrijven. Maar voordat je die in gebruik neemt moet het allemaal worden beoordeeld. Natuurlijk: dat kun je een AI agent laten doen. En dat doen we ook; het agentic framework (dat is onze inrichting die de AI agents volgens een bepaalde werkwijze laat werken) dat we gebruiken bevat een reviewer-agent die beoordeelt wat een developer-agent heeft gebouwd. Dus dat is fijn. Maar hoe veel agents je ook loslaat op je programmeeropdracht, voorlopig moet je er als mens nog altijd naar kijken. En daar zit een bottleneck; zakelijk gezien iets dat een manager wellicht zo snel mogelijk ook helemaal door AI wil laten doen, maar professioneel gezien iets dat veel belangrijker wordt dan het programmeerwerk. Het is waar de mens beoordeelt wat de agent heeft gedaan. Waar wordt bekeken of er niet verkeerde keuzes zijn gemaakt, of het allemaal nog wel (door mensen, want dat is nog steeds het uitgangspunt) onderhoudbaar is, of het wel veilig is, et cetera.

Het is een interessante tijd, nu mijn programmeerwerk, waar syntax highlighting en tab completion vroeger superhandig waren en nu normaal zijn, langzaam verandert in agents laten doen wat je zelf veel trager zou doen. Als developer wil je dat onder controle houden, zorgen dat je iets goeds oplevert. Er is geen vibe; het is gewoon een evolutie van het werk. Het is geen vibe coding. Het wordt agentic programming genoemd, mooie serieuze term, misschien een beetje pretentieus, maar het verschil is duidelijk: gebruik de AI agent als speler in het spel, waarbij je de zetten begrijpt, en er is van vibe coding geen sprake.