Refactoren is als fitnessen

Laatst zei mijn vrouw tegen me: “Hé, je vetkwab is weg!” Maar toen keek ze iets langer en vervolgde: “Nou ja, bijna.” – Wat ik bedoel te zeggen is: het gaat de goede kant op. Ik doe wat aan lichaamsbeweging de laatste tijd, een beetje fitness. Ik doe een stuk of wat sit-ups en hef wat gewichtjes en fiets in de lucht en op een tweedehands hometrainer die we een paar jaar terug over konden kopen van een man met een bierbuik die midden in een scheiding lag. (We zeiden: “O jee, wat vervelend,” maar hij zei: “Ach.”)

Het deed me, omdat ik een beroepsdeformatie heb, aan refactoren denken. (– Het fitnessen, bedoel ik, niet het scheiden.)

Gezond

Wat heeft refactoren met fitness te maken?

Laten we een eerste antwoord op die vraag formuleren via een omweg. Stel, je draagt drie, vier zware tassen van de supermarkt terug naar huis. Of je trekt een sprintje op het treinstation. Of je fietst naar de stad om met een stel vrienden een terrasje te pakken. Dat zijn gevallen van lichaamsbeweging waarbij een extern doel wordt nagestreefd: een volle koelkast, op tijd op je werk komen, gezelligheid.

Hoewel alle drie goed voor het lichaam, zijn dat geen voorbeelden van fitness. Want het feit dat je lichaam baat heeft bij deze activiteiten, is bijkomstig, accidenteel. Je zou de doelen in kwestie ook zonder lichaamsbeweging kunnen bereiken: door de auto te pakken, bijvoorbeeld, of door de auto te pakken, of door de auto te pakken.

Fitness heeft geen extern doel. Het doel is de lichaamsbeweging. De lichaamsbeweging is essentieel. Het doel van fitness is om je lichaam gezonder te maken en/of gezond te houden.

Voor refactoren geldt ongeveer hetzelfde. Wanneer je refactort, dan pas je de code aan. Maar je past deze niet aan omwille van een extern doel; je doel is niet een nieuwe feature toe te voegen.1 Je past de code aan omwille van de code zelf. Het doel van refactoren is om de codebase gezonder te maken en/of gezond te houden. (En “gezond” betekent in deze context: leesbaar, onderhoudbaar.)

Volhouden

Maar de vergelijking houdt daar niet op.

Eén keer fitnessen is niet voldoende om je lichaam gezonder te maken. Met tien sit-ups op een verloren woensdagochtend krijg je dat buikje niet weg. Je lichaam krijg immers elke dag nieuwe voedingsstoffen binnen, en getuige haar huidige vorm zijn het er structureel teveel. Voor dit structurele probleem is een structurele oplossing nodig. Om gezonder te worden, moet je regelmatig aan lichaamsbeweging doen.

Mijn ochtendroutine ziet er als volgt uit. De wekker gaat, ik zet een muziekje op en doe mijn sit-ups en gewichtjes en gefiets. Dat duurt veertig tot vijftig minuten, afhankelijk van welke plaat ik beluister.2 Daarna douche ik en drink een glas water en begin aan het ontbijt.

Dat doe ik elke ochtend. – Nee, zeg je, elke ochtend? En ik zeg: jazeker, elke ochtend.3

Met refactoren werkt het net zo. De codebase wordt continu aangepast om nieuwe features toe te voegen. Deze aanpassingen zijn “ongezond”, ze tasten de structuur van de code aan. Eén keertje de boel opschonen gaat geen zoden aan de dijk zetten. Er zal geen eind komen aan de verzoeken om nieuwe features. Dit structurele probleem vraagt dus om een structurele oplossing. Er zal regelmatig moeten worden geïnvesteerd in de structuur van de codebase om deze gezond te houden. Refactoren is een terugkerende bezigheid. (Zie ook deze blog.)

Routine

Het is niet zo dat ik ineens elke ochtend fitnesste, natuurlijk. Het begon met niets. Toen zei mijn vrouw op een dag: Karl, dat buikje van je. Toen moest ik de chocopinda’s opgeven, en dat ging een tijdje goed. Maar na verloop van tijd kwam het buikje terug en begon ik met fietsen. Niet elke dag, maar één of twee keer in de week.

