Wprowadzenie do antywzorców

Antywzorce są dokładnym przeciwieństwem wzorców. Przypomnijmy, że wzorce projektowe to przykłady dobrych praktyk programistycznych, czyli wzorce rozwiązywania określonych problemów. Ale antywzorce są ich zupełnym przeciwieństwem, czyli wzorcami błędów popełnianych przy rozwiązywaniu różnych problemów.

Częścią dobrej praktyki programistycznej jest właśnie unikanie antywzorców. Nie myśl, że to taki niezrozumiały teoretyczny śmieć - to konkretne problemy, z którymi spotkał się prawie każdy programista. Kto wie, jest uzbrojony!

Przyjrzyjmy się kilku antywzorcom, które są powszechne wśród początkujących:

  • Magiczne liczby i ciągi
  • boska klasa
  • Przedwczesna optymalizacja
  • wynalezienie roweru
  • Wynalezienie monocykla

Magiczne liczby i ciągi

Magiczna liczba to stała używana w kodzie do czegoś (najczęściej identyfikacji danych), której sama liczba nie ma sensu bez odpowiedniego komentarza. Liczby nie mają absolutnie żadnej semantyki.

Kiedy w kodzie twojego projektu zaczynają pojawiać się liczby, których znaczenie nie jest oczywiste, jest to bardzo złe. Programista, który nie jest autorem takiego kodu, będzie miał trudności z wyjaśnieniem, jak to działa. Z czasem nawet autor kodu z magicznymi liczbami nie będzie w stanie tego wyjaśnić.

Liczby sprawiają, że kod jest trudny do zrozumienia i refaktoryzacji. Głównymi przyczynami tego błędu są pośpiech w rozwoju i brak praktyki programistycznej. Ten antywzorzec należy zdusić w zarodku, określając użycie stałych numerycznych przed rozpoczęciem programowania.

Aby rozwiązać ten problem, musisz utworzyć zmienną, której nazwa wyjaśnia przeznaczenie stałej numerycznej i przypisać jej żądaną wartość.

boska klasa

Boski obiekt to anty-wzorzec, który jest dość powszechny wśród programistów OOP. Taki obiekt przejmuje zbyt wiele funkcji i/lub przechowuje prawie wszystkie dane. W rezultacie mamy nieprzenośny kod, który zresztą jest trudny do zrozumienia.

Ponadto taki kod jest dość trudny w utrzymaniu, biorąc pod uwagę, że cały system opiera się prawie wyłącznie na nim. Przyczyny tego błędu: niekompetencja programisty, jeden programista bierze na siebie dużą część pracy (zwłaszcza gdy ilość pracy przekracza poziom doświadczenia tego programisty).

Konieczne jest radzenie sobie z tym podejściem poprzez podzielenie zadań na podzadania, z którymi mogą sobie poradzić różni programiści.

Przedwczesna optymalizacja

Optymalizacja przedwczesna to optymalizacja przeprowadzana, zanim programista uzyska wszystkie informacje potrzebne do podjęcia świadomej decyzji o tym, gdzie i jak to zrobić.

W praktyce trudno przewidzieć, gdzie wystąpi wąskie gardło. Próby optymalizacji przed uzyskaniem wyników empirycznych doprowadzą do skomplikowania kodu i pojawienia się błędów, ale nie przyniosą żadnych korzyści.

Jak ominąć? Po pierwsze, pisz czysty, czytelny, działający kod przy użyciu dobrze znanych i sprawdzonych algorytmów i narzędzi. W razie potrzeby użyj narzędzi do profilowania, aby znaleźć wąskie gardła. Polegaj na pomiarach, a nie domysłach i założeniach.

Przykłady i funkcje

Buforowanie przed profilowaniem. Używanie złożonych i niesprawdzonych heurystyk zamiast matematycznie poprawnych algorytmów. Wybór nowych, nieprzetestowanych frameworków, które mogą źle działać pod obciążeniem.

