Softwarecode converteren met generatieve AI: de belangrijkste lessen

Als generatieve AI ergens goed in is, dan is het wel het verwerken van grote hoeveelheden informatie op basis van patroonherkenning. Het omzetten van programmeercode van de ene naar de andere taal is daar een goed voorbeeld van.

Tijdens TNW Conference vertelden Elise Lems en Jurre Brandsen, IT Consultants bij Info Support, over hun ervaring in het eenmalig converteren van 25 webapplicaties van het low-code-platform BlueRig-platform naar TypeScript.

Repetitief werk uit handen

Een van de lessen die het duo heeft geleerd: je kunt veel repetitief programmeerwerk uitbesteden aan Large Language Models (LLM’s), waardoor je tijd overhoudt voor interessanter werk. Elise: “Het handmatig omvormen van dit soort webapplicaties neemt veel tijd in de slag. Met één webapplicatie ben je al gauw twee tot vier weken bezig. Dankzij AI hebben we dat teruggebracht naar twee tot vier dagen. Het werk dat nog overbleef voor de softwareontwikkelaars was eigenlijk een stuk leuker. Dus je hoefde niet alles meer met de hand over te zetten, maar moest nog wel de interessantere, ingewikkeldere taken doen aan het eind van het proces.”

Puzzelstukjes

De eerste poging die het team waagde om de code te converteren, bestond eruit dat ze een XML-bestand met 50.000 regels code invoerden in een LLM, met de opdracht om deze om te zetten naar TypeScript. Jurre: “Dat was eigenlijk best een naïeve poging. We zagen al gauw in dat dit hele slechte resultaten opleverde. Een LLM kon het gewoon niet aan. We moesten het dus slimmer gaan aanpakken. Toen we onder de motorkap van het XML-bestand keken, kwamen we erachter dat de code bestond uit verschillende lagen. Die hebben we vervolgens losgeknipt als verschillende puzzelstukjes.”

Door het intelligent opsplitsen van de XML-bestanden in kleinere, logische eenheden kon het model de input beter verwerken en werden de resultaten beter.

De doorbraak: Python als tussenstation

Ondanks de verbeterde methode, bleef de kwaliteit van de gegenereerde TypeScript-code niet voldoen aan de vereisten. Jurre: “Onze maatstaf was dat de code onderhoudbaar zou moeten zijn.” Hier kwam het team met een ingenieuze oplossing. “Veel LLM’s zijn gebouwd en getraind op heel veel programmeertalen. Eén van de talen die veel gebruikt wordt is Python, dat zou je ook wel het Engels van de programeertalen kunnen noemen. We zijn Python gaan gebruiken als een tussenstation: XML vertaalden we eerst naar Python en dat vervolgens weer naar Typescript. Toen we dat probeerden, zagen we echt dat de codekwaliteit met sprongen vooruit ging.”

De kunst van prompt engineering

Een cruciale factor in het succes van het project bleek de vaardigheid van prompt engineering; het verfijnen van de instructies die aan het AI-model worden gegeven. Het team ontdekte dat elke fase van het conversieproces een unieke prompt vereiste, zorgvuldig afgestemd op de specifieke taak en het gewenste resultaat. Het team schakelde ook de hulp van het model zelf in: die kwam met bruikbare suggesties om prompts te verbeteren.

Jurre: “Het ontwikkelen van effectieve prompts bleek een iteratief proces. We begonnen met eenvoudige instructies en verfijnden de prompts door steeds meer specifieke aanwijzingen en randvoorwaarden toe te voegen. Dat vergde geduld en creativiteit, maar het levert uiteindelijk wel het beste resultaat op.”

Geen AI-ontwikkelaar zonder software-ontwikkelaar

Een van de belangrijkste inzichten die Jurre en Elise tijdens dit project opdeed, was het vinden van de juiste balans tussen AI-technologie en traditionele softwareontwikkeling. Hoewel AI een krachtig hulpmiddel bleek in het versnellen en verbeteren van het conversieproces, was de rol van de menselijke ontwikkelaar onmisbaar.

Elise: “Je kunt echt heel veel met AI, maar je moet het wel gebruiken waar het waarde oplevert. En zoek ook naar de juiste balans tussen software-ontwikkelaar en AI. Er is geen AI-ontwikkelaar en er is geen AI-ontwikkeling zonder software ontwikkelaar.”