Kim jest Junior Developer?
Mianem Junior Developera określa się zazwyczaj osobę która dopiero zaczyna komercyjną pracę programisty lub ma na tyle mało doświadczenia, że nie potrafi rozwiązywać bardziej skomplikowanych problemów programistycznych. Kod Juniora nie jest najlepszej jakości, nie używa on prawidłowo wzorców projektowych, zna tylko podstawowe biblioteki i frameworki. Junior potrzebuje pomocy ze strony osoby bardziej doświadczonej, która będzie mogła przekazać jej wiedzę technologiczną niezbędną do dalszego rozwoju i pracy nad projektem.
Oferty pracy
Przeglądając oferty dotyczące stanowiska Junior Developera prawie wszyscy pracodawcy wymagają doświadczenia komercyjnego od miesiąca do dwóch lat. Rekordzistą było ogłoszenie na Junior Developera z wymaganiem min. 3 letniego doświadczenia!!! Nie chcę nikogo obrażać ale z wymagań pracodawcy wynika, że chce zatrudnić osobę która w ciągu 3 lat nie poczyniła prawie żadnych postępów i nadal ma wiedzę na poziomie Juniora! Maciej Aniserowicz w swoim 12 odcinku vlogu bardzo dobrze zauważył, że licznie doświadczenia w latach nie jest miarodajne a często nawet krzywdzące.
Programista mający 10 lat doświadczenia w Javie może mieć umiejętności na tyle słabe, że klasyfikuje się jako Junior. Ktoś kto całe życie programował w Javie i jest Seniorem nie dostanie od razu stanowiska Senior Android Developera. Będzie on musiał przejść przez wszystkie szczebelki od początku – z tym, że zajmie jej to o wiele mniej czasu niż osobie, która rozpoczyna dopiero przygodę z programowania np. od Juniora do Mida w kilka miesięcy.
Jeśli masz zamiar złożyć CV na stanowisko Junior Developera nie przejmuj się zbytnio wymaganym doświadczeniem, ponieważ jeśli spodobasz się pracodawcy to brak doświadczenia nie będzie stanowił dla niego większego problemu a jeśli twoje CV nie przejdzie pierwszej selekcji to po prostu nikt z Tobą się nie skontaktuje. Nie masz nic do stracenia.
Jak sprostać wymaganiom pracodawcy mimo braku doświadczenia?
Jeśli nie masz doświadczenia komercyjnego a pracodawca wymaga jakiegokolwiek doświadczenia to dobrze jest takie doświadczenie sobie zdobyć. Jak je zdobyć? Znaleźć staż, praktyki na kilka miesięcy lub napisać własny projekt!
Jaki projekt i jak go zrobić to temat rzeka na oddzielny artykuł, a nawet na kurs. Odradzam jednak dużych projektów, takich których sam nie zdążysz ukończyć w kilka tygodni lub 2 miesiące. Wybierz projekt kompaktowy aby nie narażać się na zbytni rozrost kodu, komplikację i uwydatnienie błędów architektonicznych, z którymi nie poradzisz sobie co doprowadziłoby do kompletnej klapy Twojej reklamy. Jeśli wybierzesz za duży projekt, możesz go nigdy nie skończyć bo będziesz się uczył nowych rzeczy i będziesz w koło poprawiał starszy kod, żeby był lepszy. Wykorzystaj tam jednak technologie i hasła które królują w ofertach czyli MVVM, MVI, RxJava, Retrofit, Dagger, Koin etc..
Poniżej przedstawiam listę prostych projektów, które możesz zrealizować w kilka tygodni o ile nie dodasz tam masy nowych i niepotrzebnych wodotrysków:
- Live Search z jakiegoś otwartego API, najlepiej żeby miała coś lepszego niż oryginalna aplikacja jeśli posiada.
- Aplikacje do oznaczania zaparkowanego samochodu np. w lesie jak się zbiera grzyby
- Aplikację do przycinania zdjęć z prostym filtrem
- Rozszerzona rzeczywistość
- Integracja z Google Assistance
Postaraj się wymyślić coś oryginalnego, podpytaj znajomych lub rodzinę co chcieliby zrobić za pomocą telefonu. Postaw sobie wyzwanie ale nie pisz od razu nowego Facebooka. (integracja z Facebookiem również może być na plus w projekcie)
Aplikacje związane z medycyną, ratowaniem życia lub funkcjami społecznościowymi będą ciekawsze ale należy pamiętać, że lepiej abyś miał jedną prostą aplikację całkowicie skończoną niż wielką i innowacyjną ale niedziałającą – oczywiście w portfolio możesz umieścić niedokończoną aplikację byle była użyteczna.
Na rynku jest dużo Juniorów i duża część generuje sobie portfolio poprzez robienie kursów. Postaraj się zobaczyć jakie projekty są robione w kursach i pod żadnym pozorem nie rób ich. Nie wyróżnisz się na tle innych. Pomijaj oklepane aplikacje typu:
- Notatnik
- Dyktafon
- Kompas
- Lista TODO
- Kalendarz
- Budzik
- Prostą grę typu saper lub memory
Pracodawcy głównie będzie zależało aby zajrzeć w kod źródłowy ale jeśli UI będzie archaiczny i przypominający ten z Windows 98 lub Androida 2.3 to na pewno nie zostanie to odebrane pozytywnie. Umieszczenie ładnej aplikacji na sklepie na pewno pomoże w szczególności jak będzie troche pobrań.
Co należy umieć idąc do pierwszej pracy?
Powinieneś posiadać wiedzę na poziomie podstawowych kursów programowania lub książek typu Android dla początkujących i podstawową wiedzę z zakresu Javy i Kotlina.
Jeśli masz ukończony jakiś kurs lub pierwsze lata studiów za sobą na pewno będzie to dodatkowy atut. Chociaż dla mnie jeśli ktoś jest dobry to może nie mieć żadnych studiów i kursów.
Jeśli nie możesz się pochwalić edukacją to pochwal się Twoją wiedzą! Pokaż, że jesteś zorganizowany, umiesz sam zdobywać wiedzę i nie boisz się trudnych wyzwań.
Niżej napisałem listę rzeczy, o których dobrze żebyś miał jakiekolwiek pojęcie idąc do pierwszej pracy na stanowisko programisty Android. Nie musisz umieć ich perfekcyjnie, ważne żebyś miał o nich podstawową wiedzę.
Teoretyczne:
- Czym jest JVM, Dalvik, ART i jakie są różnice
- Podstawy działania Garbage Collectora
- Właściwości wątków i synchronizacji
- Czym są testy jednostkowe
- Cykl życia Activiy i Fragmentu
- Jakie są podstawowe komponenty w Androidzie
- Wiedza z zakresu podstaw HTTP (jakie są metody, czym jest cookies)
- Podstawowa wiedza z zakresu programowania obiektowego – zasady SOLID
- Czym są uprawnienia w Androidzie (Permissions, Runtime Permissions)
- W jaki sposób można spowodować wyciek pamięci w Androidzie
- Wiedzę czym jest Material Design Guidelines i jakie informacje możemy tam odnaleźć (https://material.io)
- Co to jest Agile i jak wygląda tablica Kanban
- Znać podstawowe elementy UI Androida
- Czym jest system kontroli wersji
Praktyczne:
- Podstawowe elementy języka Java (typy danych, zmienne, operatory, łańcuchy, pętle, instrukcje warunkowe, instrukcje switch, tablice i operacje na tablicach)
- Obiekty oraz klasy w Javie (konstruowanie obiektów, używanie komentarzy, tworzenie metod w klasie, używanie statycznych pól i metod, dziedziczenie, tworzenie klas generycznych, interfejsy, klasy wewnętrzne, klasy anonimowe, wyrażenia lambda)
- Obsługa wyjątków i tworzenie własnych klas wyjątków
- Współbieżność (tworzenie nowych wątków, synchronizacja wątków)
- Jak używać Activity, Fragment, Service, Intent, Dialog, DialogFragment
- Jak implementować ListView i RecyclerView z niestandardowymi elementami
- Tworzenie layoutów za pomocą ConstraintLayout
- Używanie komponentów: NavigationDrawer, Toolbar, Menu, ViewPager
- Komunikacja z API np. okHttp lub Retrofit
- Używanie formatu JSON oraz parsowanie: Jackson, Gson
- Dobrze jest znać jakieś wzorce projektowe, w przypadku Androida to MVP, MVVM, Builder, Factory
- Jak stworzyć wątek i jak nim zarządzać (podstawową wiedzę o wątkach)
- Zapisywanie danych w pamięci telefonu (SharedPreferences, SQLite, Realm, Room)
- System kontroli wersji: GIT lub Mercurial – tutaj warto zrobić sobie jakiś kurs, jest to rzecz którą będziemy stosowali przez wszystkie lata kariery niezależnie od technologii.
- Napisać prosty test jednostkowy do prostej funkcji
- Zarządzanie plikami w Androidzie
Lista ta z biegiem czasu może przestać być w pewnej części aktualna dlatego przejrzyj oferty na stanowiska programistów Androida wypisz sobie technologie, które się najczęściej pojawiają i ich się naucz lub przynajmniej zdobądź na ich temat podstawową wiedzę.
Pewnie zauważyłeś, że na liście nie znajduje się umiejętność matematyki. Wymagana matematyka to mit szerzony przez osoby z poprzedniego pokolenia, związany z tym, że kiedyś programistami zostawali elektronicy, matematycy i fizycy. Matematyka nie jest potrzebna do nauki programowania, czasem przydaje geometria podczas tworzenia bardziej skomplikowanych widoków albo gier ale jest to do opanowania. Można znaleźć taką pracę, że matematyka nigdy się nie przyda.
Z powyższej listy możesz sądzić, że jest to bardzo dużo materiału do opanowania. Podczas pisania prostej aplikacji, która komunikuje się z backendem wykorzystasz większość elementów z części praktycznej. Z części teoretycznej nie wszystkie rzeczy są potrzebne w codziennym życiu programisty (co nie znaczy, że w ogóle nie są potrzebne) ale często pojawiają się na rozmowach pytania, o podstawową wiedzą z zakresu platformy.
Pamiętaj jednak abyś na rozmowie nie kłamał i nie udawał, że coś wiesz ale zapomniałeś – to nie podstawówka. Jeśli przyznasz się do niewiedzy to może zostać to docenione, ponieważ wiele osób nie potrafi tego zrobić i zamiast tego czaruje oraz zmyśla co w konsekwencji może zamienić rozmowę kwalifikacyjną w istny kabaret.
Jakie były moje pierwsze kroki które stawiałem jako Junior?
Kandydując do pierwszej pracy jako programista Androida w zasadzie nie posiadałem ogromnej wiedzy technicznej chociaż sądzę, że nie była ona też bardzo mała. Na pewno nie byłem pewny siebie w tym zakresie.
Miałem na swoim koncie aplikację napisaną na 2 platformy, wtedy jeszcze w C# na Windows Mobile 6.5 i drugą na Androida 2.3 w Javie. Aplikacje te były pisane w ramach projektu SENSE na konkurs Imagine Cup na Wojskowej Akademi Technicznej w Warszawie. Projekt mocno zaszczepił we mnie chęć tworzenia aplikacji mobilnych mimo, że ciągle wiązałem swoją przyszłość z backendem. Z biegiem czasu i krótką przygodą w tworzeniu oprogramowania webowego nie żałuję, że poszedłem ścieżką programisty aplikacji mobilnych.
W momencie kiedy szanse na rozwijanie komercyjne projektu SENSE zniknęły to rozpocząłem pracę w firmie N7Mobile która jest między innymi twórcą aplikacji N7Music Player – przed rozpowszechnieniem się platform streamingowych była chyba drugą najpopularniejszą aplikacją do odtwarzania muzyki.
Jak wyglądał pierwszy dzień w pracy? Praktycznie od razu dostałem zadanie do wykonania co bardzo mnie ucieszyło, żadnych nudnych wdrożeń, szkoleń itp. – od razu na głęboką wodę! Przez kilka tygodni wykonywałem zadania pod okiem Łukasza, który pomagał mi zrozumieć istniejący już kod aplikacji i pokazywał jakie są konwencje i style stosowane w firmie. Widzę chłonąłem jak gąbka, w ciągu kilku tygodni mój poziom wiedzy i umiejętności niesamowicie wystrzelił w górę. Po kilku miesiącach nauczyłem się tam więcej niż przez cały okres studiów i samodzielnej nauki.
8 godzin dziennie programowania uczy więcej niż kilka godzin z książką w ręku. Jeśli chcesz aby twoje umiejętności szybko wystrzeliły, znajdź szybko pracę lub wstawaj o 6 rano w weekendy i programuj do późnego wieczora. Jeśli tego nie lubisz, zostaw to i zajmij się tym co na prawdę lubisz.
Kiedy rozpocząć szukanie pierwszej pracy?
Wtedy kiedy uznamy, że programowanie nas kręci i że to jest to co chcemy w życiu robić. Im wcześniej tym lepiej.
Nigdy ani przenigdy nie słuchajcie ludzi którzy mówią: „Zacznij szukać pracy wtedy kiedy będziesz się czuł gotowy” – czyli nigdy. Zawsze będziemy czuli, że czegoś nie wiemy, że brakuje nam jeszcze trochę wiedzy aby rozpocząć nową pracę, prawie nigdy nie będziemy się czuli gotowi albo jak już poczujemy się gotowi to okaże się że jest za późno. Oczywiście nie możemy przechodzić ze skrajności w skrajność, nikt nas nie zatrudni z samymi dobrymi chęciami, musimy posiadać też jakąś wiedzę i umiejętności a to można wypracować tylko i wyłącznie bardzo ciężką pracą.
Wydaje mi się, że przyswojenie wiedzy na poziomie jaki opisałem na samym początku wystarczy do podjęcia pierwszej pracy i sprostaniu problemom które są związane z codzienną pracą Junior Developera. To ile czasu zajmie przyswojenie tej ilości wiedzy jest bardzo indywidualne – jednym kilka miesięcy a innymi kilka lat.