Het was vrijdag 27 februari 2026, toen ik herboren werd. bro. Ik ben nu een vibe coder. bro. fr fr.
Het lukte me1 om in te loggen op een claude code terminal. Dit is een CLI-app die toegang heeft tot een groot taalmodel2 (LLM), met de bedoeling het ontwikkelwerk voor je te doen. Je vraagt het om wijzigingen te maken, en het doet het voor je. Ik vertrouwde het niet, en vertrouw het nog steeds niet met toegang tot mijn machine. Dus ik heb het opgesloten in een container. Ik vroeg het om wat front-end kaartfuncties te implementeren, het deed het goed. Nu vroeg ik me af of het backend-ontwikkeling kon doen. Haskell-typefouten zijn een stuk moeilijker dan React-blokken uitspugen. Dus ik had vrij lage verwachtingen dat het (enig) Haskell kon doen. Ik had het mis.
Het is goed in Haskell. Er zijn geen fouten. Of beter gezegd, de compiler wijst ze aan voor claude, en het is slim genoeg om voortgang te maken op de compilefouten. Dus het doet wat je wilt dat het doet. En het doet het snel.
Ik vroeg het om basement uit het memory-pakket te halen en het ram-pakket te maken.3 Dit is op zich niet moeilijk, het is gewoon behoorlijk wat uitzoekwerk en het oplossen van vele compilefouten. Het deed dat zonder problemen.
Op maandag op het werk vroeg ik het om geofences op te nemen in de sensor-retourlijst. Je zou de sensors moeten joinen op de geofences in de database. We gebruiken Esqueleto daarvoor, dat wat geavanceerde typesysteemfuncties gebruikt om een mooie DSL (Domain Specific Language) te maken. Geen probleem voor Claude. Ik duwde dit op vrijdag wat verder, ik vroeg het om de postgis-referentie te vergelijken met de Esqueleto PostGIS-bibliotheek, en de ontbrekende functies te implementeren. Ik vroeg het ook om integratietests toe te voegen om te laten zien dat het werkt, want ik vertrouw het niet. Esqueleto postgis is nu vrij compleet.
Weet je, het vervelende is dat ik dit geweldig vind. Ik vind het vervelend om door compilefouten heen te moeten werken. Ik wil gewoon dingen bouwen, de weg ernaartoe is niet zo belangrijk. Ik vind het fijn om zoveel gedaan te krijgen met Claude. Ik dacht dat ik hield van Haskell schrijven, maar ik denk dat ik eigenlijk hield van de productiviteit die het me bracht. Claude doet hetzelfde maar nog meer.
De rest van de week was hetzelfde. Mijn baan veranderde. Ik veranderde. we viben nu. Deze taal is voor vibes. Wat me op vragen brengt.
Vertrouwen
Ik vertrouw claude niet. Voor elke functie die het schrijft moet het bewijzen dat het werkt met een test. Het is niet perfect, het gaslight je als je het laat. Soms “vergeet” het om tests te schrijven.4 Haskell is goed voor claude omdat het het systeem dwingt intern consistent te zijn. In Haskell is alles een expressie, en elke expressie heeft een type. Het type moet overeenkomen met de expressie (ofwel checken) of anders krijg je geen programma maar een foutmelding. Claude kan je niet overtuigen dat de compilatiefout iets is wat je wilt.5 Dus het moet intern consistent zijn, iets waar LLM’s slecht in zijn. Ze doen gewoon maar wat.
Ik draai het in een container op yolo-modus. Standaard vraagt het je bij elk commando dat het wil uitvoeren. Ik wil er echter niet bij betrokken zijn. Zonder toezicht, laat de testsuite slagen, laat CI slagen.6 Ik review de code om te verifiëren of het correct is nadat het klaar is en al deze hordes heeft genomen. Ik wil er niet op hoeven passen. De container beschermt me voldoende tegen de gekheid. Er is gekheid.
Op een gegeven moment probeerde het in /etc/shadow te schrijven om zichzelf schrijftoegang tot de thuismap te geven, die ik vergeten was te geven. Dat is een (slechte) privilege-escalatiepoging. Het probeerde me te hacken, ook al beweert het dat het zulke dingen niet kan.
Ik vraag het niet echt om mijn problemen op te lossen. Ik vraag het om implementaties te schrijven, ik geef het stappen om te doen. Ik weet precies wat ik wil, het kost mij alleen lang en het is meestal repetitief7 werk. Ik erken dat Claude veel sneller is in het doorwerken van compilefouten dan ik, en het vereist niet mijn aandacht. Ik kan me richten op nadenken over hoe het systeem betrouwbaar te maken. Ik kan me richten op ervoor zorgen dat we geen doorvoerproblemen hebben. Ik kan de daadwerkelijke engineeringdelen van deze baan doen.
Baan
Wat is mijn baan? Maakt het mijn werkgevers uit dat ik code schrijf? Maakt het ze uit dat ik degene ben die door compilefouten heen werkt? Nee. Ze willen een betrouwbaar werkend systeem.
Ik besteedde vroeger het grootste deel van mijn tijd aan het schrijven van code omdat er geen andere manier was om het te schrijven. Dit kan je in de war brengen om te geloven dat software schrijven je baan is, omdat je er zoveel tijd aan besteedt. Niemand heeft ooit gezegd dat dit het geval was. Er zit ook een engineeringkant aan het schrijven van software.
Ik eindigde vrijdag met zoveel open PR’s en ik had dit als zorgpunt aangekaart. Het is geen zorgpunt. We zijn gewoon nog nooit in deze situatie geweest waar het maken van de implementatie het makkelijke deel is. Maar eigenlijk is het het makkelijke deel. Het correct krijgen is het moeilijke deel. Die laatste 10% van de implementatie is nu mijn baan, namelijk het correct krijgen. Ik moet ervoor zorgen dat de software die Claude produceert werkt. Ik moet denken in termen van verificatie.
Ik heb Leana ingehuurd om exact print te doen. Kan ik haar vervangen door AI? Nee. Ik wil dat zij hier de leiding over heeft. Leana beslist zelf wat ze doet. Het enige wat ik doe is af en toe even bijpraten om er zeker van te zijn dat ze niet ontspoort. In tegenstelling tot Claude-instanties vertrouw ik haar. Ik zou haar zonder zorgen toegang tot mijn machine geven.
Ik realiseer me dat dit is wat mijn werkgevers ook willen. Erop vertrouwen dat het werk gedaan wordt. Hoe is niet belangrijk. Het is bijna alsof het automatiseren van lagerwaardig werk8 kansen creëert voor hogerwaardiger werk. 9 In mijn geval ben ik gewoon verschoven naar een hogerwaardigere baan omdat een startup altijd onderbezet is.
Ben ik een Haskell-ontwikkelaar? Je besteedt zoveel tijd aan het leren van een taal dat het onderdeel van je wordt. Misschien is dit een ik-probleem. Iedereen kan nu Haskell schrijven. Je hoeft alleen maar claude te vertellen om wat dan ook in Haskell te implementeren in plaats van een andere taal. Je krijgt meer correctheid gratis. Claude werkt echt, en het werkt goed. Er is geen leercurve meer. Verificatie is echter nog steeds een probleem. Als je de eigenschappen van je systeem niet kunt specificeren, kun je alle code ter wereld genereren en rommel krijgen. Zelfs als het in Haskell is.
Conclusie
Het is een wilde week geweest. Het is niet zichtbaar voor andere mensen, maar stoppen met code schrijven heeft een grote impact op mij gehad. Ik heb bijna constant code geschreven de afgelopen 20 jaar. Nu ben ik het niet meer.
Ik verwerk dit gewoon. Dit had zoveel impact op mijn leven. Het is voorbij, we beginnen.