Development

Software-ontwikkeling
woman developer bored

Mag programmeerwerk saai zijn?

DRY is een mooi uitgangspunt, maar niet zomaar klakkeloos toepasbaar.

© Shutterstock Syda Productions
20 september 2021

In mijn boek The Programmer’s Brain beschrijf ik de neiging van sommige programmeurs om koste wat het koste duplicatie in code te vermijden. Want er is nu eenmaal dat uitgangspunt “Don’t Repeat Yourself”, ook wel DRY genoemd. En natuurlijk is het een goed uitgangspunt om niet te veel code te copy-pasten, want dat is niet onderhoudbaar; moet er iets aan de code veranderen, dan moet je dat op meerdere plekken doen. Dat kan dan weer tot fouten leiden omdat je zo maar een kopietje vergeet en daarmee inconsistent gedrag van de code kan veroorzaken.

Op zich is DRY dus een mooi uitgangspunt, maar, zoals alle uitgangspunten is het niet altijd zomaar klakkeloos toepasbaar. Er is namelijk ook een keerzijde. Als je alle duplicatie vermijdt, krijg je veel afhankelijkheden in je code, en moet je bij het lezen van de code veel verschillende methodes of functies afgaan om de code te begrijpen.

Toen ik hierover iets op Twitter deelde, kreeg ik interessante reacties. Veel mensen kwamen met anekdotes waarin ze wel eens code hadden moeten aanpassen met veel herhaling, Dat leidde in sommige gevallen tot fouten (niet goed natuurlijk), maar was vooral heel saai. “It took me a very long time” schreef iemand en dat zetten mij aan het denken.

Afgelopen week moest ik namelijk zelf ook een flink stuk code vol copy-paste aanpassen. Ik was hier zelf mee begonnen, ik had wat setup code in een testsuite van de ene naar de andere klasse gekopieerd. Een student die ook aan onze code base werkt, had de testsuite flink uitgebreid en -slecht voorbeeld doet slecht volgen- ook alle setupcode steeds gekopieerd en u raadt het al, ik moest nu 22 kopietjes aanpassen. In eerste instantie begon ik me te ergeren aan de student en ook aan mijzelf, omdat ik nu zo’n saai copy-paste klusje moest uitvoeren. Maar ik begon ook te reflecteren op deze taak; waarom vind ik dit eigenlijk vervelend? Van error proneness was in dit geval geen sprake, want het was duidelijk waar de setup methodes precies voorkwamen. Dus het was vooral een kwestie van: ik vind het niet leuk om een saai klusje uit te voeren. En daar zit een interessant punt.

We zijn als programmeurs nogal geconditioneerd om te denken dat ons werk spannend, moeilijk en uitdagend moet zijn. Is een klusje dan saai, dan kan dat niet kloppen! Er is óf iets mis met de code base, of er is een spannende uitdaging voor de maken door het klusje te automatiseren. Maar misschien is er wel iets mis met onze verwachting. Is het zo erg als een taakje eens saai is? Andere beroepen zijn ook wel eens saai.

Mijn initiële irritatie over het copy-pasten nam flink af bij deze gedachte; programmeren hoeft niet altijd spannend te zijn. Muziekje aan en even wat mindless work, zo erg is dat niet. En het is misschien wel minder werk dan wanneer ik voor het copy-pasten diep had moeten nadenken over de juiste abstractie. Saai werk is dan wel saai, het is daarmee niet per definitie minder efficiënt.

Magazine AG Connect

Dit artikel is ook gepubliceerd in het magazine van AG Connect (septembernummer 2021). Wil je alle artikelen uit dit nummer lezen, klik op de inhoudsopgave van het nummer

Reactie toevoegen
3
Reacties
Jos de Weerdt 03 oktober 2021 22:22

Mijn primaire neiging zou zijn om het aanpassen van de copy-paste broncode 'te automatiseren'. Natuurlijk is dat 'de eerste keer' niet efficienter dan handmatig doen, maar een volgende keer vast wel, en ik weet dat die volgende keer echt ook nog wel eens komt...

Pietertje 27 september 2021 12:31

Ik voel je pijn maar ik zit nu met het omgekeerde probleem. Het huidige project werkt met "include files" om code herhaling te voorkomen (versie 1.0 uit 1986!). Helaas zitten in de include files ook include files en...

Uit pure frustratie moet je dan het programma compileren om toch maar een zicht te krijgen op de logica. Dan merk je dat je ineens 10 levels diep zit (include op include op include...). Variabelen krijgen magisch "ergens" een waarde toegekend, de database wordt ook "ergens" geupdate. Routines worden wel/niet gebruikt. Ophalen van de data? Via een temp-table ergens op niveau 7.

Fijn toch die niet herhalende code! DRY maar KIS (keep is simple) aub.

Weet Ik Het 20 september 2021 11:02

Slecht hoor, copy-paste, als programmeertechniek, zo zie je maar, een diploma zegt niets :)