09/06/2011

Bardzo wymagająca rekrutacja 2

Home

W ostatnim poście opisałem przebieg pewnej rekrutacji, w której uczestniczyłem, aż do rozmowy z kierownikiem projektu. Post ten stanowi dokończenie tego tematu, a w szczególności zawiera odpowiedź na pytania jakie pojawiły się w komentarzach.

Po jakimś czasie po rozmowie z kierownikiem projektu, w tej chwili już nie pamiętam szczegółów, zostałem zaproszony do kolejnego etapu rekrutacji. Tym razem musiałem pofatygować się do innego miasta na serię rozmów z przedstawicielami firmy z zagranicy. O takiej konieczności zostałem zresztą poinformowany dużo wcześniej i dlatego również na każdym z wcześniejszych etapów rekrutacji była sprawdzana moja znajomość angielskiego. Nie ukrywam, że taka podróż nie do końca mi się podobała ale ponieważ praca wyglądała bardzo obiecująca to zdecydowałem się na wyjazd.

Na rozmowę pojechałem samochodem ze względu na elastyczność, jadę kiedy chcę, nie przejmuję się godziną odjazdu pociągu... Decyzja była dobra i zła. Zła ponieważ 6 godzin jazdy to męcząca sprawa, a dobra bo pociągiem nie byłoby wiele krócej, a musiałbym jeszcze płacić za taksówkę itd. Na rozmowę pojechałem dzień wcześniej aby się porządnie wyspać. Nocleg miałem prawie za darmowo, a za benzynę zwrócono mi pieniądze. Tutaj dodam, że z perspektywy uważam, że po tak długiej jeździe samochodem, a chyba nawet pociągiem porządny odpoczynek to konieczność. Innymi słowy nie ma sensu umawiać się na rozmowę o pracę tuż po długiej podróży. Zapewne można wypaść dobrze ale jestem przekonany, że zawsze będzie to gorzej niż kiedy będziemy wypoczęci.

Rozmowy z przedstawicielami z zagranicy trwały 3 godziny. W sumie odbyłem trzy rozmowy. Każda z nich była mocno techniczna ale dotyczyła trochę innych rzeczy. Rozmawiałem o algorytmach np.: programowanie dynamiczne, implementacji funkcji wirtulanych w C++, złożoności obliczeniowej, a także o rzeczach bardziej biznesowych. Muszę przyznać, że po tych rozmowach nabyłem większej pewności co do mojego mówionego języka angielskiego. To jednak co innego rozmawiać po angielsku na wczasach czy prowadzić luźną rozmowę, a co innego mieć kilkugodzinną rozmowę o pracę w tym języku z ludźmi, z którymi w inny sposób sie nie dogadasz.

Z przebiegu tych rozmów byłem zadowolony, a moje wrażenie zostało wkrótce potwierdzone bo zaproponowano mi pracę. Tutaj dodam, bo zapomniałem o tym wcześniej napisać, że rekrutacja dotyczyła stanowiska programisty czy jak to się nazywało w nomenklaturze tejże firmy. Z tą istotną różnicą, że było to stanowisku tzw. programisty algorytmicznego czyli takiego, który zajmuje się na co dzień przede wszystkim implementacją i analizą algorytmów np.: data miningowych, sortowania itp., a nie realizacją typowo biznesowych wymagań.

Dalszy etap rekrutacji to oczywiście negocjacje, które trwały dość długo (dwa spotkania, rozmowy telefoniczne). Jak się skończyły? Finalnie odrzuciłem ofertę pracy. Czemu? Wbrew pozorom nie chodziło o kwestie finansowe, a na pewno nie miały one decydującej roli. Głównym argumentem przeciw były powody natury rodzinno osobistej. Co tu dużo mówić, przeprowadzka do innego miasta kiedy całe życie spędziło się w Warszawie, ma się tutaj rodzinę, przyjaciół, pracę, mieszkanie i jest się zadowolony z życia to bardzo ciężka decyzja. Pozostaje mi tylko żałować, że oferta nie dotyczyła pracy w Warszawie.

Jako podsumowanie chciałbym wymienić te cechy/zalety tego procesu rekrutacyjnego, które spowodowały, że go zapamiętałem:
  • Bardzo kompetentne osoby sprawdzające wiedzę techniczną.
  • Dyskusja, a nie tylko ocena przedstawionych przeze mnie rozwiązań.
  • Praca domowa do zrobienia.
  • Sprawdzenie znajomości algorytmów i rozwiązywania zadań algorytmicznych.
  • Prowadzenie części rozmowy w języku angielskim.
  • Szczerość w odpowiedziach na moje pytania nawet jeśli odpowiadający wiedział, że taka odpowiedź może mnie zniechęcić.
  • Jeśli firma wkłada tyle wysiłku w znalezienie pracowników to znaczy, że planuje dłuższą współpracę.
  • Jeśli firma wkłada tyle wysiłku w znalezienie pracowników to znaczy, że potencjalni współpracownicy są bardzo kompetentni.
