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?</h2>
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:</strong>

"Wzorce projektowe nie są wynajdywane, ale odkrywane</b>. 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</b>."</blockquote>

"Wzorce projektowe dotyczą architektury całej aplikacji, a nie pojedynczej klasy."</blockquote>

Po co stosować wzorce ?</h2>
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ń.</h3>
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ń</h3>
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ń</h3>
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</h3>
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.