Jaki jest najlepszy sposób oceny najlepszych kandydatów do zdobycia nowej pracy (mówienie tylko w zakresie umiejętności programowania)? W mojej firmie mieliśmy wiele złych doświadczeń z ludźmi, którzy mają dobre stopnie, ale nie mają prawdziwych umiejętności programistycznych. Ich umiejętności są niczym małpy kodowe, bez możliwości analizowania problemów i znajdowania rozwiązań.
Więcej rzeczy, na które muszę zwrócić uwagę:
System edukacji w moim kraju jest do bani - naprawdę do bani. Ludzie, którzy są dobrzy w tego rodzaju pracy, są dobrzy, ponieważ mają do tego talent lub naprawdę starają się uczyć na własną rękę.
Stopień uniwersytecki / magisterski / podyplomowy niekoniecznie oznacza, że wiesz dokładnie, jak to robić.
Certyfikaty również tutaj nic nie znaczą, ponieważ osoby odpowiedzialne za kurs certyfikacyjny również nie mają umiejętności (lub wykonują nisko płatne prace).
Naprawdę musimy znaleźć dobrych kandydatów, którzy są elastyczni i nie mają mechanicznego myślenia (ponieważ tego rodzaju ludzie z doświadczenia mają niską wydajność).
Jesteśmy w instytucji rządowej, a ludzie, którzy są kandydatami, niekoniecznie pochodzą z zewnątrz, ale mamy możliwość zaakceptowania lub odrzucenia kandydatów, dopóki nie znajdziemy właściwego.
Mam nadzieję, że moje pytanie nie brzmi zbyt agresywnie; i BTW sam jestem programistą.
edytuj: Zorientowałem się, że zadałem tu coś naprawdę złożonego. Odznaczę „poprawną odpowiedź” tylko po to, aby dyskusja przebiegła płynnie, bez uprzedzeń.
Odpowiedzi:
Jeśli chodzi o selekcję kandydatów, zwykle wybieram plan trzech uderzeń:
Regularny test z kodowymi pytaniami podobnymi do FizzBuzz i wieloma pytaniami wiedzy, w których muszą podać zakodowane przykłady. W zależności od stanowiska mogą to być zasady OO, zasady projektowania SQL itp. Zwiększam trudność pytań w teście, aby zobaczyć, jak daleko mogą się posunąć. Chodzi nie o to, aby naprawdę odpowiedzieć na wszystkie pytania (jeśli tak, tym lepiej), ale także sprawdzić, czy mogą potwierdzić, gdy coś nie wiedzą. Zaufanie jest niezbędne i nie chcę, aby ktoś mnie okłamał w moim zespole.
Powróć do testu z kandydatem i dyskusja wokół odpowiedzi. Możliwe rozszerzenie pytań w celu osiągnięcia limitów kandydata. Może to być obszerne, a im szersze, tym lepiej.
Ostatnia część, ale nie mniej ważna, The Code Review . Proszę kandydata o przyniesienie fragmentu kodu (zazwyczaj poprzedni test / dyskusję i recenzję oceniam na kilka dni, aby umożliwić im napisanie i dopracowanie jednego fragmentu kodu). Następnie przeprowadzamy regularny przegląd kodu z dwiema osobami: jedną osobą, która będzie bezpośrednio współpracować z kandydatem i osobą, która wcześniej oceniła test z kandydatem. Jeśli chodzi o recenzję kodu, możesz przeczytać ten artykuł z JohnFX .
Na koniec powinieneś być w stanie zdecydować, czy chcesz, aby ten kandydat był częścią twojego zespołu, czy nie.
źródło
Zacznij od podania FizzBuzz do rozwiązania. To powinno wyeliminować najgorsze z nich.
Potem coś nieco trudniejszego - na przykład, jak odwrócić ciąg bez wbudowanych funkcji bibliotecznych. Poproś ich, aby porozmawiali podczas rozwiązywania, aby zobaczyć, na czym polega ich proces myślowy.
Możesz sprawiać coraz trudniejsze problemy, jeśli uznają je za bardzo łatwe, dopóki nie będziesz przekonany, że mogą przejść się, a nie tylko porozmawiać.
źródło
Po prostu szukaj pasji do pracy.
Aby zacytować Joela, poszukaj ludzi „ inteligentnych i załatw sprawy ”.
Reszta nie ma znaczenia
źródło
Na podstawie moich 25 lat programowania (które, co prawda, obejmuje tylko 5 lub 6 przypadków zatrudniania innych programistów):
Pozytywne wskaźniki:
Pasjonat technologii
Programy jako hobby
Jeśli będzie zachęcany, odezwie się do tematu technicznego
Znaczące (i często liczne) osobiste projekty poboczne na przestrzeni lat
Sam uczy się nowych technologii
Wyrażono opinię, które technologie są lepsze dla różnych zastosowań
Bardzo niewygodny pomysł pracy z technologią, która jego zdaniem nie jest „właściwa”
Wyraźnie inteligentny, może prowadzić świetne rozmowy na różne tematy
Rozpoczął programowanie na długo przed uniwersytetem / pracą
Ma ukryte „góry lodowe”, duże osobiste projekty w ramach radaru CV
Znajomość szerokiej gamy niepowiązanych technologii (może nie być w CV)
Wskaźniki ujemne:
Programowanie to codzienna praca
Naprawdę nie chcę „rozmawiać w sklepie”, nawet jeśli jest się do tego zachęcanym
Uczy się nowych technologii na kursach sponsorowanych przez firmę
Chętnie współpracuje z dowolną wybraną technologią, „wszystkie technologie są dobre”
Nie wydaje się zbyt mądry
Rozpoczął programowanie na uniwersytecie
Całe doświadczenie programistyczne znajduje się w CV
Koncentruje się głównie na jednym lub dwóch stosach technologii (np. Wszystko związane z tworzeniem aplikacji Java), bez doświadczenia poza nią
Ponadto sugerowałbym:
Duża część powyższego podsumowania pochodzi z Jak znaleźć dobrego programistę , który jest świetnym artykułem, skupionym nieco bardziej na wskaźnikach o większym zasięgu. To zdecydowanie potwierdza moje intuicje i doświadczenie. Jest także wiele rzeczy (takich jak „pasja”), które zwykle nie są wymienione na liście kontrolnej „co to jest dobry programista”.
źródło
Ocena inteligencji programistycznej jest formą testu Turinga. Dlatego nie ma (obecnie) zamkniętych procedur oceny formularzy, które gwarantowałyby działanie. Inteligentni programiści rozpoznają innych inteligentnych programistów, ale tylko z pewnym uzasadnionym prawdopodobieństwem.
Twoje szanse będą większe, jeśli masz w swoim zespole ankieterów, którzy mogą wyczuć zapachy na śniegu i instynktownie nie lubią pracować z głupimi ludźmi (nawet ci, którzy dobrze wyglądają, mają imponująco wyglądające CV i potrafią wyrzucić z pamięci wszystkie zwykłe rozwiązania w puszkach) .
(Jedną z metodologii, która mogłaby pomóc jako jakość przepływu stosu jako efekt uboczny, jest wykopanie starych pytań związanych z przepływem stosu, związanych w pewien sposób z Twoimi wymaganiami pracy, ale które Twoim zdaniem mają gorsze odpowiedzi; zapytaj rozmówcę, jak by odpowiedziały, i poproś ich o opublikowanie, jeśli jest to dobra odpowiedź. Podobne do recapcha dla OCR pozyskiwanego z tłumu).
źródło
Daj im problem, najlepiej związany z domeną problemów, nad którą będą pracować, i poproś ich o omówienie, w jaki sposób do tego podejdą. Możesz poprosić ich, aby po prostu dyskutowali, pseudokodowali lub zapisywali fragmenty rzeczywistego kodu, w zależności od tego, jak jesteś pewny swoich umiejętności
Na przykład, jeśli Twoja organizacja organizowała konferencje, poproś o opisanie, w jaki sposób kodują bezpieczny system rejestracji online. Powinny być w stanie opisać niektóre z podstawowych zagadnień i zadać dobre pytania na temat tego, co dokładnie należy wdrożyć. Podczas interakcji powinieneś być w stanie określić, czy będą dobrze pasować do Twojej organizacji i roli, którą musisz im wypełnić.
Nie jestem wielkim fanem programowania testów ciekawostek i łamigłówek. Choć mogą być zabawne dla niektórych osób, mogą również denerwować i / lub stresować innych, w tym osoby, które mogą być najlepiej dopasowane do Twojego zespołu. Ponadto informacje o wielu takich testach są łatwo dostępne w Internecie i zachęcą do wkuwania testów i innych taktyk, które osłabiłyby ich zdolność do oceny zdolności programisty.
źródło
Po przeczytaniu tego pytania i niektórych otrzymanych odpowiedzi skłonił mnie do napisania artykułu, który moim zdaniem może być interesujący:
Dziwne praktyki rekrutacyjne przy zatrudnianiu programistów
Ok, więc tytuł artykułu to śmiecie, ale artykuł trafia do sedna problemu. To nie problem kandydata, że zdecydowałeś się na rozmowę z nim, bez względu na to, jak nieodpowiedni mogą być dla twojej roli. Jeśli nie udało Ci się zdefiniować dobrze przemyślanej procedury zatrudniania, która pozwoli ci na znalezienie klejnotów w przybliżeniu, będziesz musiał po prostu żyć z konsekwencjami, i tak, oznacza to pozyskanie kilku kandydatów, którzy mogliby nigdy nie spełniaj swoich oczekiwań. Filtrowanie kandydatów na podstawie ich listów i życiorysów wymaga najpierw, poproszenia kandydatów o napisanie listu o sobie i tym, czego chcą od roli, a następnie spojrzenia na sposób pisania CV. Jeśli masz tylko jednego lub dwóch potencjalnych kandydatów na rozmowę kwalifikacyjną, prawdopodobnie prawidłowo wykonałeś wstępną kontrolę.
Kiedy w końcu znajdziesz 1 lub 2 kandydatów, których uważasz za rzeczywiście wartych czasu, nie zadawaj garstki bezmyślnych pytań testerów, ale zamiast tego poświęć czas na poznanie tych ludzi i zaangażowanie się w otwarte dyskusje na temat oprogramowania inżynieria w ogóle. Dowiesz się więcej od swobodnego podejścia do kandydata niż kiedykolwiek w tradycyjnej (i nieco przeciwnej) sytuacji podczas rozmowy kwalifikacyjnej. Nie poprzestań na pojedynczej rozmowie, lecz zaproś swoich kluczowych kandydatów na kilka spotkań, na których odbywa się otwarta dyskusja i gdzie kandydat może spotkać się z potencjalnymi kolegami. Czas nigdy się nie marnuje, ponieważ nieodpowiedni kandydaci nie będą się dobrze rozwijać w wysoce technicznej dyskusji i wykażą swoje wady bardzo szybko, gdy tracą czujność.
źródło
Nie powiedziałeś, dla którego języka, ale dość łatwo jest sprawdzić czyjąś wiedzę. Zależy to również od poziomu, na który patrzysz, ale istnieje dość duża grupa pytań dotyczących pytań podczas rozmowy kwalifikacyjnej.
Niezależnie od tego, czy zdecydujesz się na wywiad, nie zadawaj pytań dotyczących wywiadu z „myśleniem lateralnym” .
źródło
Sugeruję, abyś zadał pytanie FizzBuzz i wynajął pierwsze, które mija. Dalsze testy zwykle są wadliwe, ponieważ nie każdy dobry programista podejdzie do problemu takiego jak ty, albo przeprowadzi wywiad bez jąkania się, albo pozna języki, o które troszczysz się, lub troszczy się, lub głupoty, takie jak wymiana liczb całkowitych bez trzeciej zmiennej (kogo to w każdym razie potrzebuje? to znaczy, skoro pamięć RAM przekroczyła 128 bajtów?).
Pomyśl o tym. Jeśli pytanie FizzBuzz eliminuje 199 z 200, to po prostu eliminuje setki wywiadów. Czy naprawdę zamierzasz przeprowadzić wywiad z setkami potencjalnych klientów?
Wydaje się, że po FizzBuzz maleje zwrot z inwestycji. Zakłada się, że 199/200 jest nawet w przybliżeniu bliski. I przypuszczam, że TWÓJ czas też jest cenny ...
źródło
Nie jestem pewien, czy to komentarz lub odpowiedź, ale w zasadzie to, co powiedział Matthieu. Chcesz głupich, łatwych pytań, które zajmą minutę lub dwie (ale nie dłużej niż 5) minut i powinny dotyczyć różnych obszarów.
Takimi przykładami głupiego łatwego pytania jest pytanie o rekurencję, takie jak masz listę i musisz wydrukować ją w odwrotnej kolejności bez użycia pętli. Proste pytanie wyrażenia regularnego, jeśli wyrażenie regularne jest zwykle wykonywane w trakcie projektowania. Pytanie o bity i bajty, jeśli używasz C ++ (napisz szablon, który akceptuje char do długiej i drukuje reprezentację binarną. Specjalizacja nie jest wymagana, po prostu użyj sizeof (), aby obliczyć długość bitu)
Powinno to zająć około <= 3 minuty na pytanie
źródło
Zapytaj ich o najciekawsze wyzwanie programistyczne, które kiedykolwiek próbowali rozwiązać, ale nie potrafili, jakie podejście zastosowali podczas jego rozwiązywania, dlaczego nie mogli rozwiązać i jakie inne podejście według nich może rozwiązać.
To wystarczy, abym mógł ocenić umiejętności programistów jako programista.
źródło
Czy mogą nauczyć się czegoś nowego? Porozmawiaj o wysokim poziomie technologii, z której korzystasz, lub o czymś specyficznym dla firmy, w której pracujesz, i sprawdź, czy potrafią zrozumieć ten temat. Czy zadają inteligentne pytania? Czy potrafią wymyślić analogię? Czy przypomina to coś, co zrobili w innej branży lub technologii?
Woleliby programować? Nie musi to być numer jeden na ich liście, ale muszą oni preferować pisanie kodu. Mam na myśli pisanie kodu i tworzenie czegoś, a nie siedzenie i rozmawianie o tym lub rysowanie na tablicy przez cały dzień. Nie po to, aby zminimalizować planowanie lub promować kodowanie kowbojskie, ale w końcu musisz mieć kod. Unikaj tych, którzy unikają klawiatury. To nie jest stanowisko kierownicze.
Możesz zrobić punktację w skali od jednej do dziesięciu rzeczy lub po prostu polegać na tym, że potrafisz wąchać swój własny rodzaj.
źródło
Jeśli to sprawia, że czujesz się lepiej, w prawie każdym kraju istnieją źli programiści. Problem polega na tym, jak je usunąć.
Pierwsze pielenie to życiorys. Jedną rzeczą, której szukam, jest dużo deklarowanych doświadczeń językowych i nic, co by opisało to, co zrobili w tym języku. Widziałem, że prawie wszyscy twierdzą, że znają każdy język, który kiedykolwiek wymyślono, ale z ich doświadczenia wynika, że faktycznie pracowali tylko z Access i Visual Basic. Te idą prosto do kosza. 10 życiorysów trafia bezpośrednio do kosza (zwłaszcza dziesięć życiorysów od osób z mniej niż 2-letnim doświadczeniem, które zdobyłem). Od ostatnich stopni z niewielkim doświadczeniem, musisz być bardzo wybredny, jeśli chodzi o to, jak się prezentują. Najlepsze kandydatki są ostrożne ze swoimi życiorysami, nie mają błędów. Czy naprawdę szukasz kogoś, kogo tak mało obchodzi, że nie zadał sobie trudu, aby poprawić swoje CV?
Profesjonalnie przygotowane CV również trafiają do kosza. Po przeczytaniu setek CV możesz je wybrać, ponieważ używają dokładnie tego samego sformułowania. Nie możesz ufać zawartości w profesjonalnie przygotowanym CV i wiesz, że osoba ta nie zrobiła własnego przygotowania. Jest to osoba, która będzie polegać na innych w rozwiązywaniu jego problemów, czy naprawdę chcesz tego na stanowisku programistycznym?
Szukaj rzeczy, które wyróżniają osobę na tle wybranych. Jest to oczywiście trudniejsze w przypadku tych, które dopiero wyszły ze szkoły, ale szukaj osiągnięć, wkładu w open source itp.
Następnym marihuaną jest wywiad telefoniczny. Zapytaj o podstawowe pojęcia związane z faktyczną pracą, którą masz. Jeśli ludzie nie mają podstawowej wiedzy na temat pojęć, których potrzebujesz, nie warto zawracać sobie głowy osobistym wywiadem. Młodzi ludzie często myślą, że to niesprawiedliwe, ponieważ mogą sprawdzać wszystko w Internecie, ale prawda jest taka, że nigdy nie spotkałem dobrego programisty, który musiałby wszystko sprawdzać w Internecie. Powinieneś mieć wiedzę na temat swojego zawodu, której nie musisz za każdym razem podnosić.
Po rozmowie telefonicznej powinieneś wybrać najlepszych 4-5 kandydatów i rozmowę kwalifikacyjną. Oczywiście, jeśli masz tylko 1-2 dobrych kandydatów, nie zawracaj sobie głowy przeprowadzaniem wywiadów z osobami, które już wyeliminowałeś. Teraz zadajesz trudne pytania i rozumiesz, jak podchodzą do problemów. Nigdy nie użyłbym testu fizzbuzz, ponieważ jest zbyt dobrze znany, więc odpowiedzi nic nie mówią. Zamiast tego rozwiąż niektóre problemy z własnej bazy kodu. Mogę dać im wymaganie i fragment kodu i zapytać, czy kod spełnia ten wymóg, a jeśli nie, to dlaczego i co mogą zrobić, aby go spełnić. Poprosiłbym ich, aby opisali najtrudniejszy problem programistyczny, który musieli rozwiązać, i jakie kroki podjęli, aby znaleźć odpowiedź. Zadałbym bardziej szczegółowe pytania techniczne. Pamiętaj, że starasz się przekonać o ich kompetencjach technicznych, ich zdolnościach do rozwiązywania problemów i debugowania oraz ich zdolności do dopasowania się do istniejącego zespołu. Zadaję również pytania, na które prawdopodobnie nie znają odpowiedzi, aby ocenić, jak dobrze radzą sobie ze stresem, jest to stresująca praca, nie chcę kogoś, kto złoży wywiad, ponieważ stres związany z pracą jest większy niż stres podczas rozmowy kwalifikacyjnej . Poszukuję mocnych stron w obszarach, w których jesteśmy obecnie słabi, i zdolności do pracy w zespołach i prezentowania się klientom (nasi deweloperzy zajmują się głównie użytkownikami), twoja lista może być inna. Chcę kogoś, kto złoży rozmowę kwalifikacyjną, ponieważ stres związany z pracą jest większy niż stres związany z rozmową kwalifikacyjną. Poszukuję mocnych stron w obszarach, w których jesteśmy obecnie słabi, i zdolności do pracy w zespołach i prezentowania się klientom (nasi deweloperzy zajmują się głównie użytkownikami), twoja lista może być inna. Chcę kogoś, kto złoży rozmowę kwalifikacyjną, ponieważ stres związany z pracą jest większy niż stres związany z rozmową kwalifikacyjną. Poszukuję mocnych stron w obszarach, w których jesteśmy obecnie słabi, i zdolności do pracy w zespołach i prezentowania się klientom (nasi deweloperzy zajmują się głównie użytkownikami), twoja lista może być inna.
źródło
Kandydaci muszą mieć rzeczywisty problem do rozwiązania ze swobodą korzystania z dowolnej technologii.
Jeśli wyjdzie w jaskrawych kolorach, jest w!
źródło