Traditioneel programmeren of Vibe-coding met ChatGPT en Gemini

Vibe-coding met ChatGPT en Gemini

Programmeren met LLM’s zoals ChatGPT en Gemini of is het beter traditioneel te programmeren? Voor- en nadelen van programmeren met AI.

Grote taalmodellen (LLM’s) zoals ChatGPT en Gemini veranderen de wereld van software-ontwikkeling. Of je nu werkt met Python, PHP of JavaScript: AI wordt door de één als een wondermiddel voor productiviteit beschouwd, terwijl de ander het ziet als een bedreiging voor de kwaliteit van software en werk.

Bij het programmeren met AI-tools zijn er de nodige risico’s. Hoe gebruik je AI, zoals ChatGTP en Gemini op een verstandige manier?

In dit artikel bekijk ik een aantal best practices, de gevaren van ‘vibe-coding’ en waarom ouderwets “met de hand (kunnen) programmeren” belangrijker is dan ooit.

» Download dit artikel in PDF-formaat

Mijn ervaringen met programmeren

Onder het motto “de boomer aan het woord” even een klein stukje historie over m’n eigen ervaringen met het programmeren.

Toen ik 19 jaar was heb ik in het UMCG een half jaar gewerkt, na mijn ICT-opleiding, als “applicatieprogrammeur” met dBase III+.

Dat was indertijd een revolutionair relationeel databaseprogramma waarbinnen je met een eigen programmeertaal programma’s kon maken. Vervolgens compileerde ik ze met de Clipper Compiler tot een stand-alone programma en konden ze in het ziekenhuis gebruikt worden. Zo heb ik onder andere programma’s gemaakt voor de Interne Spoedpoli en de uitleenservice voor vakliteratuur.

In dezelfde periode begon ik mij ook (hobbymatig) te verdiepen in Turbo Pascal en later, toen Windows opkwam, in Delphi (Object Pascal). Ik heb zowel met dBase als met Delphi diverse programma’s gebouwd die lang in gebruik zijn gebleven bij het UMCG en bij particuliere gebruikers. Eén van die programma’s, Bible ToolBox (voor Windows), is nog steeds te downloaden.

Dit was, natuurlijk, het ouderwetse ‘handmatige’ coderen: een programmabeschrijving, stroomschema, etc. maken en vervolgens het programma maken. In de jaren die volgden heb ik mij ook enigszins verdiept in HTML (met Delphi nog een HTML-editor gemaakt!), Javascript, PHP, (My)SQL en Python. Voor Python heb ik in de “lockdown-periode” (corona) een online cursus gevolgd en zelfs een ‘diploma’ gehaald! Voor wie geinteresseerd is in dergelijke cursussen kan ik Alison aanraden of kijk hier voor meer online tutorials.

Super handig en efficiënt

Kortom – alle reden, zou je denken, dat ik tot de groep behoor die AI-programmeren loopt te verfoeien. Maar, dat is niet zo! Integendeel, ik vind het super handig. Want ik zie het gewoon als een manier van bouwen van applicaties die efficiënter is dan het ‘ouderwetse’ programmeren.

Iedere programmeur die het op voorhand verwerpt zou dan, in mijn ogen, namelijk ook zo consequent moeten zijn om geen IDE1 te gebruiken, want: een moderne IDE (zie ook verder) is vaak voorzien van allerlei handige hulpmiddeltjes om beter te programmeren. Eigenlijk al een soort van “AI”! Alleen tot voor kort was dat nog geen buzzword en werd het daarom zo niet genoemd. De AI-tools beschouw ik dan ook als handige hulpmiddelen die je veel tijd besparen!

Een mooi voorbeeld van een IDE met geintegreerde AI is Google Antigravity – de ‘next generation’ IDE mét AI ondersteuning.

Kritische houding ten opzichte van AI

Ik heb, tot op zekere hoogte, een kritische houding ten opzichte van AI. Vooral als het gaat om de invloed op de burger en omdat de ROI op AI, in het bijzonder de ‘hype’-diensten, negatief is. Dat wil niet zeggen dat AI ook voordelen heeft. Die zie ik dan ook wel degelijk.

ChatGPT en Gemini gebruiken om te programmeren

Met ChatGPT, Gemini en andere LLM’s kun je programmacode aanmaken. Dat is niet hetzelfde als programmeren – je laat de machine het werk doen, als een ‘uitvoerende’. Dat kunnen ze inmiddels heel goed; ze beschikken over een enorme bibliotheek aan voorbeelden die gevonden zijn via met name internet. Maar die bibliotheek bevat niet alleen goede code; er kan ook echte ‘rommel’ tussen zitten. De AI weet dat helaas niet maar leert wel steeds beter goed van matig tot slecht te onderscheiden.

1. Effectief werken met ChatGPT of Gemini
Zie AI daarom niet als een vervanger, maar als een hulp met een enorme bibliotheek aan data en kennis: het is razendsnel, maar maakt soms hele nare en slordige fouten. Mede omdat de AI kan gaan “hallucineren”2, er worden soms oplossingen verzonnen die volstrekt niet realistisch zijn.

