Terug naar artikelen
Deep Dive - Claude AI als Pair Programmer

Deep Dive - Claude AI als Pair Programmer

Scott Jones - Front-end Developer & Designer

24 maart 2024

In de artikelenreeks van vorige week heb ik de overwegingen, problemen en voordelen van het gebruik van Cursor en Claude om het ontwikkelingsproces te verbeteren onderzocht.

In dit artikel ga ik dieper in op hoe we Claude AI effectief kunnen gebruiken als pair programmer.

Bij het gebruik van AI-tools moet je er altijd van uitgaan dat de informatie die je deelt niet gevoelig of vertrouwelijk is.

Disclaimer

Het gebruik van AI-tools kan mogelijk gevoelige informatie over je organisatie blootleggen - niet alleen code, maar ook structurele en persoonlijke details. Je API-sleutels en andere vertrouwelijke informatie kunnen worden opgeslagen of gebruikt voor training, samen met mogelijk gevoelige gegevens over gebruikers, teamleden en andere exploiteerbare informatie.

Overmatig gebruik van AI

Zoals we in dit artikel zullen bespreken, zijn er overtuigende redenen om niet te veel te vertrouwen op AI-tools voor het schrijven van code. AI moet strategisch worden ingezet - als hulpmiddel om routinematige taken te automatiseren, inzichten te verzamelen en als sparringpartner te dienen. Overmatige afhankelijkheid van AI om je code te schrijven en te repareren zal uiteindelijk problemen creëren voor zowel jou als je organisatie.

Kennis & Ervaringsniveau

Afhankelijk van je ervaring met programmeren, software ontwikkelingsarchitectuur en de codebase waaraan je werkt, zal en moet je aanpak verschillen.

Voor juniors en mediors raad ik aan om Claude te gebruiken als vraag/antwoord- en debugging-tool, maar schrijf zoveel mogelijk code zelf en vraag Cursor om advies, net zoals je zou doen met een Senior developer in je team.

Druk niet blindelings op 'Toepassen'

Een probleem dat ik mensen vaak zie tegenkomen is dat ze in een flow raken en simpelweg op toepassen drukken, zonder op te merken dat Claude slechts een 'halve oplossing' heeft gegeven en aanvullende informatie nodig heeft om de suggestie af te maken.

Beoordeel altijd de wijziging volledig, maar bekijk ook grondig de samenvatting en de redenering. Dit helpt je sneller op te merken of er een misverstand is of dat er ruis en overreach in de voorgestelde code wordt geïntroduceerd.

Pair Programming als Junior tot Medior

Ik geloof persoonlijk dat je voor effectief leren enige weerstand moet ervaren bij het probleem waarmee je wordt geconfronteerd. Als je direct naar Cursor AI springt wanneer je een probleem tegenkomt of een oplossing moet creëren, zul je niet effectief leren over het probleem of zelf de oplossing uitvinden.

Hoewel tools zoals Cursor deel blijven uitmaken van onze toolkit, is het belangrijk te begrijpen wat er gebeurt en waarom om effectief te blijven in je werk. Wanneer de AI verward raakt, ruis introduceert, te ver gaat of te ingewikkeld wordt, kun je vast komen te zitten in een cyclus van achteruitgang.

Laten we eerst het probleem oplossen

In dit scenario gaan we ervan uit dat je een winkelwagen module moet bouwen die geïsoleerd in je codebase moet leven, maar wel events moet ontvangen wanneer nieuwe items aan de winkelwagen worden toegevoegd. Onze codebase is in dit geval een React/NextJS applicatie.

De kritieke delen van de criteria zijn de isolatie en modulariteit - dit moet overal in je codebase kunnen leven maar wel reageren op wat er gebeurt. Als junior weet je misschien nog niet precies hoe je dit moet oplossen, maar iemand in je team noemde het gebruik van Context Providers om de event triggers en listening af te handelen.

Claude, ik moet context providers gebruiken om items in mijn winkelwagen te beheren, aangezien de componenten in verschillende delen van mijn codebase zijn opgenomen. Kun je me een voorbeeld laten zien van hoe ik een context provider kan schrijven om state/event updates te verzenden en te luisteren

Dit type prompt geeft je een mooie initiële basis om je oplossing op te baseren. Kopieer en plak niet simpelweg of vraag de AI niet om dit voor je toe te passen. Begin in plaats daarvan met het zelf implementeren, waarbij je de voorbeeldcode als basis gebruikt.