Opisana rekrutacja jest dla mnie wzorem rekrutacji dobrze sprawdzającej umiejętności i wiedzę technologiczną kandydata i porównuję do niej inne. Nie twierdzę jednak, że zawsze powinno to wyglądać w taki sposób. Nie każdej firmy na to stać, a po drugie nie zawsze potrzebne jest tak gruntowne sprawdzenie potencjalnego pracownika. Każdy proces rekrutacyjny na stanowisko programistyczne powinien jednak charakteryzować się kilkoma rzeczami (łatwymi do osiągnięcia):
  • Pisanie jakiegoś kodu przez kandydata.
  • Test z wiedzy technicznej.
  • Rozmowa z osobą techniczną i biznesową.
  • Sprawdzenie znajomość języka angielskiego przynajmniej w stopniu pozwalającym czytać dokumentację.

7 comments:

Anonymous said...

Ostro cię wymęczyli. Doświadczenie z takiego procesu rekrutacji - bezcenne.

Anonymous said...

"Głównym argumentem przeciw były powody natury rodzinno osobistej. Co tu dużo mówić, przeprowadzka do innego miasta kiedy całe życie spędziło się w Warszawie, ma się tutaj rodzinę, przyjaciół, pracę, mieszkanie i jest się zadowolony z życia to bardzo ciężka decyzja." Nie prościej było się wcześniej dowiedzieć , gdzie ma być miejsce pracy. To jak wyglądały te końcowe negocjacje?
Negocjowane było otwarcie nowej placówki w Warszawie czy raczej we Wrocławiu nie zgadzali się na pracę zdalną ? Ja bym się jednak wcześniej dowiedział gdzie będe pracował a nie negocjował miejsce pracy po takim męczącym maratonie.

Michał Komorowski said...

Nie napisałem tego ale od początku uprzedzono mnie, że oferta pracy dotyczy Wrocławia. Praca zdalna niestety nie wchodziła w rachubę. Początkowo bardzo poważnie rozważałem przeprowadzkę do Wrocławia i dlatego wziąłem udział w tym "maratonie". Finalnie jednak, kiedy znałem już wszystkie szczegóły i jeszcze raz rozważyłem wszystkie za i przeciw, podjąłem taką, a nie inną decyzję.

Anonymous said...

Ciekawe jaką kasę wywalczyłeś po takim maratoniw

Anonymous said...

na tyle słabą, że mu się nie opłacało. to chyba oczywiste ;]

Anonymous said...

A można się dowiedzieć z czego dobrze jest się nauczyć algorytmów na właśnią Tą rozmowę? Byłbym wdzięczny gdybyś podał jakiś ciekawy kurs/książkę. Nie chciałbym wracać do C (choć już wiele rad słyszałem że inaczej nie można) najlepiej w C# pod właśnie Tą rozmowę. Dzięki.

Michał Komorowski said...

To żadna tajemnica z jakich źródeł czerpię wiedzę. Zacznę jednak od tego, że jeśli nie znasz algorytmów, a masz w najbliższym czasie rozmowę, która wymaga takiej wiedzy to będzie Ci ciężko. Myślenia algorytmicznego, stosowania różnych algorytmów nie można nauczyć się w tydzień, dwa albo nawet miesiąc. Taką wiedzę moim zdaniem nabywa się z czasem, czytając, rozwiązując zadania itd. Owszem można nauczyć się czegoś na pamięć ale zadania sprawdzające wiedzę algorytmiczną mają to do siebie, że nie tyle wymagają zastosowania konkretnego algorytmu co modyfikacji już istniejącego, połączenia kilku lub opracowania swojego.

W moim przypadku było tak, że przede wszystkim skupiłem się na odświeżeniu już posiadanej wiedzy. Poczytałem więc o złożoności obliczeniowej, przypomniałem sobie algorytmy grafowe, sortowania itp. Przejrzałem również zadania algorytmiczne, które kiedyś rozwiązałem.

Co do materiałów to polecam klasykę czyli „Wprowadzenie do algorytmów” Cormen T.H., Leiserson Ch.E., Rivest R.L., Stein C. To opasłe tomisku, które zawiera tony wiedzy. Jeśli interesują Cię algorytmy to jest właśnie to czego szukasz.

Kopalnią wiedzy jest również serwis TopCoder (http://www.topcoder.com/). Po pierwsze można tam znaleźć ciekawe artykułu, a po drugie wypróbować swoje umiejętności w rozwiązywaniu różnych zadań. A co najważniejsze możesz podejrzeć jak dane zadanie rozwiązali inni programiści.

Ja zaglądam również na blog „Antonio Gulli's coding playground” (http://codingplayground.blogspot.com/). Autor piszę krótkie posty, za to bardzo często. Wiele z nich to zadania do rozwiązania. Jedne trudne, drugie łatwe. Część to typowe zadania algorytmiczne, inne wymagają raczej zaprojektowania czegoś.

Na koniec napiszę, że moim zdaniem nie ma różnicy w czym będziesz programował. Swego czasu do rozwiązywania algorytmów preferowałem C++, teraz przestawiłem się na C#. W konkursach organizowanych przez TopCoder możesz pisać w: C++, C#, Java albo VB. Owszem w praktycznych zastosowaniach C++ może być wydajniejszy ale do nauki najlepiej użyć takiego języka, w którym czujemy się najlepiej.

Post a comment