Hoe ga je te werk als je wilt ‘programmeren’ met AI via een LLM?

  • Maak een ontwerp
    Begin niet direct met code te vragen. Formuleer eerst een functioneel ontwerp3. Bedenk daarbij ondermeer:
    – Wat moet de code doen?
    – Welke versie van PHP, Python of andere programmeertaal gebruik je?
    – Wat zijn de beperkingen van je programma, de programmeertaal of het eventuele LLM?
    Maak ook schema’s. Werk je met data, dan is een ERD4, een PSD5 of stroomdiagram maken een goede basis om mee te beginnen. Daarmee heb je zelf al visueel wat de bron is voor de programmatuur.
  • Vraag om uitleg
    Gebruik de AI als docent. Vraag: “Waarom kies je voor deze oplossing?”. Gemini is hier erg sterk in en geeft vaak al uit zichzelf extra tips en achtergrondinformatie. Gemini heeft wel als nadeel, zo heb ik gemerkt, dat het zonder dit aan te geven “verbeteringen” of wijzigingen doorvoert waardoor je soms voor verrassingen kan komen te staan!
  • Werk Iteratief (in stappen)
    Laat de AI eerst de basis van je programma schrijven. Test dit, en vraag daarna pas om extra functies toe te voegen. Dit lijkt een beetje op pair programming, waarbij je samen met de AI de code stap voor stap verbetert.
  • Gebruik ook andere tools
    Vertrouw niet alleen op de AI. Gebruik linters (die fouten in de code markeren) en debuggers om te controleren of de code echt klopt. Plak door AI gemaakte code in een IDE die de taal waarmee je werkt ondersteund. Bijvoorbeeld Visual Studio Code, Bluefish, of Microsoft Visual Studio.
Ontwikkeling programma (traditionele methode) waarbij deel van de code door AI werd gemaakt
Ontwikkeling programma waarbij deel van de code door AI werd gemaakt

2. Voordelen

  1. Minder saai werk
    Repetitieve code (boilerplate) schrijf je niet meer zelf. Je laat ‘de AI’ het saaie werk doen. Zo heb ik bijvoorbeeld een tijd geleden een programma geschreven in Python waarbij ik de basis zelf heb gescreven en vervolgens Gemini gevraagd de GUI te maken op basis van mijn aanwijzingen. Dat scheelt gewoon heel veel tijd en het resultaat was superstrak.
  2. Lage drempel
    Beginners kunnen sneller concepten begrijpen door om voorbeelden op maat te vragen.
  3. Full-stack gemak
    Schakel je tussen bijvoorbeeld SQL voor je database en CSS voor je ontwerp van een website of webbased applicatie? De AI doet dit moeiteloos.

3. De keerzijde: Waarom ervaren programmeurs kritisch zijn
Ervaren ontwikkelaars die nog “met de hand” hebben leren programmeren (denk aan Turbo Pascal), zijn vaak sceptisch. Hun grootste zorgen zijn:

  • Luiheid
    Hobbyisten, maar ook junior ontwikkelaars, kopiëren en plakken de code zonder te begrijpen wat er staat of wat het doet.
  • Schijnzekerheid
    De code ziet er professioneel uit, maar kan logische fouten bevatten die pas maanden later voor problemen zorgen.
  • Geen verantwoordelijkheid
    Een AI voelt geen pijn als een database wordt gewist. Als gebruiker ben jíj de eindverantwoordelijke. Je kunt nooit de schuld op de AI afschuiven!

Uit de praktijk: de verdwenen database..

Er zijn gevallen bekend van ontwikkelaars die een AI vroegen om een script te schrijven voor het opschonen van oude bestanden. Door een kleine fout in de logica van de AI, die de gebruiker niet heeft gecontroleerd, heeft het script niet de tijdelijke bestanden maar de volledige database van de productieomgeving gewist. Zonder back-up is dit een ramp.

Sowieso is deze manier van werken natuurlijk nooit goed; code kopiëren en plakken in programmatuur of scripting op een productie-omgeving zonder voorafgaand te testen is een regelrechte ‘doodzonde’.

4. Wat is ‘Vibe-coding’ en waarom is het gevaarlijk?

Vibecoding is een innovatieve benadering binnen softwareontwikkeling waarbij de ontwikkelaar meer een regisseur of ‘vibe-curator’ wordt.Morgan Black

Voorstanders van AI wuiven vaak de risico’s weg. Maar ze zijn er wel degelijk! Ik heb er al een paar aangestipt. Vibe-coding, code laten genereren met AI, is een (soms wat neerbuigende) term voor programmeren “op basis van je gevoel” (de ‘vibe’). Je voert een prompt in, de code rolt eruit, en als het lijkt te werken, keur je het goed.