Jaka jest trudność

Nie jest łatwo określić, kiedy optymalizacja jest przedwczesna. Ważne jest, aby wcześniej zostawić miejsce na wzrost. Musisz wybrać rozwiązania i platformy, które pozwolą Ci łatwo optymalizować i rozwijać. Również czasami przedwczesna optymalizacja jest używana jako wymówka dla złego kodu. Na przykład biorą algorytm O(n2) tylko dlatego, że algorytm byłby O(n) trudniejszy.

wynalezienie roweru

Znaczenie tego antywzorca polega na tym, że programista opracowuje własne rozwiązanie problemu, dla którego rozwiązania już istnieją, i to często znacznie skuteczniejsze.

Deweloper uważa się za mądrzejszego, dlatego stara się wymyślić własne rozwiązanie dla każdego zadania, pomimo doświadczenia swoich poprzedników. Najczęściej prowadzi to jedynie do straty czasu i spadku wydajności programisty. W końcu rozwiązanie prawdopodobnie będzie nieoptymalne, jeśli w ogóle zostanie znalezione.

Oczywiście nie można całkowicie odrzucić możliwości niezależnego rozwiązania, ponieważ doprowadzi to bezpośrednio do programowania kopiuj-wklej. Deweloper musi poruszać się po zadaniach, które mogą się przed nim pojawić, aby umiejętnie je rozwiązać, korzystając z gotowych rozwiązań lub wymyślając własne.

Bardzo często przyczyną tego antywzorca jest zwykły brak czasu. A czas to pieniądz.

Wynalezienie roweru z kwadratowymi kołami

Ten antywzorzec jest bardzo blisko związany ze zwykłym wymyślaniem koła na nowo – tworzeniem własnego złego rozwiązania, gdy istnieje lepsze rozwiązanie.

Ten antywzorzec zajmuje dwa razy więcej czasu: najpierw czas jest poświęcony na wymyślenie i wdrożenie własnego rozwiązania, a następnie na jego refaktoryzację lub zastąpienie.

Programista musi mieć świadomość istnienia różnych rozwiązań dla określonych zakresów zadań, kierować się ich zaletami i wadami.

Wszystkie problemy, z którymi spotkasz się jako programista, można podzielić na dwie części:

  • mądrzy ludzie rozwiązali ten problem 30 lat temu
  • mądrzy ludzie rozwiązali ten problem 50 lat temu

Większość problemów programistycznych została pomyślnie rozwiązana, zanim jeszcze się urodziłeś . Nie trzeba niczego wymyślać - wystarczy przestudiować doświadczenia innych ludzi (po to się pisze książki).

W 2022 roku możemy obchodzić następujące urodziny:

  • Języki programowania
    • Język C kończy 50 lat (1972)
    • Język Java skończył 27 lat (1995)
    • Python kończy 31 lat (1991)
  • Połączenie
    • Internet skończył 39 lat (1983)
    • Telefon komórkowy skończył 49 lat (1973)
    • Pierwszy SMS został wysłany 30 lat temu (1992)
  • Wzory
    • Wzór MVC skończył 44 lata (1978)
    • SQL został wynaleziony 48 lat temu (1974)
    • Fasola Java została wynaleziona 26 lat temu (1996)
  • Biblioteki
    • Hibernacja została wynaleziona 21 lat temu (2001)
    • Wiosna została wynaleziona 20 lat temu (2002)
    • Tomcat wydany 23 lata temu (1999)
  • system operacyjny
    • Unix został wydany 51 lat temu (1971)
    • Okna ujrzały światło dzienne 37 lat temu (1985)
    • Mac OS wydany 21 lat temu (2001)

I wszystkie te rzeczy nie zostały po prostu wymyślone, zostały opracowane jako rozwiązania problemów, które były bardzo powszechne i istotne w tamtym czasie.