poniedziałek, 30 kwietnia 2012

Po co te wzorce?

Od jakiegoś czasu nieodłącznym elementem wszelkich ogłoszeń o pracę dla programistów języków obiektowych pojawia się znajomość wzorców projektowych, co byłoby nawet całkiem zrozumiałe, gdyby nie jeden drobny szczegół: w wielu firmach z tego grona, rozmowa kwalifikacyjna będzie jedynym momentem, kiedy o wzorcach usłyszycie.

W takim wypadku, po co tyle firm umieszcza takie wymagania odnośnie kandydatów? Skoro potrzeba im kogoś, kto potrafi pisać np. w PHP strony internetowe, a o OOP słyszeli dawno temu na studiach, to w jakim celu zawyżają oni tak bardzo wymagania? Bo znajomość wzorców świadczy jednak o sporej wiedzy z zakresu OOP. Z tym, że przez "znajomość" rozumiem tutaj również umiejętność ich zastosowania oraz wiedzy, kiedy należy takie rozwiązania implementować.
Tak, więc po co to im? Tylu potencjalnych kandydatów nie zgłosi się na taką rozmowę, ponieważ nt. wzorców wiedzą jedynie tyle (a i to tylko ze słyszenia), że singleton jest zły i nie powinno się go używać. Poza miejscami, gdzie jednak dobrze by było go wykorzystać:P Z drugiej strony Ci, którzy się zgłoszą, po wstępnej rozmowie uznają, że to miejsce nie jest dla nich, bo jednak poziom jest trochę niższy niż spodziewali się po ogłoszeniu:)

Dziwny i niezrozumiały to dla mnie zabieg. Ja, kiedy rozmawiałem ostatnio na temat wymagań, jakie powinniśmy wpisać do oferty pracy, stwierdziłem, że jak dla mnie wystarczające są trzy: komunikatywna znajomość angielskiego (bo część rzeczy omawiamy w tym języku), podstawowa znajomość programowania obiektowego, czyli klasa, abstrakcja i interfejs oraz umiejętność ich wykorzystania i wytłumaczenia się dlaczego tak, a nie inaczej, a na koniec znajomość jakiegoś języka obiektowego, frameworka MVC i (ewentualnie) pracy z ORM'em.
Mile widziana oczywiście znajomość konkretnego języka i bibliotek. A wzorce? Co prawda pytamy o nie na rozmowie kwalifikacyjnej, ale czy to jest główne kryterium na podstawie, którego podejmujemy decyzję? Nie. Dobrze jak programista wie, czym są i potrafi je zidentyfikować, rozumie dlaczego zostały wykorzystane właśnie tutaj, ale to projektant jest od tego, aby wiedzieć gdzie ich użyć. A jeżeli nie projektant, to jakiś straszy programista.

Wydaje mi się, że ostatnio jest jakaś moda na "znajomość" wzorców. Oczywiście polecam dokształcanie się i rozwój, ale programista nie musi być od wszystkiego, czytanie diagramów UML i rozumienie wzorców powinno wystarczyć i to nawet (a może przede wszystkim) w dużych firmach.
Po prostu często można się spotkać z opinią (a przynajmniej takim myśleniem), że projektant = programista, a jak już jest (dobry) projekt, to może być byle jaki programista, a to nie jest prawda. Tak samo, jak jest architekt domu i wykonawcy. Żeby być zadowolonym ze swoich czterech kątów i architekt i firma budowlana muszą być dobrzy w tym, co robią, a dobra jakość pracy jednych nie jest równoznaczna z jakością drugich.

Tak czy inaczej, nawet jeżeli nie macie wzorców w małym palcu jednej ręki, to warto próbować nawet tam, gdzie wymagają ich znajomości, ponieważ czasami może się okazać, że ta znajomość nie jest aż tak wymagana, jak jest napisane w ofercie, a nawet jeśli, to możecie okazać się dobrzy na innych polach (a to na rozmowach też wychodzi) i potencjalny pracodawca zmieni się w pracodawcę:)