Pytanie testowe Joela nr 11 brzmi: „Czy nowi kandydaci piszą kod podczas rozmowy kwalifikacyjnej?”. Jakie są argumenty za i przeciw poproszeniu nowych kandydatów o napisanie kodu podczas rozmowy i podjęcie decyzji w jego sprawie?
Pytanie testowe Joela nr 11 brzmi: „Czy nowi kandydaci piszą kod podczas rozmowy kwalifikacyjnej?”. Jakie są argumenty za i przeciw poproszeniu nowych kandydatów o napisanie kodu podczas rozmowy i podjęcie decyzji w jego sprawie?
Odpowiedzi:
Nie widzę wad. Rozmowa kwalifikacyjna składa się z wielu części, a kandydat powinien zostać poparty kilkakrotnie.
Co tydzień przeprowadzam wywiad z 10 osobami. Naprawdę, naprawdę, NAPRAWDĘ doceniam fakt, że HR wykonał całą pracę w tle i przedstawił mi mnóstwo notatek. Zanim do mnie dotrą, nadszedł czas, abym zaliczył ich testy.
Testy zależą całkowicie od pozycji. Ogólnie próbuję sondować:
Ogólna umiejętność programowania. Czy potrafisz efektywnie korzystać z operatorów? Czy potrafisz wyobrazić sobie system numeryczny, który ma podstawkę inną niż 10?
Czy wiesz, jak zrobić to, do czego Cię zatrudniamy?
Ocena twojego wkładu we wszystkie wymienione projekty open source
Staram się mówić krótko i dobrze się bawić. Kiedy wchodzę do biura, biorę odpowiedzi, przeglądam je, a następnie przeprowadzam wywiad. Aby zostać zatrudnionym, zazwyczaj musisz przejść trzy rozmowy.
Oceniam także, jak dobrze wtopisz się w zespół, który cię odbierze. Ten zespół liczy na to, że zrobię to skutecznie.
Jedną rzeczą jest odpowiadanie na pytania w formie meta, innym jest tworzenie kodu. Jeśli mam cię zatrudnić, naprawdę muszę zobaczyć, jak tworzysz kod.
Z przeprosinami dla Scotta Whitlocka:
Cons:
Plusy:
Gdybyś miał wynająć żonglera, byłbyś szalony, gdyby nie żonglował dla ciebie. Lub muzyk, którego miałbyś przesłuchać. W przeciwnym razie dostaniesz takie rzeczy, jak niesamowity „master” K-strass jo-jo .
Przechodzenie przez coś na tablicy jest dla programistów odpowiednikiem szybkiego żonglowania demo.
Myślę, że jest to bardzo przydatne i zawsze to robię, ale ponieważ korzyści zostały tak dobrze uwzględnione, omówię tylko (pozorne) negatywy.
Myślę, że testy kodu raczej nie dadzą fałszywych wyników pozytywnych: prawdopodobieństwo, że ktoś, kto nie umie napisać kodu, uda się go sfałszować w wywiadzie, przynajmniej jeśli masz coraz więcej pytań. (Być może najbardziej prawdopodobny scenariusz polega na tym, że oszukują, pytając przyjaciela, czy nie jest to wywiad bezpośredni).
Problemy są raczej po stronie fałszywie negatywnej: czy testy kodu doprowadzą do odrzucenia osoby, która faktycznie jest najlepszym kandydatem?
Trema
Możesz mieć kogoś, kto jest naprawdę dobrym programistą, ale bardzo denerwuje się tym wywiadem, i zasadniczo przeraża go scena. Wykonywanie pod presją jest do pewnego stopnia ważne, ale radzenie sobie ze scenicznym przerażeniem nie jest tak kluczową częścią bycia programistą (w porównaniu do innych zawodów) i niefortunnie byłoby odrzucać kogoś, kto cierpi z tego powodu. Może się to spotęgować: jeśli dana osoba nie będzie w stanie odpowiedzieć na pytanie, o którym wie, że powinna na nie odpowiedzieć, może bardziej się zaciągnąć. Lub, jak w tym pytaniu , czują, że nie mogą jednocześnie rozmawiać i kodować.
łagodzenie: zacznij od kilku pytań na temat ich pochodzenia, celów itp., zanim przejdziesz do pytań technicznych. Być może zacznij od kilku łatwiejszych pytań technicznych, aby nabrać tempa. Nie bądź kutasem podczas wywiadu (kłótnie o średniki itp.).
To hałaśliwy środek
Interesujące pytania kodowe mogą zawierać więcej niż jedną poprawną odpowiedź. Jeśli jedna osoba pisze poprawną odpowiedź, a inna pisze poprawną i bardziej efektywną odpowiedź, ile powinieneś na to włożyć?
W pewnym stopniu jest to problem z niektórymi „zagadkowymi” pytaniami: osoba albo ma wgląd, albo nie, i otrzymujesz prawie binarny wynik. Inteligencja prawdopodobnie wpływa na prawdopodobieństwo uzyskania takiego wglądu, ale próbkowanie tylko kilka razy daje w przybliżeniu miarę.
Niepokoi mnie to w związku z pytaniami dotyczącymi kodu (choć nadal ich używam). Najlepszym sposobem na złagodzenie tego problemu jest jak największa liczba możliwych rozwiązań: osoba może przynajmniej napisać brutalną odpowiedź na brutalną siłę lub odpowiedź na część problemu. Uświadomienie sobie, że to lepsze niż nic, jest dobrym znakiem. Następnie, jeśli odkryją więcej, mogą sprawić, że kod będzie bardziej wydajny lub bardziej elegancki. O ile to możliwe, unikaj zadawania pytań, które otrzymują odpowiedzi binarne.
To nie jest tak naprawdę reprezentatywne
Programowanie nie polega na rozwiązywaniu dziesięciominutowych problemów algorytmicznych jeden po drugim: jest o wiele więcej pracy na temat rozumienia i projektowania większych systemów oraz koncentracji przez dłuższy czas, nie mówiąc już o umiejętnościach interpersonalnych. Pytania kodowe tak naprawdę tego nie testują.
Ale pytania dotyczące kodu nie są jedynymi pytaniami, które należy zadać: możesz spojrzeć na ich pochodzenie, referencje, pracę open source (jeśli w ogóle), aby znaleźć dowody nieustannego wysiłku, kreatywności i umiejętności interpersonalnych.
Umiejętność rozwiązywania małych problemów algorytmicznych i sprowadzania ich do kodu jest koniecznym, ale niewystarczającym warunkiem: jeśli nie możesz rozwiązać małych problemów i nie umiesz pisać nietrywialnych kodów, to całe myślenie wielkoformatowe na świecie nie jest sprawi, że będziesz produktywnym programistą.
Każdy może to rozwiązać
Nie, najwyraźniej nie. Jak zauważa słynny post FizzBuzz , problemy, które możesz pomyśleć, są trywialną pułapką nie tylko dla nowych absolwentów, ale i osób z wieloletnim doświadczeniem w branży. Nie wiem dlaczego. Albo test kodu jest kiepską miarą (co jest możliwe, choć myślę, że to mało prawdopodobne), albo nie wnieśli dużego wkładu w projekty na ich wznowieniu, albo robili dużo, kopiując i wklejając kod algorytmiczny (co jest możliwe.)
Warto przyznać, że naprawdę można wiele zrobić bez pisania kodu algorytmicznego. Ludzie zarabiają dużo pieniędzy na aplikacjach, których wartość leży w grafice lub logice biznesowej, a nie w czymś, co można by nazwać „programowaniem”, i to jest w porządku. Ale jeśli naprawdę potrzebujesz programistów, nie jest to dobre dopasowanie.
Może nie być dobrze skalibrowany
Jeśli pojawi się pytanie, odpowiedź może wydawać się łatwa. Jeśli jednak zostaniesz zadany niespodziewanie porównywalne pytanie lub pytanie, które nie jest skierowane w stronę twoich szczególnych zainteresowań i pochodzenia, może być znacznie trudniejsze.
łagodzenie: Przeprowadź testy nad niektórymi programistami, których już znasz, i zobacz, jak to robią. Być może ktoś z twojego zespołu, o którym wiesz, że jest bardzo mądry, będzie miał problem z jednym z nich i możesz rozważyć jego zmianę. Być może wymyślą lepszą lub inną odpowiedź.
To zbyt podobne do ciekawostek
Myślę, że pytania o kod z pewnością mogą dostać się do ciekawostek, jeśli nalegasz, aby ludzie znali niejasne interfejsy API na pamięć, otrzymali doskonałą składnię lub pamiętali dokładną definicję nietrywialnego algorytmu. Wszystkie są uzasadnione, aby polegać na dokumentach, wyszukiwaniach internetowych lub błędach kompilatora, i mają niewielką korelację z prawdziwą wiedzą specjalistyczną. Nawet nie wiadomo, gdzie API może się znajdować, może być wskazówką, że dana osoba ostatnio go nie używała, ale niekoniecznie jest to problem, o ile nie kłamie.
Odpowiedź na to pytanie jest bardzo prosta: nie zadawaj trywialnych pytań i nie przejmuj się trywialnymi błędami. Przypomnij kandydatowi, jak się nazywa API lub pozwól mu to sprawdzić; naprawić błędy składniowe; nie testuj dla osób zapamiętujących definicje struktury danych.
Jak się porównujesz?
Jeśli masz dwóch kandydatów i obaj dobrze odpowiadają na pytania, jak wybierasz między nimi? Możesz wybrać tego, który skończył najszybciej, ale być może zaczynasz wybierać zające zamiast żółwi. Możesz zrobić kolejną rundę i zadawać o wiele trudniejsze pytania, ale nie jestem tego pewien. Być może po prostu dajesz im oboje A + i próbujesz wybierać między nimi na podstawie innych kryteriów (lub próbujesz znaleźć pieniądze na ich zatrudnienie).
Jedną z wad, o których mogę myśleć, jest to, że trudno jest „zakodować na głos” przed innymi ludźmi. Trudno mi nawet pisać z kimś spoglądającym przez ramię i nie jestem sam. Zauważyłem, że kiedy ktoś dzwoni do mnie na stanowisko pracy, aby coś w czymś pomóc, nagle zaczynają pisać literówki, wybierają niewłaściwe uzupełnianie kodu, a nawet popełniają oczywiste błędy - z których żaden by nie popełnił, gdybym tam nie siedział. Do diabła, widziałem, jak ludzie zaczęli używać menu do operacji wycinania i wklejania, tylko dlatego, że byli obserwowani. To nie jest normalne zachowanie, a kodery, o których mówię, są doskonałymi programistami i poza tym całkiem sprytni.
Niedawno miałem wywiad, w którym ankieter zapytał mnie, jak kodować określoną operację, a on powiedział: „Po prostu pokaż mi matematykę”. Cóż, musiałem najpierw pomyśleć o problemie, zanim dojdę do jego matematyki, więc to mnie zawaliło i ziewnęło. To, co początkowo umieściłem na białej tablicy, było krępujące i czułem, że w tym momencie przegrywam. W końcu dostałem moment A-ha i znalazłem odpowiedź (właściwie kiedy w końcu dotarło do mnie to, o co tak naprawdę prosił), ale „bałagan”, który zrobiłem przed przyjazdem, sprawił, że czułem się bardzo nieswojo. Mimo to dostałem pracę, ale gdyby ankieter był mniej cierpliwy, mógłbym nie mieć.
Myślę, że jeśli powierzysz rozmówcom zadanie kodowania, daj im trochę czasu na samodzielne wypracowanie ich na komputerze, być może nawet w IDE, które znają. Pozwól im napisać kod dla ciebie, a następnie o tym porozmawiać. Zapytaj ich, dlaczego zrobili coś w określony sposób i czy inny sposób może nie być lepszy. Dowiesz się więcej z tego rodzaju procesu, niż prosząc ich, aby sikał (mówiąc w przenośni) do sikania do filiżanki tuż przed sobą.
Minusy: brak. Za każdym razem, gdy spędzisz konfigurację komputera, zaprojektowanie testu kodu i przejrzenie go, zaoszczędzisz niewyobrażalny ból głowy w przyszłości.
Plusy: „Ufaj, ale weryfikuj” - Ronald Regan. Tak wiele razy widziałem i słyszałem o ludziach, którzy w końcu wypuścili się ze stanowiska, w którym w wywiadzie wydawało się, że dostajesz gwiazdę rocka. Dowód jest w budyniu; Chcę zobaczyć, co mogą zrobić. Przedstawi to, co się stanie, gdy zainwestujesz czas i pieniądze w zatrudnienie kogoś i naklejesz przed nim nowy projekt.
Cons:
Plusy:
Kiedy przeprowadziłem wywiad na temat mojej obecnej pracy, osoba rekrutująca dostała listę pytań do napisania kodu. Byłem pod wielkim wrażeniem, ponieważ pytania zostały oczywiście napisane przez kogoś, kto miał głęboką znajomość SQL, więc działa to w obie strony.
Ty naprawdę chcesz mieć kod osoba pisać w wywiadzie - nawet lepiej, aby je do programu pary z członkiem w zespole do kwoty X czasu (co można wygodnie sobie pozwolić w czasie / siły roboczej).
Jest to właściwie jeden z niewielu sposobów, w jaki możesz stwierdzić, czy dana osoba może kodować, czy nie.
Nieco wolę programowanie w parze, ponieważ pokaże pracę ich zespołu, daje im prawdziwe IDE do pracy i pozwala im pracować nad „prawdziwym” problemem (inna osoba w parze może poprowadzić ich przez wszelkie specyfiki środowiskowe, z którymi rozmawia rozmówca nigdy nie mogłem rozsądnie wiedzieć).
Zaczęliśmy stosować tę politykę zatrudniania i jesteśmy bardzo zadowoleni z wyników.
Oceniasz ptaka po piórach, a programistę po jego / jej kodzie.
Kiedy zaczynałem od obecnej firmy, dla której pracuję, poprosili mnie o napisanie kodu C, który generuje lub sprawdza bit parzystości jakiegoś wejścia binarnego (w zależności od tego, czy kodujesz, czy dekodujesz). To było pytanie do wywiadu właśnie dlatego, że tego rodzaju problemy są rozwiązywane podczas pracy. Oczywiście nie myślę o sprawdzaniu parzystości, ale raczej o pracy na niskim poziomie.
Wszystkie dotychczasowe odpowiedzi (które przeczytałem) nie dotyczyły faktu, że Test Joela NIE jest (tylko) listą najlepszych praktyk dla przedsiębiorców, ale listą kontrolną ułatwiającą ocenę potencjalnego pracodawcy .
Chodzi o to, że ... jeśli dokładnie przetestują swoje kandydatki, prawdopodobnie zatrudnią ludzi, którzy znają się na swoich rzeczach ... to znaczy dla ciebie
zamiast naprawiać błędy po nich ...
Powiedziałbym:
Plusy
Cons
Reverse
metoda lub podobne, lub w przypadku testów pisemnych rzeczy takie jak„ Jakie są argumenty Foo
metody metody Bar
”, gdy dowolny idiota mógłby Google to wykorzystać lub skorzystać z dokumentacji) w przeciwieństwie do pytań architektonicznych / projektowych, które pokazują kandydat może załatwić sprawy i rozwiązać problemy biznesowe .Jednym z pro jest to, że pokazuje, że ktoś ma podstawową wiedzę na temat programowania lub cokolwiek innego (kiedy ostatni raz się z tym spotkałem, byłem zaskoczony, jak podstawowe było pytanie SQL). Może również służyć jako podstawa do dyskusji technicznej, pytając, dlaczego kandydat zrobił to i to, i jak można to poprawić.
Rozmowa wymaga czasu, który można wykorzystać do innych celów. Co więcej, pisanie kodu na tablicy nie jest środowiskiem naturalnym, a niektóre osoby będą miały z tym coraz mniej poważnych problemów. Może to spowodować, że przegapisz programistę, który denerwuje się bez zwykłych narzędzi lub referencji.
Programowanie jest wysoce techniczną umiejętnością z szeregiem wyraźnych „rezultatów”. Kandydat może lub nie może ich dostarczyć. Więc nie ma „wad” zadawania pytań technicznych. Jest to całkowicie po to, by powiedzieć „pokaż mi kod dla tej aplikacji” lub „pokaż mi kod aplikacji, którą JUŻ JUŻ napisałeś”.
NIEprzestrzeganie tego może prowadzić do następujących rezultatów: Bogaty człowiek przeprowadził wywiad z nauczycielem, aby nauczyć swoje dzieci gry w szachy (jako ćwiczenie poszerzające umysł). Nauczyciel otworzył szachownicę i zaczął mówić o 64 kwadratach, ale nie dotknął kawałka szachowego. W każdym razie ojciec zmuszony do czasu wynajął korepetytora. Nauczyciel nauczył dzieci grać w warcaby.