Wprowadzenie do wzorców projektowych

Wzorce projektowe niby każdy coś o tym słyszał  ale czy wiesz dlaczego są one tak ważne podczas rozwoju programisty? Dlaczego warto z nich korzystać oraz kiedy rozwiązanie możemy nazwać już wzorce? Postaram się odpowiedzieć na te pytania.

Co możemy nazwać wzorcem projektowym?

Wzorcem projektowym możemy nazwać każde rozwiązanie problemu, które jest na tyle uniwersalne, że możemy adaptować je do swoich potrzeb. Wzorce projektowe są zdefiniowane w takich sposób aby były zgodne z dobrymi praktykami programistycznymi a wręcz korzystanie z nich wymusza na nas dobre praktyki. Warto wspomnieć, że wzorzec nie jest gotowym rozwiązaniem problemu a jedynie uniwersalną propozycją, którą należy dopasować do swojego rozwiązania.

Jeszcze kilka cytatów znalezionych w sieci:

„Wzorce projektowe nie są wynajdywane, ale odkrywane. Jakiś subtelny, świetny sposób rozwiązania jakiegoś problemu nie jest wzorcem projektowym.
Wzorzec musi być zastosowany wielokrotnie, niejako pojawić się w codziennej praktyce projektowej, potwierdzić swoje znaczenie. W tej praktyce jest dostrzegany i właśnie odkrywany.”

„Wzorce projektowe dotyczą architektury całej aplikacji, a nie pojedynczej klasy.”

Po co stosować wzorce ?

A po co odkrywać koło na nowo? W codziennej praktyce wielu programistów na całym świecie stwierdziło, że na jakiś problem X najlepsze jest rozwiązanie Y, co więcej jest skalowane i używalne wielokrotnie. Trwało to lata i wszyscy zgodnie powiedzieli tak to jest dobry pomysł na rozwiązywanie tego problemu. Jeżeli poznasz wzorce,  nie będziesz musiał tworzyć własnych rozwiązań, które mogą być niedoskonałe, posiadać błędy i być mało uniwersalne. Oszczędzasz dużo czasu znając wzorce.

Na jednej z konferencji,  na której miałem przyjemność być, jeden z prelegentów przedstawił zaobserwowany przez lata kilku etapowy proces w jaki sposób człowiek się czegoś uczy. Przedstawię to na przykładzie programisty, który poznaje nowy framework.

Etap 1 – powtarzanie rozwiązań.

Bierzemy w rękę tutorial i  krok po kroku przechodzimy przez niego papugując kod, który tam jest.

Etap 2 – modyfikacja gotowych rozwiązań

Wiemy już mniej więcej jak działa dany framework. Pora aby stworzyć swoją pierwszą niewielką aplikację. Ten etap trwa najdłużej. Kopiujemy gotowe rozwiązania i staramy się je modyfikować aby zachowywały się tak jak my tego oczekujemy. Szukamy kawałków kodu na forach, githubie czy też korzystamy z projektów współpracowników, po czym zmieniamy i patrzymy czy działa.

Etap 3 – tworzenie własnych rozwiązań

W pewnym momencie stwierdzimy, że jesteśmy w stanie już nie tylko modyfikować czyjeś rozwiązania ale również tworzyć własne. Mamy dostatecznie dużą wiedzę o narzędziu z którego korzystamy. Jeżeli czerpaliśmy wiedzę z dobrego źródła to również nauczyliśmy się dobrych praktyk.

Podsumowanie

Całkowicie  zgadzam się z przedstawionym przez tego Pana procesem. Chciałem pokazać Ci, że możemy również odnieść go do programowania nie tyle w jakimś frameworku ale po prostu do nauki programowania.

Jeżeli chciałbyś zacząć korzystać z wzorców (Etap 2) to nie ma innej drogi musisz je najpierw poznać najlepiej na przykładach (Etap 1). Jednak, jeżeli będziesz korzystał z odpowiednich źródeł i uczył się  wzorców (znajdziesz je np. w książce Design Patterns: Abstraction and Reuse of Object Oriented-Design) a nie szedł na skróty próbując łatwych szybkich, doraźnych rozwiązań często oferowanych na forach internetowych to dojedziesz do Etapu 3 z wiedzą, dzięki której jesteś dobrym programistą. Nie twierdzę, że na forach nie znajdziesz rzetelnej wiedzy. Oczywiście udzielają się tam bardzo mądrzy ludzie ale również są Ci mniej mądrzy i czasami wydaję mi się, że tych drugich jest więcej. Dla niedoświadczonego programisty może być problemem ocena, informacji wartościowych oraz śmieciowych.

Będąc w etapie trzecim możesz tworzył własne uniwersalne, skalowalne oraz zgodne z dobrymi praktykami lub doraźne, nie w pełni poprawne, dziurawe i nie uniwersalne rozwiązania. To jakie rozwiązania będziesz tworzyć zależy od tego z jakich wzorców będziesz korzystać na początku swojej kariery.