Risico’s van deze aanpak:

  • Onleesbare code
    Na een paar weken begrijp je zelf niet meer hoe de software werkt, omdat de AI steeds andere stijlen gebruikt of omdat je vanaf het begin eigenlijk al nauwelijks wist waar je mee bezig was. Terug gaan naar de code om te debuggen is voor veel ‘vibe-coders’ ondoenlijk daardoor.
  • Security-lekken
    AI kan per ongeluk onveilige functies gebruiken die hackers toegang geven tot je systeem. Ga je vibe-coden dan is het absoluut een eerste prioriteit om de AI nadrukkelijk er op te wijzen dat de code sterke beveiliging moet hebben! Geef bijvoorbeeld aan in de voorwaarden van je programma:
    – moet sterke beveiligingsmaatregelen hebben;
    – alleen gebruikers met juiste credentials kunnen inloggen (gebruikersnaam + wachtwoord);
    – sla wachtwoorden gecodeerd op in de database;
    – zorg voor een veilig configuratiebestand (wanneer nodig).
  • Wegwerp-software
    Omdat er vaak geen documentatie is en de structuur ontbreekt, is de code na bijvoorbeeld een jaar niet meer te updaten. Je moet dan vaak helemaal opnieuw beginnen. Daarmee wordt de oorspronkelijke (tijd)winst teniet gedaan.
Redpoint XP (1989)
Mijn eerste PC – Redpoint XP (1989) – gekocht toen ik 19 was.

Testen van de software

Zelf de code kunnen lezen die gegenereerd wordt is een absolute vereiste. Als je niet kunt debuggen (fouten opsporen), ben je vleugellam zodra de AI een fout maakt. Of als de internetverbinding niet meer werkt, de dienst wordt stopgezet, enzovoorts.

Testen is niet optioneel

Voordat je code live zet, moet je deze ‘monkey-proof’ maken.

Testen is vaak een ondergeschoven kindje in de ontwikkeling van software. Blij dat er een werkend programma is geproduceerd wordt het vaak online gezet. Dit zorgt zondermeer voor enorme risico’s qua veiligheid maar ook stabiliteit van je programmatuur.

Wat moet je testen of doen?

Wat moet je minimaal controleren en testen:

  • Scenario-testen en code injectie
    Wat gebeurt er als een gebruiker letters invult in een veld voor getallen? Wat gebeurt er als er doelbewust een SQL-query wordt ingevoerd (code injectie). Bijvoorbeeld in de velden voor gebruikersnaam, wachtwoord of elders in de applicatie?
  • Rechten
    Heeft de code niet te veel toegangsrechten, bijvoorbeeld op een server?

    • Kunnen gebruikers taken uitvoeren in de programmatuur, of onderdelen benaderen/inzien, die zij helemaal niet mogen uitvoeren of zien?
    • Is er sprake van goede scheiding tussen front-end (voor de gebruikers) en back-end (voor de beheerders)
  • Testomgeving
    Test updates nooit direct op je live omgeving, maar altijd in een afgeschermde omgeving. Een goede strategie is een OTAP-straat, dat staat voor: “Ontwikkel, Test, Acceptatie, Productie” en zijn gescheiden omgevingen.

Tip!
Bij het testen kun je ook code door het ene LLM gemaakt laten controleren/valideren door een ander LLM! Dit is niet waterdicht maar scheelt wel veel tijd uiteraard. Probeer ook eens code, met dezelfde prompt, in verschillende LLM’s te genereren. Soms is dat een wereld van verschil!

Programmeren met AI, doen of niet?

Ik geloof dat de toekomst van programmeren een combinatie van menselijke intelligentie en kunstmatige intelligentie is. Vast blijven houden aan het oude omdat dat nu eenmaal altijd zo is geweest is het slechtste argument dat er is.

Bedenk: toen computers kwamen en mensen software gingen maken om taken uit te voeren waren er ook die wilden vasthouden aan de schrijfmachine en de handmatige doorschrijfboekhouding met carbonvelletjes. Want, zo’n computer? Dat kon nooit goed zijn. Ik kom nu nog steeds mensen tegen die met een rekenmachine de computer controleren!

De meest succesvolle ontwikkelaars zijn daarom niet degenen die alles zelf typen, maar degenen die de AI regisseren, de output kritisch controleren en testen en de verantwoordelijkheid (kunnen) nemen voor het eindresultaat.

AI verandert hoe we programmeren, maar niet wat een goede programmeur is: iemand die begrijpt wat hij bouwt!

_____________

1 Een IDE (Integrated Development Environment) is software die programmeurs helpt efficiënt code te schrijven, testen en debuggen door verschillende tools (editor, compiler, debugger) te bundelen in één omgeving, met functies als syntax-highlighting en automatische aanvulling om het proces te versnellen.
2 Een AI-hallucinatie is een situatie waarin een kunstmatig intelligent hulpmiddel onnauwkeurige, misleidende of onsamenhangende output levert omdat de algoritmen patronen in gegevens vinden die niet bestaan of die patronen verkeerd interpreteren. (Kaspersky)
3 https://nl.wikipedia.org/wiki/Functioneel_ontwerp
4 Een diagram dat de structuur van een database weergeeft, inclusief de verbanden tussen verschillende gegevens (entiteiten).
5 Programma Structuur Diagram, om de structuur en logica van een computerprogramma te plannen, met rechthoeken en driehoeken.

Delen op: