S.P.E.C.I.A.LKariera NR.3Jako student wierzyłem, że dobry programista to taki, który zna wiele języków i technologii. Jest to prawda, że jako programista powinieneś znać wiele rozwiązań. Nie zmienia to jednak faktu, że jako programista powinieneś zostać specjalistą jednego rozwiązania.

Jak nie wiadomo o co chodzi to chodzi o pracę. A w pracy jako pojedynczy człowiek zazwyczaj będziesz odpowiedzialny tylko za jedną rzecz. Ten scenariusz jest na pewno prawdziwy, jeśli będziesz pracować w korporacji. W firmie garażowej twoje specjalizacje będą trochę bardziej rozbite.

Specjalizacja jest jednak ważna. Gdy pracodawca szuka pracownika to szuka konkretnej osoby do konkretnego zadania. Dopasowanie więc swojej specjalizacji do właśnie tej oferty pracy daje ci właśnie zwycięstwo. Natomiast bycie wszystkim sprawi, że będziesz miał trudności z trafianiem do odpowiednich ofert pracy.   

Kogo obchodzi to, że umiesz trochę Javy, Ruby, PHP, Pythona, C# jak nie jesteś zdefiniowany na konkretne problemy, które będą pojawiać się w firmie.

Co więcej, nawet zorientowanie się na jeden język programowanie, to wciąż za duży obszar specjalizacji.

Specjalizacja jest ważna

Istnieje wiele programistów, którzy nie mają określonej specjalizacji. Jak to jest możliwe? Zazwyczaj siebie określamy bardzo szeroko. Definiujemy siebie jako programista danego języka. Jestem programistą C#. Jestem programistą Javy. Rzeczywiście te definicję określają to, co pracodawca szuka, ale to jeszcze za duże spektrum.

W rzeczywistości więc nie jesteśmy specjalistami w takim wypadku. Sam język programowania daje jeszcze za dużo opcji. Sam język programowania nie mówi pracodawcy co właściwie będziesz mógł  robić w jego firmie. Sam język programowania mówi pracodawcy tylko to jakiego narzędzia używasz.

Oczywiście pojawia się prosta myśl i wątpliwość mówiąca : a po co się specjalizować i zawężać się jeszcze bardziej. Rozumiem, że nie warto się uczyć wszystkim języków programowania, ale czy warto zawężać się jeszcze bardziej?

To prawda, że w ten sposób odrzucisz pewne oferty pracy, ale z drugiej strony będziesz trafiał do miejsc pracy gdzie twoje zdolności będą mogły zostać użyte na najwyższym poziomie. Z wysokim poziomem swoich usług możesz dostać większą zapłatę w pracy, bo w końcu jesteś wysokiej klasy specjalistą.

Twoja atrakcyjność na rynku pracy wzrośnie, bo jesteś odpowiedzią na konkretne problemy ludzi.

U konkretyzowanie swoje specjalizacji

Moim zdaniem specjalizacja w jednym języku programowania to za duże sito i trzeba go zmniejszyć. Jako programista C# mamy do dyspozycji wiele technologii i wiele rozwiązań do różnych aplikacji i problemów. Oto one:

  • WPF
  • Windows Form
  • Windows Phone
  • Windows 10 Apps
  • ASP.NET
  • Xamarin

Czy jednak jako programista C# będziesz umiał równocześnie pisać strony internetowe w ASP.NET i tworzyć aplikacje mobilne na Window Phone – NIE

Tego jest za dużo. Dlatego bycie programistą języka jest wciąż za dużym sitem. Ja jako student podjąłem decyzję i zainwestowałem w pisanie stron ASP.NET i była to jedna z lepszych decyzji w moim życiu.

Ofert pracy dla twórców stron ASP.NET jest bardzo dużo. Co sprawia, że tak nawet bycie programistą ASP.NET wciąż jest za dużym sitem. Bycie programistą ASP.NET mówi tylko, że umiem tworzyć strony internetowe, ale co to dokładnie znaczy.

Sam framework ASP.NET rozbija się na pod technologie:

  • ASP.NET Web Forms
  • ASP.NET MVC

Dlatego z mojej punktu widzenia powinienem określać siebie jako programistę ASP.NET MVC. Teraz wiadomo, który z tych pod frameworków znam. Osobiście mam dosyć ASP.NET Web Form więc fakt, że odrzucałbym oferty pracy związane tą technologią nawet by mnie ucieszył.