Dit zal verifiëren dat je de implementatielocaties en specifieke details begrijpt. Als er dingen fout gaan, kun je beginnen te zien waarom - was het jouw begrip? Had Cursor het fout? Je kunt beginnen met vergelijken en zelf debuggen.

Inzichten verzamelen over je code

Inzichten verzamelen over je code

In het vorige voorbeeld hebben we Cursor gebruikt om ons te helpen en ons te introduceren aan een specifiek patroon dat vaak wordt gebruikt in React en NextJS. We hebben het handmatig geïmplementeerd en het proces doorlopen om de feature te voltooien.

Nu kunnen we een stap verder gaan voordat we de code ter review indienen door Claude te vragen om mogelijke verbeteringen voor te stellen:

Claude, zijn er optimalisaties of een betere aanpak die ik had kunnen maken om deze winkelwagenfunctionaliteit in de frontend te laten werken

Het antwoord zal waarschijnlijk dingen noemen als: Context Splitting, Memoization, localStorage persistence, SSR compatibility en waarschijnlijk meer.

Dit wordt interessant, want als senior developer kan ik beter de waarde zien in context splitting en SSR compatibility maar ben ik minder geneigd om localStorage of Memoization te gebruiken omdat het account object de winkelwagen opslaat (database) en de winkelwagen niet vaak genoeg update om Memo betekenisvolle prestatievoordelen te laten bieden.

Als Junior Developer ken je de impact misschien niet en implementeer je mogelijk alle suggesties. Dit zou een uitstekend moment zijn om iemand in je team te vragen om een snelle review van de suggesties en huidige code. Ze kunnen uitleggen wat in dit geval echt van toepassing is terwijl je handmatig je code begint te refactoren om de waardevolle optimalisaties te ondersteunen.

Het Merge Request maken

In dit stadium hebben we Cursor gebruikt om ons te helpen een nieuwe aanpak te leren, die aanpak te optimaliseren en waardevolle discussies met het team te voeren over micro-optimalisaties en over-optimalisaties.

Ervan uitgaande dat je organisatie linting tools en pre-commit hooks gebruikt om codeconsistentie in je codebase te waarborgen. Als je dit soort tools niet gebruikt, kun je Claude vragen om je project te linten op basis van de omringende codebase.

ECHTER - Ik raad aan om dit als een aparte commit te doen, zodat je je wijzigingen kunt onderscheiden van Claude's linting wijzigingen, waardoor het makkelijker wordt om terug te draaien indien nodig. Deze scheiding zorgt ervoor dat je een duidelijk zicht houdt op je daadwerkelijke wijzigingen versus geautomatiseerde formatteringswijzigingen.

Pair Programming als Senior

Op dit niveau kan Cursor ons helpen met veel van het routinematige werk. Met hetzelfde scenario als hierboven kunnen we uitgebreidere prompts schrijven omdat we al weten welk type code we willen maken.

Werken met Templates

Werken met Templates

Op dit niveau kan Cursor ons helpen met veel van het routinematige werk. Met hetzelfde scenario als hierboven kunnen we uitgebreidere prompts schrijven omdat we al weten welk type code we willen maken.

Claude, schrijf voor mij een context provider vergelijkbaar met #account-context.js maar in dit geval zal het een winkelwagen zijn, die de informatie opslaat in de account context met behulp van de UpdateAccount() methode, we hebben de typische functies nodig van toevoegen, verwijderen, verhogen etc van items in onze winkelwagen, link terug naar de winkel item detail pagina etc etc

Dit zal een template genereren gebaseerd op bestaande oplossingen, met de optimalisaties die we zoeken al inbegrepen.

Werken met Onbekende Codebases

Dit is waar dingen problematisch kunnen worden, er zijn een aantal aspecten hieraan die de kwaliteit van de suggesties en templates van ClaudeAI sterk kunnen beïnvloeden.

De Impact van Technologie Populariteit

De Impact van Technologie Populariteit

Door mijn ervaring heb ik gemerkt dat de kwaliteit van AI-assistentie aanzienlijk verschilt op basis van de populariteit en documentatie van de technologie. Deze variatie is begrijpelijk - LLMs kunnen alleen zo goed zijn als hun trainingsdata, en minder gebruikte technologieën hebben natuurlijk minder voorbeelden om van te leren.

