De meerderheid van de ontwikkelaars zetten al code-assistenten in, zoals GitHub Copilot, Amazon CodeWhisperer of Stability AI’s StableCode. Het gebruik van deze code-assistenten levert belangrijke praktische voordelen op, maar er zijn ook wel wat aandachtspunten. Ontdek hier de voor- en nadelen van code-assistenten bij softwareontwikkeling.
Wat is een code-assistent?
De introductie van ChatGPT door OpenAI eind 2022 opende een nieuw hoofdstuk in de wereld van de grote taalmodellen. ChatGPT bleek in staat om vragen te beantwoorden en zelfs conversaties te voeren – met reacties die nauwelijks van echt te onderscheiden waren.
Ontwikkelaars ontdekten al snel dat ChatGPT niet alleen met menselijke taal kon omgaan, maar even handig was met programmeertalen. Beginnende ontwikkelaars raadpleegden ChatGPT om code te genereren om specifieke taken uit te voeren, en verbazingwekkend genoeg leverde het in veel gevallen een bruikbaar resultaat op.
Microsoft herkende het potentieel hiervan en sprong al vóór het grote succes van ChatGPT op de kar van code-assistenten. Het bedrijf trainde een versie van OpenAI’s taalmodel op gigabytes broncode in een tiental programmeertalen. Het resultaat bracht het uit als GitHub Copilot. Deze code-assistent kan commentaarregels waarin u een (deel van een) programma beschrijft omzetten naar code en biedt ook een intelligente vorm van code completion.
Met GitHub Copilot X bracht Microsoft daarna een nog geavanceerdere versie uit. Deze heeft een chatinterface en is gebaseerd op OpenAI’s nieuwste taalmodel GPT-4. Ontwikkelaars kunnen aan deze assistent bovendien vragen stellen over documentatie. Ook Amazon en Stability AI volgden met hun eigen code-assistenten, respectievelijk CodeWhisperer en StableCode.
Sindsdien zijn code-assistanten aan een sterke opmars bezig. Zo bleek uit SlashData’s vierentwintigste State of the Developer Nation, een enquête in het eerste kwartaal van 2023 onder 25.000 ontwikkelaars uit 160 landen, dat maar liefst 63% van de ontwikkelaars aan “AI-assisted development” doen of erover aan het leren zijn. Volgens (uiteraard niet onafhankelijk) onderzoek van GitHub ligt dat aantal in de VS zelfs op 92%.
Vijf voordelen van een code-assistent
Het gebruik van een code-assistent heeft enkele belangrijke praktische voordelen voor zowel beginnende als ervaren ontwikkelaars:
1. Begin met een voorsprong aan nieuwe projecten
Met een nieuw project beginnen vereist vaak dat u eerst allerlei boilerplate code moet schrijven of geschikte voorbeeldcode moet vinden als basis. Dat vormt een drempel waardoor u vele ideeën niet eens uitprobeert. Aan een code-assistent hoeft u echter maar enkele zinnen informele uitleg te geven over wat u wilt doen, waarop u snel volledige programmacode krijgt. Uiteraard zult u hier vaak nog wat aan moeten schaven voor het werkt, maar het spaart u heel wat routineus zoek- en typwerk uit.
2. Gebruik een taal waarmee u niet vertrouwd bent
Een back-end-ontwikkelaar die maar weinig kaas gegeten heeft van webapplicaties, kan met de hulp van een code-assistent toch vrij eenvoudig een proof-of-concept met HTML, CSS en JavaScript creëren. Uiteraard zal minimale kennis van een van deze programmeertalen wel iets helpen om er fouten uit te halen. Maar u hoeft geen expert in webapplicaties te zijn om een proof-of-concept te ontwikkelen.
3. Raak niet uit uw flow
Als u in uw integrated development environment (IDE) aan het programmeren bent en even vastloopt, zult u normaal naar uw webbrowser overschakelen om iets op te zoeken. Of het nu een syntaxis is waarmee u niet vertrouwd bent, een API die u nog nooit gebruikt hebt, of de keuze van het juiste algoritme, u leest dan documentatie of zoekt wat op StackOverflow op. De kans is groot dat u daar wat langer blijft hangen dan voorzien en dat u zo de flow van het programmeren onderbreekt. Nadien kost het dan extra tijd om weer in uw flow te raken. Met een code-assistent die u intelligente code completion biedt of van in uw IDE vragen beantwoordt, beperkt u deze uitstapjes en bent u sneller weer op gang.
4. Creëer tests
Tests zijn vaak een ondergeschoven kindje tijdens het programmeren, onder andere omdat het om vrij repetitieve code gaat. Een code-assistent kan echter helpen met het schrijven van testcode en het verzinnen van test cases. Zelfs al zijn de tests misschien wat beperkt, het is beter dan geen tests. En ook hier geldt dat een code-assistent door het schrijven van boilerplate code een drempel wegneemt.
5. Laat uw code nakijken
Een code-assistent is niet alleen handig om u een voorzet te geven bij het ontwikkelen of u te helpen wanneer u vastzit, maar ook als tweede paar ogen. Als u de code-assistent vraagt om uw code kritisch te evalueren, dan krijgt u concrete suggesties om ze te vereenvoudigen, te modulariseren of te documenteren. U krijgt ook opmerkingen over inconsistente of onduidelijke naamgeving, het gebruik van magische constanten en mogelijke bronnen van fouten. Hiermee krijgt u onmiddellijk een goed zicht op de zwakke plekken van uw code en wat u kunt doen om de kwaliteit te verbeteren.
Vijf aandachtspunten wanneer u een code-assistent gebruikt
Ondanks de duidelijke voordelen, moet u wel alert zijn bij het gebruik van een code-assistent. Hier volgen enkele aandachtspunten:
1. Overtuigende maar incorrecte code
Zoals bij alle grote taalmodellen klinkt de uitvoer van een code-assistent heel overtuigend, maar is ze vaak incorrect, blijkt uit diverse studies. Dat is natuurlijk een gevaarlijke combinatie. Kritiekloos code van een code-assistent overnemen is dan ook een even groot risico als zomaar code uit StackOverflow kopiëren. Zeker als u een code-assistent inzet voor een programmeertaal waarmee u niet vertrouwd bent of om een algoritme te implementeren waarvan u de nuances niet begrijpt, is de kans groot dat u de fouten erin niet opmerkt.
2. Vals gevoel van veiligheid
Onderzoekers van Stanford University keken naar code geschreven door universiteitsstudenten met toegang tot een code-assistent en vergeleken die met code geschreven door universiteitsstudenten zonder die toegang. Wat bleek? Ontwikkelaars die een code-assistent inzetten, produceerden minder veilige code dan wie er geen gebruikte. Niet alleen bevatte de code van de code-assistent beveiligingskwetsbaarheden, gebruikers van een code-assistent geloofden ook dat hun code veiliger was dan ze in realiteit was. Dit suggereert dus dat het gebruik van een code-assistent een vals gevoel van veiligheid geeft.
3. Mogelijke licentie-inbreuken
Code-assistenten zijn getraind op grote hoeveelheden code die onder diverse licenties gepubliceerd zijn. Er zijn voorbeelden bekend waarbij de code-assistent op de vraag van een gebruiker code genereerde die letterlijk uit de trainingsdata kwam, maar dan zonder de bijbehorende licentie. Als u die code dan in uw eigen programma opneemt, riskeert u dat de auteur van de oorspronkelijke code bij u komt aankloppen omdat u zich niet aan de licentievoorwaarden houdt.
4. Minder probleemoplossende vaardigheden
Beginnende ontwikkelaars die intensief gebruikmaken van een code-assistent, moeten zo minder zwoegen op een probleem. Ze krijgen voor alles een oplossing voorgeschoteld, en dan is de verleiding groot om dit als snelheidswinst te zien en niet meer actief tijd te investeren in het ontwikkelen van probleemoplossende vaardigheden en kritisch, logisch denken. Zonder die vaardigheden blijven deze ontwikkelaars afhankelijk van een code-assistent en ontwikkelen ze niet het diepe begrip dat hen helpt om complexere programmeertaken aan te kunnen.
5. Geen vervanging voor pair programming
Pair programming is een heel nuttige aanpak, waarbij twee ontwikkelaars samen programmeren: de ene schrijft de code, terwijl de andere elke regel code evalueert. De ene werkt meer tactisch, terwijl de andere een strategische rol op zich neemt. De twee ontwikkelaars veranderen regelmatig van rol. Microsoft zet GitHub Copilot in de markt als “Your AI pair programmer”, maar dat is misleidend. Bij pair programming gaat het ook om het verbeteren van het team, om het creëren van een gedeeld inzicht in de code, en om het delen van impliciete kennis die nergens neergeschreven wordt, ook niet in code. Als u met pair programming stopt omdat u denkt dat een code-assistent hetzelfde efficiënter realiseert, mist u heel wat.
Het gebruik van een code-assistent heeft heel wat voordelen. Het vermindert de drempel om aan nieuwe projecten te beginnen en laat toe om snel een proof-of-concept te creëren in een programmeertaal waarmee u niet vertrouwd bent. Het helpt u ook om in de flow van het programmeren te blijven, om tests te creëren en om met een tweede paar ogen naar uw code te laten kijken.
Toch kleven er ook risico’s aan het gebruik van een code-assistent. De gegenereerde code is vaak overtuigend maar incorrect, wat een gevaarlijke combinatie is. Code-assistenten geven ook een vals gevoel van veiligheid en leveren soms letterlijke code uit hun trainingsdata, met het risico dat u een inbreuk op de licentie begaat. Verder bestaat het risico dat u door het continu inschakelen van een code-assistent minder probleemoplossende vaardigheden ontwikkelt. Tot slot vormt een code-assistent ook geen vervanging voor pair programming.
Uiteindelijk komt het er dus op aan om een evenwicht te vinden waarin u zoveel mogelijk van de voordelen van een code-assistent kunt gebruikmaken en de risico’s minimaal houdt.