Inleiding tot antipatronen

Antipatronen zijn precies het tegenovergestelde van patronen. Bedenk dat ontwerppatronen voorbeelden zijn van goede programmeerpraktijken, dat wil zeggen patronen voor het oplossen van bepaalde problemen. Maar antipatronen zijn het tegenovergestelde, dat wil zeggen patronen van fouten die worden gemaakt bij het oplossen van verschillende problemen.

Onderdeel van goede programmeerpraktijken is juist het vermijden van antipatronen. Denk niet dat dit zo'n onbegrijpelijke theoretische rotzooi is - dit zijn specifieke problemen die bijna elke ontwikkelaar is tegengekomen. Wie weet, hij is gewapend!

Laten we eens kijken naar enkele antipatronen die veel voorkomen bij beginners:

  • Magische getallen en strings
  • goddelijke klasse
  • Voortijdige optimalisatie
  • de uitvinding van de fiets
  • Uitvinding van de eenwieler

Magische getallen en strings

Een magisch getal is een constante die in code voor iets wordt gebruikt (meestal gegevensidentificatie), waarvan het getal zelf nergens op slaat zonder een overeenkomstige opmerking. Getallen hebben absoluut geen semantiek.

Wanneer er nummers in de code van uw project verschijnen, waarvan de betekenis niet duidelijk is, is dit erg slecht. Een programmeur die niet de auteur is van dergelijke code zal moeite hebben om uit te leggen hoe het werkt. Na verloop van tijd zal zelfs de auteur van de code met magische getallen het niet kunnen uitleggen.

Cijfers maken code moeilijk te begrijpen en te refactoren. De belangrijkste redenen voor deze fout zijn de haast bij de ontwikkeling en het gebrek aan programmeerervaring. Dit antipatroon moet in de kiem worden gesmoord door het gebruik van numerieke constanten te bepalen voordat met de ontwikkeling wordt begonnen.

Om dit probleem op te lossen, moet u een variabele maken waarvan de naam het doel van de numerieke constante verklaart, en deze de gewenste waarde toewijzen.

goddelijke klasse

Het goddelijke object is een anti-patroon dat vrij gebruikelijk is bij OOP-ontwikkelaars. Zo'n object neemt te veel functies op zich en/of slaat bijna alle data op. Als gevolg hiervan hebben we een niet-overdraagbare code, die bovendien moeilijk te begrijpen is.

Bovendien is dergelijke code vrij moeilijk te onderhouden, aangezien het hele systeem er bijna uitsluitend van afhangt. Redenen voor deze fout: incompetentie van de ontwikkelaar, één ontwikkelaar neemt een groot deel van het werk op zich (vooral wanneer de hoeveelheid werk het ervaringsniveau van die ontwikkelaar overschrijdt).

Het is noodzakelijk om met deze aanpak om te gaan door taken op te splitsen in subtaken die verschillende ontwikkelaars kunnen uitvoeren.

Voortijdige optimalisatie

Voortijdige optimalisatie is optimalisatie die wordt uitgevoerd voordat de programmeur over alle informatie beschikt die nodig is om weloverwogen beslissingen te nemen over waar en hoe dit moet worden gedaan.

In de praktijk is het moeilijk te voorspellen waar een knelpunt zal ontstaan. Pogingen om te optimaliseren voordat empirische resultaten worden verkregen, zullen leiden tot codecomplexiteit en het verschijnen van fouten, maar zullen geen voordelen opleveren.

Hoe te vermijden? Schrijf eerst schone, leesbare, werkende code met behulp van bekende en bewezen algoritmen en tools. Gebruik indien nodig profileringstools om knelpunten te vinden. Vertrouw op metingen, niet op gissingen en aannames.

Voorbeelden en functies

Caching vóór profilering. Complexe en onbewezen heuristieken gebruiken in plaats van wiskundig correcte algoritmen. Een selectie van nieuwe, niet-geteste frameworks die zich onder belasting kunnen misdragen.

