IT

10 rzeczy, które powinnaś umieć jako stażysta lub Junior Java Developer

Follow my blog with Bloglovin

Programistą dobrze być, ale żeby nim być najpierw trzeba przejść rozmowę. Pierwsza rozmowa jest najgorsza, potem jest trochę lepiej. Tym optymistycznym akcentem zapraszam do subiektywnego rankingu 10 rzeczy, z którymi dobrze się zapoznać przed rozmową na praktyki lub Junior Java Developera. 🙂

Bezpośrednią inspiracją do stworzenia tego wpisu były moje najświeższe doświadczenia z szukania pracy. W ostatnim czasie zdecydowałam się na niemałą zmianę (i cały proces rekrutacyjny mam już za sobą, na szczęście udało się przed świętami :)). Nie rekrutowałam się na juniora, ale przy przygotowywaniu się do rozmowy, wspominałam jak wyglądały te, które mam już za sobą. Zebrało się tego całkiem sporo i tak powstał ten wpis. Jest zebraniem najważniejszych rzeczy, o które pytano mnie kiedyś na rozmowie o praktyki, a potem pracę (wszystkie na stażystę/deva/programistę Javy).

Pomijam tu zupełne podstawy programowania – zakładam, że idąc na rozmowę masz już jakąś wiedzę.

#1 Podstawy SQL

Myślę, że znajomość języka SQL to oczywista oczywistość. Ciężko mi wyobrazić sobie co to byłby za programista, który nigdy nie widział bazy. Chodzi jednak o to, jak bardzo ten SQL powinnaś znać. Moja sytuacja była wyjątkowa – studia, o dziwo, dały mi dużą wiedzę z baz danych. Niemało zdziwiłam się na pierwszej rozmowie, gdy kazano mi napisać prosty INSERT, prosty UPDATE, albo już nawet – prosty SELECT. Jak prosty? Jak na przykład zaktualizowanie jednej kolumny o wybranym ID lub wyszukanie osób z fikcyjnej, kilku wierszowej tabeli, których nazwisko zaczyna się na wybraną literę. Jeśli dobrze pamiętam z “trudniejszych” pytań pytano o łączenia tabel (poszczególne JOINy), co robią funkcje agregujące lub co robi HAVING.

Trudno powiedzieć czy taki poziom wystarczyłby mi potem w pracy (być może część rzeczy musiałabym doczytać na bieżąco). Ale nie przypominam sobie też, żebym na początku pisała skomplikowane i wielkie zapytania. Myślę, że jeśli będziesz mieć praktyczną wiedzę z funkcji agregujących, jak wykonać edycję rekordu lub wstawić nowy, na czym polegają poszczególne łączenia tabel, jak posortować wyniki, to bez problemu tyle Ci wystarczy.

#2 Znajomość słów kluczowych

Prawdopodobieństwo, że zostaniesz o któreś zapytana to 99%. Jednak nie oznacza to, że powinnaś uczyć się ich wszystkich na pamięć i klepać formułki (w szczególności, że niektórych używa się stosunkowo rzadko). Chodzi o podstawową, ale praktyczną wiedzę. Dokładnie pamiętam, że na jednej rozmowie, na którą przyniosłam swój własny kod, pan wskazywał po kolei wszystkie słowa kluczowe i kazał mówić co dane słowo robi i dlaczego tam jest. I na pewno pytał o static, void, final, throws, implements, this i o to, jakim słowem przerywa się działanie pętli. A na koniec o coś popularnego – “Czym różni się final od finally?”. 🙂 Jeśli programujesz to raczej z niczym nie będziesz mieć problemu. Ale wiem też, że jeśli jeszcze nie pracowałaś, to po prostu – może dobrze sobie niektóre z nich przypomnieć. Poniżej zamieszczam moją autorską, przyjazną dla oka ściągawkę wszystkich (a przynajmniej tych najważniejszych) słów kluczowych w Javie.

#3 Modyfikatory dostępu

Pierwsze linijki kodu, jakie przyjdzie lub przyszło Ci napisać, to prawie zawsze proste programy konsolowe. Cały kod umieszczasz w jednej metodzie (main), a całość zostaje zawarta w jednej klasie. Przychodzi w końcu moment, w którym trzeba wyjść dalej. W pierwszej kolejności uczysz się tworzyć własne metody, a następnie uczysz się klas. Wtedy przychodzi ten moment, że poznajesz modyfikatory dostępu. Nawet jeśli wybierasz się na praktyki, to modyfikatory dostępu są tak bardzo podstawową wiedzą, że razem z podstawową wiedzą o klasach (o których za chwilę), musisz je po prostu znać. I chodzi oczywiście o wiedzę praktyczną. Na jednej z rozmów trafiłam na fajne zadanie, które (według mnie) dobrze weryfikowało taką wiedzę. Polegało na uzupełnieniu tabeli jak ta poniżej.

Uzupełnienie polega na wpisaniu czy jeśli dany zasób będzie miał modyfikator public/protected/default/private, to czy będzie do niego dostęp z klasy/podklasy/pakietu/pozostałych.

#4 Praktyczna wiedza o klasach

