Z maila: jak pokierować dalszą karierą?

22

Regularnie przez lata dostaję od Was masę maili z pytaniami o karierę programisty. Jak zacząć, jak kontynuować, jak rozwijać… i tak dalej. Raz odpowiedziałem na taką wiadomość postem na blogu (“Początki mojej “kariery” – odpowiedź na maila“) i właściwie nie wiedzieć czemu nie kontynuowałem takiego podejścia. Dzisiaj zatem następna porcja takiej konwersacji.

Życzę miłego zaglądania mi przez ramię w skrzynkę e-mailową!

Pracuję na uczelni jako programista Javy. Klepiemy JavaFX i Swing czyli archaizmy. Sporo się przy tym sam nauczyłem (design patterns, czytelny kod, trochę bibliotek), ale od co najmniej roku się nie rozwijam. Definitywnie pora na zmianę!

Zdecydowanie! :)

Code geekiem nie byłem. Kodować lubię, na zajęciach zawsze wszystko idealnie robiłem, nierzadko po nocach, bo sprawiało mi to frajdę. Lepiej i więcej niż inni – to było moje motto :D Do tej pory tworzę własne projekty od czasu do czasu, ale nie dłuższe niż 2-tygodniowe i dalekie jakością od porządnego produkcyjnego kodu (czesto niedokończone, niedopracowane itp).

Z projektami pobocznymi tak właśnie jest – dopóki ktoś za nie nie płaci to albo ich się nie kończy albo robi często byle jak :). Z drugiej strony – jeśli nikt nie płaci to nikt nie wymaga terminów, więc można poszaleć przy “jakości”, co niestety często skutkuje “niedokończeniem”. Ale w tym akurat nie ma niczego złego, w końcu robi się to dla funu.

Nie wchodząc zbytnio w psychologię od dawna miałem jednak problem z podejmowaniem trudnych wyzwań. Nagle kumple zrobili się profesjonalistami a ja zostałem… Ale dziad z tym :D. Nie ma co lamentować, trzeba to zmienić. Poduszkę finansowa mam na około 1 rok, wiec nie ma dramatu. Pytanie jak ten czas wykorzystać najkorzystniej.

Najważniejszą decyzję – “czas na zmianę” – masz za sobą. A jeśli możesz sobie pozwolić na rok “kształcenia się we własnym zakresie” to już w ogóle szczęście za nogi złapałeś, pora je wycisnąć. Moje dwa ulubione słowa: DO ROBOTY! :).

Opcja 1 – nauka pod pracodawcę. W moim przypadku JavaEE – ogromne monstrum, które nie wiem jak i gdzie ugryźć. Znam Javę, to plus. Ale ilość nauki sugeruje, że długo nie będę produktywny i długo nie napiszę czegoś z czego mógłbym sobie korzystać na co dzień. Poza tym nauka pod pracodawcę “bo tego szukają” daje mniej fanu i średnio mi się widzi. Ale za to masa miejsc pracy i po latach chyba duża satysfakcja z tworzenia skomplikowanych rzeczy i pracy z kumatymi ludźmi :D

Ja z Javą nie mam wielkiego doświadczenia, ale chwilę przy tym dłubałem i… z samą Javą nie chciałbym mieć więcej do czynienia, o EE już nie wspominając :). Najbardziej enterprajsowy szajs jaki widziałem, nie przebranżowiłbym się nawet gdyby płacili 150% pensji. Ale z drugiej strony: co ja tam wiem, skoro na co dzień w tym nie siedzę. To tak jak Javowcy krytykujący .NET, krzyczący że jest 5 lat za Javą. A dopiero co sami dostali w języku lambda expressions. C# jako język mocno się rozwija i ja z chęcią przy nim zostanę.

A praca przy skomplikowanych rzeczach z kumatymi ludźmi to taki trochę święty graal, w “enterprajsie” często praca polega na utrzymaniu starych systemów, poprawianiu błędów i dolepianiu nowych ficzerów – byle jak, aby działało, na siłę. Podczas rekrutacji nikt Ci tego nie powie, ale tak wygląda większość braży (i to nie tylko jeśli chodzi o Javę, w .NET jest podobnie).