Bycie programistą ASP.NET MVC  może jednak być wciąż zbyt szeroką definicją. Dlatego moim zdaniem powinienem jeszcze określić, czy przy tworzeniu strony internetowej specjalizuję się w kodzie po stronie serwera, czy kodem po stronie klienta.

W moim przypadku czuję się bardziej na siłach po stronie klienta i lubię tworzyć pojedyncze strony przy użyciu Angulara. Ostatecznie więc moja definicja specjalizacji powinna brzmieć tak:

Programista ASP.NET MVC front-end Angular 2.0

Gdybym był specjalistą od strony serwerowej swój tytuł określiłbym inaczej:

Programista ASP.NET MVC back-end Oracle

Z taką specjalizacją informuję dokładnie swojego pracodawcę co potrafię, jakich narzędzi używam i za co powinienem odpowiadać w zespole programistycznym, jeśli bym do niego trafił.

Oczywiście takich ofert pracy może być niewiele. Na taką wąską specjalizację może istnieć tylko 30 ofert pracy. Natomiast ofert pracy dla programistów C# może istnieć ponad 600. Pamiętaj jednak, że szerokość swojego pola rażenia nie jest ważna. Co jest ważne na rynku pracy? Ważne jest to, aby być jak strzała, która trafia idealne pod określone wymagania danej firmy.

Ważne by z tym zawężaniem nie przesadzić. Chociaż jest to temat do dyskusji. Moim zdaniem bycie samym programistą Angular jest jednak zbyt wąskim celownikiem. Jako programista technologii webowych powinieneś znać chociaż jedno rozwiązanie serwerowe np. ASP.NET MVC.  Jednak jeśli byłbyś takim super guru, który by wiedział wszystko o Angularze   i byś pełni rolę bardziej konsultanta niż programisty wtedy -  zasada jednej specjalizacji pokazałaby swoją prawdziwą moc. Musiałbyś być jednak naprawdę mocnym specjalistą.

To samo dotyczy bycia tylko programistą Oracle PL/SQL.

Niestety zazwyczaj my programiści nie rozbijamy się w specjalizacjach aż tak wąsko. Rynek pracy jednak na mówi byśmy się trochę porozwijali tu i tam, zwłaszcza na początku kariery.

Jest to jednak do przemyślenia. Specjalizacja w jednym kierunku to  potęga. Pokazują to choćby zarobki programistów systemów SAP. Specjalistów jest niewiele (kto wie może to zabieg nawet celowy), a wiele firm i organizacji potrzebuje dostosowanych pod siebie rozwiązań. Słyszałem też kiedyś historię, że na wagę złota są programiści do konkretnych systemów komputerowych na samochody. Jeśli twój samochód miałby problem to w Polsce istnieją tylko 4 osoby, które mógłby ten problem naprawić. Skoro jest tylko 4 profesjonalistów oczywiste jest to, że każą sobie dużo płacić za usługę naprawczą.

Jakie więc powinieneś wybrać zestawy technologii. Otóż istnieją pewne grupy. 

Wybranie swojej specjalizacji

Jak więc zapewne zauważyłeś istnieją pewne grupy specjalizacyjne. Kto wie może właśnie teraz musisz podjąć decyzję do jakie grupy chcesz trafić. Odpowiedz więc sobie na to pytanie:

Czy chcesz pracować ze stronami internetowymi? Czy chcesz tworzyć wygląd strony, czy pielęgnować logikę biznesową? Czy chcesz  pracować z bazą danych? Czy może chcesz po programować na czymś nisko poziomowym?  Czy może chcesz tworzyć aplikacje na telefony? Czy może chcesz tworzyć skrypty na konkretne systemy operacyjne?  Czy  może chcesz tworzyć gry komputerowe? Czy może chcesz tworzyć roboty i algorytmy sztucznej inteligencji?

Każda z tych grup ma swój zestaw technologii. Każda z tych grup rozwiązuje zupełnie inne problemy. Przykład jako twórca strony internetowej wybrałbym zestaw składający się z  ASP.NET MVC i Angulara.

Jeżeli chodzi o aplikacje mobilne to najpierw musiałbym określić na jakie  systemy operacyjny pisałbym tę aplikację: iOS, czy Android.

Systemy operacyjne też otwierają przed tobą całe inne morze specjalizacji. Istnieje wielu programistów, którzy tworzą skrypty na systemy Windows, UNIX lub Mac i to jest ich specjalizacja.

