Programmeren met AI
AI-assistenten zoals GitHub Copilot, ChatGPT en Claude kunnen je helpen bij het schrijven van code. Ze zijn krachtige tools, maar ze maken ook fouten. Dit hoofdstuk behandelt hoe je kritisch omgaat met AI-gegenereerde code.
AI als programmeerhulp
Wat AI-assistenten kunnen
| Taak | Voorbeeld |
|---|---|
| Code genereren | Functie schrijven op basis van beschrijving |
| Code uitleggen | Bestaande code analyseren en toelichten |
| Bugs vinden | Fouten opsporen en oplossingen voorstellen |
| Refactoren | Code verbeteren zonder functionaliteit te wijzigen |
| Documentatie | Docstrings en comments genereren |
| Tests schrijven | Unit tests genereren |
| Vertalen | Code van de ene taal naar de andere |
Wat AI-assistenten niet kunnen
| Beperking | Toelichting |
|---|---|
| Begrijpen van context | Kent je volledige codebase niet |
| Garanderen van correctheid | Kan zelfverzekerd foute code geven |
| Up-to-date zijn | Trainingsdata heeft een afkapmoment |
| Jouw requirements kennen | Weet niet wat je precies nodig hebt |
| Verantwoordelijkheid nemen | Jij blijft verantwoordelijk voor de code |
Kritisch omgaan met AI-code
De gouden regel
!!! warning "Vertrouw, maar verifieer" Behandel AI-gegenereerde code zoals je code van een junior developer zou behandelen: vaak bruikbaar, maar altijd controleren voordat je het accepteert.
Checklist voor AI-code
Voordat je AI-gegenereerde code overneemt, doorloop deze checklist:
| Check | Vraag |
|---|---|
| ✅ Begrijp je de code? | Kun je uitleggen wat elke regel doet? |
| ✅ Doet het wat je vroeg? | Lost het daadwerkelijk jouw probleem op? |
| ✅ Is het correct? | Geen logische fouten, edge cases gemist? |
| ✅ Is het veilig? | Geen security vulnerabilities? |
| ✅ Is het efficiënt? | Geen onnodige complexiteit of performance issues? |
| ✅ Past het in je codebase? | Volgt het de conventies en stijl? |
| ✅ Heb je het getest? | Werkt het met jouw data en omgeving? |
Veelvoorkomende problemen
1. Hallucinaties
AI kan functies, libraries of API's verzinnen die niet bestaan.
1 2 3 4 5 6 7 | |
Oplossing: Controleer imports in de officiële documentatie.
2. Verouderde code
AI kan code genereren gebaseerd op oude versies van libraries.
1 2 3 4 5 | |
Oplossing: Check de huidige documentatie van de library.
3. Security vulnerabilities
AI houdt niet altijd rekening met security best practices.
1 2 3 4 5 6 7 | |
Oplossing: Ken de security risks van wat je bouwt.
4. Inefficiënte oplossingen
AI kiest niet altijd de meest efficiënte aanpak.
1 2 3 4 5 6 7 8 9 10 11 | |
Oplossing: Vraag jezelf af of er een betere manier is.
5. Verkeerde aannames
AI maakt aannames over je data of context die niet kloppen.
1 2 3 4 5 6 7 8 | |
Oplossing: Test met je eigen data, inclusief edge cases.
6. Incomplete error handling
AI vergeet vaak error handling.
1 2 3 4 5 6 7 8 9 10 11 12 | |
Oplossing: Denk na over wat er mis kan gaan.
Effectief prompts schrijven
Hoe beter je vraag, hoe beter het antwoord.
Goede prompts
| Slecht | Beter |
|---|---|
| "Maak een functie" | "Schrijf een Python functie die een lijst met getallen sorteert van hoog naar laag" |
| "Fix deze bug" | "Deze functie geeft een TypeError op regel 5 wanneer de input een lege lijst is. Hoe los ik dit op?" |
| "Maak dit sneller" | "Deze loop over 1M items duurt 30 seconden. Hoe kan ik dit optimaliseren met numpy of vectorization?" |
Prompt template
1 2 3 4 5 | |
Voorbeeld
1 2 3 4 5 6 7 8 9 10 11 12 | |
Vraag: Hoe kan ik verschillende imputers toepassen op verschillende kolomtypes binnen één pipeline?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
Stap 3: Vraag door
Als iets onduidelijk is, vraag de AI om uitleg:
- "Waarom gebruik je deze aanpak in plaats van X?"
- "Wat gebeurt er als de input leeg is?"
- "Is dit de meest efficiënte manier?"
Stap 4: Aanpassen aan jouw stijl
AI-code volgt niet automatisch jouw conventies:
1 2 3 4 5 6 7 | |
Wanneer wel/niet AI gebruiken
Goed voor
| Use case | Waarom |
|---|---|
| Boilerplate code | Repetitief, lage risico |
| Documentatie | AI is goed in helder schrijven (ironisch als je dit leest) |
| Regex patronen | Complexe syntax, makkelijk te testen |
| Exploratie | Snel ideeën uitproberen |
| Leren | Nieuwe concepten begrijpen |
| Debugging hulp | Tweede paar ogen |
Voorzichtig mee
| Use case | Risico |
|---|---|
| Security-kritieke code | AI mist vaak security issues |
| Complexe business logica | AI kent je domein niet |
| Performance-kritieke code | AI optimaliseert niet automatisch |
| Productie code | Altijd reviewen en testen |
Niet voor
| Use case | Reden |
|---|---|
| Code die je niet begrijpt | Je bent verantwoordelijk |
| Blindelings copy-pasten | Leidt tot bugs en technical debt |
| Vervanging voor leren | Je moet zelf kunnen programmeren |
Vaardigheden blijven ontwikkelen
AI is een hulpmiddel, geen vervanging voor programmeervaardigheden.
Balans vinden
| Doe wel | Doe niet |
|---|---|
| Gebruik AI om sneller te werken | Laat AI al het denkwerk doen |
| Leer van AI-suggesties | Kopieer zonder te begrijpen |
| Vraag AI om uitleg | Accepteer code die je niet snapt |
| Combineer met eigen kennis | Vertrouw blindelings |
Blijf leren
- Begrijp de fundamenten (algoritmen, datastructuren)
- Ken je libraries en frameworks
- Oefen zonder AI (soms)
- Review AI-code kritisch — je leert van de fouten
!!! note "Jij bent de expert" AI is een krachtige assistent, maar jij bent de expert die beslist wat goed is. Je hoeft niet alles zelf te typen, maar je moet wel alles kunnen uitleggen en verdedigen.