Nie wiem z jakiego miasta jesteś, ale nawet w moim Białymstoku nie tylko Javowiec czy .NETowiec łatwo pracę znajdzie. Tym bardziej w większych miejscowościach nie trzeba raczej pod tym kątem wybierać technologii do nauki. Chociaż jakiś szybki research nie zaszkodzi. Najlepiej wybrać się na spotkanie grupy pasjonackiej/meetup, jeśli jest coś takiego organizowane, i tam zapoznać i podpytać ludzi jak wygląda lokalny rynek.

Opcja 2 – Android i urządzenia mobilne… To jest to co kusi mnie niesamowicie. Perspektywa posiadania przy sobie apki własnego autorstwa z której również inni mogą korzystać jest mega! Myślę jednak, ze programista Android bez solidnej wiedzy z zakresu funkcjonowania porządnego webdevelopmentu, webaplikacji i całego tego backgroundu jest jakby trochę wybrakowany. A może się mylę? Może to niezdrowy perfekcjonizm? :D

To parę lat temu też mnie strasznie kusiło, ale nigdy się nie zdecydowałem. I właściwie nie żałuję. Patrząc na jakość wielu appek na androida – strasznie ciężko jest zrobić coś dobrego. A jeszcze żeby działało na pierdylionie różnych telefonów i różnych wersji systemu – to musi być masakra. Nigdy nawet nie próbowałem, ale m.in. dlatego wolę webdev niż desktopowe czy mobilne aplikacje, bo muszę wspierać tylko kilka przeglądarek/rozdzielczości, a nie milion różnych urządzeń jak na androidzie :). Finalnie nie zdecydowałem się nawet spróbować bo doszedłem do wniosku, że takie dostosowywanie aplikacji do różnych durnych wymogów sprzętowych ORAZ zmiennych rekomendacji Google zabiją całą przyjemność z pisania własnej appki. Nie zamierzam do tego tematu wracać w przyszłosci, chociaż nie lubię rezygnować z czegoś nawet nie próbując. Jednak tutaj jestem mocno przekonany, znając siebie, że mam rację :).

Opcja 3 – Webdevelopment. PHP, JS, HTMLCSS, Frameworki, Python, RubyRails, Sencha, Django, webservicy itp… Też kuszące. Widać szybko efekty pracy a w połączeniu z Androidem, daje extra możliwości. Do tego dość przejrzysta ścieżka rozwoju.

Ja bym w to szedł, tak jak poszedłem lata temu (chociaż u mnie to po prostu bardziej aplikacje serwerowe/usługi, a UI webowe to dodatek). Ja robię w .NET, ale to powinno być fajne w czymkolwiek (poza javą ;) ).

Każda opcja nie jest mi jakoś totalnie obca. W każdej mógłbym ustalić sobie jakąś ścieżkę rozwoju, poszukać mentoringu (oczywiście cały czas szukając pracy w temacie bo to jest max korzyść zawsze).
Co byś poradził? Czy ucząc się, iść za głosem serca i ogarniać to co daje od razu fan i budzi zaciekawienie (nieprzewidywalny romans) czy realistycznie analizować rynek i podpasować się pod jego potrzeby (małżeństwo z rozsądku które może nabierze kolorów? :D)

Niezależnie od tego co wybierzesz – mając X buforu finansowego i chcąc się po prostu poduczyć, szukaj praktyk! Nawet bezpłatnych przez pierwszy kwartał. Powinieneś znaleźć bez problemu, a mając, bądź co bądź, doświadczenie w programowaniu, nawet na “płatnego” juniora przy odrobinie szczęścia się załapiesz. Pisz CV i wysyłaj, wysyłaj!

Czy np na stanowisko junior .NET developera (Twoja branża) przyjąłbyś świeżaka z podstawową i suchą znajomością C#/VB oraz platfromy .NET czy raczej gościa piszącego w wolnym czasie apki mobilne na WindowsPhona, z których kilka już opublikował i ktoś nawet z nich korzysta?

Mam nadzieję – z różnych przyczyn – że do tego nie dojdzie, tzn. że nie będę musiał zatrudniać junior developerów :). Ale jeśli bym szukał juniora to dla mnie ważniejsze jest praktyczne doświadczenie i stworzenie samodzielnie czegoś działającego, nawet jeśli tylko na własną rękę a nie “w pracy”. Sucha książkowa wiedza to coś co można łatwo nadrobić, a doświadczenie zdobywane w bojach jest najcenniejsze. A jeśli te boje są organizowane bez przymusu, jako hobby, to tym lepiej :).

