Ethics for Software Engineers

Opzet voor een 5 ECTS keuzevak

11 januari 2026 Leestijd: 17 minuten

Dit is een uitwerking van een idee voor de opzet van een keuzevak Ethiek binnen het HBO-ICT. De structuur is gebaseerd op het boek “Ethics for People Who Work in Tech” van Marc Steen (2022). Het vak sluit aan bij de keuzevakbeschrijving die toegepaste ethiek centraal stelt: praktische besluitvorming, niet abstracte filosofie.

De cursusstructuur volgt de drie delen van het boek, maar het boek zelf is niet per se verplicht - zie mijn overwegingen daarover onderaan deze post in de sectie “Het boek verplicht of niet”.

Versiegeschiedenis

Datum Versie Wijziging
2026-01-11 1.0 Eerste uitwerking van… read more Dark mode SOFA mode Home Alle posts Tags Tags Over mij Atom feed Bart van der WalPersoonlijke website “Wie schrijft, die blijft!” Software Engineering Onderwijs AI SwimRun Privacy v1.1.0 Ethics for Software Engineers Opzet voor een 5 ECTS keuzevak 11 januari 2026 Leestijd: 17 minuten PDF ▶ Versiegeschiedenis DRAFT Datum Status Toelichting 11 jan 2026Gestart Eerste idee ethiek onderwijs software-engineering Dit is een uitwerking van een idee voor de opzet van een keuzevak Ethiek binnen het HBO-ICT. De structuur is gebaseerd op het boek “Ethics for People Who Work in Tech” van Marc Steen (2022). Het vak sluit aan bij de keuzevakbeschrijving die toegepaste ethiek centraal stelt: praktische besluitvorming, niet abstracte filosofie.De cursusstructuur volgt de drie delen van het boek, maar het boek zelf is niet per se verplicht - zie mijn overwegingen daarover onderaan deze post in de sectie “Het boek verplicht of niet”.Versiegeschiedenis Datum Versie Wijziging 2026-01-11 1.0 Eerste uitwerking van vakopzet 2026-01-20 1.1 Details/summary blokken gefixed; Optionele casussen toegevoegd (WIP: nog valideren, voorlopig nog niet live, potentiele AI Slop!)Waarom dit vak?De EU AI Act, GDPR en maatschappelijke druk maken ethische kennis niet langer optioneel. Bedrijven zoeken developers die verder kijken dan “het werkt”. Met AI-tools die code genereren, verschuift de rol van de software developer. Hij/zij gaat/moet meer naar een engineering, meer testen, valideren. Maar ook de requirements duidelijk krijgen en eliciteren bij de opdrachtgever of ander stakeholders uit het toepassingsdomein van de beoogde applicatie of software. Daarbij is het ook van belang bredere context meenemen, uit de bredere maatschappelijke ontwikkelingen: minder typen, meer nadenken over wat je bouwt en waarom. Wat de impact daarvan is op het bedrijf en de maatschappij. En hier pro-actief in bijsturen.Drie delenDe opzet van de course volgt grofweg de structuur van Steen’s boek.Deel 1: Intro EthiekInleiding: Als software engineer, data engineer of security specialist kom je regelmatig vraagstukken tegen waarbij verschillende belangen botsen. Belangen van de opdrachtgever, de gebruikers van het systeem, andere stakeholders — en soms ook je eigen geweten. Deze dilemma’s lijken niet altijd dramatisch, maar ze kunnen grote gevolgen hebben.Neem social media platforms. Een opdrachtgever heeft veel baat bij het opslaan en analyseren van bepaalde data — locatiegegevens, gedragspatronen, voorkeuren. Maar gebruikers geven deze privacy ongemerkt op. Wat op korte termijn heel leuk lijkt (gratis platform, persoonlijke aanbevelingen) en positief voor het bedrijf (sterke groei, veel advertentie-inkomsten), heeft op langere termijn ernstige negatieve gevolgen. Twee voorbeelden TikTok: Algoritmes optimaliseren voortdurend op engagement — wat gebruikers blijft kijken. Voor jongeren betekent dat een eindeloze feed van getriggerde content over uiterlijk, status, trend. Het gevolg? Een stijging van zelfbeeldproblemen, eetverstoornissen en angststoornissen onder tieners. De app werkt perfect voor wat het ontworpen is. Maar de maatschappelijke kosten zijn hoog. Facebook en Cambridge Analytica: Facebook verkocht niet alleen advertentiesruimte, maar ook de intieme psychologische profielen van miljarden gebruikers. Een bedrijf als Cambridge Analytica kon die profielen gebruiken voor microtargeting en politieke manipulatie. Legaal? Lastig. Ethisch? Zeker niet.In beide gevallen bouwden ingenieurs code. Ze voltooidden features. Het systeem werkte zoals ontworpen. Maar niemand stopte en vroeg: is dit wat we eigenlijk willen bouwen?Theorie: Om deze dilemma’s te navigeren, behandelen we de drie ethische hoofdstromingen, steeds getoetst aan echte casussen Utilisme: Maximaliseer geluk voor zoveel mogelijk mensen Deugdethiek: Handel zoals een wijs, moedig, rechtvaardig persoon zou doen Deontologie: Volg universele regels (bijv. “lieg niet”, “steel niet”, of Kants categorische imperatief: “gebruik mensen nooit alleen als middel”)Praktijk: Trolley problems helpen je jezelf beter te begrijpen. Ze zijn bewust abstract en extreem — juist daarom tonen ze wat je ethische intuïties zijn. Als je in een abstract, hypothetisch scenario twijfelt, welke waarden spelen mee? Utilistische afwegingen (“redden we meer levens?”)? Regels (“ik mag dit simpelweg niet doen”)? Karakter (“wat zou een goed mens hier doen?”). Door je eigen keuzes in trolley problems te analyseren, word je bewuster van welke stroming je aantrekt — en dat helpt je in echte dilemma’s als die van social media.Marc Steen beschrijft in hoofdstuk 5 de oorsprong van dit gedachte-experiment. Philippa Foot bedacht het in 1967 om het “moeilijk maken van ethische keuzes” uit te leggen — je hebt goede bedoelingen, maar je acties hebben ook schadelijke gevolgen. Ze vroeg zich af: wat doe je dan? Het punt dat Steen benadrukt is dat Foot dit dilemma bedacht om na te denken, niet om het “op te lossen” niet door ‘uit te rekenen wat het meest ethisch is’ of ‘absolute regels te definieren die aangeven wat je moet doen’..Het punt: Foot bedacht dit dilemma om over ethiek na te denken, niet om een algoritme te schrijven dat het “oplost”. Maar precies dat laatste is de typische neiging van software engineers en veel andere techneuten: alles meetbaar en berekenbaar denken te kunnen maken. In sommige situaties werkt dat prima - maar ethiek zit vol onvolledige informatie, onzekerheden en situaties waar een puur statistische aanpak arbitrair of contra-intuïtief wordt. Vandaar ook de aantrekkingskracht van regel-gebaseerde ethiek (deontologie): als je niet alles kunt berekenen, kun je in ieder geval principes volgen.Twee websites Moral Machine - Serieuze dilemma’s over zelfrijdende auto’s Absurd Trolley Problems - Grappiger variantDeel 2: Ethische basisprincipesKernconcepten en praktijkgevallenIn deel twee behandelen we vier sleutelconcepten, elk met werkelijke casussen en samenwerkingsvormen die studenten laten voelen hoe ethiek in echte situaties speelt.1. Technologie is niet neutraal.Elk design is een set keuzes. Een app die belooft “je helpen tijd in te sparen” kan ook ontworpen zijn om je langer vast te houden. Een algoritme dat “eerlijk” selecteert kan systematische bias bevatten. Technologie is altijd politiek en ethisch geladen. Casussen en werkvormen uitklappen Casus: Recruitment AI discrimineertAmazon bouwde een tool om CV’s automatisch te screenen. De AI was getraind op historische CV’s van werknemers — bijna allemaal mannelijk (tech-dominantie). Resultaat: vrouwen werden systematisch afgewezen door een algoritme dat niemand “bewust” discrimineerde. Het systeem “werkte” — het weigerde CV’s sneller af. Maar het versterkte bestaande bias. Amazon heeft het later stopgezet. (Reuters, 2018)Werksituatie: Je bent UI-designer op een gig-economy appDe opdrachtgever wil dat je het uitbetalingssysteem intuïtief maakt. Maar “intuïtief” kan ook betekenen: subtiel veel verborgen kosten en commissies. Je kunt het transparant ontwerpen of bewust moeilijk. Beide zijn “technisch correct”. Wat doe je?Samenwerkingsvorm: Design de-briefing in groepenVerdeel de klas in groepjes. Elk groepje ontvangt een design-scherm (bijv. payment flow, notification preferences, cookie settings). Taak: plek de subtiele keuzes aan die het gedrag van gebruikers sturen. Wat zou een “ethisch ontwerp” anders doen?2. Gedeelde verantwoordelijkheid — de Legal-Ethical MatrixSteen stelt de Legal-Ethical Matrix: wat legaal is, is niet per se ethisch. En andersom. Als engineer kun je niet zeggen “het was legaal, dus niet mijn schuld”.   Ethisch Onethisch Legaal Ideaal ✓ Veel bedrijven hier Illegaal Whistleblowers (Snowden) Duidelijk fout Casussen en werkvormen uitklappenCasus: LinkedIn en je emailcontactenLinkedIn stelde gebruikers om hun emailpaswoord in te voeren. Daarmee konden ze automatisch al je contacten importeren — en hen uitnodigen. Legaal? Ja, in de terms of service. Ethisch? Nee — gebruikers gaven onbewust hun hele contactenboek weg. LinkedIn gaf later toe dat dit “een fout was in onze design” (LinkedIn, 2012). Maar wie was schuldig? De engineers? Het product team? De CEO? Allen?Werksituatie: Je project manager vraagt je GDPR-data langer op te slaanDe klant zegt: “We hebben die data nodig voor analyses.” Legaal? Mogelijk, met goede justificatie. Ethisch? Niet nodig. Jij als engineer bent niet alleen coder maar ook “ethische kanaal” — je roept dit aan. Wat zeg je?Huiswerk: Matrix invullenStudenten krijgen 5 technologie-voorbeelden (Clearview AI, TikTok’s algorithm, WhatsApp encryption, Google tracking, etc.). Taak: plaats elk in de matrix. Groepsdiscussie: waarom zitten ze daar? Wat verandert ze van plek?3. Enshittification — hoe platforms degraderenCory Doctorow beschrijft dit patroon Platform is goed voor gebruikers (gratis, snel, betrouwbaar) Platform misbruikt gebruikers voor business customers (verkoopt data aan adverteerders, prijzen stijgen) Platform misbruikt business customers (algoritme verstopt hun content, tenzij ze betalen) Platform sterft (iedereen verliest vertrouwen) Casussen en werkvormen uitklappenCasus: Twitter → X Fase 1: Gratis platform, iedereen kan tweeten, bereikt miljoen volgers Fase 2: Advertenties introduceren, data verkopen aan adverteerders, analytics-tools alleen voor betaalde users Fase 3: Elon Musk koopt het. Alleen “verified” (betaalde) tweets krijgen zichtbaarheid. Algoritme favoriseert “X Premium” content Fase 4: Massale exodus naar Bluesky, Threads, Mastodon. Waarde van X daalt. Adverteerders verlaten platform.Werksituatie: Je bent senior dev op een streaming platformManagement zegt: “Voeg reclames toe aan het gratis tier. Maak non-premium users’ ervaring slechter zodat ze upgraden.” Technisch eenvoudig. Bedrijf vind het prima — revenue stijgt. Maar je ziet dat users vertrekken. Wat vind je ervan?Samenwerkingsvorm: Platform-trajectory tekenenGroepjes kiezen een bekend platform (Instagram, Discord, Spotify, GitHub). Taak: teken de enshittification-curve. Waar is het platform nu? Wat waren de “eerste hints”? Wat zouden engineers op elk stadium hebben kunnen doen anders?4. Dark patterns — manipulatie door designDe ACM: “Big tech gebruikt dark patterns om consumenten naar opties te sturen die nadelig zijn voor hun privacy”. Dit zijn geen bugs. Het zijn features. Opzettelijk. Casussen en werkvormen uitklappenCasus: Facebook Messenger — download requiredFacebook maakte de Messenger-app verplicht. Wilde je Messenger gebruiken? Download een app. Op mobiel-web bleek het steeds moeilijker. Miljoenen downloads. Legaal? Ja. Manipulatief? Absoluut.Casus: TikTok en Instagram account verwijderenGen Z zit op TikTok en Instagram. Account verwijderen is bewust moeilijk gemaakt Instagram: Een ingewikkelde navigatieroute (Instellingen → Accounts Center → Persoonlijke gegevens → Eigendom en beheer) plus een maand wachtperiode. Op Android werkt het niet eens in de app; je moet naar de website. (Delia, 2023) TikTok: Een serie “confirmation screens” (elk scherm vraagt je opnieuw: “Weet je het zeker?”) die je de kans geven je beslissing te heroverwegen. Plus een wachtperiode waarin één enkele app-click de teller reset. (Heritage Foundation, 2023)Dit heet het “Hard to Cancel” dark pattern. Sinds februari 2024 verbiedt de Digital Services Act dit. Maar wie programmeerde het? Waarom?Huiswerk: Dark Pattern HuntStudenten gaan actief zoeken naar dark patterns in apps en websites die ze dagelijks gebruiken of elders online staan Pre-checked checkboxes Verborgen afmeldopties Fakedreiging van urgentie (“aanbieding verloopt vandaag!”) Herhaalde bevestigingsschermen Moeilijke delete-flowsZe documenteren wat ze vinden met screenshots. Volgende les: samenbrengen, bespreken, categoriseren.Samenwerkingsvorm: Fix it workshopGroepjes kiezen één dark pattern uit de huiswerk-collectie. Taak: ontwerp hoe het ethisch zou kunnen. Prototype-schets. Presenteer aan klas. Discussie: wat verliest het bedrijf? Wat wint de gebruiker?Praktijkopdracht: Zelf een dark pattern herkennen en analyserenIn plaats van dark patterns zelf te bouwen (wat oppervlakkig voelt), doen studenten iets sterker: ze pakken een bestaande dark pattern uit de praktijk en voeren een gedetailleerde analyse Herkennen: Welke dark pattern is dit? (Verborgen kosten? Moeilijk uitstappen? Urgency-fake?) Bijdrage tracer: Welke engineers/designers hebben hier aan meegewerkt? Wat is hun rol? (Frontend dev die het bouwt? Product manager die het eist? Designer die het ontwerpt?) Impact: Wie wordt erdoor geraakt? Hoe voelen gebruikers zich? Alternatieven: Hoe zou dit ethisch kunnen? Reflectie: “Als ik hier zelf had gezeten — had ik ja gezegd?”Dit is sterker dan bouwen, omdat het studenten dwingt om verantwoordelijkheid en collectieve schuld te doordenken. Het is niet “ik programmeer dit”, maar “wie in deze organisatie koos ervoor en waarom?”5. Win-win ontwerp — voorbij zero-sum thinkingTot hier toe hebben we vooral casussen gezien waar Big Tech “slecht” is en gebruikers “slachtoffer”. Maar dit is te simpel. De werkelijkheid is dat bedrijven óók onder druk staan. Gebruikers willen gratis diensten. Investeerders willen groei. Employees willen betaald werk. Dit zijn echte spanningen, niet kwaadwillendheid.De vraag is: kun je alle partijen voeden zonder dat iemand eronder lijdt?Tegenvoorbeelden: Bedrijven die anders doen Signal: Gratis messaging-app. Geen advertenties. Geen data-verkoop. Hoe verdienen ze geld? Donaties, en één betaald plan (Signal+). Gebruikers vertrouwen het, want er is geen incentive om hun data te misbruiken. DuckDuckGo: Zoekmachine zonder tracking. Ook zonder advertenties die je volgen. Ze verdienen door “anonieme” advertenties (je zoekt naar “schoenen”, je ziet advertenties voor schoenen, maar DuckDuckGo kent je geschiedenis niet). Gebruiker wint privacy, bedrijf wint inkomsten. Basecamp/Hey: Email en project management. Betaald (geen gratis tier), geen advertenties, geen data-verkoop. Duurder dan Gmail, maar je bent klant, niet product. Bedrijf verdient door je te serveren, niet door je te exploiteren.Deze bedrijven zijn niet perfect. Maar ze tonen dat andere businessmodellen kunnen.Huiswerk: Onderzoek eigen voorbeeldenStudenten zoeken zelf een bedrijf of app waar ze denken: “Dit doet het goed.” Ze zoeken naar Blog posts of interviews van oprichters Reviews of feedback van gebruikers Hoe verdienen ze geld? Wat zijn hun trade-offs? Hoe lang kunnen ze dit volhouden?Volgende les: presenteren en samen analyseren wat hen “goed” maakt.Werksituatie: Het dilemma van gratisJe werkt bij een startup met een geweldige app. Gratis is aantrekkelijk, maar de investeerders willen ROI. Je manager zegt: “We kunnen hier geld verdienen. Drie opties: (1) advertenties, (2) data verkopen, of (3) betaald plan met gratis tier.” Alle drie hebben trade-offs. Wat zeg je?Samenwerkingsvorm: Stakeholder mapGroepjes krijgen een platform of app (bijv. YouTube, Spotify, banking-app). Taak: teken alle stakeholders Users (gratis willen, kwaliteit willen) Bedrijf (geld willen verdienen) Adverteerders (bereik willen) Medewerkers (betaald werk willen) Maatschappij (privacy, veiligheid willen)Nu: welk businessmodel past? Wat verliest elke stakeholder? Wat wint elke stakeholder? Kan je het rechtvaardiger doen?Diepere vraag: “What if we sell?”Geld verdienen is niet inherent slecht. Het is nodig voor stabiliteit. Developers willen betaald worden. Servers moeten betaald. Maar wat gebeurt er als je bedrijf groeit, je gebruikersbestand stijgt, en dan word je opgekocht door een ander bedrijf met ander belangen?Voorbeeld: WhatsApp was gratis (geen tracking, goede privacy). Facebook kocht het in 2014 voor $19 miljard. Jaren later: WhatsApp deelt metadata met Facebook. Gebruikers die dachten “dit is veilig” zagen hun privacy-model veranderen.Vraag: Kun je “nee” zeggen tegen zo’n aanbod? Of moet je als founder aanvaarden dat groei betekent: je verliest controle?Huiswerk: Case study van transformatieStudenten kiezen een bedrijf dat is opgekocht of voorgekocht (WhatsApp, Instagram, YouTube, Slack, etc.) en onderzoeken Wat waren de originele waarden? Wat veranderde na aankoop? Hadden studenten in het team kunnen/moeten zeggen “nee”?6. Systeem-analyse: De rol van lobby en reguleringTot hier toe hebben we bedrijven en engineers bekeken. Maar de overheid speelt ook mee.De EU AI Act, GDPR, Digital Services Act — dit zijn regelgeving die ethiek “forceert”. Bedrijven volgen omdat ze moeten. Maar Lobby-invloed: Tech bedrijven geven miljoenen aan lobbyisten. Microsoft had in 2012 vrijwel geen lobbybudget in Brussel. Nu is het een van de grootste spenders. Dit beïnvloedt welke regelgeving écht streng is. Gebrek aan kennis: Politici en beleidsmakers begrijpen vaak niet hoe technologie werkt. Ze schrijven regelgeving die achterhaald is voor ze ondertekend wordt. Capture: Soms “vangen” grote bedrijven de regelgeving. Ze zeggen: “Dit gaat niet werken. Vertrouw ons en we regelen het zelf.” Inspecties worden zwak. Boetes zijn peanuts. Casussen en werkvormen uitklappenWerksituatie: Je bent architect bij een tech bedrijfDe EU stelt een nieuwe rule in. Je manager zegt: “Dat gaat veel kosten. We lobbyen tegen. Ik heb al contact met Brussel.” Wat denk je?Huiswerk: Lobby trackingStudenten zoeken naar Welke tech bedrijven gaven hoeveel geld aan lobbyisten in hun land? (veel landen publiceren dit) Wat vroegen ze? (Toegankelijk via registraties) Tegen welke regelgeving lobbyen ze?Voorbeeld: OpenAI lobbied tegen strict AI regulation. GitHub Copilot (Microsoft) lobbied tegen copyright-wetten die hun training-data beschermen…Samenwerkingsvorm: Systeem-kaart tekenenGroepjes maken een “krachtenkaart” Links: regulators (regering, EU, etc.) Midden: bedrijven (Tech giants, startups, etc.) Rechts: maatschappij (gebruikers, activisten, media)Pijlen: wie beïnvloedt wie? Wie wint, wie verliest?Voorbeeld: TikTok in de VS REGULATORS (Links) BEDRIJVEN (Midden) MAATSCHAPPIJ (Rechts) ┌────────────────┐ ┌────────────────┐ ┌──────────────────┐ │ US Congress │◄─────────│ ByteDance │ │ Gen Z users │ │ (wil ban) │ \($ │ TikTok │─────────►│ (love app) │ │ Trump, Biden │ (lobbies)├────────────────┤ │ │ └────────────────┘ │ Investors │ │ Activists │ │ │ (Chinese $) │◄─────────│ (mental health │ │ └────────────────┘\)$ │ concerns) │ │ ▲ │ │ │ (ban dreigement) │ │ Media │ │ │ (lobbies tegen) │ (kritisch) │ ▼ │ └──────────────────┘ US Senators ByteDance executive zeggen: “We stoppen teams zeggen: “Nee, data-deling met China” dit kan niet” en lobbyenAnalyse Regulators: Willen ban of strikte controle (geopolitieke druk vanuit VS tegen China) ByteDance: Lobbiet gigantisch tegen ban. Ze hebben te veel inkomsten. Users: Willen de app houden. Ze petitioneren, protesteren. Investeerders: Winnen alleen met groei. Dus lobbyen mee. Maatschappij: Verdeeld. Sommigen: “Privé gevaar!” Anderen: “Mijn jongeren zijn erdoor verslaagd!”Wat kan een engineer hier doen?Je werkt voor ByteDance — je zou kunnen zeggen: “Deze datadeling gaan we stoppen, privacy-first.” Je werkt voor een VS-bedrijf — je kunt zeggen: “Dit gaat niet om technologie, maar om geopolitiek.” Je bent activist — je organiseert gebruikers, niet tegen TikTok maar voor betere regelgeving.Discussie: Wie heeft hier écht macht? (Spoiler: niet het bedrijf. De overheid.)Huiswerk: Business model canvas met ethiekStudenten kiezen een app/platform en vullen in Hoe verdient het geld? (Advertising? Betaling? Data-verkoop? Ander?) Wie profiteert? (Welke stakeholders winnen, welke verliezen?) Wat is het duurzaam? (Kan dit model 10 jaar standhouden zonder uit te stokeren?) Kan het beter? (Welk alternatief zou meer stakeholders helpen?)Dit dwingt studenten voorbij “Big Tech = slecht” te denken naar: hoe maak je systemen waar iedereen beter van wordt?Slotdiscussie deel 2 We hebben gezien hoe ethieke dilemma’s werken. Niet als “goed vs slecht”, maar als spanning tussen legitieme belangen. Gebruikers willen gratis en privé. Bedrijven willen geld verdienen. Investeerders willen groei. Wat doe je als softwareingineer? Je bouwt niet alleen code — je helpt deze spanningen op te lossen. En dat vraagt meer denken dan blaming.Deel 3: Rolmodellen onderzoekOpdracht: Kies een interessante, liefst omstreden persoon uit de ICT-wereld. Presenteer Achtergrond en wat deze persoon deed Argumenten van voor- en tegenstanders Je eigen mening met onderbouwing Wat neem je mee, wat niet?Suggesties Persoon Bekend van Alan Turing Grondlegger informatica, codebreker, vervolgd Julian Assange WikiLeaks Aaron Swartz Reddit, open access activist Edward Snowden NSA klokkenluider Tim Berners-Lee Uitvinder World Wide Web Shoshana Zuboff “The Age of Surveillance Capitalism” Cory Doctorow Enshittification, digitale rechten activistStudenten mogen ook zelf iemand kiezen.Toetsing Kennistoets: Theorie uit deel 1 en 2 Presentatie: Rolmodel onderzoek uit deel 3Aansluiting bij keuzevakbeschrijvingDit vak raakt de volgende thema’s uit de beschrijving Thema Hoe Toegepaste ethiek Praktijkopdrachten, niet alleen theorie Duurzaamheid Milieu-impact van datacenters, energieverbruik AI Dark web Context bij rolmodellen (Assange, Snowden) Data-ethiek Fingerprinting opdracht, GDPR Wet- en regelgeving vs innovatie Legal-Ethical Matrix DEMAND (“durf te denken”) Kritische reflectie op eigen werkOpdrachtvragen bij Absurd Trolley ProblemsHuiswerk: doorloop de website. In de les reflecteren Hoeveel trolley problems geeft de quiz je precies? De website toont het percentage mensen dat het met je eens was, niet “het goede antwoord”. Waarom denk je? Welk level vond je makkelijk? Welk moeilijk? Bij de moeilijkste: welk argument zou iemand voor de andere optie kunnen geven? Denk je dat er culturele verschillen zijn in de keuzes? Hoe realistisch zijn deze problemen? Kun je er eentje realistischer maken? Kies één level. Welke deugd is relevant (moed, eerlijkheid, rechtvaardigheid)? Past jouw keuze daarbij? Kies één level. Welke plicht of regel is relevant (“gebruik niemand als middel”)? Volgde jouw keuze die regel? Bij welk level speelt het utilistische “meeste geluk voor meeste mensen” het sterkst?Over de cookie-vraagDe Absurd Trolley Problems site vraagt om cookie-toestemming. Je kunt de site ook gebruiken als je cookies weigert. Maar let op de “Legitimate Interest” vinkjes - deze staan default aan.Discussievraag: Wat is “legitimate interest” eigenlijk? Waarom mogen deze vinkjes default aan staan, terwijl marketing-cookies dat niet mogen? Is dat eerlijk?Antwoord: “Legitimate interest” is een AVG-grondslag waarbij bedrijven claimen een gerechtvaardigd belang te hebben. Het verschil met marketing is dat het “noodzakelijk” zou zijn voor de dienst. Of dat klopt, is precies het soort vraag dat we in dit vak stellen.)Het boek verplicht of nietEen vraag waar ik nog mee worstel: moeten studenten het boek zelf aanschaffen?Argumenten voor verplicht stellen HBO-studenten lezen te weinig. Een verplicht boek dwingt tot serieuze verdieping. Papieren boeken werken anders dan schermen - minder afleiding, betere retentie. We kiezen voor drie van de belangrijkste ethische stromingen (want we kunnen niet álles behandelen, en het moet NIET te droog worden), namelijk utilisme, deugdethiek en deontologie. Deze staan er helder in uitgelegd. Steen schrijft vanuit tech-perspectief, niet vanuit abstracte filosofie.Argumenten tegen Academisch Engels kan lastig zijn voor 2e jaars HBO. Woorden als “vis-à-vis” of “doctrine of double effect” zijn niet alledaags. Afhaakrisico: als studenten het boek te moeilijk vinden, lezen ze helemaal niets. Kosten: niet elke student kan of wil €40+ uitgeven.Mijn voorlopige keuze: Het boek is aanbevolen, niet verplicht. De cursusstructuur volgt wel de drie delen van het boek, zodat studenten die het wél lezen extra context hebben. De kernconcepten behandel ik in de les met toegankelijkere voorbeelden en Nederlandse uitleg.Dit is een pragmatische middenweg: studenten die meer willen, kunnen het boek erbij pakken. Studenten die moeite hebben met academisch Engels, missen de essentie niet.BronnenACM. (2024). Onderzoek naar dark patterns bij big tech. Geraadpleegd van https://acm.nl/nl/publicaties/acm-roept-big-tech-op-gedrag-aan-te-passen Delia, M. (2023). The Journey to Escape Instagram: Dark Patterns & The Ethics of UX. Medium. Geraadpleegd van https://medium.com/@marleedelia/the-journey-to-escape-instagram-ec9ed857f77f Doctorow, C. (21 januari 2023). Tiktok’s enshittification. Pluralistic. Geraadpleegd van https://pluralistic.net/2023/01/21/potemkin-ai Doctorow, C. (29 april 2025). Cory Doctorow at CF 25: How Enshittification Conquered the 21st Century [Video]. CloudFest. Geraadpleegd van https://www.youtube.com/watch?v=_Ai-fC-2Bpo Heritage Foundation. (2023). Good Luck Trying To Leave TikTok. Geraadpleegd van https://www.heritage.org/big-tech/commentary/good-luck-trying-leave-tiktok Schaffner, B., et al. (2022). Understanding Account Deletion and Relevant Dark Patterns on Social Media. Proceedings of the ACM on Human-Computer Interaction. Geraadpleegd van https://dl.acm.org/doi/abs/10.1145/3555142 Steen, M. (2022). Ethics for People Who Work in Tech. CRC Press. AG Connect: Waarom we Systems Thinking nodig hebben ethiek onderwijs software-engineering Bart van der Wal Docent aan de HAN University of Applied Sciences en MAMIL met een passie voor SwimRun en andere avontuurlijke duursportavonturen. Schrijft over technologie, softwareontwikkeling en duursport.Recente posts Accessible Software Engineering Diagrams 01 februari 2026 Leestijd: 8 minuten Nieuw ICT-onderwijs door AI (2/3) 20 januari 2026 Leestijd: 30 minuten Testing the LLM 14 januari 2026 Leestijd: 11 minuten Nieuw ICT-onderwijs door AI (1/3) 14 januari 2026 Leestijd: 18 minuten 2026 © Bart van der Wal Ik zit in AI-gebruikstype 1: lees meer Posts Tags Over mij Stats// Maak bare URLs in bronnenlijst automatisch klikbaar document.addEventListener(‘DOMContentLoaded’, function() { // Zoek de bronnen sectie (h2 met “Bronnen” gevolgd door ul) const bronnenHeader = Array.from(document.querySelectorAll(‘h2’)).find(h => h.textContent.trim() === ‘Bronnen’); if (bronnenHeader) { const bronnenList = bronnenHeader.nextElementSibling; if (bronnenList && bronnenList.tagName === ‘UL’) { bronnenList.querySelectorAll(‘li’).forEach(li => { li.innerHTML = li.innerHTML.replace( /(https?:\/\/[^\s<]+)/g, function(match) { const link = document.createElement(‘a’); link.href = match; link.target = ‘_blank’; link.rel = ‘noopener’; link.textContent = match; return link.outerHTML; } ); }); } } });(function() { var sw = document.getElementById(‘theme-switch’); var html = document.getElementsByTagName(‘html’)[0]; var logo = document.getElementById(‘logo’); var nightModeOption = (‘auto’ || ‘auto’).toLowerCase(); var storage = nightModeOption === ‘manual’ ? localStorage sessionStorage; var themeData = loadThemeData();function saveThemeData(data) { storage.setItem(‘theme’, JSON.stringify(data)); }function loadThemeData() { var data = storage.getItem(‘theme’); try { data = JSON.parse(data ? data : ‘’); } catch(e) { data = { nightShift: undefined, autoToggleAt: 0 }; saveThemeData(data); } return data; }function handleThemeToggle(nightShift) { themeData.nightShift = nightShift; saveThemeData(themeData); html.dataset.theme = nightShift ? ‘dark’ : ‘light’; if (nightShift) { logo.setAttribute(“src”, “../assets/img/branding/logo-dark.svg”); } else { logo.setAttribute(“src”, “../assets/img/branding/logo.svg”); } setTimeout(function() { sw.checked = nightShift ? true : false; }, 50); }function autoThemeToggle() { // Next time point of theme toggle var now = new Date(); var toggleAt = new Date(); var hours = now.getHours(); var nightShift = hours >= 19 || hours <=7;if (nightShift) { if (hours > 7) { toggleAt.setDate(toggleAt.getDate() + 1); } toggleAt.setHours(7); } else { toggleAt.setHours(19); }toggleAt.setMinutes(0); toggleAt.setSeconds(0); toggleAt.setMilliseconds(0)var delay = toggleAt.getTime() - now.getTime();// auto toggle theme mode setTimeout(function() { handleThemeToggle(!nightShift); }, delay);return { nightShift: nightShift, toggleAt: toggleAt.getTime() }; }// Listen the theme toggle event sw.addEventListener(‘change’, function(event) { handleThemeToggle(event.target.checked); });if (nightModeOption == ‘auto’) { var data = autoThemeToggle();// Toggle theme by local setting if (data.toggleAt > themeData.autoToggleAt) { themeData.autoToggleAt = data.toggleAt; handleThemeToggle(data.nightShift); } else { handleThemeToggle(themeData.nightShift); } } else if (nightModeOption == ‘manual’) { handleThemeToggle(themeData.nightShift); } else { var nightShift = themeData.nightShift; if (nightShift === undefined) { nightShift = nightModeOption === ‘on’; } handleThemeToggle(nightShift); } })();// SOFA Mode Toggle (function() { var sofaSwitch = document.getElementById(‘sofa-switch’); if (!sofaSwitch) return;var sofaSection = document.getElementById(‘sofa-section’); var publishedSection = document.getElementById(‘published-section’); var pagination = document.querySelector(‘.pagination’);function handleSofaToggle(sofaMode) { localStorage.setItem(‘sofaMode’, sofaMode ? ‘on’ : ‘off’);if (sofaSection && publishedSection) { sofaSection.style.display = sofaMode ? ‘block’ : ‘none’; publishedSection.style.display = sofaMode ? ‘none’ : ‘block’; } if (pagination) { pagination.style.display = sofaMode ? ‘none’ : ‘block’; }sofaSwitch.checked = sofaMode; }sofaSwitch.addEventListener(‘change’, function(event) { handleSofaToggle(event.target.checked); });// Load saved preference var savedMode = localStorage.getItem(‘sofaMode’); if (savedMode === ‘on’) { handleSofaToggle(true); } })(); function downloadPdf() { var btn = document.getElementById(‘download-pdf’); btn.innerHTML = ‘ Laden…’; btn.disabled = true;// Load html2canvas and jspdf for proper image support var script1 = document.createElement(‘script’); script1.src = ‘https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js’; script1.onload = function() { var script2 = document.createElement(‘script’); script2.src = ‘https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js’; script2.onload = function() { generatePdfWithImages(); }; document.head.appendChild(script2); }; document.head.appendChild(script1);function generatePdfWithImages() { // Create a container for PDF content var pdfContainer = document.createElement(‘div’); pdfContainer.style.cssText = ‘position:absolute;left:-9999px;width:800px;padding:40px;background:white;font-family:Georgia,serif;color:#333;’;// Clone page content var pageContent = document.querySelector(‘.page-content’); if (!pageContent) { alert(‘Geen content gevonden’); btn.innerHTML = ‘ PDF’; btn.disabled = false; return; }var clone = pageContent.cloneNode(true);// Remove unwanted elements var removeSelectors = [ ‘.sidebar’, ‘.post-nav’, ‘.author-box’, ‘.recent-box’, ‘.comments’, ‘.separator’, ‘button’, ‘#comment-layout’, ‘.pdf-button’, ‘.version-history’, ‘.github-button’, ‘script’, ‘style’, ‘.post-meta-row’ ]; removeSelectors.forEach(function(sel) { clone.querySelectorAll(sel).forEach(function(el) { el.remove(); }); });// Expand all
elements for PDF (so content is visible) clone.querySelectorAll(‘details’).forEach(function(details) { details.setAttribute(‘open’, ‘open’); details.style.cssText = ‘margin:15px 0;color:#000;background:transparent;’; }); clone.querySelectorAll(‘summary’).forEach(function(summary) { summary.style.cssText = ‘font-weight:bold;color:#000;background:transparent;margin-bottom:10px;’; });// Style images for PDF clone.querySelectorAll(‘img’).forEach(function(img) { img.style.cssText = ‘max-width:100%;height:auto;display:block;margin:15px auto;’; // Force load by setting crossOrigin (helps with some images) img.crossOrigin = ‘anonymous’; });// Style the content - print-friendly: white background, black text clone.style.cssText = ‘font-size:14px;line-height:1.6;color:#000;background:#fff;’; clone.querySelectorAll(‘h1’).forEach(function(h) { h.style.cssText = ‘font-size:24px;margin:20px 0 10px;color:#000;background:transparent;’; }); clone.querySelectorAll(‘h2’).forEach(function(h) { h.style.cssText = ‘font-size:20px;margin:18px 0 8px;border-bottom:1px solid #ccc;padding-bottom:5px;color:#000;background:transparent;’; }); clone.querySelectorAll(‘h3’).forEach(function(h) { h.style.cssText = ‘font-size:16px;margin:15px 0 5px;color:#000;background:transparent;’; }); clone.querySelectorAll(‘p’).forEach(function(p) { p.style.cssText = ‘margin:0 0 12px;color:#000;background:transparent;’; }); clone.querySelectorAll(‘pre, code’).forEach(function(c) { c.style.cssText = ‘background:#f5f5f5;padding:10px;font-size:12px;overflow-x:auto;color:#000;border:1px solid #ddd;’; }); clone.querySelectorAll(‘blockquote’).forEach(function(bq) { bq.style.cssText = ‘border-left:3px solid #326273;padding-left:15px;margin:15px 0;color:#333;background:transparent;font-style:italic;’; }); clone.querySelectorAll(‘table’).forEach(function(t) { t.style.cssText = ‘width:100%;border-collapse:collapse;margin:15px 0;font-size:12px;background:#fff;’; }); clone.querySelectorAll(‘th, td’).forEach(function(c) { c.style.cssText = ‘border:1px solid #ccc;padding:8px;text-align:left;color:#000;background:#fff;’; }); clone.querySelectorAll(‘a’).forEach(function(a) { a.style.cssText = ‘color:#326273;background:transparent;’; }); clone.querySelectorAll(‘li’).forEach(function(li) { li.style.cssText = ‘color:#000;background:transparent;’; }); clone.querySelectorAll(‘ul, ol’).forEach(function(list) { list.style.cssText = ‘color:#000;background:transparent;’; }); clone.querySelectorAll(‘span, em, strong, b, i’).forEach(function(el) { el.style.cssText = ‘color:inherit;background:transparent;’; });// Add footer var footer = document.createElement(‘div’); footer.style.cssText = ‘margin-top:30px;padding-top:15px;border-top:1px solid #ccc;font-size:11px;color:#666;background:transparent;’; footer.innerHTML = ‘Bron: ‘ + window.location.href + ‘
Gegenereerd: ‘ + new Date().toLocaleDateString(‘nl-NL’); clone.appendChild(footer);pdfContainer.appendChild(clone); document.body.appendChild(pdfContainer);// Wait for images to load var images = pdfContainer.querySelectorAll(‘img’); var loadPromises = Array.from(images).map(function(img) { return new Promise(function(resolve) { if (img.complete) { resolve(); } else { img.onload = resolve; img.onerror = resolve; // Continue even if image fails } }); });Promise.all(loadPromises).then(function() { // Small delay to ensure rendering setTimeout(function() { html2canvas(pdfContainer, { scale: 2, useCORS: true, allowTaint: true, logging: false, backgroundColor: ‘#ffffff’ }).then(function(canvas) { var imgData = canvas.toDataURL(‘image/jpeg’, 0.95); var pdf = new jspdf.jsPDF(‘p’, ‘mm’, ‘a4’); var pageWidth = pdf.internal.pageSize.getWidth(); var pageHeight = pdf.internal.pageSize.getHeight(); var imgWidth = pageWidth - 20; // 10mm margins var imgHeight = (canvas.height * imgWidth) / canvas.width;var heightLeft = imgHeight; var position = 10; // top margin// First page pdf.addImage(imgData, ‘JPEG’, 10, position, imgWidth, imgHeight); heightLeft -= (pageHeight - 20);// Additional pages if needed while (heightLeft > 0) { position = heightLeft - imgHeight + 10; pdf.addPage(); pdf.addImage(imgData, ‘JPEG’, 10, position, imgWidth, imgHeight); heightLeft -= (pageHeight - 20); }pdf.save(document.title.replace(/[^a-z0-9]/gi, ‘-‘) + ‘.pdf’);// Cleanup document.body.removeChild(pdfContainer); btn.innerHTML = ‘ PDF’; btn.disabled = false; }).catch(function(err) { console.error(‘PDF generation failed:’, err); alert(‘PDF generatie mislukt. Probeer Ctrl+P / Cmd+P voor print naar PDF.’); document.body.removeChild(pdfContainer); btn.innerHTML = ‘ PDF’; btn.disabled = false; }); }, 500); }); } }function toggle_comments(){ var commentCurtain = document.getElementById(‘comment-curtain’) if (commentCurtain) { commentCurtain.classList.toggle(‘hide’) } var disqusThread = document.getElementById(‘comment-layout’) if (disqusThread) { disqusThread.classList.toggle(‘show’) } }function copyToClipboard() { navigator.clipboard.writeText(‘https://bartvanderwal.nl/ethics-for-software-engineers/’).then(function() { alerts = document.getElementsByClassName(‘alert’) for (i=0; i < alerts.length; i++){ alerts[i].innerHTML=’\u00ABlink copied\u00BB’; setTimeout((function(i){ return function(){alerts[i].innerHTML=’’;}})(i), 1600 ); }; }, function() { prompt(“Unable to copy, please use this link:”, “https://bartvanderwal.nl/ethics-for-software-engineers/”); }); }$(function () { if (document.getElementById(‘comment-curtain’) == null){ var disqusThread = document.getElementById(‘comment-layout’) if (disqusThread) { disqusThread.classList.toggle(‘show’) } }var tweetTags = document.getElementsByTagName(“tweet”);if (tweetTags != null){ for (i=0; i<tweetTags.length; i++){ tweetA = document.createElement(“a”) tweetA.href = ‘https://twitter.com/share?text=’
  • encodeURIComponent(tweetTags[i].textContent)
  • ‘&via=&url=’
  • window.location.href; tweetA.target = “_blank”; tweetA.className = ‘twitter’; tweetSpanText = document.createElement(‘span’); tweetSpanText.className = ‘tweetText’; tweetSpanText.appendChild(document.createTextNode(tweetTags[i].textContent)); tweetSpanIcon = document.createElement(‘span’); tweetSpanIcon.className = ‘tweetIcon’; tweetSpanIcon.appendChild(document.createTextNode(“click to tweet”)); tweetI = document.createElement(“i”); tweetI.className = ‘fa fa-twitter’; tweetSpanIcon.appendChild(tweetI); tweetA.appendChild(tweetSpanText); tweetA.appendChild(tweetSpanIcon); tweetTags[i].textContent = “”; tweetTags[i].appendChild(tweetA); } }}); !function(c,h,i,m,p){m=c.createElement(h),p=c.getElementsByTagName(h)[0],m.async=1,m.src=i,p.parentNode.insertBefore(m,p)}(document,”script”,”https://chimpstatic.com/mcjs-connected/js/users/8ece198b3eb260e6838461a60/d20d9fb9aad962399025da52e.js”);// Delay search initialization to ensure DOM is ready and search.json is accessible window.addEventListener(‘load’, function() { var searchInput = document.getElementById(‘search-input’); var resultsContainer = document.getElementById(‘results-container’); if (searchInput && resultsContainer) { SimpleJekyllSearch({ searchInput: searchInput, resultsContainer: resultsContainer, json: ‘/search.json’, searchResultTemplate: ‘<li>{title}<p>{description}</p></li>’, noResultsText: ‘No results found’, fuzzy: false, exclude: [‘Welcome’] }); } });