Menu Zamknij
24 września 2021

#2 Przygotowanie do Interview

Wstęp

Artykuł ten jest kolejnym materiałem przygotowującym młodych Devów na pierwsze stanowisko programisty. Post został podzielony na dwie części -  pierwsza stanowi ogólne wskazówki, jak zachować się na interview, druga natomiast dotyczy konkretnych zagadnień i zadań z Pythona, które mogą zostać poruszone na technicznej części rozmowy. Jeżeli nie czytałeś ostatniego artykułu o przykładowym zadaniu rekrutacyjnym, możesz zajrzeć tutaj: artykuł __getattribute__ vs __getattr__..

Jak to wygląda z mojej perspektywy (mentora programowania)?

To, jak przebiega proces rekrutacyjny na stanowisko Python Developera w danej firmie, mocno zależy od specyfiki i charakteru danej organizacji.  Należy również zauważyć, że przebieg przyjmowania nowej osoby do pracy może się różnić ze względu na jej doświadczenie komercyjne oraz fakt, czy wcześniej pracowała już na podobnym stanowisku.

Jednak chciałbym to wszystko uogólnić i przedstawić Ci, jak wygląda rekrutacja z perspektywy osoby szukającej pierwszej pracy. Bazując głównie na moim doświadczeniu, dowiesz się, z jakich etapów często składa się interview oraz poznasz najczęściej poruszane zagadnienia i aspekty, na podstawie których oceniane będą Twoje umiejętności. Przedstawię Ci również kilka porad, do których warto się zastosować, jeżeli chcesz efektywnie wypaść w oczach pracodawcy.

Gdzie szukać ofert pracy?

Pytanie dość trywialne... ale mimo wszystko chciałbym polecić Ci kilka serwisów, na których w pierwszej kolejności warto szukać ofert pracy w IT. 

Są to: 

  1. Bulldogjob - The Space for IT People 
  2. Just Join IT: #1 Job Board for IT industry in Poland 
  3. https://nofluffjobs.com/
  4. Pracuj.pl: Praca

Etap I - Wstępna rozmowa z rekruterem

Jeżeli spośród zgłoszeń wielu kandydatów, to właśnie Twoje CV przykuło uwagę firmy, to na samym początku przeprawy możesz spodziewać się wstępnej rozmowy z osobą z działu HR.

Rekruter pyta Cię wówczas o informacje, które nie wyniknęły bezpośrednio z CV lub o takie, które wymagają doprecyzowania. Mogą przede wszystkim dotyczyć one wykształcenia, doświadczenia, wymiaru czasu pracy oraz Twojej dostępności i terminu, od którego byłbyś gotowy rozpocząć pracę. 

Na tym etapie często określasz również swoje oczekiwania finansowe oraz dowiadujesz się, na jakiej umowie możesz wykonywać swoją pracę (w przypadku Juniorów, często praca rozpoczyna się od okresu próbnego - opartego na Umowie Zlecenie). Co do swoich oczekiwań, to warto zrobić rekonesans przed rozmową i określić konkretne wynagrodzenie, jakie satysfakcjonowałaby Cię w firmie.
W ten sposób pokażesz rekruterowi, że orientujesz się, jak wyglądają realia rynkowe, jesteś zdecydowany i dokładnie znasz swoje możliwości i oczekiwania. 



Średnia zarobków dla programistów Junior - bulldogjob.pl

Jeżeli aplikujesz do korporacji/firmy świadczącej usługi również poza terytorium Polski, to bardzo często zdarza się, że rekruter zada Ci kilka pytań po angielsku (niekoniecznie technicznych), aby sprawdzić Twoją zdolność do komunikowania się w nieojczystym języku.

Pytania te są zazwyczaj dość luźne, a przykładowe, z jakimi miałem do czynienia to:
- 'Where do you see yourself in 5 years?',
- 'Tell me something about your any programing project'.

Czasami również na pierwszym etapie rekrutacji, kandydat otrzymuje pierwsze zadanie do rozwiązania (nierzadko w formie on-line), aby firma mogła przefiltrować dużą ilość zainteresowanych osób danym wakatem i wybrać tylko tych najbardziej obiecujących.

Etap II - Część bardziej techniczna

W momencie, gdy wypadniesz pozytywnie na wstępnej rozmowie z rekruterem i Twój profil kandydata będzie dopasowany do oczekiwań firmy, w następnym etapie rekrutacji możesz zostać poproszony o rozwiązanie jakiegoś bardziej złożonego zadania technicznego lub uczestniczyć w tzw Live Coding (rozwiązujesz dane zadanie lub problem on live, pod okiem doświadczonego programisty). 

