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!
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 ;)
CIEJA,
1 lutego to jest “na dniach” :)
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… Read more »
Wg pewnej doktryny ja też nie mockuje. W ogóle. Chociaż akurat do czego są mocki i stuby – wiem.
O jakiej doktrynie mówisz?
http://martinfowler.com/articles/mocksArentStubs.html#SoShouldIBeAClassicistOrAMockist – sure I’m classicist.
Stosujac zasate przy ktorej tworze proste testy jednostkowe a kompozycja klas pozwala mi zastosowac proste mocki nie musze przejmowac sie takimi problemami bo nie ma jak skomplikowac kodu :)
Szczerze powiem, że nawet nie wiedziałem, że jest taki spór (dla mnie w sumie sztuczny). Ja podchodzę do tematu tak, że robię jak jest wygodniej czyli w zależności od potrzeb używam prawdziwych obiektów, stub’ów lub mock’ów. Trochę zamieszania wprowadza tu nazewnictwo. Pisząc o bibliotekach do mockowania miałem na myśli wszelkie narzędzia, które generują nam “fałszywe” obiekty.
Dla mnie również mock to mock, niezależnie od tego czy “pod spodem” zachowuje się jak dynamic mock, strict mock, stub, fake, mole, double, substitute czy jeszcze inny wynalazek.
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.
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.… Read more »
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.
[…] wciągnęło mnie czytanie posta na blogu Maćka Aniserowicza – Jak pokierować dalszą karierą. Zainteresowany tematem byłem szczególnie, ponieważ sam (jak pewnie większość z nas) szukam […]
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… Read more »
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,… Read more »
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… Read more »
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… Read more »
“Zgodziłem się, bo chciałem sprawdzić, czy w Javie pisze się tak słabo, jak to sobie zawsze wyobrażałem ”
I jakie wnioski?
https://keraxel.net/2016/01/dlaczego-java-ssie/
Mówiąc ogólnie, niezbyt dobre :-) Do tego, co opisałem, dorzuciłbym jeszcze fatalnie rozwiązane klasy generyczne.
Na szczęście nie pracowałem z Javą EE, więc lista nie jest zbyt długa.