Czy powinienem udzielić odpowiedzi na nieudane ćwiczenie kodowania wywiadu? [Zamknięte]


14

Mieliśmy kandydata do rozmowy kwalifikacyjnej na wyższym poziomie, który nie dopracował niuansu pytania 1 2 FizzBuzz .
Chodzi mi o to, że całkowicie, całkowicie, nie udało się zadać pytania - nawet nie blisko. Uczyłem go
nawet myślenia o używaniu pętli i to naprawdę warto było rozważyć jako specjalne przypadki.35

Rozwalił to.

Na potrzeby kontroli jakości zadałem dokładnie to samo pytanie trzem członkom drużyny; dał im 5 minut; a potem wrócił, aby zebrać swój pseudo-kod. Wszyscy przybili go i nie widzieli wcześniej pytania. Dwóch zapytało, jaka była sztuczka ...

Na innym ćwiczeniu z logiki kandydat wykazał się zrozumieniem niektórych funkcji dostępnych w języku, który wybrał (C #). Więc to nie tak, że nigdy nie napisał linii kodu. Ale jego logika wciąż była nieprzyjemna.

Moje pytanie brzmi, czy powinienem był udzielić mu odpowiedzi na pytania logiczne.

Wiedział, że je wysadził, i potwierdził to później w wywiadzie.
Z drugiej strony nigdy nie prosił o odpowiedź ani o to, czego się spodziewałem.

Wiem, że ćwiczenia kodujące mogą służyć do ustawiania kandydatów do porażki (ponownie, patrz drugi link z góry). Naprawdę starałem się pomóc mu odpowiedzieć na sedno pytania. Ale to był kandydat na wyższym szczeblu, a Fizz-Buzz, szczerze mówiąc, jest absurdalnie łatwy, nawet po uwzględnieniu drżenia podczas rozmowy kwalifikacyjnej.

Czułem, że powinienem był pokazać mu sposób rozwiązania problemu, aby mógł przynajmniej uczyć się z tego doświadczenia. Ale znowu nie zapytał.

Jaki jest właściwy sposób poradzenia sobie z tą sytuacją?


1 Dobra, to nie jest link do rzeczywistego pytania o FizzBuzz, ale jest to dobra dyskusja na temat P.SE wokół FizzBuzz i linki do różnych jego aspektów.

2 Aby wyjaśnić, oto niuans Fizz-Buzz, o który prosiłem, i to z pierwszego problemu Project Euler . Druk zastępczy Fizz | Buzz do sumowania liczb i masz to samo podstawowe pytanie.
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Write a function that finds the sum of all the multiples of 3 or 5 below 1000.

3 To pytanie przyciągnęło więcej uwagi niż się spodziewałem i doceniam wszystkie odpowiedzi. Niektóre z późniejszych odpowiedzi naprawdę dotarły do ​​sedna mojego pytania, więc pozwolę społeczności przejrzeć głosowanie i głosować przed przypisaniem odpowiedzi „na”.

4 Wybrałem odpowiedź „na” na podstawie głosów społeczności w danym momencie. I myślę, że odpowiedź Yannisa jest odpowiednia w przypadku wywiadów z nowymi twórcami. Myślę, że zbiorowa reakcja skupiająca się na braku pytania o odpowiedź również jest natychmiastowa.


34
Uwolnij ich i zacznij dzień. Jeśli chodzi o mnie, porażka FizzBuzz na „wyższym poziomie” celowo i złośliwie marnuje mój czas.
Steven Evers

6
Niedawno przeprowadziłem wywiad na kilka stanowisk w mojej okolicy, a te, które wymagały kodu, wskazały mi, że mają problemy ze znalezieniem kandydatów na wyższe stanowiska, którzy mogliby zdać własne testy „FizzBuzz”. W każdym przypadku moją reakcją było „nie możesz być poważny”. Najwyraźniej jest wielu okropnych programistów udających starszych, którzy nawet nie są blisko.
Joel Etherton

6
@JeelEtherton - Ta sama rzecz tutaj. Wszędzie chodzę na ekrany telefonów. Jeśli ubiegasz się o stanowisko Seniora przy użyciu C # i nie możesz powiedzieć nam różnicy między typem wartości a typem odniesienia, nie otrzymujesz wywiadu.
Telastyn

3
@ 0A0D, prowadzenie zespołu to inny rodzaj umiejętności niż bycie dobrym programistą. Widziałem kierowników zespołów, którzy również byli złymi programistami.
Kyralessa

4
@JeelEtherton, nie bądź zaskoczony. Myślałem, że „199 na 200 kandydatów nie potrafi kodować” było zwykłą hiperbolą, dopóki nie zacząłem pomagać w sprawdzaniu kandydatów i przeprowadzaniu z nimi wywiadów. Lata (rzekomego) doświadczenia po prostu nie mają znaczenia. Nazwy stanowisk nie mają znaczenia. Większość kandydatów rzeczywiście jest niewiarygodnie młodsza, niezależnie od tego, czy o tym wie, czy nie.
Anthony Pegram

Odpowiedzi:


15

Większość moich wywiadów odbyła się ze studentami szukającymi stażu i najczęściej spieprzyli proste (?) Ćwiczenia. Chciałem w łatwy i przyjazny sposób zakomunikować ich błędy, a to, co wymyśliłem, było dość proste: sam rozwiązałem ćwiczenia i pokazałem im moje rozwiązania po ich zakończeniu.

Przeprowadziłem sporo niezwykle interesujących i odkrywczych dyskusji z kandydatami, które rozpoczęły się od porównania naszych różnych podejść do rozwiązania tego samego problemu. Po pewnym czasie nawet przewidziałem niektóre błędy, po prostu sprawdzając, do której szkoły uczęszcza kandydat (niektórzy „profesorowie” to… kretyni). I, cóż, w kilku przypadkach, w których kandydat nie mógł znaleźć żadnego rozwiązania, dałem je już następnym razem.


Ma sens; Ostatnio szukałem nowej pracy i odkryłem, że większość ankieterów zrobiła to samo, gdy udzieliłem złych odpowiedzi (lub nieco „nie na temat”) na ich pytania. To naprawdę dobra praktyka. Głównie dlatego, że otwiera kandydata (np. Mnie) i sprawia, że ​​sam wywiad jest bardziej angażujący z obu stron. Ale oczywiście omawialiśmy szablony, RAII i wielowątkowość w C ++. Pytanie brzmi: co powiesz osobie, która nie potrafi rozwiązać fizzbuzz?
Chani

11
@RitwikG Szczerze mówiąc, jeśli kandydat przeprowadza rozmowę kwalifikacyjną na stanowisko programistyczne i nie może poradzić sobie z fizzbuzzem, prawdopodobnie… śmiałbym się (hej, nigdy nie powiedziałem, że jestem dobrym ankieterem;). To powiedziawszy, kilka miesięcy temu straciłem kilka dni, walcząc z tym, co w moim kodzie było bardzo trywialną OBOE . Wszyscy mamy wolne chwile i tak naprawdę nie skupiłbym się na tym, że kandydat zepsuje jedno ćwiczenie, prawdopodobnie szybko przejdę do następnego. Jeśli nie zdołają również następnego, prawdopodobnie podziękowałbym im za poświęcony czas i ruszyłem dalej.
yannis

1
@YannisRizos To prawdopodobnie dobre podejście; zawsze istnieje szansa, że ​​dana osoba nie radzi sobie dobrze w rozmowach kwalifikacyjnych lub w jakiś sposób uniknęła operacji modulo w swojej pracy (chociaż, co najmniej nie wróży to dobrze). Z mojego doświadczenia wynika, że ​​znaczna liczba kandydatów jest zaskoczona, gdy poproszona jest o napisanie dowolnej prostej pętli (w dowolnym wybranym języku), nawet na wyższych stanowiskach. Teraz , że uważam, że całkowicie niemożliwe do uzasadnienia.
Daniel B

To także dobry wgląd w proces. Kandydat był, co zrozumiałe, zdenerwowany, a ja byłem bardziej niż chętny, aby dać na to trochę tolerancji. Kiedy w końcu zaczął rozmawiać o swojej próbie rozwiązania, było to po prostu zawiłe i stworzyło warunki graniczne, za którymi tęsknił.

15

Udzielenie odpowiedzi

Chciałem powiedzieć, że jeśli kandydat nie jest wystarczająco zainteresowany, by zapytać, nie marnowałbym oddechu, ale odpowiedź na @Yannis_Rizos jest znacznie lepsza.

Wywiady przebiegają dość szybko. Wiem, że często szukam rzeczy przez kilka dni po wywiadzie.

Ludzie, którzy nie mogą kodować FizzBuzz Classic

Wyobrażam sobie, że dużym problemem jest świadomość operatora%. (myInt / 3) == (myDouble / 3.0)Miałbyś nadzieję, że ktoś może pomyśleć o porównaniu, ale może ze stresem podczas wywiadu ... Mimo to FizzBuzz Classic wymusza podejście brutalnej siły, zaliczając go do kategorii najłatwiejszych problemów algorytmowych do rozwiązania. Jako wskazówkę, czy próbowałeś poprosić ludzi, aby po prostu zakodowali „Fizz” o połowę kredytu, a może dodali później „Buzz” jako ulepszenie?

Myślę, że ostateczną odpowiedzią na twoje pytanie jest to, że naprawdę trudno jest znaleźć dobrych kandydatów.

Ogólne pytania do wywiadu

Często łatwiej i wydajniej było prosić kandydatów o opisanie ostatniego projektu programistycznego, który ich ekscytował. Odniosłem 100% sukcesu w tym pytaniu, co oznacza, że ​​ludzie, którzy z ożywieniem mówili o projekcie programistycznym i mogli odpowiedzieć na pytania techniczne, byli świetnymi pracownikami, a ci, którzy nie mogli, nie byli. Ma to miłe skutki uboczne: uspokaja kandydata i zachęca do otwartej dyskusji. Dzięki temu pytaniu kandydat powie ci, do czego jest najbardziej odpowiedni.

Być może przy algorytmie think tank są również konieczne pytania, ale porzuciłem je na rzecz pytania „ulubionego projektu”.

Suma (syn) FizzBuzz

Twoje pytanie do rozmowy kwalifikacyjnej nie jest równoważne z FizzBuzz:

Jeśli podamy wszystkie liczby naturalne poniżej 10, które są wielokrotnościami 3 lub 5, otrzymamy 3, 5, 6 i 9. Suma tych wielokrotności wynosi 23. Napisz funkcję, która znajdzie sumę wszystkich wielokrotności 3 lub 5 poniżej 1000.

Tam, gdzie FizzBuzz Classic zmusza cię do przejścia przez iteracje n (aby wydrukować każdą liczbę lub Fizz / Buzz), twój problem może być rozwiązany w iteracjach n / 5 + n / 3 + n / 15 lub nawet bez iteracji - bezpośrednie naprawione- obliczanie punktów jest możliwe. Poniższy program porównuje te trzy metody:

public static void main(String[] args) {
  long n = Long.valueOf(args[0]).longValue();
  long sum = 0;
  long ms = System.currentTimeMillis();
  // Brute force method  Performance: cn
  for (long i = 1; i <= n; i++) {
    if ((i % 3) == 0) { sum += i;
    } else if ((i % 5) == 0) { sum += i; }
  }
  System.out.print("Brute force sum:    " + sum);
  System.out.println(" time: " + (System.currentTimeMillis() - ms));
  ms = System.currentTimeMillis();

  // Second solution: iterate through only numbers we are
  // interested in.  Performance: c * (n/3 + n/5 + n/15)
  // We counted multiples of 15 twice, so subtract one of them
  sum = countSum(n, 3) + countSum(n, 5) - countSum(n, 15);
  System.out.print("Only multiples sum: " + sum);
  System.out.println(" time: " + (System.currentTimeMillis() - ms));
  ms = System.currentTimeMillis();

  // Third solution: Use high school algebra.  Performance: c
  sum = sumSeries(n, 3) + sumSeries(n, 5) - sumSeries(n, 15);
  System.out.print("Sum of series:      " + sum);
  System.out.println(" time: " + (System.currentTimeMillis() - ms));
}

// Iteravely sum all multiples of skip
private static long countSum(long n, long skip) {
  long skipTotal = skip;
  long grandTotal = 0;
  while (skipTotal <= n) {
    grandTotal += skipTotal; skipTotal += skip;
  }
  return grandTotal;
}

// Thanks to @Caleb for pointing this out!  High school algebra
// tells us that the sum of a series is: (n * (a1 + an)) / 2
// where a1 is the first term and an is the nth term.  E.g. The
// sum of a series of 3 is: (n/3 * (3 + n - (n % 3))) / 2
// Since we are thinking about performance here, we'll shift
// right one instead of dividing by 2 for style points.  ;-D
private static long sumSeries(long n, long skip) {
  return (n/skip * (skip + n - (n % skip))) >> 1;
}

Wyjście (suma FizzBuzz <1000):

$JDK_HOME/bin/java FizzBuzzNot 999
Brute force sum:    233168 time: 0
Only multiples sum: 233168 time: 0
Sum of series:      233168 time: 0

Przy większym n dla porównania wydajności:

$JDK_HOME/bin/java FizzBuzzNot 1000000000
Brute force sum:    233333334166666668 time: 4744
Only multiples sum: 233333334166666668 time: 818
Sum of series:      233333334166666668 time: 0

Uwaga dla tych, którzy odrzucili to jako nie na temat

Celem przedstawienia rozwiązania tego pytania jest pokazanie, że chociaż rozwiązanie Brute Force w Sum of FizzBuzz jest podobne do FizzBuzz Classic, dostępne są lepsze rozwiązania problemu Sum, co czyni go zasadniczo innym problemem. Suma FizzBuzz jest wyjątkowo trudna, jeśli nie pamiętasz odpowiedniej formuły dla sumy serii lub nie zdajesz sobie sprawy, że ma ona zastosowanie przy zwiększaniu o 3 lub 5.

Jeśli wyprowadzisz wzór na sumę szeregu, dzieląc serię na pół, odwracając jedną połowę i łącząc je w pary, otrzymujesz (n + 1) (n / 2), co może poprowadzić cię naprawdę brudną ścieżką w odniesieniu do podziału na liczby całkowite i obciętych reszt. Wersja (n (a1 + an)) / 2 tej formuły jest absolutnie krytyczna dla prostej odpowiedzi dla wszystkich wartości n.


3
Można to obliczyć bezpośrednio (Ruby): t = { |i| (i * (i+1)) / 2 }; fizzbuzz = { |n| 3 * t((n-1)/3) + 5 * t((n-1)/5) }
Kevin Cline


1
@ GlenH7 Tak, usunąłem mój komentarz, ponieważ był to buzzkill. Glen zasługuje na rekwizyty do swojej analizy, nawet jeśli nie odpowiada na WSZYSTKIE: D (Poza tym całkowicie kodowałem i próbowałem własne rozwiązanie chwilę temu)
Andres F.,

2
Szukasz sumy szeregu, biorąc pod uwagę, że ta seria ma modulo = 0, można zastosować wzór n / 2 * (m + nm). Gdzie m = liczba modulo in = liczba elementów w szeregu (aka floor (x / m). Następnie jest to łatwe, S (3) + S (5) - S (3 * 5) [tak, że niektóre liczby nie liczą się dwa razy]
jmoreno

3
Jednym z powodów, dla których możesz mieć problem, jest to, że liczysz niektóre liczby dwa razy (te podzielne przez 15). Przykład programu znajduje się na ideone.com/clone/oNWrhJ
jmoreno,

8

Czułem, że powinienem był pokazać mu sposób rozwiązania problemu, aby mógł przynajmniej uczyć się z tego doświadczenia. Ale znowu nie zapytał. Jaki jest właściwy sposób poradzenia sobie z tą sytuacją?

Nie obchodzi mnie, na jakim poziomie jest wywiad, ani nawet jeśli jest to pytanie na poziomie „FizzBuzz” lub pytanie zaawansowane. Jeśli poprosisz kandydata o rozwiązanie pytania, a on nie może, ale nawet nie zadaje sobie trudu, by poprosić cię o właściwą odpowiedź, to nie są warte twojego czasu. Jak, u licha, mogłeś być tak leniwy intelektualnie?!?

I nawet jeśli całkowicie śmierdzisz jako programista i po prostu próbujesz polubić swoją drogę do pracy, dlaczego nie miałbyś być tak pragmatyczny, aby uzyskać właściwą odpowiedź teraz, abyś wiedział o tym podczas następnej rozmowy?

Więc nie, nie powinieneś „dawać” odpowiedzi, ale powinieneś spodziewać się, że kandydat nalega na usłyszenie właściwej odpowiedzi, gdy się nie powiedzie. Jeśli nie, to w mojej książce jest ogromna czerwona flaga.

Jeśli ktoś wysadził FizzBuzz w wywiadzie dla deweloperów na poziomie młodszym, ponieważ nie pamiętał operatora modułu i po prostu nie mógł zmusić się, aby przejść dalej bez niego, ale wtedy wszyscy pasjonowali się ponownym wykonaniem go, gdy wyjaśnisz właściwą odpowiedź, lub przynajmniej rozmawiamy z tobą odpowiedni kod, to prawie tak dobrze, jak poprawnie go odpowiedzieć.


1
Dlaczego? Możesz po prostu Google odpowiedzieć później. FizzBuzz jest dość popularny. Byłbym szczerze zaniepokojony, jeśli ktoś nie zna podziału modułu.
Brian

Uznałbym go za próbę wymyślenia czegoś zamiast operatora modułu, ale nawet do tego nie doszedł. Myślę, że masz rację, koncentrując się na tym, że nie poprosił o odpowiedź. Twoja obserwacja jest zgodna z niektórymi innymi wyzwaniami, które pojawiły się podczas wywiadu.

Jestem naprawdę wypowiadany o FizzBuzz ... ale to jest prawidłowa odpowiedź. Jeśli kandydat nie poprosi o odpowiedź, nie udzielaj jej.
James P. Wright,

@ JamesP.Wright - w pewnym stopniu się zgadzam, a wchodząc do wywiadu, byłem trochę zawstydzony, aby użyć tego jako głównego pytania kodującego. To miało być absurdalnie łatwe, a nawet poprzedziłem je ostrzeżeniem, aby nie przesadzić z pytaniem. Miałem kontynuację, która również miała być łatwa, a potem miałem trzecią, która pozwoli mu wykazać umiejętności rozwoju / projektowania na wyższym poziomie. Nigdy nie dotarliśmy do trzeciego pytania ....

1
@ 0A0D „matematyka” związana z FizzBuzz sprawdza po prostu, czy daną zmienną można podzielić przez 3 i / lub 5. Ten poziom matematyki jest obecny w praktycznie każdej pisanej aplikacji. Nawet „deweloperzy biznesu” tacy jak ja, którzy ciągle wdrażają ten sam rodzaj projektów, korzystają z tego poziomu matematyki. GlenH7, nie jestem nawet pewien, czy użycie rekurencji w FizzBuzz wywarłoby na mnie wrażenie lub odstraszyło .... Z pewnością wydaje się to niebezpieczne.
Graham

4

Pisałem fizzbuzz podczas rozmowy telefonicznej z ankieterem podczas wstępnego ekranu. Jest to coś, o czym nawet jeśli nikt nie słyszał, powinieneś być w stanie połączyć się po semestrze oczywiście pracy, ale zdecydowanie po uzyskaniu statusu „seniora”.

Naprawdę nie ma powrotu do zdrowia po tym, że nie jest w stanie tego zrobić. To jedna z tych niedogodności, które na wszelki wypadek musisz usunąć.

Powiedziałbym, że sensowne jest dostarczanie go jako wstępnego ekranu, abyś nie marnował czasu na przyprowadzanie go na rozmowę.


Na potrzeby naszego wstępnego ekranu poprosiliśmy o dostarczenie przykładowego kodu. Ten kod miał pewne pośrednie lub zaawansowane funkcje języka C #, więc naprawdę spodziewałem się, że przejrzy logiczne pytania w ciągu minuty lub dwóch.

7
Gdy podany przykładowy kod nie pasuje do zademonstrowanej wiedzy w wywiadzie, mój mózg natychmiast zaczyna podejrzewać przykładowy kod.
Graham

@Graham: Zatrudnij go jako pracownika tymczasowego na 6 miesięcy ..
Brian

@ 0A0D Niestety, nigdy nie pracowałem w miejscu, które zapewnia taką elastyczność. Jeśli reklamowana pozycja była koncertem w pełnym wymiarze godzin, to WSZYSTKO, co moglibyśmy zaoferować tej osobie.
Graham

3
W tym scenariuszu nie ma ogrodzenia. Jeśli jego „przykładowy kod” wykazuje dobrą znajomość i nie potrafi zakodować fizzbuzz, wyciągnij próbkę i zapytaj go o szczegóły. Jeśli nie będzie mógł wykonać kopii zapasowej, nadszedł czas na moją ulubioną linijkę „wciąż mamy kandydatów do przejrzenia, skontaktujemy się z Tobą”.
Michael Brown

4

Uczyłem go nawet myślenia o używaniu pętli i że 3 i 5 naprawdę były warte rozważenia jako przypadki szczególne.

Interesujące byłoby wiedzieć, jak myślisz , jaka jest „poprawna” odpowiedź na twoje pytanie dotyczące FizzBuzz. Z miejsca, w którym siedzę, dobrym (w C) napisanym do listu twojego pytania jest:

int f(void) {
    // sum the multiples of 3 and of 5 and subtract multiples of 15 so we don't count them twice
    return ((1000/3)/2)*(999+3) + ((1000/5)/2)*(995+5) - ((1000/15)/2)*(990+15);
}

Lepszym może być:

Dlaczego, do cholery, napisałbyś program, aby to zrobić, skoro możesz go bezpośrednio obliczyć?

Chodzi o to, że istnieje więcej niż jeden sposób na skórowanie kota, a fakt, że dany kandydat nie od razu zaczął pisać forpętle i modoperatory, nie oznacza, że ​​jest głupi. Jeśli chcesz wiedzieć, co wie kandydat, przedyskutuj problem - dowiedz się, co myśli. Jeśli utknął lub jest zdezorientowany, dowiedz się, gdzie i dlaczego. Może doprowadzić cię do podejścia, którego nigdy nie rozważałeś.

Moje pytanie brzmi, czy powinienem był udzielić mu odpowiedzi na pytania logiczne.

Jako ankieter nie jest twoim miejscem, aby uczyć kandydata lekcji . Jeśli naprawdę nie wiedzą, jak napisać kod, absolutnie nie ma potrzeby ich zawstydzać, zastanawiając się nad tym, jak wiele nie wiedzą. Jeśli są wystarczająco zainteresowani, aby zapytać, to z całą pewnością zachęcamy do podzielenia się. W przeciwnym razie zakończ rozmowę, podziękuj im za poświęcony czas i przejdź do następnego kandydata.


+1 za solidną odpowiedź w ostatnim akapicie. I podnosi pan rację, że powinienem był powiedzieć „odpowiedź” zamiast „odpowiedź”. Istnieje kilka sposobów rozwiązania tego konkretnego. Jeśli chodzi o discuss the problemten element, pojawiły się inne pytania podczas wywiadu. Niestety kandydat był ... mniej niż najbliższy w udzieleniu odpowiedzi. Nie dodałem tego aspektu do pierwotnego pytania, ponieważ naprawdę starałem się przestrzegać wytycznych P.SE dotyczących „dobrego subiektywnego”.

1
„to nie jest twoje miejsce, aby uczyć kandydata lekcji” - nie zgadzam się. Dobry programista zawsze się uczy. Jeśli odpowiedzą na twoją lekcję, zachowując wdzięczność za naukę nowych rzeczy, oznacza to, że są dobrym programistą. Jeśli wzruszą twoją lekcję, najprawdopodobniej są gównianym programistą.
nbv4

Gdybym był twoim rozmówcą, a ty dałeś mi taką odpowiedź, skierowałbym cię do okręgu szkolnego, który potrzebuje nauczycieli algebry. FizzBuzz polega na wykazaniu się podstawową wiedzą na temat programowania, aby osoba przeprowadzająca wywiad mogła przejść do pytań, które odróżnią cię od innych zasadniczo przyzwoitych programistów. Twoje odpowiedzi są sprytne, ale nie dowiadują się, że rozumiesz zapętlanie, arytmetykę modułową itp., Pozostawiając wywiad, aby przejść do przodu pod warunkiem, że ludzie znający algebrę znają również programowanie (źle), lub po prostu uścisnąć dłoń i przejść dalej (bardziej prawdopodobne).
user1172763,

@ user1172763 Właśnie o to chodzi - w przeciwieństwie do FizzBuzz, na pytanie wywiadu OP można odpowiedzieć jednym obliczeniem. Dlatego złym wyborem jest sprawdzenie, czy kandydat może napisać pętlę. Nie można oczekiwać, że kandydat wybierze wolniejsze, o wiele bardziej szczegółowe rozwiązanie, zakładając, że zadajesz pytanie z konkretnego (i nieokreślonego) powodu. Rzeczywiście, osoba przeprowadzająca wywiad może łatwo zadać „podstępne” pytanie, czy kandydat zauważy, że zapętlenie jest całkowicie niepotrzebne. Czytanie w myślach nie jest obowiązkiem kandydata.
Caleb,

2

Twoim „problemem” jest to, że jesteś człowiekiem empatycznym, więc trudno jest obserwować, jak ktoś zmaga się z problemem, na który znasz odpowiedź (jest to również problem, jeśli prowadzisz badania użyteczności). Z punktu widzenia obowiązków ankietera nie jesteś w żaden sposób zobowiązany do nauczenia rozmówcy, jak programować lub rozwiązywać problemy, ani rozwiązywania zadawanych problemów.

Kiedy trenujesz rozmówcę, nie jest tak, że może on uzyskać właściwą odpowiedź. Dzięki temu możesz zobaczyć, czy naprawdę nie są w stanie rozwiązać problemu, czy po prostu zawiesili się na jednym lub dwóch błędach lub nieporozumieniach.

Więc jeśli chcesz dać rozmówcy rozwiązanie po fakcie, robisz to wyłącznie dla siebie. Zasadniczo wolałbym wykorzystać ten czas, aby rozmówca mógł spróbować rozwiązać inny problem. Ale „starszy” programista, który nie może odpowiedzieć na FizzBuzz, prawdopodobnie nie znajduje się na liście. Jeśli zdecydujesz się podać rozwiązania, upewnij się, że nie oszukujesz się, że rozmowa poszła lepiej niż w rzeczywistości (jeśli uważasz, że myślisz: „nie mógł rozwiązać problemu, ale kiedy go wyjaśniłem, zrozumiał go dobrze”, to jesteś na niebezpiecznej ścieżce).

I tak, byłem przesłuchiwany, który był nad głową i nie mógł nawet podjąć pierwszej próby rozwiązania problemu podczas rozmowy kwalifikacyjnej. Oznaczało to po prostu, że musiałem nauczyć się znacznie więcej, aby móc podjąć pracę w tej dziedzinie.


2

Uzyskanie właściwej odpowiedzi nie jest ważną częścią tego testu. To, co mierzysz, to czyjeś podejście do rozwiązywania problemów, jak angażują się w pytanie, cokolwiek kreatywnego lub interesującego, co wymyślili po drodze; tego rodzaju rzeczy. Nawet jeśli otrzymają złą odpowiedź, nadal mogą być wykonalni na podstawie tych kryteriów.

OK, nie wiedząc, że operator modów jest niewybaczalny, a według danych, które podałem temu kandydatowi, nadal wydaje się być odpis, ale nie sądzę, że podanie właściwej odpowiedzi temu kandydatowi będzie miało jakiekolwiek znaczenie zasiłek.

To sprowadza się do twojej osobistej opinii z tego miejsca. Czy chcesz przekazać informacje zwrotne na rozmowie kwalifikacyjnej, aby pomóc kandydatowi lepiej radzić sobie w przyszłych rozmowach kwalifikacyjnych (i aby przyszli ankieterzy nie musieli cierpieć z powodu tego, co właśnie przeszliście)? Jeśli tak, zapoznaj się z opiniami w terminach, które właśnie nakreśliłem powyżej: powiedz im, że nie chodzi tylko o właściwą odpowiedź, ale o to, jak działają, aby uzyskać odpowiedź, jest czynnikiem krytycznym.


+1 za komentarz o how they work to arrive at the answer is a critical factor. ile się spodziewałem operator modulo być używany, to tylko dlatego, że to, jak ja byłby rozwiązany. Byłem bardzo otwarty na inne podejście, które rozwiązało problem bez tworzenia rażących błędów warunków brzegowych (zobacz moje różne komentarze na temat podejścia z rekurencją ...).

2

Czułem, że powinienem był pokazać mu sposób rozwiązania problemu, aby mógł przynajmniej uczyć się z tego doświadczenia. Ale znowu nie zapytał. Jaki jest właściwy sposób poradzenia sobie z tą sytuacją?

Z mojego punktu widzenia nie ma takiej sytuacji. Zakładając, że odrzuciłeś jego wniosek, (pozorny) brak zainteresowania kandydata nie jest czymś, o co musisz się martwić.

Rzeczywiście, nawet jeśli on nie pytać, nie zawdzięczam mu wyjaśnień. A jeśli rozmawiałeś o tym z pracownikami HR, mogą ci doradzić, że dalsze rozmowy z kandydatem są niewskazane ze względów prawnych.


Warto również zauważyć, że problem FizzBuzz ma różne „najlepsze” odpowiedzi w zależności od tego, jak go zadajesz. Jeśli poprosisz o „najprostsze” i „najbardziej wydajne” rozwiązanie, najlepsze odpowiedzi są całkowicie odmienne. Może to niesprawiedliwie zabarwić twój osąd ... jeśli nie byłeś pewien, w jaki sposób zadałeś pytanie. (Z drugiej strony dobry / doświadczony kandydat miałby zdolność przewidywania, aby wyjaśnić to przed rozpoczęciem kodowania ...)


2

Aby odpowiedzieć na twoje pytanie, nie, nie dałbym odpowiedzi. Jeśli dana osoba chce być lepszym inżynierem oprogramowania, znajdzie odpowiedź. Jeśli dasz im odpowiedź, okradniesz ich z tej okazji.

Bardziej trafne pytanie brzmi: kiedy możesz nazywać siebie starszym programistą? Różni się to w zależności od organizacji i kraju. Na przykład firma, z którą współpracowałem, uważała inżynierów oprogramowania z 5-letnim doświadczeniem jako seniorów. Nie kładziono nacisku na jakość doznania, tylko na długość.

Dopóki nie opracujemy standardu, który będzie kategoryzował wszystkich Inżynierów oprogramowania bez względu na ich język, pozostawiamy decyzję o poziomie ich umiejętności. Będziemy nadal słyszeć o „starszych inżynierach”, którzy nie zdadzą najbardziej podstawowego testu umiejętności.

Kilka tygodni temu zadano pytanie „Kiedy powinieneś nazwać siebie Starszym Deweloperem” . Napisałem również post na blogu na ten temat.


Czy uprzejmie poprawiłbyś link do swojego bloga?
André

@ Link André zaktualizowany.
Chuck Conway,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.