#Pierwsza praca w IT. Procesy rekrutacyjne

By 23 June 2015 Pierwsza Praca

Jak może wyglą­dać cała rekru­tac­ja? Jak sprawdzane są umiejęt­noś­ci tech­niczne? O tym właśnie postaramy się opowiedzieć w dzisiejszym wpisie.

W skró­cie: rekru­tac­ja na stanowisko pro­gramisty jest zazwyczaj podzielona i obe­j­mu­je wery­fikację tech­niczną oraz roz­mowę z dzi­ałem HR. Do tego gdzieś dok­le­jone jest sprawdze­nie języ­ka ang­iel­skiego. Postaramy się przy­bliżyć Wam możli­we sposo­by sprawdzenia Waszej wiedzy.

Weryfikacja techniczna

Może przy­bier­ać różne formy, poniżej zestaw­ione te najbardziej popularne.

Rozmowa

W najprost­szej wer­sji to po pros­tu roz­mowa z doświad­c­zonym pro­gramistą, której celem jest wery­fikac­ja two­jej wiedzy, umiejęt­noś­ci  i doświad­czenia. Powin­ny na niej więc paść pyta­nia o stu­dia, prak­ty­ki, staże, własne pro­jek­ty IT, a także pyta­nia stricte tech­niczne doty­czące programowania.

Warto wspom­nieć, że wery­fikac­ja tech­nicz­na ma częs­to strate­gię do “które­goś” nie wiem, co oznacza, że nawet jeśli jesteś juniorem, będziesz dostawać pyta­nia przekracza­jące Two­ją wiedzę — rekruterzy chcą mieć po pros­tu dobry obraz Two­jej wiedzy i stąd mogą zadawać trudne pyta­nia na które nie odpowiesz. Oczy­wiś­cie nie jest to może najbardziej kom­for­towe, gdy po każdej roz­mowie masz w głowie ile razy czegoś nie wiedzi­ałaś, jed­nak taka specy­fi­ka branży, że wszys­tkiego wiedzieć po pros­tu nie może­my  i nawet szuka­jąc nowej posady na stanowisku seniorskim to nie wiem będzie się pojaw­iać w Twoich odpowiedziach.

Może się też pojaw­ić frag­ment kodu z zapy­taniem: co się stanie jeśli …, albo możesz zostać popros­zona o napisanie na kartce jakiegoś frag­men­tu kodu, zapy­ta­nia SQL czy narysowanie jakiegoś schematu. Warto przećwiczyć takie pisanie w domu, bo cza­sem dłu­gopis może …spar­al­iżować.

Programowanie podczas rozmowy

To co też może Was spotkać to pro­gramowanie pod­czas roz­mowy. Rekruter może poprosić o napisanie jakichś prostych klas na zasadzie sklep i lista zakupów i wyko­na­nia na nich prostych oper­acji. Takie zadanie jest z reguły proste, jego rozwiązanie powin­no zająć góra kilka­naś­cie min­ut, a rekruter będzie Cię pod­czas niego uważnie obser­wował, by zobaczyć chci­aż­by w jaki sposób uży­wasz środowiska.

Możesz też dostać do wyko­na­nia coś bardziej złożonego i w dłuższym (np. godzin­nym cza­sie pra­cy) zostać popros­zonym o wyko­nanie tego zada­nia. W tym cza­sie powin­naś mieć też zapewnione kom­for­towe warun­ki do pra­cy. W przy­pad­ku takiego zada­nia warto pamię­tać o tworze­niu java-doc­sów, czy nawet zwykłym komen­towa­niu by lep­iej pokazać kon­cepc­je, oraz o TODO, którym moż­na oznaczyć rzeczy do napisa­nia na przyszłość np. walidacje.

Kole­jnym sposobem wery­fikacji jest pair-pro­gram­ing, który jest trochę mik­sem wcześniej przed­staw­ionych — będziesz pro­gramowała sama, ale z podglą­dem dla rekrutera, który będzie mógł na bieżą­co zadawać pyta­nia do konkret­nych rozwiązań i lin­i­jek kodu.

Zadanie do wykonania w domu

Tutaj może­cie spotkać się z dwoma typa­mi zadań. Po pier­wsze może­cie dostać jak­iś prob­lem opisany w sposób biz­ne­sowy, do rozwiąza­nia z uży­ciem np. dowol­nych tech­nologii. Jako, że masz więcej cza­su to i jakość Two­jego kodu powin­na być lep­sza ;) Ważnym jest by opisać w jakimś doku­men­cie założe­nia jakie przyjęłaś na taką aplikac­je w tym, jak ona dzi­ała, jakie są jej ograniczenia. Bez tego brak np. sprawdzenia czy dodany mail ist­nieje w bazie może zostać uznane za błąd, a jeśli zawrzesz to w takiej doku­men­tacji to będzie wiado­mo, że miałaś tego świadomość.

