Weryfikowanie umiejętności kandydatów do pracy to czasochłonne i wymagające zajęcie. Automatyzacja tego procesu jest szansą szybsze znalezienie właściwego pracownika i oczywiście oszczędności, szczególnie w branży IT. Codility.com to polski start-up, który swój początek zawdzięcza problemom ludzi odpowiedzialnych za rekrutowanie pracowników.
Geneza problemu
Programowanie wymaga znajomości języków, bibliotek i narzędzi, ale przede wszystkim umiejętności analitycznego myślenia. Napisanie właściwego i optymalnego algorytmu to kwestia znajomości struktur danych, instrukcji sterujących i złożoności obliczeniowej.
Zaproszenie kandydata lub kandydatki na spotkanie to przeważnie ostateczny etap rekrutacji i dotyczy wyłącznie najlepszych. Rozmowy telefoniczne, wideokonferencje czy prezentacje dotychczasowych projektów to dobre, ale nie idealne sposoby weryfikacji umiejętności i doświadczenia. Dlatego w branży IT zawsze występuje etap techniczny.
Bywa, że taki etap to zupełne nieporozumienie, ponieważ zaproszona osoba jest kompletnie nieprzygotowana do danego stanowiska i jakimś cudem nie została odrzucona podczas wcześniejszych etapów. Właśnie takiej sytuacji zapobiega Codility, serwis którego założycielem jest Grzegorz Jakacki.
Zalety dla każdego
Główna funkcja serwisu to weryfikacja kandydatów poprzez specjalne zadania. Adres takiego zadania jest ważny przez pewien czas, przykładowo kilka dni, ale na jego wykonanie mamy znacznie mniej, na przykład 2 godziny. Jednocześnie cały test to jednorazowa próba, ponieważ rozpoczęcie zadania wymaga dostarczenia prawidłowego rozwiązania w określonym czasie.
Twórcy przygotowali zadanie testowe, które umożliwi poznanie użytkownikom interfejsu aplikacji i zrozumienie zasad całego procesu. Problem zadania jest szczegółowo opisany, włącznie z wymaganiami i wyjątkowymi przypadkami. Znany jest również czas dostępny dla wykonania zadania.
Wszystkie zadania są na tyle uniwersalne, że do stworzenia algorytmu nie potrzeba specjalnych bibliotek, frameworków, a jedynie umiejętność analitycznego myślenia i znajomość danego języka. Rozwiązanie tego samego zadania jest możliwe C, C++, Java, Pascal, Python, C#, PHP czy JavaScript, Perl, Ruby, VB.NET, Lua, Objective-C, Scala czy Go. Istotne jest dostarczenie ciała funkcji, która dla określonych argumentów zwróci wartości zgodne z wymaganiami problemu.
Codility sprawdza nasz kod pod dwoma względami i to jest najciekawsza strona tego projektu. Ważne są zarówno, poprawność naszego algorytmu, jak i jego efektywność działania. Zgodność kodu jest mierzona w procentach, ale nie znamy wszystkich danych jakimi program jest weryfikowany. Złożoność obliczeniowa i pamięciowa dla danego problemu są zawsze określone w postaci notacji dużego O. Dzięki temu będziemy świadomi wymagań wobec rozwiązania dla dużych i bardzo dużych danych wejściowych.
Bywa, że algorytm nie jest całkowicie poprawny, bo dla pustych danych wejściowych lub w specjalnych przypadków zwraca błędne wyniki. Takie sytuacje doskonale sprawdzić poprzez własne testy z danymi wejściowymi, których możemy napisać nawet 10 podczas zadania. Istotne jest również rozumienie, że złożoność procesów obliczeniowych rzadko pozostaje stała, a częściej bywa liniowa i wykładnicza.
Jednak naszym największym przeciwnikiem podczas rozwiązywania nawet prostego problemu algorytmicznego są nerwy wywołane uciekającym czasem. Przeczytanie i zrozumienie istoty zadania na początku, zaplanowanie i napisanie odpowiedniej funkcji, aż wreszcie dokładne sprawdzenie tego kodu poprzez testy. Wszystkie te elementy zdecydują o końcowym wyniku, który nie musi być tak dobry jakbyśmy się tego spodziewali. Zresztą sami sprawdźcie zadanie testowe, które polega na znalezieniu takiego punktu równowagi dla tablicy elementów.
W czasie rozwiązywania zadania na bieżąco sprawdzamy czy nasz kod nie zawiera błędów składniowych, a także działa zgodnie z wymaganiami. Dodatkowo cały proces pisania algorytmu jest zapisywany, co nawet w przypadku pewnych błędów na końcu, pozwoli na poznanie toku rozumowania danej osoby podczas testu.
Podsumowanie
Generalnie Codility to świetne narzędzie do rekrutacji i znalezienia najlepszych osób na wybrane stanowisko. Wynik końcowy inny niż 100% wcale nie oznacza słabych umiejętności i braku doświadczenia, ale skoro rozmawiamy o liczbach to zarówno wynik procentowy, jak i czas napisania rozwiązania zadania powinny być adekwatne do doświadczenia w branży.
Godne polecenia są lekcje dla programistów, które opisują podstawowe, ale także bardziej złożone problemy algorytmiczne. Znalezienie właściwego rozwiązania wymaga wiedzy, umiejętności, ale także cierpliwości i dyscypliny. Kilkadziesiąt zadań z zakresu przetwarzania danych, sortowania, wyszukiwania czy rekurencji doskonale zobrazuje nasz osobisty poziom znajomości programowania. Do wyboru mamy zadania naprawdę łatwe, być nie mówić banalne, ale także naprawdę wymagające i ambitne.
Jednocześnie kiedy poznamy kwestie teoretyczne najpopularniejszych problemów i będziemy w stanie napisać właściwe rozwiązanie to Codility oferuje jeszcze więcej, a mianowicie wyzwania dla programistów. Nowe zadania publikowane, co jakiś czas są dostępne dla wszystkich. Wygranie takiego wyzwania to świetne potwierdzenie naszych umiejętności, ale również wielki do dumy. Może taki mały detal zdecyduje o propozycji ciekawej oferty pracy lub pozytywnej decyzji przyszłego pracodawcy podczas rozmowy?