Laat me dit illustreren met drie praktijkvoorbeelden uit hetzelfde project:

  • Warcraft Logs: Als een nichedienstmet beperkte documentatie bleek het werken met deze API uitdagend. Cursor had moeite om betekenisvolle templates of oplossingen te bieden, wat veel handmatig werk en meerdere iteraties vereiste om de juiste querystructuren te bepalen.

  • Prismic: Ondanks dat het breder geadopteerd is en betere documentatie heeft, waren de AI-suggesties voor Prismic-integratie nog steeds suboptimaal. De resultaten waren echter merkbaar beter dan met Warcraft Logs, wat laat zien hoe toegenomen adoptie de AI-assistentie verbetert.

  • WordPress: Hier schitterde AI echt. Met WordPress's uitgebreide documentatie, talrijke repositories en wijdverbreid gebruik, was de kwaliteit van suggesties en gegenereerde code aanzienlijk hoger. Queries en prompts produceerden consistent nauwkeurigere en bruikbaardere resultaten.

Dit patroon kwam naar voren tijdens het bouwen van hetzelfde project, waar ik zowel Prismic- als WordPress-oplossingen implementeerde met Warcraft Logs als databron. Het contrast in AI-assistentiekwaliteit was opvallend en correleerde direct met de adoptiegraad en documentatiebeschikbaarheid van elke technologie.

Bedrijfslogica Overwegingen

Dit geldt ook voor je bedrijfslogica - je dataformaat en workflow kunnen vergelijkbaar zijn maar net verschillend genoeg om meer ruis, overreach en problemen te veroorzaken tenzij je je verzoeken beperkt tot specifieke zaken en kleinere iteratieve wijzigingen maakt.

Omgaan met Gevoelige Data

De eerste disclaimer is om voorzichtig te zijn met wat je deelt met Cursor en Claude - zorg ervoor dat je geen informatie blootlegt die je systeem of gebruikers in gevaar kan brengen.

Alternatieve Tools en Benaderingen

Alternatieve Tools en Benaderingen

De eenvoudigste aanpak is het vermijden van editors of extensies zoals Cursor, waardoor bugs, technische fouten of gebruikersfouten je code niet naar de cloud kunnen sturen.

Als je deze tools gebruikt, probeer dan te zorgen dat je een door het bedrijf beheerd account hebt waar je data kunt verwijderen. Dit vereist echter nog steeds vertrouwen in de service en zijn betrouwbaarheid met je geïndexeerde code.

Claude.ai op het web biedt een mooie oplossing, waarmee je prompts, voorbeeldcode en context kunt geven terwijl je volledige controle houdt over wat er voor verwerking wordt verzonden.

Data Anonimisering

Denk in 'herkenbare' termen bij het interacteren met AI's.

Bijvoorbeeld, bij het bouwen van belastingsoftware of iets voor lokale energietransitie-initiatieven - politieke en gevoelige onderwerpen waar informatielekken publieke bezorgdheid kunnen veroorzaken - benader het voorzichtig.

Voor energietransitiewerk, schrijf context-bewuste maar niet data-bewuste prompts: Ik heb een functie nodig die de geproduceerde gigawatturen neemt en het transformeert naar dit formaat: XYZ, maar ook in ABC en EFG gebaseerd op props. Dit geeft je wat je nodig hebt zonder specifieke data of waarden bloot te leggen.

In een alternatief geval zou je kunnen denken aan het doorgeven van een echte API-response met echte waarden, maar dit zou gevoelige informatie kunnen bevatten over energiegebruik in specifieke gebieden of door specifieke klanten.

De Werkelijke Impact van AI op Ontwikkeling

Het gebruik van AI en LLMs verandert fundamenteel hoe we code schrijven. In plaats van ontwikkelaars te vervangen, dient het als een extra tool in onze toolkit, die helpt bij het beheren van generieke taken zodat we ons kunnen concentreren op projectspecifieke uitdagingen. Deze vermindering van mentale belasting kan teams fris houden en alerter maken op potentiële problemen of kansen voor innovatie.

Meer dan Tijdsbesparing

Meer dan Tijdsbesparing

Interessant genoeg leidt het gebruik van Cursor niet altijd tot directe tijdsbesparing. De echte waarde ligt echter in het stroomlijnen van het ontwikkelingsproces en het bieden van gestructureerde startpunten die de besluitvorming later in het proces kunnen verbeteren.

Het voordeel zit niet noodzakelijk in het sneller schrijven van code, maar in het verminderen van cognitieve belasting en het behouden van betere mentale helderheid tijdens het ontwikkelingsproces. Dit stelt ontwikkelaars in staat hun energie te richten op kritisch denken en probleemoplossing in plaats van routinematige implementatiedetails.

De Mythe van AI Vervanging