Rozwiązywanie odbywa się albo on-line (szczególnie w dobie obecnej pandemii), albo też stacjonarnie. Firma może, np. udostępnić Ci problem na popularnej platformie Codility: Tech Recruiting Platform, Remote Online Code Tests i wyznaczyć określony czas na jego rozwiązanie. 

Zadanie związane jest często z wymaganym w ofercie tech-stackiem, więc dotyczy technologii, które wykorzystuje firma. Wiele problemów będzie mocno zbliżonych do tych, z którymi programiści spotykają się na co dzień, ale również może pojawić się jedno duże zadanie, w którym trzeba wykazać się różnymi umiejętnościami (projekt bazy danych, projekt API). 

Oprócz sprawdzenia samej poprawności działania napisanego przez Ciebie programu, weryfikowane również będzie, jak optymalnie i czysto napisałeś kod.

Czy zastosowałeś się choćby się do zasad SOLID, poprawnie nazwałeś wykorzystane struktury w programie i czy programujesz w przemyślany sposób.
Po rozwiązaniu zadania, warto więc schylić się nad lekkim refaktorem kodu i dopięciem wszystkiego na przysłowiowy ostatni guzik.

Etap III - Rozmowa ogólna

W momencie, gdy wyślesz rozwiązania do firmy i zostaną one rozpatrzone pozytywnie, możesz otrzymać już ostateczne potwierdzenie o tym, że zostałeś zatrudniony i zostało Ci tylko spotkanie z Twoim menedżerem i omówienie kilku formalnych spraw.

Możesz też jednak zostać zaproszony na dalszą rozmowę techniczną, która odbywa się już na żywo z członkami firmy. Mają oni na celu jeszcze głębsze sprawdzenie Twoich umiejętności. 

Co więcej, firmy często pomijają punkt 2 i bezpośrednio przechodzą do rozmowy ogólnej. W ten sposób wszystkie zadania rozwiązujesz bezpośrednio w firmie i to właśnie tam sprawdzane są Twoje kompetencje.

Przed rozmową ogólną, warto przejrzeć popularne pytania odnośnie technologii, które były wypisane w wymaganiach na dane stanowisko. Jeśli aplikujemy na stanowisko programisty Python, to warto wiedzieć np. czym jest generator, znać hierarchię dziedziczenia, być w stanie napisać własny dekorator. Pojawią się też pytania bardziej ogólne: dotyczące wzorców projektowych, dobrych praktyk programistycznych. Więcej przykładowych pytań z rozmów kwalifikacyjnych przedstawię Ci na końcu tego artykułu. 

Co ciekawe, często obecne są również pytania z zakresu algorytmiki i logicznego myślenia. Możesz, np. zostać poproszony o rozwiązanie danego problemu algorytmicznego na kartce czy whiteboardzie. 

Paradoksalnie jednak, nierzadko osobom, które badają Twoje umiejętności nie zależy na 100-procentowym rozwiązaniu zadania. Prosząc Cię o rozważenie i przedstawienie rozwiązania danego problemu, mają głównie na celu wybadanie, jak podchodzisz do zagadnienia, czy radzisz sobie z presją i jak wygląda Twój tok rozumowania. 

Zastanów się również, jak efektywnie przedstawić swoje poprzednie projekty programistyczne - zawodowe lub prywatne. Poukładaj sobie w głowie, czego one konkretnie dotyczyły i z jakich rozwiązań korzystałeś. 

Po tym, jak zostaniesz wymaglowany z wiedzy teoretycznej oraz zaprezentujesz swoje umiejętności pracy z kodem, czeka Cię zapewne temat nieco luźniejszy, ale równie ważny. Będzie to wybadanie umiejętności miękkich i nastawienia do pracy.

Warto przemyśleć sobie, dlaczego tak naprawdę chcemy zmienić pracę, czy też jaka jest Twoja prawdziwa motywacja w rozwoju jako programista. Mogą bowiem paść pytania jak choćby, np. sposób na radzenie sobie z brakiem motywacji w pracy, jakie kroki podejmujesz, gdy dane zadanie Cię przerasta. 

Jednego szablonu nie ma!

I choć wyodrębniłem kilka faz rekrutacji, to zdaj sobie sprawę, że nie jest to jakiś uogólniony schemat zatrudniania nowych programistów. Firmy mogą pomijać czy mieszać ze sobą różne etapy sprawdzające kompetencję. Warto więc być przygotowanym do rozmowy już od samego początku, czyli wysłania CV do firmy. 