Drugim typem zada­nia, może być stworze­nie czegoś prostego ale z uży­ciem tech­nologii narzu­conej przez fir­mę, np. frame­worku, którego oni uży­wa­ją, a ty go nie znasz, albo spec­jal­nej kon­wencji czy narzędzi jakich uży­wa­ją do tworzenia swo­jego opro­gramowa­nia. Tutaj oprócz rozwiąza­nia musisz znaleźć czas na naukę narzędzi niezbęd­nych do tego wyko­na­nia. Waż­na uwa­ga! To też wery­fikac­ja dla Ciebie i tego, czy chcesz pra­cow­ać w danej tech­nologii i warto ją wyko­rzys­tać. Z drugiej strony, może tak jak ja na jed­nej roz­mowie dosta­niesz naprawdę kilo doku­men­tacji związanej z pisaniem i edy­cją wty­czek do aplikacji, której ilość zniechę­ci do pod­ję­cia wyzwa­nia (nie uważam, że wdroże­nie w tech­nolo­gie naprawdę specy­ficzną do pro­jek­tu powin­no być po stron­ie apliku­jącego, a do tego powin­no dokony­wać się już po rekrutacji:/) i podob­nie jak ja, uznasz, że czegoś nie zro­bisz, bo wiedza w ten sposób zdoby­ta do niczego innego się nie przyda.

Testy

Częs­to są roz­dawane pod­czas rozmów, cza­sa­mi też jest to for­ma wery­fikacji online. Testy wielokrot­nego wyboru sprawdza­jące Waszą wiedzę. Nieste­ty, nierzad­ko ich zawartość pozostaw­ia wiele do życzenia (ja mam wtedy przed ocza­mi taką szafę pancerną, do której ktoś kiedyś upchał wydrukowane testy, a po kilku lat­ach ktoś inny uznał, że sko­ro wydrukowal­iśmy, to je wyko­rzys­ta­jmy), bo pojaw­ia­ją się w nich pyta­nia o stare tech­nolo­gie, czy rzeczy zupełnie niezwiązane z daną rekrutacją.

Codility

Narzędzie, które część firm uwiel­bia, a część nien­aw­idzi — podob­nie, jak myślę, podzie­leni są pro­gramiś­ci. Rekru­tac­ja z jego wyko­rzys­taniem to 3 zada­nia, w których oprócz dzi­ała­jącego rozwiąza­nia jest oce­ni­ana jego złożoność obliczeniowa.

My nie do koń­ca lubimy to narzędzie, a dlaczego, to dokład­niej opowie Wam Kuba: “W kwestii Codil­i­ty nie do koń­ca się zgadzam z tym, że jest wartoś­ciowe narzędzie rekru­ta­cyjne. Prob­le­mem tego typu narzędzi jest to, że nie do koń­ca wiado­mo co one sprawdza­ją. Gdy­by ktoś mnie zapy­tał odpowiedzi­ałbym, że jest to umiejęt­ność budowa­nia abstrak­cyjnych algo­ryt­mów w bard­zo krótkim cza­sie. I oce­ni­an­ie nie dzi­ała praw­idłowo. Zdziwiona?
Mogę podać przykład z jed­nego z testów, który rozwiązy­wałem — pytanie doty­czyło sprawdzenia, czy określona licz­ba wys­tępu­je z określoną częs­totli­woś­cią w zbiorze. Warun­ki zada­nia (złożoność obliczeniowa / pamię­ciowa) jak mi się wydawało były niemożli­we do spełnienia (później znalazłem, że jed­nak jest algo­rytm, który wprawdzie złożoność teo­re­ty­czną ma więk­szą, ale w prak­tyce dzi­ała w założonym cza­sie), a jako że było to zadanie jed­no z 3 do rozwiąza­nia w godz­inę, zaim­ple­men­towałem algo­rytm, który nie speł­ni­ał kry­teri­um złożonoś­ci obliczeniowej. Tzn nie speł­ni­ał, ale wg sys­te­mu już tak, ponieważ kalku­lac­ja złożonoś­ci opiera się o pomi­ar cza­su dzi­ała­nia (złożoność została opra­cow­ana po to, żeby takich pomi­arów cza­su unikać!!). Jak to się ma do rzeczy­wis­toś­ci? Ano nijak, w całej swo­jej kari­erze nie spotkałem się z prob­le­mem który wyma­gał­by podob­ne­go pode­jś­cia czy nawet szerzej — sposobu myśle­nia. Bo czy naprawdę chce, aby pro­gramista w mojej fir­mie był w stanie w np. godz­inę wymyślić algo­rytm? Nie, ja chcę, żeby był w stanie zaim­ple­men­tować opisane rozwiązanie (junior), zas­tosować powszech­nie znane rozwiązanie/technologię do prob­le­mu (dewelop­er) lub rozbił prob­lem na takie mniejsze, które zostały już rozwiązane (senior). Które z tych kom­pe­tencji sprawdza­ją tego typu testy? Moim zdaniem żadne. Znam oso­by, które są w stanie rozwiązać (praw­ie) każde tego typu zadanie, których nie chci­ałbym mieć w zes­pole za żadne skar­by. Są też takie, które praw­dopodob­nie nie zal­iczyły­by tego tes­tu, a którym gdy­bym tylko mógł zapłaciłbym każdą sumę, żeby mieć ich w zespole.