I jeszcze na koniec:

Najfajniejszym rozwiązaniem może okazać się połączenie tych dwóch rzeczy: praca/staż w jednej ścieżce, a hobbystyczny rozwój w innej. Jeśli byś takie coś rozważał to wpadaj na bloga 1 lutego, znajdziesz tam kop motywacyjny do robienia “na boku”, a może nawet do uzyskania trampoliny do startu dalszej kariery ;).


Masz podobne dylematy i chcesz poznać moją opinię na dany temat? Bez wahania uderzaj w kontakt!

Share.

About Author

Programista, trener, prelegent, pasjonat, blogger. Autor podcasta programistycznego: DevTalk.pl. Jeden z liderów Białostockiej Grupy .NET i współorganizator konferencji Programistok. Od 2008 Microsoft MVP w kategorii .NET. Więcej informacji znajdziesz na stronie O autorze. Napisz do mnie ze strony Kontakt. Dodatkowo: Twitter, Facebook, YouTube.

22 Comments

  1. Z niecierpliwością czekam na 1.02.2016. Nie ukrywam, że na dniach miałem startować z własnym blogiem, ale poczekam na 1.02 ;)

  2. Ja bym jeszcze dodał poradę, że bez względu na to, którą ścieżkę wybierzesz to warto czytać różne rzeczy (blogi, książki) na tematy bezpośrednio związane z tym z czym pracujemy, ale nie tylko. Z pewnością nie wszystko zapamiętamy, ale zawsze coś zostanie w głowie. Brzmi to oczywista oczywistość, ale pozornie.

    Obserwuję, że nawet programiści z X lat doświadczenia mają braki w wydawałoby się podstawowych rzeczach. Podam przykład, ostatnio robiłem przegląd aplikacji web’owej, w której walidacja danych była robiona tylko po stronie klienta, a co więcej aplikacja zasysała prawie całą bazę danych bo tak było wygodnie. Działało bo baza danych zawierała tylko kilka rekordów. Inny przykład. Rozmawiałem z programistą, który pisał testy jednostkowe, ale o bibliotek do mockowania nie używał, albo wręcz nie wiedział do czego są potrzebne. Przykładów można by mnożyć. Zmierzam do tego, że będąc ogólnie oczytanym można na rozmowie wyróżnić się.

    • Wg pewnej doktryny ja też nie mockuje. W ogóle. Chociaż akurat do czego są mocki i stuby – wiem.

    • MICHAŁ KOMOROWSKI,
      Właściwie to masz rację, jednak… czasami zbytnia gorliwość w czytaniu (czyli teorii) kompletnie paraliżuje działanie (praktykę). Dlatego napisałem że teorię można nadrobić, a prawdziwego doświadczenia nic nie zastąpi.

      • Potrzebny jest zdrowy balans miedzy teoria a praktyka. Praktyka pozwala zweryfikowac teorie natomaist teoria poszerza horyzonty i pozwala dowiedziec sie o nowych rzeczach ktore mozna praktycznie zweryfikowac :) Zloty Srodek.

  3. Ha ha ha ha.. “A praca przy skomplikowanych rzeczach z kumatymi ludźmi to taki trochę święty graal, w “enterprajsie” często praca polega na utrzymaniu starych systemów, poprawianiu błędów i dolepianiu nowych ficzerów – byle jak, aby działało, na siłę. Podczas rekrutacji nikt Ci tego nie powie, ale tak wygląda większość braży (i to nie tylko jeśli chodzi o Javę, w .NET jest podobnie).” – FCK TRUE Man :)

    Wiadomo tylko to – korpo daje kasę, ale wiąże w schematy, startup daje wolność, ale czasem ciężko wyżyć. Jak startup zaczyna dawać kasę to za chwilę jest korpo i tak w kółko.

    A tak serio, widać braki teoretyczne. Pewnie niedługo opiszę na blogu, ale Pragmatic Programmer i Passionate Programmer dają BARDZO solidne podstawy do prowadzenia swojej kariery. Pierwszy w sferze technicznej, drugi managerskiej.
    A z innej beczki – IOS ma tylko kilka urządzeń do wspierania i teraz ciekawy język SWIFT. Do tego wg. mojego researchu mobilni programiści zarabiają najwięcej i jest teraz hype na takie aplikacje, bo prawie każdy site ma appkę mobilną.

  4. Na pewno fajnym pomysłem jest przejść się po kilku meetupach dotyczących różnych technologii. Zobaczyć czy jest tam coś co cię interesuje. Najlepiej pogadać z uczestnikami i prelegentami. Oczywiście łatwo powiedzieć, idź na grupę, pogadaj z ludźmi, ciężej to zrealizować, szczególnie jak nikogo się nie zna.

    Dlatego dobrym wyjściem jest też pojechanie na jakąś konferencje , która dotyczy programowania, ale nie konkretnej technologii. Tam można zobaczyć jakie są obecne trendy w branży, co robią inni i czy są z tego zadowoleni. Dużo łatwiej jest też nawiązać kontakty, klimaty konferencyjne sprzyjają networkingowi ;)

    • BOGUSZ PĘKALSKI,
      100% racji. Występowałem latem na konferencji Ruby (która była zresztą jednocześnie 3dniowym rejsem po Mazurach :) ) i to bardzo ciekawe doświadczenie. Niby wszyscy jesteśmy programistami, niby żyjemy w tym samym czasie, a problemy pomiędzy tech-stackami są diametralnie różne. Było to dla mnie interesujące odkrycie.

  5. Pingback: Jak pokierować dalszą karierą – moje zdanie. – Blog Pawełka

  6. tomaszk-poz on

    Ja bym Javy tak nie skreślał.

    Po pierwsze – licho wie co Microsoft wymyśli z NET, samo otwarcie na nowe platformy na razie niewiele daje a wszystkiego i tak nie przeniosą.
    Jak chce się pisać wieloplatformowo, trzeba skorzystać z Mono, gdzie są ograniczenia. No i pytanie czy będą chętni wykorzystywać na Linuksie twory MS, gdy już są tam zadomowione inne technologie?
    Jak na razie to MS adaptuje linuksa a nie odwrotnie (dogadali sie z bodajże Redhat, na Azure działa linux).
    Do tego dodajmy krętactwa MS przy Windows10 i przy starszych systemach (olewka WinXP, a ja mam klienta, ktory ma mnóstwo WinXP i takich przypadków pewnie jest wiecej).

    Swing i JavaFX są stare ale html czy WinForms są młodsze?
    Technologie sie przenikają, Java dostala lambda, w .NET używa sie Hibernate, logN, refleksji etc. W “dużym” enterprise rządzi java, oracle, serwery aplikacji, bigdata. JavaEE nie trzeba używać, dla ułatwienia zycia powstal SpringFramework, zas do scalenia klocków do kupy serwery tomcat i podobne.

    Owszem, C# mocno sie rozwija, ale ja uważam, że te zmiany ostatnio są powierzchowne. LINQ to było coś, lambda ok, ale teraz to popierdółki async (bo wątki w WIndowsie są ciężkie, więc się oszczędza), formatowanie etc. Nowy c# to nowy framework, to utrata wsparcia na starsze systemy.

    Java to także maszyna wirtualna a na niej działają i są używane inne języki, np. Scala, Groovy, Jython.
    Mam wrażenie, że każdy język ma granicę rozwoju, w jego miejsce powinien powstać nowy, o wiele lepszy, integrujący nowy ład niż łatać staroć. W javie są to np. Scala, a Apple w miejsce ObjC wymyślił Swift.

    Dodatkowo Java to Android – nie trzeba płacić za Xamarin.

    “Patrząc na jakość wielu appek na androida – strasznie ciężko jest zrobić coś dobrego.”
    Nie zgodzę się: po pierwsze – gimbaza tez tam pisze a nikt tego nie sprawdza, po drugie żeby napisać
    coś dobrego trzeba napisać coś dobrego :-D. Może powodem jest, że apki dają mało zysków.
    W przypadku iOS w sklepie Apple aplikacja musi przejść proces akceptacji, trzeba wykupić konto deweloperskie no i mieć
    Maka, co stawowi istotny koszt wejścia w biednych krajach. Za to jak chwyci, daje więcej pieniędzy
    (jak gierka gościa z Wietnamu, który kasował po 10tys. USD co tydzień).

    “A jeszcze żeby działało na pierdylionie różnych telefonów i różnych wersji systemu – to musi być masakra.”
    Pisze się na poziom Androida, coś jak Windows, zakładasz bazową wersję systemu. Te pierdyliony różnych telefonów:
    każdy ma sieć, ekran, dotyk, dźwięk. Wspólne rzeczy. Myślę, że tu może być lepiej niż w webdevie, bo masz jasne reguły budowania UI.

    “dlatego wolę webdev niż desktopowe czy mobilne aplikacje, bo muszę wspierać tylko kilka przeglądarek/rozdzielczości”
    Przecież desktopowe aplikacje to bułka z masłem (WinFormsy stoją w miejscu), o wiele gorszy jest webdev, bo przeglądarki
    różnią się w szczegółach (to, co działalo mi na chrome, nie ruszyło na firefoksie, bo chrome był mniej zgodny ze standardem)
    i może przestać działać w przyszłosci po aktualizacji przeglądarki, a klient nawet o tym nie wie, że była aktualizacja.
    Do tego dodaj – firma używa IE, bo zabezpieczenia, Firefoxa, bo inne systemy na nowych nie działają.
    Jak dla mnie straszny bałagan. Powinni to zaorać, zrobić maszynę wirtualną wspólną dla wszystkich przeglądarek
    i UI coś w stylu WPF. Kto to słyszał, żeby w internecie były rozważania jak wyśrodkować div w czymś tam?

    MS mi troche napsuł krwi (potrafi podać komunikaty błędów, które zbijają z tropu)
    a szczytem było jak zaktualizowałem MVC3 z nuget’a i przestała działać apka webowa (dokładnie dll nie pasowała do razora).

    Ja trochę żałuję, że nie poszedłem w java i pythona. Są tam rozwiązania stare ale jare, sprawdzone w enterprise. Po co być królikiem doświadczalnym?

    Na pewno warto znać jezyki z różnych dziedzin, u mnie javascript otworzył oczy (ale nie rozumiem zachwytów nad nodejs),
    a java kusi stabilnością, przenośnością i światem enterprise.

    Zresztą – język to najmniejszy problem, ważne są biblioteki, aktualizacje, dokumentacja, społeczność (i dostęp do źródeł).

    Z innej beczki – rok na samokształcenie. NIE RÓB TEGO. Ja to przerabiam, kasa znika, ma się rozregulowane życie (bo chce się zlikwidować problem, a tu 3 w nocy) i jeszcze do końca nie wiadomo czego się uczyć no bo skąd, jak się nie pracuje nad konkretnymi projektami?

    Radzą wybrać zakres technologii, w której chce się pracować, poszukać pracy za darmo przez pierwszy kwartał (pracodawca doceni chęci)
    np. z 5 godzinnym dniem pracy i pilnie się uczyć w ogniu pracy i po obiedzie zrobić drugą sesję nauki w domu.
    Teraz ja bym tak zrobił ale już nie mogę :D

    • TOMASZK-POZ,
      Javy nie skreślam, po prostu nie chcę w niej nic robić i nikomu nie polecam, ale jak napisałem – mam zbyt mało doświadczenia żeby traktować te słowa w 100% serio :). JVM i Groovy, scala, kotlin… no niby tak, ale co z tego, w robocie i tak piszesz w Javie.

      Porada o pójściu do pracy – jak najbardziej się zgadzam jeśli jest taka możliwość, a tutaj jest. Rozwój we własnym zakresie też jest ważny, więc najlepszym rozwiązaniem jest połączenie jednego i drugiego, do czego zachęcałem.

      BTW dzięki za tak obszerny komentarz ;).

    • TOMASZK-POZ,
      Nie chcę wywoływać kolejnej wojny Java – .NET, ale to nie działa do końca tak, jak myślisz (disclaimer: od 9 miesięcy pracuję jako Java Developer, wcześniej pracowałem na .NET) .

      Po pierwsze, przenośność kodu to mit. Nawet jeśli nie korzystasz z bibliotek w kodzie natywnym, to IMHO większym problemem jest nie OS, a powiązanie z konkretnymi bazami danych, usługami etc. Jaką masz gwarancję, że np. SZBD działa tak samo na różnych platformach?

      Po drugie, na dotnecie też masz wiele języków. Tylko co z tego, skoro wszystkie oferty pracy dotyczą tego głównego? Biznes nie przepada za technologicznymi eksperymentami.

      Po trzecie, async powoduje powrót sterowania, co jest istotne z punktu widzenia poprawności wykonywania programu, przechwytywania wyjątków, etc.

      Masz za to absolutną rację co do tego, że samokształcenie *zamiast* pracy to zły pomysł. Niestety developerzy mają tak, że próbują rozwiązać problemy, które chcą rozwiązać, a nie takie, które istnieją. Praca daje zupełnie inne spojrzenie na programowanie na danej platformie.
      Nie szedłbym za to w stronę bezpłatnego stażu, z dwóch powodów. Po pierwsze, autor pytania posiada już doświadczenie, jakie by ono nie było. Po drugie, stawianie się na pozycji stazysty może spowodować, że będzie dostawał zadania, których zwykli developerzy nie chcą się podjąć, np. dlatego, że zadanie jest nudne lub pozbawione sensu. Spotkałem się z przypadkiem, w którym pracodawca brał bezpłatne, kiepsko wyspecyfikowane zlecenia i dawał ich realizację stażystom, tylko po to, żeby mieć te projekty do portfolio.

      Wracając jeszcze do tematu aplikacji mobilnych – to nie jest taki rocket science, trzeba po prostu pamiętać o kilku ograniczeniach urządzeń mobilnych. Zaprojektowanie UX na Androida/WP jest prostsze niż np. w WPF czy na webie.

      • tomaszk-poz on

        Miałem na myśli przenośność kodu i jar, SZBD to nie sprawa javy tylko dostawcy bazy (zawsze można wziąć baze w java ;-D), na pewno przenośność jest o niebo większa od plików z .net. Np. MS daje sterownik do MSSQL jako jeden Jar na wszystkie systemy, wiec da sie to napisać. Takie mono niby ma MVC4 ale nie do końca bo nie ma choćby async,, a zawsze się można wyłożyć, że jakaś klasa nie ma zaimplementowanej metody.

        Pisałem o bezpłatnym stażu (z opcją zatrudnienia0 w sensie zachęty dla pracodawcy, że facetowi zależy. Ale dzięki za zwrócenie uwagi.

        A tak z ciekawości – przechodząc z Net na Jave wpadłeś na poziom zerowy czy doświadczenie z net miało znaczenie, zwłaszcza używanie frameworków ze świata javy? Przy zmianie pracy dłubałeś coś w javie? Jeżeli tak, musiałeś znać JavaEE, Spring, żeby dostać robotę?
        Finansowo na razie straciłeś na tym?

        Dopytuję, bo ostatnio powoli nabieram obrzydzenia do rozwiązań z rezerwatu Microsoft (może się starzeję). Dziękuję za ich technologie, wczoraj zdechło mi podświetlanie składni w Razor w VS2015, po naprawieniu (hokus-pokus + reinstalacja dodatków) przy mieszaniu razor + js javascript compiler ciagle wywala mi błąd mimo wielu prób i wertowania w necie info na ten temat. Dzisiaj bratu zdechł Windows10.

      • To, co miałem na myśli to fakt, że nikt nie będzie przenosił aplikacji produkcyjnej pomiędzy platformami.

        Doświadczenie liczyło się normalnie. Większość zasad i wzorców jest wspólna pomiędzy wieloma językami obiektowymi. Nie musiałem znać żadnych frameworków Javowych, chociaż miałem trochę styczności z Java EE. Moja praca polega na łączeniu analizy z danymi, więc jest to głównie czysta Java.
        Gdybym był na tym stratny to bym nie przeszedł na ciemną stronę. Pracodawca potrzebował developerów od zaraz. Prawdę mówiąc, o Javie dowiedziałem się podczas ostatniego etapu rekrutacji. Na szczęście zrobiłem wcześniej wywiad o firmie i byłem przygotowany na taki scenariusz. Zgodziłem się, bo chciałem sprawdzić, czy w Javie pisze się tak słabo, jak to sobie zawsze wyobrażałem :-)

Newsletter: devstyle weekly!
Dołącz do 1000 programistów!
  Zero spamu. Tylko ciekawe treści.
Dzięki za zaufanie!
Do przeczytania w najbliższy piątek!
Niech DEV będzie z Tobą!