AI Coding Assistants; hoe kies je er één
Bij de zoektocht naar een goede AI Coding Assistant kun je al heel snel door de bomen het bos niet meer zien. Er zijn er simpelweg veel te veel en er komen er dagelijks nog veel meer bij. Hoe kies je dan de juiste, als die er al is. Wat kan een Coding Assistant allemaal voor je doen, als software developer zijnde? En misschien belangrijker; wat kan het vooral niet?
22 februari 2024 | Blog | Door: Application Strategy Lead bij Conclusion Enablement
Deel
Terug naar de basis
Om te beginnen zijn we terug naar de absolute basis gegaan; wat doet een developer? Hoewel dat wellicht een ogenschijnlijk simpele vraag is waar iedereen wel een antwoord op weet, was het een belangrijke stap om vast te stellen waar we nu eigenlijk naar op zoek zijn en langs welke meetlatten we deze tools kunnen leggen. Wij kwamen uit op de volgende vijf: code schrijven op basis van een functionele beschrijving, unit tests schrijven, fouten in de code herstellen, code reviews uitvoeren, documentatie schrijven en code toevoegen aan source control.
Het verdienmodel
De tweede stap was het verdienmodel van de tools in kwestie. Veel fungeren als een eenvoudig bami-luik tussen gebruiker en een model als ChatGPT en rekenen af per prompt. Dat geeft ofwel onvoorspelbaar hoge kosten ofwel een zeer beperkt aantal prompts per maand, beiden niet wenselijk. Samen met de eis dat de tool ondersteuning moest bieden voor de door ons gebruikte talen (C#, Typescript, Python, Go) vielen hierdoor al de meeste tools af.
88% van de ontwikkelaars wil een tool die unit tests voor ze genereert.
Wat vindt de ontwikkelaar belangrijk?
We hebben ook onze ontwikkelaars gevraagd wat zij belangrijk vinden in een AI Coding Assistant. Waar zouden zij ondersteuning bij zoeken? We legden ze eerder genoemde werkgebieden voor, en tot niemands verbazing werden de werkzaamheden die traditioneel door ontwikkelaars als het minst leuke aspect van hun werk wordt ervaren genoemd als de aspecten waar ze een AI Coding Assistant voor zouden willen inzetten. Het genereren van documentatie werd door 65% van de ondervraagden als belangrijk of heel belangrijk gezien, 77% vond ondersteuning bij de code reviews belangrijk of heel belangrijk, en maar liefst 88% wil een tool die unit tests voor ze genereert.
Kwaliteit en bruikbaarheid
Bij het selecteren van de tool beseften we ons dat er één kenmerk in het beoordelen van de meerdere werkgebieden terug kwam; de kwaliteit en bruikbaarheid van de gegenereerde code. We besloten om dit aspect uit de werkgebieden te tillen en apart te beoordelen; hoe goed is de code die gegenereerd wordt, voldoet hij aan de kwaliteitseisen die je aan moderne software kan en soms wel moet stellen, worden naamgevingsconventies uit het project gerespecteerd. Kortom: is de code direct productiewaardig of moet er nog een handmatige iteratie overheen voordat het naar productie mag.
Zeer snelle ontwikkelingen
Het selectieproces zelf was een bijzondere ervaring door de aard van de tools en de snelheid waarmee AI zich ontwikkelt. Bij het uitwisselen van ervaringen bleek dat iedereen andere ervaringen heeft bij soortgelijke situaties. Maar ook bij het herhalen van een prompt een dag later op exact dezelfde code, met exact dezelfde tool kwam het AI model met een compleet ander antwoord terug dan de dag daarvoor. En dat maakt de selectie lastiger dan je normaliter bij andere tools zou hebben. Waar je normaal gesproken objectief kunt zeggen dat tool X zoveel procent sneller is dan Y, door een beter UX/DX een hogere efficiëntie geeft of simpelweg een bredere featureset heeft, evolueren AI Coding Assistants in het bijzonder, en zeker AI powered tools in het algemeen, zo’n beetje waar je bij staat.
Maar deze snelle ontwikkelingen zorgen er ook voor dat de tools elkaar in lijken te halen. De featureset is heel erg sterk aan het nivelleren; alle tools hebben inmiddels een chat-window of werken er aan, inline autocomplete is vrijwel overal aanwezig, ondersteuning voor talen wordt, zeker bij de commerciële tools, steeds breder, net zoals de ondersteuning voor IDEs. Waar momenteel nog vooral onderscheid in gemaakt wordt is de mate van context-awareness; in hoeverre snapt de tool de context waarin de code moet functioneren. Als een ontwikkelaar de vraag stelt om een functie te optimaliseren, snapt de tool dan dat de functie ook andere functies aanroept? Als een ontwikkelaar de opdracht geeft om iets met een JSON string te doen, kan de tool dan zelf bepalen dat hij Newtonsoft.Json of System.Text.Json moet gebruiken, afhankelijk van wat er al in het project toegepast is?
En als we het een stap verder zetten, als een analyzer de melding geeft van een fout in de code, herkent de AI dan dat er fout is, wat de fout is en wat de juiste oplossing is? Of wanneer een unit test faalt, weet de AI dan de unit under test zodanig aan te passen dat de test weer slaagt? En misschien belangrijker, zodat alle tests slagen?
Nu kun je Coding Assitant vragen of hij een functie kan optimaliseren.
Het is al mogelijk
Mocht dit je als toekomstmuziek in de oren klinken, er zijn nu tools op de markt die dit al kunnen. En dit is waar al deze Coding Assistants naar toe aan het bewegen zijn. Toen deze tools net op de markt kwamen waren de antwoorden vrij algemeen en soms zelfs buitengewoon slecht. Ongeveer een jaar geleden vroeg ik ChatGPT om een functie om te bepalen of een getal even of oneven was. Het antwoord was een hele reeks aan if-statements; if i==1 return false; if I ==2 return true; etc. Nu kun je aan je Coding Assistant vragen of hij een functie kan optimaliseren en hij komt terug met een zevental mogelijke oplossingen in verschillende lagen en geeft hij aan dat er wellicht ook iets in de database verbeterd kan worden, maar dat hij dat niet kan door gebrek aan toegang.
AI Coding Assistants zijn in rap tempo aan het evolueren van veredelde StackOverflow zoekmachines naar echt geautomatiseerde Pair Programming Buddies. Doordat de ontwikkelaars van deze tools overduidelijk continu naar elkaar kijken en features van elkaar overnemen, kun je bijna geen foute of goede keuze maken. Elke bevinding die je doet bij het selecteren van een tool is letterlijk een momentopname. Kijk naar welke tool past binnen de randvoorwaarden van jouw organisatie, en op het moment van evalueren het beste de behoefte van jou of jouw team van ontwikkelaars in vult.
Lees meer over AI
Wij zijn Conclusion Enablement.
Specialist op het gebied van development, cloud, workspace en security services.