Spaghetti code! Een heerlijk Italiaans gerecht of de nachtmerrie van elke software engineer?

Leestijd: 3 – 4 min

Om maar meteen met de deur in huis te vallen: de grootste nachtmerrie. Spaghetti code? In de software? Ja precies. Kijk eens naar een bord spaghetti. Kun je hier het begin en eind aanwijzen? Laat staan enige structuur? Een knap persoon als je het voor elkaar krijgt. Zo ziet dan ook de software eruit. In de code zitten veel jumps, functies die door elkaar lopen en variabelen die dubbel worden geschreven. Niet onderhoudbare software. Laten we elkaar geen mietje noemen: We hebben ons, als software engineer, er allemaal wel een keer schuldig aan gemaakt (en misschien nog wel). Niet heel gek ook, toen we net van school af kwamen konden we net de “String” van de “Real” onderscheiden. Natuurlijk werd er op school wat aandacht geschonken aan enige structuur in je code maar, de toen nog moeilijke, “pick-and-place” machine bestond niet meer uit een “start-stop” functie met daarnaast stappen die sequentieel werden afgespeeld. Bijna in één functie te bevatten. Maar goed, je moet eerst leren lopen voordat je kunt rennen.

Factoren

Bij dit gebruikte vakjargon is ervaring niet het enige wat dit soort code veroorzaakt. De volgende factoren kunnen ook zorgen voor spaghetti code:

  • Onduidelijke factoren zoals project scope, scope creep, planning
  • Het onvermogen om aan een bepaalde stijl / standaardisatie te kunnen voldoen
  • Het aantal bugs die zich opstapelen in de code die tijdens commissioning als quick fixes eruit worden gehaald

Programmeerstijlen evolueren ook over de tijd. Waar je vijf jaar geleden dacht dat je geniale code had gemaakt, kan nu trekken hebben van spaghetti code. Als laatste: Hiernaast is het natuurlijk ook zo dat de code van een ander heel makkelijk af te schieten is. Zoals elk persoon een eigen handschrift heeft, heeft een software engineer ook een eigen handschrift. Dat kun je al snel zien hoe de variabele namen worden toegepast, ladder over scl (of andersom), aanroepen van functies, schrijven naar variabelen of direct in de functie, ga zo nog maar even door.

Voorkomen is beter dan genezen

Om spaghetti code te voorkomen is het handig om alvorens het programmeren enkele zaken voor jezelf of voor je team duidelijk te hebben:

  • Zorg voor een goede software documentatie / scope beschrijving. (lees mijn blog over software documentatie eens)
  • Bekijk wat software coding standaarden. Hier staan vaak frameworks beschreven. Pak hier dan een makkelijk toepasbare. Moeilijke frameworks zijn ook moeilijk te begrijpen, kan verkeerd worden geïnterpreteerd dus ook verkeerd toe worden gepast.
  • ‘Self explaining code’. Leuk als de software engineer dit roept maar een beetje ‘comments’ toevoegen bij je code heeft nog nooit iemand kwaad gedaan
  • Toewijding en aandacht voor nauwkeurigheid is belangrijk bij het begin maar ook zeker bij het einde van het project
  • Maak gebruik van Unit tests. Dit bakent een stukje code af wat dan getest kan worden. Na goedkeur kom je dus ook niet meer aan dit stukje code.
  • Layered software structure: De lagen structuur beschrijft een hoofdfunctie per laag. Dit wordt dan ook alleen in die specifieke laag gebruikt. Je mag niet van een laag direct in een andere laag schrijven. Je zet dit klaar op interfaces zodat de andere laag dit kan lezen. Spaghetti code is makkelijk per laag aan te pakken en op te schonen.
  • Leesbaarheid telt
  • Eenvoudig is beter dan complex, complex is beter dan ingewikkeld. .. Eigenlijk de heleZen of Python’ telt.

Als laatste: leer van anderen. Ik vind het zelf ook af en toe interessant om door code van anderen te snuffelen. Als je een beetje kan inbeelden wat de programmeur hier bedoelde, kun je ook voor jezelf bedenken wat mogelijk handig voor jou kan zijn. Beter goed gejat dan slecht verzonnen. Het wiel hoeft niet altijd opnieuw uitgevonden te worden. In teamverband werken, en dan wel overleggen, kan je helpen met de spaghetti code. Ondanks dat jouw idee vaak geniaal is, kan die van andere ook misschien niet slecht zijn.

Andere vaktermen

Andere vaktermen, die ik zelf eigenlijk niet kende maar tegen kwam toen ik verdwaalde op het internet:

Ravioli-code: dit is de term voor fouten in objectgeoriënteerde code die optreden wanneer code gemakkelijk te begrijpen is in een klasse, maar niet in de context van het hele project.

Lasagne-code: dit is een probleem dat kan optreden wanneer u lagen gebruikt om spaghetti-code te vermijden en de lagen zijn zo onderling van elkaar afhankelijk dat een enkele onderbreking in een laag het hele project beïnvloedt.

Pizzacode: als een code-architectuur te plat is, wordt dit een pizzacode genoemd.