To nie znaczy jed­nak że są one całkowicie bez­nadziejne. Pole­cam przeczy­tać dyskusję tutaj: http://qr.ae/7CErKn — praw­ie wszys­tkie zale­ty testów ‘na algo­ryt­my’, o których mowa, nie mają przełoże­nia na ich ‘automaty­czną’ wer­sję. Tego typu testy mogą być przy­dat­nym DODATKOWYM źródłem infor­ma­cji o kom­pe­tenc­jach oso­by, ale nie mogą być jedynym. W prak­tyce częs­to są one stosowane jako pewnego rodza­ju sito do dal­szych etapów rekru­tacji. Jeśli napotka­cie na swo­jej drodze fir­mę, która tak robi, powin­na Wam się zapal­ić czer­wona lamp­ka, bo najpraw­dopodob­niej wyni­ka to z pode­jś­cia do rekru­tacji ‘najniższym kosztem’. Nieste­ty doświad­cze­nie uczy, że najczęś­ciej przekła­da się to na iden­ty­czne pode­jś­cie do pra­cown­ików i projektów.”

Narzekać moż­na, ale co, gdy trafi Ci się takie zadanie? Po pier­wsze, na stron­ie codil­i­ty, możesz prze­jść tuto­ri­ale, które uczą jak pod­chodz­ić do różnych prob­lemów. Dzię­ki temu nauczy­cie się nie tylko jak dzi­ała plat­for­ma, ale też jak pod­chodz­ić do zadań, które mogą się pojaw­ić. Po kilku(nastu) zada­ni­ach zobaczy­cie same, że wszys­tko opiera się na znalezie­niu odpowied­niego algo­ryt­mu i późniejszej imple­men­tacji. Słowem, jest to abso­lut­nie do prze­jś­cia, tyle, że wyma­ga trochę przy­go­towa­nia. Ja np. miałam 3 zada­nia, w których 2 były oparte na tak naprawdę takim samym algo­ryt­mie i różniły się naprawdę niuansami.

Zakres materiału

Jeśli chodzi o pokrycie tem­atów, które powin­ny być Ci znane to cią­gle pracu­je­my nad kole­jny­mi odcinka­mi #Niezbęd­nika­Ju­nio­ra więc pole­camy śledz­ić te wpisy na naszym blogu i zapoz­nawać się z rzecza­mi, które częs­to pojaw­ia­ją się na takich roz­mowach. Zazwyczaj pyta­nia krążą wokół Javy SE, EE, Springa, pod­staw baz danych i SQLa, wzorce pro­jek­towe, pojaw­ia się też HTML, CSS, Javascript(i jego fram­wor­ki np. Angu­lar), częs­to pyta­ją też o testy i ich tworze­nie, korzys­tanie z repozy­to­ri­um, dobre prak­ty­ki pro­gramisty­czne, pro­tokół HTTP. Te wszys­tkie tem­aty będziemy rozsz­erzać właśnie w serii #Niezbęd­nika­Ju­nio­ra, na ten moment wyszuka­j­cie konkret­ną lekc­je z naszego kur­su i sięg­ni­j­cie do lit­er­atu­ry dodatkowej.

Co fir­ma to oby­czaj (bo i o tech­nolo­gie okienkowe mogą pytać, w szczegól­noś­ci jeśli robią w nich jakieś pro­jek­ty), zdarzyło mi się usłyszeć na roz­mowie: fajnie, że masz już pier­wszą aplikac­je na kon­cie jak i: wolałbym żeby nie znała Pani nic ze Springa, a dobrze porusza­ła się w Javie. No cóż, znalezie­nie pier­wszej pra­cy nie jest może najłatwiejsze, ale ściskam kciu­ki za posz­erzanie Waszej wiedzy i znalezie­nie pra­co­daw­cy, który postawi przede wszys­tkim na Wasz potencjał!