Het was een hele opgave om van niets naar één of twee keer per week sporten te gaan. De eerste keer had ik enorm spierpijn ondanks dat ik voor mijn gevoel niet zoveel had gedaan. Maar dat was niet eens het moeilijkst. Het zwaarst viel het me om de tijd te vinden om te sporten. De uitdaging is niet om de tijd te vinden om eens ’n keertje te sporten. De uitdaging is om structureel tijd vrij te maken om te sporten.

Overdag kon niet want dan werkte ik en in de avond had ik er geen zin meer in. (En bovendien, de sit-ups maakten me misselijk als ik goed had gegeten). Het werd de ochtend en dat betekende dat ik twee keer in de week voor mijn gevoel ziekelijk vroeg op moest.

In het begin doe je zoiets op motivatie. En in het begin heb je een boel motivatie. Dus ik nam me na twee succesvol afgeronde platen voor om dit vijf keer in de week te doen. Dat hield ik een week vol, en daarna was ik het goed zat. Twee keer in de week was meer dan voldoende, besloot ik.

Maar toen ik, een aantal maanden later, twee keer per week eenmaal in mijn systeem had, was de stap naar driemaal per week niet zo groot meer. En na een aantal maanden aan drie keer gewend te zijn geraakt, kon ik er gerust vier van maken. Zo groeide ik naar mijn huidige ochtendroutine toe.

Sindsdien heeft mijn lichaam, getuige de opmerkingen van mijn vrouw, een heel klein beetje meer de vorm die het zou moeten hebben.

Begin klein

En ook hier werkt het met refactoren hetzelfde. Om, vanuit het niets, te beginnen met refactoren, is een hele opgave. Ten eerste ben je het niet gewend om de code veilig aan te passen. Maar een veel groter probleem is dat je – voor je gevoel althans – geen tijd hebt hiervoor. Je dag zit vol met nieuwe features en met overleggen. De acht uur van je werkdag zijn al gevuld, waar haal je de tijd vandaan?

Het antwoord is: begin klein. Neem één dag in de week een uurtje om te refactoren. En doe dat elke week. Op een gegeven moment komt dat in je systeem. Op dat moment kun je ergens heus wel een tweede uurtje vandaan snoepen. En op een gegeven moment zit je in een ritme dat je elke ochtend begint (of elke middag afsluit) met een beetje refactoring. Je bent dan op de juiste weg.

Inmiddels zit ik op het punt, qua refactoring, dat ik het eigenlijk continu doe. Als ik een nieuwe feature toevoeg, dan bekijk ik de code waar deze terecht moet komen, en refactor ik de boel meteen een beetje. Soms is dat een manier om dat deel van de code te leren kennen, andere keren is de refactoring noodzakelijk om de nieuwe feature goed in de bestaande codebase te laten passen. Het punt is: refactoren zit nu zo goed in mijn systeem, in mijn ritme van werken, dat ik er niet meer expliciet tijd voor vrij hoef te maken. Daar ben ik in de loop daar jaren naartoe gegroeid.

Conclusie

Refactoren is als fitnessen. Het is een regelmatige inspanning om je lichaam c.q. codebase gezond te houden, die je in je dagelijkse routine moet incorporeren, wil deze effect hebben.

Je begint met een beetje refactoring en doet het dan steeds vaker. Als je nog niet refactort, is het een goede gewoonte om te beginnen met één à twee uurtjes per week die je inruimt hiervoor. Zodra dat in je systeem zit, breid het dan uit na drie à vier uurtjes. Zo houd je de codebase gezond.

Wie regelmatig refactort, is een gelukkiger ontwikkelaar. En wie regelmatig fitnesst, eigenlijk ook.


  1. Maar een refactoring kan wel de code voorbereiden op een nieuwe feature; dat is het idee achter Kent Becks Tidy First?, mijn favoriete boek over softwareontwikkeling in 2024↩︎

  2. De laatste tijd is het vaak Suede (Autofiction, Antidepressants), maar het kan ook Talking Heads (vooral Remain In Light, maar bijna al hun platen zijn goed) of Lorde (Melodrama, Virgin) of System Of A Down (System Of A Down, Toxicity) of Carly Rae Jepsen (Emotion, The Loveliest Time) zijn. ↩︎

  3. Uitzonderingen bevestigen de regel, en de uitzondering hier is: tenzij ik heel vroeg op pad ben, bijvoorbeeld omdat ik een conferentie aan de andere kant van het land bezoek. ↩︎

beroepsdeformatie · refactoren