Hoewel er overtuigende verhalen zijn over complete SaaS-oplossingen die puur met AI-assistentie zijn gebouwd, moeten we deze claims zorgvuldig benaderen. Ja, AI is misschien in staat om MVP-niveau applicaties of templates te genereren, maar dit roept belangrijke vragen op over codekwaliteit en onderhoudbaarheid op lange termijn.

Overweeg deze belangrijke zorgen:

  • Hoe goed begrijpt de ontwikkelaar de gegenereerde codebase?
  • Wat gebeurt er als dingen kapot gaan of externe afhankelijkheden veranderen?
  • Wie onderhoudt en debugt deze code in de toekomst?

Het is vergelijkbaar met constructie: het gebruik van goedkopere materialen lijkt misschien in eerste instantie kosteneffectief, maar er is meestal een goede reden waarom bepaalde standaarden bestaan. Hetzelfde principe geldt voor softwareontwikkeling - een oplossing die volledig door AI is gegenereerd werkt misschien vandaag, maar kan morgen een onderhoudsnachtmerrie worden.

De werkelijke kosten van een door AI gegenereerde oplossing openbaren zich vaak pas na verloop van tijd. Hoewel het in eerste instantie sneller en goedkoper lijkt, kunnen het gebrek aan diep begrip en potentiële kwaliteitsproblemen op lange termijn leiden tot aanzienlijk hogere kosten. Net als bij constructie, loont het zelden om shortcuts te nemen in softwareontwikkeling.

Belangrijkste Inzichten

Voor Verschillende Ervaringsniveaus

  • Junior Developers: Gebruik AI als leermiddel, focus op het begrijpen van patronen en implementaties in plaats van oplossingen kopiëren
  • Mid-level Developers: Benut AI voor codereview en optimalisatiesuggesties, maar valideer ze met je team
  • Senior Developers: Gebruik AI om templates te genereren en routinetaken te automatiseren, maar wees voorzichtig met overgeneratie

Best Practices

  1. Review Alles: Accepteer nooit blindelings AI-suggesties; begrijp altijd de voorgestelde wijzigingen
  2. Iteratieve Aanpak: Break complexe problemen op in kleinere, beheerbare prompts
  3. Beveiliging Eerst: Anonimiseer gevoelige data en wees voorzichtig met welke informatie je deelt
  4. Technologie is Belangrijk: AI presteert beter met veel gebruikte technologieën; verwacht meer handmatig werk met niche tools

Beveiligingsoverwegingen

  • Geef de voorkeur aan webgebaseerde AI-tools boven IDE-integraties voor gevoelige codebases
  • Gebruik geanonimiseerde voorbeelden bij het bespreken van bedrijfslogica
  • Houd bedrijfsspecifieke implementatiedetails privé
  • Overweeg het gebruik van door het bedrijf beheerde AI-accounts voor betere controle

Onthoud: AI moet je ontwikkelingsproces verbeteren, niet kritisch denken en probleemoplossende vaardigheden vervangen. Gebruik het als een tool om je mogelijkheden te vergroten terwijl je codekwaliteit en beveiligingsstandaarden handhaaft.

Gerelateerde Artikelen

Product Owners - Considerations for your next project with suppliers

Product Owners - Considerations for your next project with suppliers

Here at Goldmund, we've been openly publishing more and more articles on the use of AI. We've tried to find a balanced truth in this topic, which is commonly over-hyped or under-played depending on bi...

Deep Dive - Claude AI as a Pair Programmer

Deep Dive - Claude AI as a Pair Programmer

In last week's series of articles, I explored the considerations, issues, and benefits of using Cursor and Claude to enhance the development process. In this week's article, I'll dive into how we can...

Developer Experience Using Cursor.ai and Claude.ai - Part 1: Considerations & Diminishing Returns

Developer Experience Using Cursor.ai and Claude.ai - Part 1: Considerations & Diminishing Returns

As a front-end developer constantly seeking to enhance productivity, I've spent the last several months integrating AI tools into my daily workflow. Cursor.ai has become my editor of choice, while Cla...

Developer Experience Using Cursor.ai and Claude.ai - Part 2: Benefits

Developer Experience Using Cursor.ai and Claude.ai - Part 2: Benefits

Having explored the challenges of AI coding assistants in my previous article, I'm now turning to the substantial benefits these tools can bring to a developer's workflow. After months of intensive us...

Designer Experience - Using Midjourney Ethically

Designer Experience - Using Midjourney Ethically

While my journey with AI coding assistants has been documented in previous articles, this piece focuses specifically on how Midjourney has revolutionized my design process. As visual communication bec...

Bezoek ons

Hoofdkantoor Groningen

Winschoterdiep 50, 9723 AB Groningen