Weryfikacja języka

Raz przeprowadzana pod­czas roz­mowy HRowej, raz tech­nicznej — sprowadza się (jeśli apliku­jesz do pol­skiej firmy) do naprawdę krótkiej roz­mowy. Zakładam, że jeśli mówisz na poziomie B1 to bez prob­le­mu sobie z nią poradzisz. Jeśli nie, to hm, będzie trud­no w codzi­en­nej pra­cy, bo prze­cież doku­men­tac­ja, tuto­ri­ale itp., są głown­ie w języku angielskim.

Rozmowa z osobą z działu HR

Te pyta­nia może też zadać team­leader czy po pros­tu rekru­tu­ją­cy Cię pro­gramista. Chodzi tu głównie o warun­ki zatrud­nienia, od kiedy możesz zacząć, stawkę, stanowisko, sprzęt na jakim pracu­jesz, ogólne opowiedze­nie o pro­jek­cie i fir­mie do jakiej aplikujesz.

Mamy nadzieję, że zebrane przez nas infor­ma­c­je zaspoko­ją Two­ją cieka­wość i ułatwią przy­go­towanie do rozmów!

PS. do rekrutera

Chodzil­iśmy z Kubą na różne roz­mowy rekru­ta­cyjne. Znamy też doświad­czenia naszych zna­jomych, dlat­ego chce­my przekazać Ci infor­ma­cję zwrotną.

Jeśli rekru­tu­jesz w swo­jej fir­mie mam do Ciebie jed­ną wiado­mość: weź odpowiedzial­ność za prze­bieg roz­mowy tech­nicznej. Ja wiem, że cza­sem może­cie mieć w fir­mie bazę pytań z odpowiedzi­a­mi i fajnie, że macie się na czym pod­pier­ać — ale jeśli już z nich korzys­tasz, to proszę Cię sprawdź, czy odpowiedzi z jaki­mi porównu­jesz kandy­da­ta są poprawne, a jeśli będziesz pytał o coś z czym nie masz doświad­czenia, to proszę idź do swo­jego kole­gi i dopy­taj, czy dana odpowiedź jest dobra.

Sprawdź testy, zada­nia jakie daje­cie kandydatom. Czy nie ma tam błędów, nie­jas­noś­ci albo rzeczy, których się już dawno nie sto­su­je. Nie bój się poroz­maw­iać ze swoim sze­fem o ich aktualizacji.

Zas­tanów się też, czego warto wyma­gać od pro­gramisty: czy to o co pytasz, to fak­ty­cznie wiedza niezbęd­na czy może teo­ria, która była wyma­gana na stu­di­ach, która nie przy­da­je się w praktyce.

Nie bój się też juniorów, którzy nie zna­ją jeszcze całego słown­ict­wa i cza­sem dość opisowo opowiada­ją na pyta­nia wspier­a­jąc się przykłada­mi z życia. Jeśli ktoś jest Ci w stanie wytłu­maczyć pro­gramowanie na przykładzie szkoły i klasy, to znaczy, że rozu­mie tem­at (a cza­sem rozu­mie znacznie lep­iej niż ten, co odpowie wyuc­zoną regułką).

Na koniec, nie bój się ludzi takich jak ja, którzy nie mają wyk­sz­tałce­nia IT, ale mają ogrom­ną pasję do tego co robią. Pomyśl ile deter­mi­nacji wyma­ga naucze­nie się pro­gramowa­nia samemu, a dodatkowo ile  motywacji samo zde­cy­dowanie się na tak krok. Taki pra­cown­ik aż pali się do pra­cy, a jeśli sam zro­bił swo­ją pier­wszą aplikac­je (a dowiesz się tego z jego CV, więc naprawdę fajnie jak­byś na nie spo­jrzał wcześniej niż na samej roz­mowie) to pomyśl jak szy­bko nauczy się pro­gramować z pomocą doświad­c­zonych współpracowników.

To był post z cyk­lu #Pier­wsza­Praca, który pub­liku­jemy co dwa tygodnie:
  1. Pisze­my CV
  2. Co z lis­tem motywacyjnym?
  3. Two­ja wiz­ytówka w social media
  4. Jak wybrać firmy, do których aplikować?
  5. Jak mogą wyglą­dać pro­cesy rekrutacyjne?
  6. Przy­go­towanie do rozmowy
  7. O co pytać na roz­mowie rekrutacyjnej?
  8. Jak przetr­wać pier­wszy miesiąc?