UWAGI:

  1. Staraj się być jak najbardziej rzeczowym w swoim CV. Najlepiej, abyś dostosowywał je pod profil danej oferty firmy. Czyli w zależności od wymagań, wyszczególnił te umiejętności, których faktycznie firma oczekuje od kandydata (znajdziesz je w opisie oferty pracy).
  2. Listy motywacyjne to już przeżytek. Samo CV i portfolio jako Twoja wizytówka w zupełności wystarczy.
  3. CV twórz bez niepotrzebnych ozdobień i nadmiarowych kolorów. Ma ono być proste i przejrzyste. Pamiętaj, że będzie musiało ono zostać prawdopodobnie wydrukowane (nie zmuszaj rekrutera do marnowania tuszu w drukarce :)).
  4. W doświadczeniu zawodowym opisywanym w CV uwzględniaj tylko te pozycje, które faktycznie są związane z profilem stanowiska. Aplikując na Python Developera, nie będzie sensu, by uwzględniać doświadczenie w prowadzeniu wózków widłowych. Może jednak pisałeś kiedyś artykuły na bloga IT? O tym już warto wspomnieć.
  5. Aby wyróżnić się z grona innych kandydatów do pracy, uwzględnij w CV link do swojego GitHuba i Linkedina. Jeżeli nie masz doświadczenia w branży, to portfolio jest pozycją must-have, aby zaprezentować swoje umiejętności. Niegłupie również byłoby dodanie w CV oddzielnej sekcji “Projects”, w której pokrótce opisałbyś swoje ciekawe prywatne projekty.
  6. Całe CV pisz po angielsku (niezależnie czy aplikujesz do firmy polskiej czy też zagranicznej). 

Przykładowe zadania rekrutacyjne

Aby zapewnić Ci jeszcze lepsze przygotowanie do interview, przedstawiam Ci najciekawsze i najpopularniejsze zagadnienia z czystego Pythona, poruszane podczas aplikowania na posadę programisty.

Challenge 1
Przekształcanie adresu IP.

Zastąp wszystkie kropki adresu IP, sekwencją [.], np. 192.168.0.1 na 192[.]168[.]0[.]1

Challenge 2
Znajdź pierwszy niepowtarzający się znak.

Mając do dyspozycji dowolny ciąg znaków, znajdź w nim pierwszy niepowtarzający się znak, np. dla słowa "abacdgab" odpowiedźą będzie c, a słowo "abaccdbdbgg" nie posiada żadnego niepowtarzającego się znaku.

Challenge 3
Określ wynik poniższych operacji.

Jakie wartości przyjmą kolejno A0, A1, …, A5?

A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))

A1 = range(10)

A2 = sorted([i for i in A1 if i in A0])

A3 = sorted([A0[s] for s in A0])

A4 = [i for i in A1 if i in A3]

A5 = {i:i*i for i in A1}

A6 = [[i,i*i] for i in A1]

Challenge 4
Zadanie logiczne

Masz osiem piłek oraz wagę szalkową. Siedem piłek waży tyle samo, jedna jest cięższa. Ile ważeń potrzebujesz aby być pewny, która jest tą najcięższą?

Challenge 5
Wymień charakterystyczne cechy Pythona.

Przykładowa odpowiedź:

Python jest językiem interpretowanym. To znaczy tyle, że nie jest on kompilowany bezpośrednio do kodu maszynowego, ale do kodu bajtowego. Następnie kod ten uruchamiany jest na maszynie wirtualnej, która interpretuje na bieżąco zaimplementowane funkcjonalności.

Python jest językiem dynamicznie typowanym. W momencie tworzenia zmiennej, nie musimy jawnie określać jej typu. Jest on określany dynamicznie. 

Wszystko w Pythonie jest obiektem. I tak, np. funkcje są uznawane za obiekty pierwszej klasy. Dzięki temu referencja do dowolnej funkcji może przypisywana do zmiennej, przesyłana jako argument do innej funkcji itp.

Challenge 6
Zweryfikowanie zaznajomienia z poniższymi strukturami w Pythonie?

  • List składanych
  • Dekoratorów
  • Wyrażeń ReGex
  • Metod statycznych (@classmethod)
  • Programów wielowątkowych

Challenge 7
Co jest nie tak z poniższym przykładem? Jak powinniśmy go zmienić?


def function(data=[]):
    data.append(1)
    return data

Challenge 8
Napisz kod, który wyodrębni unikalne wyrazy z dowolnego zdania.

Z tekstu:
I am not a robot I am a human
Powinniśmy otrzymać: I, am, not, a, robot, human (w dowolnej kolejności).

Sprawdź również nasz system mentorowania i outsourcowania specjalistów
  • Wyznaczona ścieżka od A do Z w kierunku przebranżowienia
  • Indywidualnie dostosowany materiał pod ucznia
  • Code Review ze strony mentora
  • Budowa portfolio
  • Intensywna praca z materiałami szkoleniowymi