AI maakt software met gevaarlijke gebreken
Ontwikkelaars gebruiken steeds meer AI om hun programmeer werk te doen. Er zijn steeds meer twijfels over de kwaliteit van de code die AI binnen seconden op je scherm tovert. En terecht. Want toveren en sprookjes bestaan niet. AI is eerder een draak die code uitspuugt. Steeds meer onderzoeken wijzen op allerlei gebreken in de code die AI ‘bedenkt’.
De gevolgen
Het lijkt zo mooi, in seconden werk verzetten waar we soms dagen of zelfs weken over deden. Nou wil ik niet beweren dat AI alleen maar ellende brengt maar een gewaarschuwd mens telt voor twee. Ook ik experimenteer met AI en in de basis is het echt wel handig. Maar ... ik zie veel misgaan. En ondertussen is er veel onderzoek gedaan naar de ‘flaws’ in al die gegenereerde code.
De gebreken in AI gegenereerde code zitten vooral in vier categorieën:
- Efficiëntie en performance
-
Security
- Onderhoudbaarheid
- Functionele correctheid
En laten dat nou precies de vier meest belangrijke eigenschappen van programmatuur zijn. Auw!
Inefficiënte programmatuur is duur
Het lijkt goedkoop om code met AI te genereren. En laten we eerlijk zijn, dat is het ook. Maar iedereen weet dat voor een dubbeltje op de eerste rang zitten, niet bestaat. Want als die code vervolgens veel meer resources nodig heeft om te kunnen werken, dan is dat voordeel snel opgebrand.
Sommige code die AI genereert is factoren inefficiënter dan code van een goede programmeur. Voor AI gegenereerde software heb je 2, 3 of soms zelfs 100 keer zoveel hardware nodig om het te draaien. Zeker in de cloud wordt dat een duur grapje.
AI weet niets van schaalbaarheid. Van aantallen gebruikers, van database grootte en database groei. Van concurrency. Van netwerk latency. Allemaal dingen die in je uiteindelijke productie omgeving bepalend zijn voor de efficiëntie en dus de kosten.
Security
Het volgende probleem is ... code die niet veilig is. Heeft de, of beter nog, jouw programmeur daar wel bij stilgestaan? Mogelijk niet. We hebben het hier over wel een heel serieus risico! Code die niet secuur is geeft hackers met slechte bedoelingen de ruimte om jouw systemen binnen te dringen. Het gevolg is data die op straat ligt, data verlies, ransomware en een slechte reputatie. Allemaal kosten ze je veel geld, in sommige gevallen kun je het bedrijf zelfs opdoeken. Dat wil je echt niet.
Onderhoudbaarheid
Standaardisatie is al een gevoelig onderwerp ... en standaardisatie van code is al helemaal ver te zoeken als de code door AI gegenereerd is. Je wilt basale code standaarden zoals naamgeving van variabelen en functies, waar je haakjes plaatst en hoe en waar er ingesprongen wordt. Omdat AI heel veel voorbeelden heeft met allerlei vormen van standaardisatie krijg je in verschillende stukken gegenereerde code steeds afwijkende standaarden. Dat is slecht voor de leesbaarheid en dus de onderhoudbaarheid.
Ontwikkelaars die zelf de code niet meer schrijven verliezen hun vaardigheden. Code schrijven is niet zoiets als fietsen, fietsen doet je onderbewuste voor je. Software ontwikkelen is een intellectuele bezigheid waar vaardigheden voor nodig zijn die je kwijtraakt als je ze niet oefent. Code onderhouden is iets anders dan code genereren, voor het onderhoud moet je snappen wat de code doet. En waarom het fout gaat. En waar het lek zit. Die analytische vaardigheden bezit AI nog niet, maar ontwikkelaars raken die vaardigheden (deels) kwijt als ze zelf nog weinig code produceren.
Functionele correctheid
AI genereert code aan de hand van voorbeelden. Veel voorbeelden, dat wel. Maar AI snapt het probleem niet dat je met een stuk software probeert op te lossen. AI associeert de vraag met code waar een soortgelijke vraag gesteld, en neemt aan dat die code dat probleem oplost. Of dat ook werkelijk zo is moet je maar afwachten.
Voor eenvoudige opdrachten zal de uitkomst wel grotendeels correct zijn. Maar als verschillende stukken code een onderling verband hebben en los van elkaar gegenereerd zijn, wie bewaakt dan dat de samenhang ook klopt en dat er geen bijeffecten zijn? Op complexe of heel specifieke code is AI onvoldoende getraind.
AI kent zijn eigen beperkingen niet
Ik heb een AI nog nooit zien antwoorden met ‘Ik weet het niet’. Er komt ALTIJD een antwoord van AI. Hoe goed of slecht dat antwoord is mag je dan zelf beoordelen. Als ik een sollicitant interview dan vind ik het een teken van kracht als ze eerlijk vertellen dat ze iets niet weten. Ken je grenzen en vraag op tijd hulp. Maar AI geeft liever een fout antwoord dan geen antwoord. En dat is te zien in de kwaliteit van de code die AI genereert.
AI kan vooral goed babbelen
De huidige generatie AI is gebaseerd op Large Language Models (LLM) in het Nederlands Groot Taal Model. Een LLM wordt gevoerd met heel veel stukken taal en berekent op basis van statistiek welke taal bij welke andere taal hoort. Welk antwoord bij welke vraag hoort. Natuurlijk is het ingewikkelder, maar dat is de basis. Als iemand jou vraagt waar je woont dan komt uit je onderbewuste automatisch de naam van je woonplaats, je hoeft er niet over na te denken. Op dezelfde manier komt AI met zijn antwoorden. Het heeft daarmee schijnbaar een vlotte babbel. De term Artificial Intelligence is eigenlijk een verkeerde benaming, er zit geen intelligentie achter zoals wij mensen die hebben. AI kan geen origineel denkwerk opleveren en heeft geen bewustzijn, ook al lijkt het soms van wel.
AI kan de verbanden wel razendsnel leggen. Maar het zijn statistische verbanden, geen oorzakelijke verbanden. Er is een statistisch verband tussen schoenmaat en leerprestaties bij kinderen. Als je grotere schoenen voor je kinderen koopt gaan ze niet ineens beter leren, ze gaan alleen slechter lopen. Het verband is er omdat kinderen groeien als ze ouder worden waardoor ze grotere schoenen nodig hebben en langer op school gezeten hebben waardoor ze meer weten. Maar dat onderscheid kan een AI niet maken.
Garbage in, garbage out
AI weet alleen wat het verteld is. Letterlijk, AI kan alleen antwoorden op basis van de trainingsdata. AI gelooft alles wat je er in stopt, net als ons onderbewuste. En daarbij gelooft het datgene wat het vaker hoort eerder dan datgene wat het minder vaak hoort.
Onder echte programmeurs zijn er maar weinig hoogvliegers. Maar 2% van de bevolking is hoogbegaafd. Nu zullen programmeurs wat oververtegenwoordigd zijn in die 2%, maar het aantal middelmatige programmeurs overstijgt in ruime mate het aantal superprogrammeurs. Wat op zich helemaal geen probleem hoeft te zijn overigens als je er maar rekening mee houdt.
Op de sites waar code genererende AI getraind worden is dus veel meer code van middelmatige programmeurs te vinden dan van superprogrammeurs. Het laat zich raden welke code de AI als waarheid beschouwt. AI genereert middelmatige code omdat het er meer voorbeelden van gezien heeft dan van heel goede code.
Naarmate AI meer code genereert zal er meer AI gegenereerde code op de code websites als GitHub, Stack Overflow en The Code Project komen. Die weer als input voor de AI’s gebruikt gaat worden. AI gaat daardoor bijgetraind worden met zijn eigen output. Dat levert een informatie bubbel op net als voor tekstuele AI’s, zie daarvoor ook het blog dat ik eerder geschreven heb.
Waar AI goed in is, dat konden we al
AI is goed in het uitvoeren van repetitieve taken. Onderhoudsschermen en vaste code die je steeds gebruikt. Alleen heb je daar helemaal geen AI voor nodig. Dat doen we al decennia met templates en code generatoren. En met vierde generatietalen, low code, no code, de lijst is lang. Het voordeel van die oplossingen is dat je altijd hetzelfde antwoord krijgt; AI wil nog wel eens creatief worden en een verschillend antwoord op dezelfde vraag geven. Oudere tooling kon wel eens beter werken dan AI.
AI kan wel een grote productiviteitsverhoging geven als het goed gebruikt wordt. Net als de tractor en de oogstmachine boeren veel productiever gemaakt hebben kan het ontwikkelaars veel meer werk laten verzetten. Als je met een tractor vol gas op een muur inrijdt dan loopt dat niet goed af. Voor jou niet, voor de tractor niet en voor de muur niet. AI is ook een stuk complex gereedschap dat je met kennis en kunde moet gebruiken om er profijt van te hebben. In de handen van onkundige mensen is het net zo gevaarlijk als een tractor.
Niet als er levens op het spel staan
Voor software waarbij levens op het spel staan moeten we de code genererende AI gewoonweg niet gebruiken. Ik denk dan aan hartbewakingsapparatuur, de luchtvaart in het algemeen en kerncentrales in het bijzonder bijvoorbeeld. We willen niet dat er vliegtuigen neerstorten omdat de code in de avionics niet goed genoeg is. We hebben nog te weinig ervaring met de resultaten van die code generatie om er ons leven aan toe te vertrouwen.
En hoe goed is jouw AI gegenereerde software?
Nu vraag je je natuurlijk af hoe efficiënt en betrouwbaar jouw door AI gegenereerde software is. Daarvoor maak je een afspraak van 15 minuten met mij. Dan weet je waar je staat en wat er gerepareerd moet worden.
Maak hier je afspraak
Klik mijEr is de laatste tijd veel geschreven over dit onderwerp. Er komen ook wekelijks onderzoeken bij. Voor de onderbouwing kun je bijvoorbeeld hier terecht:
https://arc.dev/talent-blog/impact-of-ai-on-code/
https://blog.codacy.com/we-analyzed-ai-generated-code
https://www.wired.com/story/fast-forward-power-danger-ai-generated-code/