Ontwikkelingen rondom data, algoritmen, machine learning en kunstmatige intelligentie (AI) volgen elkaar snel op, zeker sinds de lancering van ChatGPT eind vorig jaar. Het vakgebied van software engineering is hierbij belangrijk, omdat AI-systemen in de kern uit software bestaan. En software engineering en AI beïnvloeden elkaar ook. Een gesprek over de relatie tussen AI en software met Geert-Jan Houben, pro-vice rector AI, Data en Digitalisatie, leider van het TU Delft AI Initiative en hoogleraar Web Information Systems, en Arie van Deursen, hoogleraar Software Engineering aan de faculteit Elektrotechniek, Wiskunde en Informatica (EWI) van de TU Delft. De laatste houdt zich bezig met het testen van software, betrouwbare AI en de menselijke aspecten van software engineering.
Data, algoritmes, machine learning, deep learning, ChatGPT, kunstmatige intelligentie; kunnen jullie om te beginnen vertellen wat software hier mee te maken heeft?
Arie van Deursen: Klassieke softwareontwikkeling bestond eruit dat je een machine stap voor stap voorschrijft wat die moet doen. Met de beschikbaarheid van grote hoeveelheden data heeft machine learning een vlucht genomen: uit data kunnen we veel leren, bijvoorbeeld patronen en gedrag.
Geert-Jan Houben: Je hoort veel over leren van data, je hoort veel over algoritmes en dat daar data voor nodig zijn. Maar die draaien uiteindelijk in softwaresystemen die daarvoor gemaakt moeten worden. Het feit dat nu op grote schaal data en machine learning in software zitten, doet daar niks aan af. Uiteindelijk moet je goede softwaresystemen maken. Die softwaresystemen hebben misschien wel een andere verschijningsvorm dan ze vroeger hadden. Maar de concepten van software engineering kun je ook toepassen bij het engineeren van die nieuwe, op AI- of machinelearning gebaseerde software. Het blijft immers een proces van ontwerpen, bouwen, testen en releasen van software voor eindgebruikers en opdrachtgevers, en daar zijn we bij de TU Delft al jaren mee bezig.
Geert-Jan Houben: De concepten van software engineering kun je ook toepassen bij het engineeren van die nieuwe, op AI- of machinelearning gebaseerde software. Het blijft immers een proces van ontwerpen, bouwen, testen en releasen van software voor eindgebruikers en opdrachtgevers, en daar zijn we bij de TU Delft al jaren mee bezig.
Hoe is software engineering veranderd door beschikbaarheid van data en AI?
Arie vvan Deursen: Oorspronkelijk bedoelen we met het woord algoritme: ik weet precies hoe een probleem op te lossen en ik schrijf het stap voor stap uit in een reeks instructies. Een soort recept dus. Tegenwoordig bedoelen we met het woord algoritme een machinegeleerd algoritme, waarbij je met allerlei data een algoritme traint. Dat noemen we een model, dat algoritmisch bepaalde aanbevelingen kan doen.
Dus een algoritme is een recept om vooraf, stap voor stap een probleem op te lossen. En met AI en machine learning kunnen we nu zelflerende algoritmen maken. Heb je hier een voorbeeld van?
Arie van Deursen: Denk aan productaanbevelingen in een online boekwinkel. Voorheen schreef je een algoritme uit, bijvoorbeeld: als iemand jonger dan 25 jaar is, beveel dan boeken in de categorie jongvolwassenen aan. En als iemand ouder is dan 25, beveel dan boeken in de categorie romans aan. Dat algoritme vertaalde je dan naar een programmeertaal waarmee we software bouwden die precies dit recept volgde. Tegenwoordig, door de beschikbaarheid van veel data, is er een zelflerende manier. Daarmee kun je kijken naar het gedrag van klanten in het verleden, welke boeken ze bekijken, welke ze als favoriet aangeven, welke ze gekocht hebben, en op basis daarvan aanbevelingen doen.
Als je vroeger eenmaal software had ontworpen, dan volgden daarna wijzigingen die in nieuwe releases moesten worden uitgerold. Hoeft dat met deze zelflerende manier niet meer?
Arie van Deursen: Nee, want het is nog steeds zo dat bestaande software vernieuwd moet worden. In de software engineering kun je voor een deel lerende algoritmen toepassen. Maar niet bij alle software is iets te leren. Soms is er gewoon wetgeving die vertelt hoe iets moet, en dan moeten we dat ook precies zo programmeren. Dus dat meer klassieke, statische deel houd je nog steeds in software engineering.
Geert-Jan Houben: Het is niet een kwestie van klassieke software versus machinaal geleerde software, of zelfs software versus AI. In software zitten stukken die vooraf geprogrammeerd zijn en er zijn stukken die machinaal geleerd zijn. Daar zit dan de ontwerpopgave in: hoe zorg je ervoor dat dat geheel nog goed functioneert en begrepen kan worden? Neem een zelfrijdende auto. Een gedeelte van de software van de zelfrijdende auto, bijvoorbeeld hoe het stuur moet reageren, kun je van te voren programmeren. Maar er is ook een gedeelte dat misschien te ingewikkeld is om vooraf te programmeren. Dan kan je ervoor kiezen de software van de auto juist data te laten verzamelen en gaan leren. Dus daar zit allebei in.
Geert-Jan Houben: Het is niet een kwestie van klassieke software versus machinaal geleerde software, of zelfs software versus AI. In software zitten stukken die vooraf geprogrammeerd zijn en er zijn stukken die machinaal geleerd zijn. Daar zit dan de ontwerpopgave in: hoe zorg je ervoor dat dat geheel nog goed functioneert en begrepen kan worden?
Is ChatGPT, en meer algemeen: generative AI, een hype of is er echt iets revolutionairs aan de hand?
Arie van Deursen: GPT-3 en inmiddels GPT-4, een groot taalmodel waarop ChatGPT is gebaseerd, is voortgekomen uit een zogenaamd Transformer-paper uit 2017. Je kunt zeggen dat toen de revolutie van generative AI is begonnen, zeker in de wereld van datawetenschap. Sinds november vorig jaar is er ChatGPT, dat heel breed toegankelijk is voor het grote publiek, en werkt met een “chat interface” die heel prettig is. Daardoor is voor iedereen zichtbaar hoe groot de revolutie is.
Geert-Jan Houben: Er zijn twee aspecten die nu bij elkaar komen: enerzijds de grote taalmodellen en anderzijds de interface, die ervoor zorgt dat de toepassing aantrekkelijk is. In plaats van dat je een lijst van 10 of 20 antwoorden krijgt, krijg je er nu 1. Die is ook nog in een quasi-menselijke vorm geschreven en kan op vorige antwoorden voortbouwen. Op beide aspecten worden nu grote stappen gezet. Wat ze precies kunnen betekenen moeten we nog ontdekken.
En in relatie tot software engineering?
Arie van Deusen: Programmeertalen blijken erg op gewone talen te lijken. Zij voldoen aan dezelfde statistische eigenschappen als natuurlijke taal.. Dus alle technieken die in taalmodellen zitten kun je ook toepassen op broncode. In het schrijven van software, zit namelijk ook een patroon. En dat kun je weer machinaal leren. Daar doen we bij de TU Delft onderzoek naar. We kijken naar hoe grote taalmodellen softwareontwikkelaars helpen productiever te zijn. Voor taken die in 90% van de gevallen gebeuren, werkt dit soort taalmodellen goed genoeg. Denk aan AI-programmeerassistenten als Github CoPilot en ChatGPT. Wel is er het probleem van het hallucineren, zoals we dat bij dit soort taalmodellen noemen. Antwoorden die AI-tools geven klinken heel verstandig, maar zijn soms niet juist of volledig. De toekomst zit in het combineren van dit soort taalmodellen met manieren om de uitkomsten te verifiëren.
Arie van Deursen: Programmeertalen blijken erg op gewone talen te lijken. Zij voldoen aan dezelfde statistische eigenschappen als natuurlijke taal. Dus alle technieken die in taalmodellen zitten kun je ook toepassen op broncode.
Geert-Jan Houben: Dit doet me denken aan de ontwikkeling die zoeken op het internet (“search”) heeft doorgemaakt. Eerst zochten we op woorden of termen om informatie te vinden. Toen ontdekten we dat met woorden alleen je niet altijd bij het juiste uitkwam. Bijvoorbeeld bij het zoeken naar ‘appel’, wat zowel fruit als computers oplevert: je miste de betekenis achter het woord. Dat lijkt nu bij grote taalmodellen ook te gebeuren: eerst zijn ze op de tekstrepresentatie gebaseerd. We zullen moeten ontdekken waar dat wel en waar dat niet werkt.
De TU Delft werkt veel samen met organisaties om in de praktijk te beproeven wat er speelt en daar onderzoek naar te doen. Welke onderzoeken doen jullie zoal?
Arie vvan Deursen: Met het onderzoeksproject AI for FinTech kijken we naar uitlegbaarheid, integratie van verschillende databronnen en software engineering bij ING. Daar werken 50 duizend mensen, waarvan 15 duizend softwareontwikkelaars. We kijken daar onder meer naar inzet van AI om de softwaresystemen die ING bouwt te kunnen testen. Hoe kunnen we zorgen dat het testen minder tijd en energie kost?
Software van grote bedrijven, overheidsinstanties en uitvoeringsorganisaties bestaat uit miljoenen regels code. Als een ontwikkelaar een stukje code moet wijzigen, kan het helpen de persoon te vinden die daaraan in het verleden heeft gewerkt, bijvoorbeeld om een code review uit te voeren. Wat we met organisaties hebben gedaan, is dat we hun data over wie wanneer waaraan heeft gewerkt en wie wanneer aanwezig is, in een model hebben gestopt. Dat model heeft vervolgens geleerd wie je het beste kunt inschakelen voor het beoordelen. Uit eerder onderzoek weten we dat het helpt om die persoon een ‘nudge’ te geven die eraan herinnert het stukje code te beoordelen. Daardoor versnelt het wijzigingsproces. Naast het doen van onderzoek samen met organisaties als ING en Microsoft naar het verbeteren van softwareontwikkelprocessen, kijken we in die trajecten ook naar het in de lucht houden van softwaresystemen. Daarbij putten we uit run-time-data, en uit data over incidenten.
Geert-Jan Houben: Het mooie aan dit soort samenwerkingen is dat je de echte praktijkproblemen kunt beproeven, en daarvan kunt leren. Waarmee we zowel de wetenschap als de impact in de praktijk bevorderen. De moderne manier van wetenschap doen. Het levert inzicht en aanbevelingen op die software en het proces van softwareontwikkeling verbeteren, inzichtelijker maken en versnellen.
Nog even over die ‘nudge’: software engineering gaat dus om meer dan techniek?
Arie van Deursen: Zeker. Bij de TU Delft doen we aan empirische softwareontwikkeling. Dat gaat enerzijds over software bouwen, maar anderzijds over begrijpen waarom dat soms moeilijk is. Dat onderzoeken we door data te analyseren, maar ook door mensen te interviewen. Dus hoewel het over iets technisch als software gaat, gaat het vooral over mensen, en hoe je processen op schaal kunt verbeteren.
Arie van Deursen: Door AI worden de meer voorspelbare taken geautomatiseerd en de meer op mensen gerichte taken intensiever. De vooraf geprogrammeerde software en machinelerende software moeten goed met elkaar werken. Ik denk dat het vakgebied softwareontwikkeling er interessanter van wordt.
Wat betekenen ontwikkelingen als generative AI voor het onderwijs in software engineering aan de TU Delft?
Arie van Deursen: Programmeren blijft bestaan, alleen in de toekomst kun je daarbij meer en meer geholpen worden door AI-programmeerassistenten. Wij moeten studenten trainen in het verstandig werken met dat soort gereedschappen. In het programmeeronderwijs beginnen studenten met eenvoudige programmeeropdrachten, die ze zonder hulp moeten maken. Als ze die namelijk meteen met hulp van Github CoPilot of ChatGPT maken, leren ze niet hoe de basis van programmeren werkt. Maar uiteindelijk moeten ze er mee kunnen werken, en antwoorden op waarde kunnen schatten.
Geert-Jan Houben: Om studenten en professionals in staat te stellen hier verstandig mee om te gaan moeten we er onderzoek naar doen. Door te kijken naar hoe ChatGPT suggesties doet, kunnen we onderzoeken wat er nu eigenlijk precies gebeurt en waarop zo’n groot taalmodel zijn antwoorden baseert. Uit ons onderzoek kunnen dan tips en tricks volgen om dit soort tools te gebruiken.
Waar zie je AI en software engineering naartoe ontwikkelen?
Arie van Deursen: Softwareontwikkeling is mensenwerk. Hun werk draait veel om communicatie en natuurlijke taal. Door AI worden de meer voorspelbare taken in toenemende mate geautomatiseerd. De meer op mensen gerichte taken worden intensiever. Uiteindelijk wil je de software zo bouwen dat die aansluit bij de wensen van de gebruiker en van de opdrachtgever, waarin vooraf geprogrammeerde software en machinelerende software goed met elkaar werken. Ik denk dat het vakgebied softwareontwikkeling er interessanter van wordt. De ontwikkeling van eenvoudige systemen wordt steeds makkelijker. In die zin werkt het zelfs democratiserend: straks kan iedereen software maken met een natuurlijke taal als interface. Dat is een hoger doel dat we altijd hebben nagestreefd, dus dat vind ik het wel mooi. Bron TU Delft