Klasy to temat rzeka i standardowo na samym początku nie potrzebujesz wszystkiego. Ważne żeby mieć świadomość, że są typy proste i złożone. To wymusza wiedzę, co takiego możesz robić w ogóle z klasą – czym są pola, konstruktory, metody (przy okazji warto też wiedzieć czym jest przeciążanie metod). W połączeniu z wiedzą o modyfikatorach dostępu, masz solidną podstawową wiedzę o klasach. Idąc ciut dalej warto wiedzieć też o istnieniu klas abstrakcyjnych i interfejsów. Prawdopodobnie, dopóki nie będziesz uczestniczyć w żadnych większym projekcie, będą wydawały się zbędne, ale nie są. Bez doświadczenia wystarczy Ci wiedza, że w ogóle istnieją – nie sądzę by na początku ktokolwiek wymagał czegoś więcej.

Podobnie z wiedzą o dziedziczeniu. Jedyne co Ci będzie potrzebne to jak “dostać się” do zawartości klasy nadrzędnej (a konkretnie – działanie słowa super).

#5 Referencje

Referencje poznaje się w trakcie nauki klas i pewnie wtedy się z nimi spotkasz. Wydzielam je jako osobny punkt bo chodzi mi konkretnie o wiedzę jak porównuje się obiekty lub je modyfikuje. Szczególną uwagę dobrze jest zwrócić na Stringi, które rządzą się swoimi prawami, a bardzo często są dobrym materiałem do wszelkich zadań (w szczególności zadania z modyfikowaniem i porównywaniem Stringów).

#6 Świadomość wzorców projektowych

Oczywiście nie wszystkich, to byłoby szalone. Jednymi z najpopularniejszych jest Singleton, Fasada, Budowniczy, Wstrzykiwanie zależności, Wrapper. W idealnym przypadku, dobrze jest umieć je zaimplementować, przenieść do własnego kodu. Stawiaj więc na jakość, a nie ilość swojej wiedzy. Kiedy ja chodziłam na rozmowy, pamiętam, że czytałam ogólne informacje i chciałam pochłonąć jak najwięcej wzorców. Wydawało mi się, że wtedy zwiększę prawdopodobieństwo, że będę kojarzyła ten, o który mnie zapytają i – mimo powierzchownej wiedzy – zabłysnę. Tak nie było. Jeśli ktoś na początku pytał mnie o wzorzec to był to zawsze Singleton. Najprostszy z możliwych. Bardziej liczyło się to, że w ogóle jestem świadoma istnienia wzorców i ile wiem na temat tego jednego (czyli de facto, jakie są szanse, że będę umiała użyć go w projekcie). Nie popełniaj mojego błędu. Postaw na mniejszą, ale bardziej dokładną wiedzę.

#7 Kolekcje

Kolekcje to popularny temat na rozmowach, a jednocześnie łatwy i przyjemny do nauki. Na początku należy skupić się na podstawie, czyli czym różnią się od siebie Map’y, Set’y i List’y. Potem, większość podręczników, wskazuje jedną przykładową implementację – na przykład HashMapę jako rodzaj Map, ArrayListę jako List. Dobrze znać po jednej implementacji każdego rodzaju kolekcji. I tyle.

#8 Wyjątki

Podstawą jest wiedza, że istnieje blok try – catch i kiedy się go używa. Czyli czym jest wyjątek, do czego służy każda część bloku i to, że może być wiele bloków catch. A więc, że możesz (i powinnaś) różne typy błędów obsługiwać w różny sposób. Według mnie warto też doczytać, jak samemu rzucić wyjątek i gdzie można go obsłużyć. I to, co zrobi dodanie throws do nagłówka metody.

#9 Lambdy

Lambdy to jedna z ważniejszych nowości, które wprowadziła Java 8 i jednocześnie w miarę częste pytanie na rozmowach. Ten temat jest najbardziej skomplikowany z całej tej listy, więc na pewno nie powinien być jednym z pierwszych do nauki. W szczególności, jeśli chcesz wiedzieć dokładnie jak lambdy działają. Jeśli czujesz się w miarę pewnie, dobrze jest je poznać, ale nie zniechęcaj się za szybko, ponieważ może się okazać, że będziesz musiała je odłożyć na dalszy etap swojej nauki.

#10 Kody HTTP

Mimo tego, że Java nie służy wyłącznie do pisania aplikacji webowych, to nie oszukujmy się – znaczna część ofert pracy jest nastawiona na znalezienie pracownika do takich projektów. O kody odpowiedzi HTTP zostałam zapytana na rozmowie jeden raz (spośród jakichś 5-6 rozmów, na których byłam), ale z perspektywy czasu myślę, że pytanie miało sens i na pewno gdybym teraz kogoś rekrutowała, zadałabym takie pytanie. Nie chodzi o te najbardziej skomplikowane (ani broń boże o całą listę na pamięć), ale te najczęstsze. Na przykład co oznacza (tylko w praktyce – jaką informację Ci daje) kod 404, 500, 400, 401 vs 403, 200.

Czy taka wiedza zagwarantuje Ci sukces na rozmowie? Nie wiem, ale na pewno bardzo zwiększy Twoje szanse na dostanie pracy lub praktyk. Nie zniechęcaj się też, jeśli na rozmowie pójdzie Ci słabo. Na to, czy dostaniesz daną pracę ma wpływ wiele rzeczy i wiedza to tylko jedna z nich. Bywają rozmowy mniej i bardziej udane. I nawet te nieudane to bezcenne doświadczenia. Pamiętaj – kto na rekrutacje nie chodzi, ten szampana nie pije. 🙂

Możesz również polubić…

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *