sobota, 8 września 2012
Czy Codility naprawdę wie, jakim jesteś programistą?
Jak przetestować, czy ktoś jest dobrym programistą? Najpierw należałoby zastanowić się, co to właściwie miałoby znaczyć. Jakie cechy i umiejętności posiada dobry programista? To zagadnienie jest bardziej złożone niż mogłoby się zdawać, ale o tym później.
Na pewno dobry programista musi umieć programować. Twórcy Codility wyszli z założenia, że w takim razie proces rekrutacji można przyspieszyć i zautomatyzować, odrzucając już na początku kandydatów, którzy nie umieją napisać prostego algorytmu. Zadanie polega na implementacji w wybranym języku funkcji, której zachowanie jest opisane. Dodatkowo muszą być spełnione wymagania na złożoność obliczeniową i pamięciową. Następnie, za pomocą serii testów jednostkowych sprawdzane jest, czy zachowanie funkcji jest zgodne ze specyfikacją.
Na jednej z rozmów dostałem następujące zadanie polegające na znalezieniu, czy w tablicy jednowymiarowej znajduje się dominanta. Szczegółowy opis zadania i rozwiązanie znajduje się w moim poprzednim poście. Zadanie bardzo proste, ale maksymalna złożoność obliczeniowa miała wynosić O(N), a pamięciowa O(1). Na rozwiązanie miałem pół godziny. Przyznam, że w obliczu kończącego się czasu zdecydowałem, że zaimplementuje trywialne rozwiązanie z użyciem tablicy mieszającej (złożoność pamięciowa O(N)).
Trzeba przyznać, że zadania na Codility są bardzo ciekawe i wciągające. Sam rozwiązywaniu ich poświęciłem parę weekendów. Są one dla mnie rodzajem łamigłówek, wyzwaniem dla umysłu. Problem w tym, że w mojej karierze programistycznej, nie przypominam sobie, żebym musiał rozwiązać problemy podobne do tych z Codility. Wystarczyło mi, żeby pamiętać, że w Javie Arrays.sort używa quicksorta i że wyszukanie elementu z uporządkowanej tablicy kosztuje logN. Prawdziwe wyzwania zawsze dotyczyły organizacji kodu.
Więc zastanawiam się, czy to aby na pewno najlepszy pomysł, żeby oceniać programistę na podstawie umiejętności, które są rzadko wykorzystywane. Na pewno istnieją firmy dla których szukanie nowych efektywnych sposobów na rozwiązywanie matematycznych problemów jest podstawą działalności. Jednak nie oszukujmy się, dla 95% firm dużo ważniejsze jest to, czy zatrudniany progamista jest komunikatywny, czy dobrze zna technologie, frameworki, czy ma doświadczenie, czy stosuje wzorce projektowe itp. To jest właśnie zestaw cech, którego rekruterzy powinni poszukiwać.
Czy w takim razie stosowanie Codility nie ma sensu? Przeciwnie, wydaje mi się, że Codility to najlepszy test IQ dla programistów. Trzeba po prostu pamiętać, że Codility nie daje ostatecznej odpowiedzi na to, czy ktoś umie programować i twierdzenie “Our programming tests let your candidates demonstrate their abilities in a natural working environment, showing you how they will really perform on the job.” jest fałszywe. Codility to nie jest naturalne środowisko pracy, a zadania nie przypominają zadań, z którymi zmaga się 95% programistów.
Subskrybuj:
Komentarze (Atom)