Wat is de moeilijkheid

Het is niet eenvoudig om te bepalen wanneer optimalisatie voorbarig is. Het is belangrijk om op voorhand ruimte te laten voor groei. U moet oplossingen en platforms kiezen waarmee u eenvoudig kunt optimaliseren en groeien. Soms wordt voortijdige optimalisatie ook gebruikt als excuus voor slechte code. Ze nemen bijvoorbeeld alleen een O(n2)-algoritme omdat het algoritme O(n) moeilijker zou zijn.

de uitvinding van de fiets

De betekenis van dit anti-patroon is dat de programmeur zijn eigen oplossing ontwikkelt voor een probleem waarvoor al oplossingen bestaan, en vaak veel succesvollere.

De ontwikkelaar beschouwt zichzelf als slimmer, dus probeert hij voor elke taak zijn eigen oplossing te bedenken, ondanks de ervaring van zijn voorgangers. Meestal leidt dit alleen maar tot tijdverlies en een afname van de efficiëntie van de programmeur. De oplossing is immers waarschijnlijk suboptimaal, als die al wordt gevonden.

Natuurlijk kun je de mogelijkheid van een onafhankelijke oplossing niet helemaal uitsluiten, aangezien dit op een directe manier zal leiden tot kopiëren en plakken. De ontwikkelaar moet navigeren door de taken die voor hem kunnen verschijnen om ze vakkundig op te lossen, door gebruik te maken van kant-en-klare oplossingen of door zijn eigen oplossingen uit te vinden.

Heel vaak is de reden voor dit anti-patroon simpelweg tijdgebrek. En tijd is geld.

Uitvinding van de vierkante wielfiets

Dit anti-patroon is nauw verwant aan simpelweg het wiel opnieuw uitvinden - je eigen slechte oplossing creëren als er een betere oplossing bestaat.

Dit anti-patroon kost twee keer zoveel tijd: eerst wordt er tijd besteed aan het bedenken en implementeren van je eigen oplossing, en daarna aan het herstructureren of vervangen ervan.

De programmeur moet op de hoogte zijn van het bestaan ​​van verschillende oplossingen voor bepaalde reeksen taken en zich laten leiden door hun voor- en nadelen.

Alle problemen waarmee u als programmeur te maken krijgt, kunnen in twee delen worden verdeeld:

  • slimme mensen hebben dit probleem 30 jaar geleden opgelost
  • slimme mensen hebben dit probleem 50 jaar geleden opgelost

De meeste programmeerproblemen zijn met succes opgelost voordat je geboren was . U hoeft niets uit te vinden - bestudeer gewoon de ervaring van andere mensen (daar zijn boeken voor geschreven).

In 2022 kunnen we de volgende verjaardagen vieren:

  • Programmeertalen
    • C-taal wordt 50 (1972)
    • De Java-taal werd 27 (1995)
    • Python wordt 31 (1991)
  • Verbinding
    • Het internet werd 39 (1983)
    • De mobiele telefoon werd 49 (1973)
    • De eerste sms werd 30 jaar geleden verzonden (1992)
  • Patronen
    • Het MVC-patroon werd 44 (1978)
    • SQL is 48 jaar geleden uitgevonden (1974)
    • Javabonen zijn 26 jaar geleden uitgevonden (1996)
  • Bibliotheken
    • Slaapstand is 21 jaar geleden uitgevonden (2001)
    • De lente is 20 jaar geleden uitgevonden (2002)
    • Tomcat 23 jaar geleden uitgebracht (1999)
  • Besturingssysteem
    • Unix werd 51 jaar geleden uitgebracht (1971)
    • Windows zag het levenslicht 37 jaar geleden (1985)
    • Mac OS 21 jaar geleden uitgebracht (2001)

En al deze dingen zijn niet zomaar uitgevonden, ze zijn ontwikkeld als oplossingen voor problemen die in die tijd heel gewoon en relevant waren.