Gry komputerowe to bardzo skomplikowane zagadnienie i jedno z najtrudniejszych w tej branży. Na początek odpowiedz sobie, czy chcesz tworzyć grę na komórkę, czy grę na komputer.

Jak więc wybrać swoją specjalizację. Na podstawie tych pytań powinieneś wybrać swoją grupę i zestaw technologii, które spełnią twój cel i cel przyszłej firmy. Na początku może wydawać się to trudne, zwłaszcza jeśli jesteś jeszcze studentem i wiesz jak ważny jest ten pierwszy krok. Z doświadczenia wiem, że wiele osób zastanawia się wtedy tylko nad wyborem języka programowania, a nie na zawężonych, ściśle konkretnych rozwiązaniach. Jaki problem chciałbyś rozwiązywać? Pozwól, że dam ci pewne rady:

  • Jakie tematy obecne pojawiają się konferencjach i prezentacjach? Stań się ekspertem w tej dziedzinie, w tym najnowszym trendzie i nie będziesz miał problemu ze znalezieniem pracy kilka miesięcy później.
  • Jakie problemy najczęściej pojawiają się na forach, które mógłbyś rozwiązać?
  • Co daje ci największą frajdę, gdy piszesz kod? Co byłoby twoją pasją? Strony internetowe, czy gry komputerowe, a może roboty i sztuczna inteligencja. To są pytania, na które musisz sobie odpowiedzieć.
  • Jeśli już pracujesz, to jakie problemy ma obecnie twoja firma?
  • Jeśli jeszcze nie pracujesz przeczytaj opisy ofert pracy na pracuj.pl i stwórz sobie obraz specjalisty, który by trafił do takiej oferty pracy
  • Jakie są czynności, których nikt nie chcę robić? Gdzie jest najmniej specjalistów? Przemyśl to, ale uważaj by nie specjalizować się w czymś czego będziesz nienawidził np. technologii SharePoint.
  • Zrób listę wszystkich specjalizacji, jakie przychodzą ci do głowy. Określ je najbardziej konkretnie jak się da, a potem dokonaj wyboru.

Przy wyborze specjalizacji pamiętaj by jej definicję zawężać  jak najbardziej jest to możliwe. O czym powinieneś jeszcze pamiętać? O tym, że technologie i trendy się zmieniają. Nie można wybrać jednej specjalizacji na całe życie. Nadejdzie taki moment w twojej karierze, że będziesz musiał nauczyć się czegoś nowego i powtórz cały ten proces specjalizacji.

A co z moim innym umiejętnościami

O ile fakt, że istnieją pewne mocne argumenty, dla których powinieneś się skupić na konkretnej specjalizacji ,to faktem jest, że powinieneś posiadać także inne umiejętności. 

Nie ma jednak co ukrywać te inne umiejętności nie są takim wysokim priorytetem niż twoja wybrana specjalizacja. Przykładowo umiem tworzyć proste aplikacje na Androida i na iOS. Mam takie umiejętności, ale zdecydowanie nie są to moje specjalizacje, które dałyby mi konkretną pracę i frajdę.

Inne umiejętności są ważne, ale nie najważniejsze. Ciężko reklamować się na rynku pracy jako człowiek, który potrafi w teorii pisać strony internetowe i równocześnie tworzyć aplikacje mobilne na wszystkie popularne systemy operacyjne. Osoba, która patrzyłaby wtedy na moje CV zapewne twierdziłaby, że te umiejętności są zapewne mało rozwinięte skoro mam tylko dwa doświadczenia, a twierdzę, że mam taki wachlarz zdolności.

W małych firmach dobrze jest mieć programistę w swoim zespole, który potrafi wszystko. Ma on zdolności do bazy danych do skryptów JavaScript. Sam pracowałem w takiej firmie i miałem wrażenie, że oprócz programowania robię także za prymitywnego grafika. Oczywiście moje zdolności graficzne w programie Paint.NET, czy Photoshop nie są moją specjalizacją.

Jeśli masz CV rozbite na tyle różnych  funkcji zapewne będzie ci trudno trafić do czegoś konkretnego. Konkretne CV zawsze wygra z CV, które zdaje się stworzone uniwersalnie do wszystkiego.

Warto być elastycznym, ale najpierw zostań specjalistą w jednej dziedzinie. To jest twój priorytet. Jeśli masz coś wybrać, to wybierz, a potem będziesz mógł rozbijać się na swoje mniejsze pod zdolności.

Jaka jest więc twoja obecna specjalizacja?  Jeśli jej jeszcze nie masz to ją wybierz tu i teraz.