W ramach rozmowy kwalifikacyjnej początkowo prosimy kandydatów o zrobienie „FizzBuzz”, a obecnie odsetek kandydatów, którzy potrafią poprawnie odpowiedzieć na FizzBuzz, gwałtownie wzrósł - może to być spowodowane jego popularnością w Internecie.
Około rok temu jako drugie pytanie zaczęliśmy zadawać pytanie bardzo podobne do oryginalnego FizzBuzz. Pytanie zostało zaprojektowane tak, aby było tak proste jak oryginalny FizzBuzz, a także aby ocenić konkretną zdolność kandydata, w szczególności zdolność do porządkowania i ustalania priorytetów w sensowny i logiczny sposób zestaw „reguł biznesowych”, które zostały określone w niektórych arbitralne zamówienie. Sformułowanie pytania na początku wydaje się nieco niejednoznaczne, co może utrudnić obcokrajowcom mówiącym po angielsku, ale jeśli przemyślenie można rozwiązać poprawnie - Daje to również kandydatowi możliwość zadawania pytań w celu wyjaśnienia, co zawsze jest dobrą rzeczą .
Uważamy, że jest to bardzo ważna umiejętność jako programista, ponieważ tworzenie oprogramowania zwykle opiera się na wymaganiach funkcjonalnych, które nie są ustalane w określonej kolejności w czasie, które mogą nakładać ograniczenia i warunki na inne obszary oprogramowania bez wyraźnego wskazania i jest to zadaniem bystrego programisty jest przynajmniej zbadanie potencjalnych problemów i konfliktów związanych z wdrażaniem.
Odkryliśmy, że nieco ponad 65% kandydatów (wielkość próby 38), którzy pozytywnie przeszli FizzBuzz, całkowicie zawiodło. FizzBuzz v2.0 Normalnie ci kandydaci zostaną wykryci później, ale wydaje się, że to dobry sposób na wykrycie je wcześnie.
Moje pytanie nie dotyczy tego, czy FizzBuzz jest przestarzały, ale raczej, jakie czynniki mogą przyczynić się do tak dużej liczby kandydatów, którzy nie zdadzą pytania FizzBuzz v2.
- Czy pytanie jest zbyt dwuznaczne?
- Czy stres środowiska wywiadu zmniejsza zdolność krytycznego myślenia do tego stopnia, że nie jest w stanie wykonać tak banalnego zadania?
Pytanie:
Napisz procedurę w swoim ulubionym języku programowania, która weźmie listę ciągów jako dane wejściowe, a dla każdego ciągu na liście wykona jedną z następujących czynności:
- Drukuj tylko Fizz, jeśli ciąg zawiera literę A.
- Drukuj tylko Buzz, jeśli ciąg zawiera literę B.
- Drukuj tylko BuzzBuzz, jeśli ciąg zawiera zarówno A, jak i B
- Drukuj tylko FizzFizz, jeśli ciąg nie zawiera zarówno A, jak i B
- Drukuj tylko FizzBuzz, jeśli ciąg zawiera tylko jeden A i tylko jeden B
Niektóre typowe pytania zadawane przez kandydatów to:
- Czy wielkość liter ma być rozróżniana?
- Czy „zawiera A i B” oznacza, że A powinien pojawić się przed B.
- Co należy wydrukować, jeśli żaden z punktów nie zostanie spełniony?
- Co powinno się stać, jeśli można spełnić więcej niż jeden warunek?
Okazało się, że przeważająca większość kandydatów, którzy pomyślnie ukończyli pytanie, w ogóle nie zadawała pytań, po prostu zrobili to tak, jak FizzBuzz.
Odpowiedzi:
Może to być znacznie lepszy test niż FIZZBUZZ, ale jeśli masz jakieś pojęcie poprawnej odpowiedzi, jest to najgorszy test na świecie. Testy te mają bardzo małą wartość w wywiadach na początek.
Jeśli kandydat odpowie „Prawidłowo” bez zadawania pytania, to masz problem, że wybór kandydata wybierze niewłaściwy rodzaj programisty - Nie jest on w stanie zidentyfikować niejednoznacznych wymagań lub nie jest w stanie zrozumieć, że większość ludzi nie może napisać jednoznacznych wymagań . Nie ma znaczenia, czy program jest perfekcyjny technicznie pod każdym względem, prawdopodobnie jest typem faceta, który dostarczy oprogramowanie z „Nie obchodzi mnie, że nie to, czego chciałeś, to o co prosiłeś”.
Część testu tutaj jest priorytetem reguł. Nie określasz tego. Wpisz „ABC”, aby wydrukować Fizz, Buzz, BuzzBuzz lub FizzBuzz - każdy z nich jest poprawny
Kandydat, którego bym wziął, to ten, który miał (w większości) rację, ale zadał wiele pytań i, najlepiej, zrobił wiele „uników” na białej tablicy.
Na przykład chciałbym zbadać moje rozumienie tych wymagań, podając serię przykładowych tekstów i pytając, czego się spodziewasz i dlaczego. - Dyskusja na temat mojego przykładu „ABC” powinna prowadzić do użytecznych wskazówek dla ciebie.
Podobnie jak FIZZBUZZ, wynik tego testu jest tak dobry, jak twoje obserwacje poczynione na temat tego, jak uzyskano wynik - wynik jest nieistotny.
Ulepszę to trochę - aby uczynić to bardziej interesującym - wyjmij „jedyne”. Jest to opisane w powyższej linii („wydrukuj jedną z poniższych”) i zobacz, ile osób o to pyta. Jeśli kandydatowi brakuje „jedynego” i masz czas, wskaż go i zobacz, co się stanie. Jeśli zajmuje się „tylko”, usuń go z wymogu i poproś o zmianę kodu.
źródło
Słowo „tylko” w twoich wymaganiach stwarza sprzeczność we wszystkich pytaniach.
W związku z tym twoje pytania testowe zbierają się pod presją, czy na pewno chcesz przetestować tę kombinację umiejętności?
Jeśli chcesz przetestować zbieranie wymagań, sugeruję, aby JEDEN z pytań był niejednoznaczny. Jeśli chcesz zastąpić FizzBuzz, usuń niejednoznaczność.
Priorytetowe reguły biznesowe można wykonać tylko przy wiedzy specyficznej dla domeny - chyba że podasz jakiś prosty kontekst tego, co robisz (być może są to kupony, które można wykorzystać na różne wartości), nie ma podstaw do podjęcia przez programistę własnej decyzji.
Jednak wymaganie od kogoś, aby poprosił o wyjaśnienie, w przypadku gdy wiąże się to ze znacznym ryzykiem niepożądanego wyniku, może nie jest najlepszym sposobem oceny ich umiejętności w rozpoznawaniu granic ich wiedzy. Mogą dojść do wniosku, że bezpieczniej jest zgadywać i nie rozumieć źle, niż wskazać, że jesteś niekompetentny w pisaniu wymagań, lub jeśli żaden z ankieterów nie jest programistą, ponieważ jest źle oceniany.
źródło
Przy dwuznaczności wymagań nie można poprawnie zakończyć wersji 2.0 bez zadawania pytań.
źródło
Jeśli chcesz usunąć niejednoznaczność, możesz zmienić wymagania na:
Napisz procedurę w swoim ulubionym języku programowania, która weźmie listę ciągów jako dane wejściowe, a dla każdego ciągu na liście wykonaj następujące czynności:
źródło
Tak, pytanie jest zbyt dwuznaczne, aby na nie odpowiedzieć bez wyjaśnień. Jednak dodatkowa reguła mówiąca, że w przypadkach, gdy stosuje się wiele reguł, twój program powinien wybrać najbardziej konkretną rzecz, powinien usunąć niejasności.
Bardziej prawdopodobne jest, że kandydat „wcisnął” FizzBuzz: stres czy nie, program jest bardzo prosty.
Myślę, że zmodyfikowany FizzBuzz nie jest porównywalny z oryginalnym, ponieważ jego idealne rozwiązanie jest inne: chociaż łańcuch zachowań jest
if-then-else
akceptowalny, myślę, że rozwiązanie oparte na tabeli jest bardziej odpowiednie dla tego problemu:Rozmiar obszaru problemowego
3x3
nie jest2x2
, więc mapuje się go na stole znacznie łatwiej niż oryginalny FizzBuzz. W rzeczywistości trudniej jest mi zrozumieć oparte na tabelach rozwiązanie pierwotnego problemu FizzBuzz .źródło
Dwie rzeczy tutaj:
źródło
Widziałem procesy wywiadu, które zachęcają programistów do głośnego myślenia i zadawania pytań, aby zobaczyć ich proces myślenia. Ten proces bardziej mi się podoba.
Przeczytałem ten fizzbuzz v2.0 i zapytałem o wymagania # 3 i # 5. Nie znam innych ludzi, ale uważam, że w inżynierii nie chcę żadnych dwuznaczności, więc zadaję pytanie. Ponieważ później (zakodowane i wszystko), nie chcę się dowiedzieć, że musiałem założyć i to było złe.
źródło
Być może najłatwiejszym sposobem uniknięcia dwuznaczności jest pokazanie kilku przykładów:
„A” zwraca „Fizz” „aAbA” zwraca „Fizz” „B” zwraca „Buzz” „aBbB” zwraca „Buzz” „AB” zwraca „FizzBuzz” „ABaabb” zwraca „BuzzBuzz” „” zwraca „FizzFizz” „ab „zwraca” FizzFizz ”
źródło
Zamiast dawać kandydatowi sprzeczne / niejasne wymagania, po prostu zapytaj go, jak sobie radzą w takich sytuacjach. W przeciwnym razie wyglądasz na niekompetentnego lub gorzej, stawiając kompetentnych ludzi na zdradzieckim balansie równowagi: „jak uzyskać odpowiedzi, których potrzebuję, nie sugerując, że to pytanie lub osoba zadająca to pytanie jest głupie?”
Tak czy inaczej, to irytujące, jak wszyscy uciekają. Wywiady są dopasowanym procesem i mam na myśli dwukierunkową ulicę. Bezpośrednie pytania i jasność intencji są o wiele ważniejsze niż poddanie kandydata szybkowarowi, IMO. FizzBuzz jest dobrym przykładem pytania o kodowanie, ponieważ jest krótkie i słodkie. Nie używaj go ponownie bezpośrednio. Napisz proste pytania podobne do tego modelu.
Ale w przypadku FFS nie bądź mądry i nie kryj prawdziwego testu za kolejnym testem. Zapytaj ludzi, jak sobie radzą z tym cholernym problemem. Doświadczony programista będzie wielokrotnie stawiał czoła dwuznacznym wymaganiom i chętnie opowie o swoich strategiach. Możesz się nawet czegoś nauczyć.
I nie zakładaj, że wszyscy chcą korzystać z tablicy lub są wygodnym okresem pisma ręcznego. Niektórzy z nas piszą na maszynie odkąd skończyliśmy 12 lat (wielkie dzięki Space Quest). Nie mogę nawet myśleć prosto z długopisem lub markerem w dłoni. Jest 20-cholernie-13, co już jest z tablicami? Kiedy ludzie wręczają mi długopis i kartkę i proszą o wykonanie testu kodu, trudno jest powstrzymać śmiech.
źródło
Myślę, że to miłe pytanie podczas rozmowy kwalifikacyjnej. Wymagania są niejasne, tak jak często są w rzeczywistości. Sprawdzasz, czy kandydat jest wystarczająco inteligentny, aby zdać sobie z tego sprawę (nawet pod wpływem stresu), czy nie boi się zadawać pytań, które uznają za konieczne, i jest w stanie wprowadzić wymagania w rozsądną strukturę. I to trochę mówi o ich umiejętnościach programistycznych, chociaż powinieneś również stwarzać bardziej skomplikowane problemy zawierające rekurencję i wskaźniki, ponieważ ten problem jest zbyt łatwy.
Martwię się jednak trochę o to, że „odnoszący sukcesy” kandydaci nie zadają pytań. Spróbuję dowiedzieć się, czy zdali sobie sprawę, że w niektórych przypadkach można zastosować do 4 zasad i czy w pytaniu nie ma nic, co rozwiązałoby tę dwuznaczność, i poprosili, by wyjaśnili, jak sobie z tym poradzili. Być może twoje pytanie nie jest na tyle dwuznaczne, aby zmusić ich do zadawania pytań, a może powinieneś poprosić ich, aby zastanowili się na głos.
BTW: Wydaje mi się dziwne, że mówisz o „poprawnym rozwiązaniu”. Jeśli sformułujesz takie pytanie, uzasadnione jest wydrukowanie „Fizz”, „Buzz”, „BuzzBuzz” lub „FizzBuzz”, jeśli pojawi się „AB”. Zatem IMHO każde rozwiązanie bez zadawania pytań jest po prostu błędne.
źródło