Introducere în anti-modele

Anti-modarele sunt exact opusul tiparelor. Amintiți-vă că modelele de proiectare sunt exemple de bune practici de programare, adică modele pentru rezolvarea anumitor probleme. Dar anti-patternele sunt complet opusul lor, adică tiparele de greșeli care se fac atunci când se rezolvă diverse probleme.

O parte a bunei practici de programare este tocmai evitarea anti-modelelor. Nu credeți că acesta este un gunoi teoretic atât de neînțeles - acestea sunt probleme specifice pe care aproape fiecare dezvoltator le-a întâlnit. Cine este conștient, este înarmat!

Să ne uităm la câteva anti-tipare care sunt comune în rândul începătorilor:

  • Numere și șiruri magice
  • clasa lui Dumnezeu
  • Optimizare prematură
  • invenția bicicletei
  • Invenția monociclului

Numere și șiruri magice

Un număr magic este o constantă folosită în cod pentru ceva (cel mai adesea identificarea datelor), al cărui număr în sine nu are niciun sens fără un comentariu corespunzător. Numerele nu au absolut nicio semantică.

Când în codul proiectului dvs. încep să apară numere, a cărui semnificație nu este evidentă, acest lucru este foarte rău. Un programator care nu este autorul unui astfel de cod va avea dificultăți în a explica cum funcționează. De-a lungul timpului, nici măcar autorul codului cu numere magice nu îl va putea explica.

Numerele fac codul dificil de înțeles și de refactorizat. Principalele motive pentru această eroare sunt graba în dezvoltare și lipsa practicii de programare. Acest anti-model ar trebui să fie tăiat din muguri prin stipularea utilizării constantelor numerice înainte de a începe dezvoltarea.

Pentru a rezolva această problemă, trebuie să creați o variabilă al cărei nume explică scopul constantei numerice și să îi atribuiți valoarea dorită.

clasa lui Dumnezeu

Obiectul divin este un anti-model destul de comun printre dezvoltatorii OOP. Un astfel de obiect preia prea multe funcții și/sau stochează aproape toate datele. Ca urmare, avem un cod neportabil, care, în plus, este greu de înțeles.

În plus, un astfel de cod este destul de greu de întreținut, având în vedere că întregul sistem depinde aproape exclusiv de el. Motivele acestei erori: incompetența dezvoltatorului, un dezvoltator preia o mare parte a muncii (mai ales atunci când cantitatea de muncă depășește nivelul de experiență al dezvoltatorului respectiv).

Este necesar să se ocupe de această abordare împărțind sarcinile în subsarcini cu care diferiți dezvoltatori se pot ocupa.

Optimizare prematură

Optimizarea prematură este optimizarea care se realizează înainte ca programatorul să aibă toate informațiile necesare pentru a lua decizii informate despre unde și cum să o facă.

În practică, este dificil de prezis unde va apărea un blocaj. Încercările de optimizare înainte de a obține rezultate empirice vor duce la complexitatea codului și la apariția erorilor, dar nu vor aduce niciun beneficiu.

Cum să evitați? Mai întâi, scrieți cod curat, lizibil și funcțional, folosind algoritmi și instrumente bine-cunoscute și dovedite. Dacă este necesar, utilizați instrumente de profilare pentru a găsi blocajele. Bazați-vă pe măsurători, nu pe presupuneri și ipoteze.

Exemple și caracteristici

Memorarea în cache înainte de profilare. Folosind euristici complexe și nedovedite în loc de algoritmi corecti din punct de vedere matematic. O selecție de cadre noi, netestate, care se pot comporta greșit la încărcare.

Care este dificultatea

Nu este ușor de determinat când optimizarea este prematură. Este important să lăsați spațiu pentru creștere în avans. Trebuie să alegeți soluții și platforme care vă permit să vă optimizați și să creșteți cu ușurință. De asemenea, uneori, optimizarea prematură este folosită ca scuză pentru codul prost. De exemplu, ei iau un algoritm O(n2) doar pentru că algoritmul ar fi O(n) mai dificil.

invenția bicicletei

Semnificația acestui anti-pattern este că programatorul își dezvoltă propria soluție la o problemă pentru care există deja soluții și, adesea, unele mult mai de succes.

Dezvoltatorul se consideră mai inteligent, așa că încearcă să vină cu propria soluție pentru fiecare sarcină, în ciuda experienței predecesorilor săi. Cel mai adesea, acest lucru duce doar la o pierdere de timp și o scădere a eficienței programatorului. La urma urmei, soluția este probabil să fie suboptimă, dacă se găsește deloc.

Desigur, nu puteți renunța complet la posibilitatea unei soluții independente, deoarece aceasta va duce la programarea copy-paste într-un mod direct. Dezvoltatorul trebuie să navigheze în sarcinile care îi pot apărea pentru a le rezolva cu competență, folosind soluții gata făcute sau inventându-le pe ale sale.

Foarte des, motivul acestui anti-model este o simplă lipsă de timp. Iar timpul este bani.

Invenția bicicletei cu roți pătrate

Acest anti-model este foarte strâns legat de simpla reinventare a roții - crearea propriei soluții proaste atunci când există o soluție mai bună.

Acest anti-pattern durează de două ori: în primul rând, timpul este alocat inventării și implementării propriei soluții, iar apoi refactorizării sau înlocuirii acesteia.

Programatorul trebuie să fie conștient de existența diverselor soluții pentru anumite game de sarcini, să se ghideze după avantajele și dezavantajele acestora.

Toate problemele cu care te vei confrunta ca programator pot fi împărțite în două părți:

  • Oamenii inteligenți au rezolvat această problemă acum 30 de ani
  • Oamenii inteligenți au rezolvat această problemă acum 50 de ani

Majoritatea problemelor de programare au fost rezolvate cu succes chiar înainte de a te naște . Nu este nevoie să inventezi nimic - doar studiază experiența altor oameni (pentru asta sunt scrise cărțile).

În 2022, putem sărbători următoarele zile de naștere:

  • Limbaje de programare
    • Limbajul C împlinește 50 de ani (1972)
    • Limbajul Java a împlinit 27 de ani (1995)
    • Python împlinește 31 de ani (1991)
  • Conexiune
    • Internetul a împlinit 39 de ani (1983)
    • Telefonul mobil a împlinit 49 de ani (1973)
    • Primul SMS a fost trimis acum 30 de ani (1992)
  • Modele
    • Modelul MVC a împlinit 44 de ani (1978)
    • SQL a fost inventat acum 48 de ani (1974)
    • Fasolea Java a fost inventată acum 26 de ani (1996)
  • Biblioteci
    • Hibernate a fost inventat acum 21 de ani (2001)
    • Primăvara a fost inventată acum 20 de ani (2002)
    • Tomcat lansat acum 23 de ani (1999)
  • OS
    • Unix a fost lansat acum 51 de ani (1971)
    • Windows a văzut lumina zilei în urmă cu 37 de ani (1985)
    • Mac OS lansat acum 21 de ani (2001)

Și toate aceste lucruri nu au fost doar inventate, ele au fost dezvoltate ca soluții la probleme care erau foarte comune și relevante la acea vreme.