Jeśli chodzi o pytania „testu wywiadu”, często pojawia się temat FizzBuzz. Jest też post o Coding Horror .
Teraz, jeśli niepokoisz się czytaniem stron takich jak ta, prawdopodobnie nie jesteś w grupie demograficznej programistów, którzy uważają FizzBuzz za coś trywialnego.
Ale czy to prawda, że 99% programistów będzie miało z tym problem?
Naprawdę?
Jakie są dowody na poparcie tego?
Niektóre prawdziwe przykłady byłyby bardzo pomocne w odpowiedzi na to pytanie.
Odpowiedzi:
99%? Nie. Znaczący odsetek? Tak. Z własnego bezpośredniego doświadczenia w przeprowadzaniu wywiadów z ludźmi mogę świadczyć o tym. Może ci się to wydawać nieistotne, ale jest wielu ludzi w dziedzinie programowania, którzy przez lata mniej lub bardziej sfałszowali swoją drogę i aplikują na stanowiska niepoczątkowe i nie zdają egzaminu.
Nawet jeśli MOŻESZ to łatwo rozwiązać, ale dajesz mi niezrozumiałe podejrzenie, że zostaniesz poproszony o wykonanie tak trudnego zadania, będzie się liczyć. Bycie w zespole oznacza konieczność robienia rzeczy, które mogą ci się nie podobać, ale są konieczne. Jeśli od samego początku, zanim jeszcze zaczniemy współpracować, uważasz, że najlepiej byłoby spróbować potwierdzić swój szczególny status bycia powyżej robienia czegoś, o co cię prosiłem, wtedy będzie to stanowić znak przeciwko tobie.
Nie dbam koniecznie o to, jak eleganckie jest twoje rozwiązanie (choć byłoby to miłe), ale widok, w jaki sposób dźgasz go nożem na białej tablicy i mówienie o nim, pokazuje mi, że przynajmniej jesteś skłonny do tego. . Jeśli oburzysz się i powiesz coś w stylu „Jestem rozwiązywaniem problemów, a nie małpą kodową!” wtedy powalisz kołek.
Miałem rozmówców, którzy zupełnie nie chcą nawet próbować. Po prostu odmów. Nie. Nie zrobię tego Zadaję jeszcze jedno lub dwa grzeczne pytania, dziękuję im za poświęcony czas i kończę wywiad.
Mówię to jako menedżer i programista.
źródło
Myślę, że 99% programistów, którzy ubiegają się o pracę (i nie dostają jej), mogą z tym walczyć. Ale nie 99% programistów produktywnie wykonujących pracę.
Taka jest natura naszego nowoczesnego procesu poszukiwania pracy. Wiele osób, które się ubiegają, nie jest wykwalifikowanych.
Ten post Coding Horror mówi także o tym, jak obecnie uczymy informatyki. W przeszłości (szczególnie w MIT) musieliście uczyć się takich rzeczy, jak Lisp, co praktycznie wymaga zrozumienia takich pojęć, jak rekurencja.
W dzisiejszych czasach ludzie uczą się Javy, ponieważ jest ona szeroko stosowana w przemyśle, a skupiono się na składni zamiast głębokiego myślenia programistycznego. Nie lubię Javy; w rzeczywistości uważam, że jest to idealny pierwszy język programowania. Ale nie widziałem, aby moi instruktorzy uczyli z nim zasad głębokiego programowania.
źródło
Nienawidzę tego mówić, ale
Głównym powodem, dla którego widziałem, że na pytania dotyczące programowania nie uzyskano odpowiedzi, jest wina pytającego, a nie odpowiedzi.
Pamiętam wyraźnie jeden wywiad, w którym pytano mnie, jak stworzyć określony algorytm wyszukiwania kolekcji, który działałby w stałym czasie (ta sama liczba wyszukiwań, niezależnie od liczby elementów w kolekcji). Grzebałem i grzebałem w nim przez 20 minut, zanim się poddałem. Właśnie wtedy ten geniusz przeprowadzający wywiad wykazał, że odpowiedź jest czymś, co działało w niemal stałym, ale wciąż nie stałym czasie. Trochę jak powiedzenie „Daj mi odpowiedź zero”, a następnie zaakceptowanie 0,1.
Krótko mówiąc, widziałem zbyt wiele przypadków, w których ktoś przeprowadzający wywiad zadaje pytanie, które nie spełnia następujących kryteriów:
Poważnie (1), myślę, że proszenie ludzi o pisanie kodu w ustnej części wywiadu jest głupie.
Poważnie (2), myślę, że przeprowadzanie wywiadów z ludźmi bez proszenia ich o napisanie kodu jest również głupie.
Poważnie (3), powinieneś albo dać im zadanie domowe, poprosić o przyniesienie próbek kodu lub dać laptopa i kilka pytań i ciche biuro do pracy. Potem zostaw ich w spokoju, dopóki nad nimi pracują. Zwykle wybieram to drugie podejście, ponieważ ogranicza ich zdolność do uzyskania pomocy z zewnątrz (oszukiwania) i mogę to zrobić.
źródło
int? result; for (int i = 0; i < int.MaxValue; i++) { T item = (i < array.Length) ? array[i] : someDummyItem; if (item == whatWereLookingFor) result = i; } return result;
- stały czas :)Wystarczy wyszukać w FizzBuzz. Była na nim ogromna fala postów na blogu. Ogólnie rzecz biorąc, bloger powiedział „Powiedziałem ludziom, żeby napisali to w [jakimś języku], a oto rodzaje błędów, które popełniali:”, a następnie wymienił pewne pułapki. Zabawa zaczyna się od komentarzy, w których ludzie mówią „ha! To banalne w [innym języku], wszystko co musisz napisać to:”, po którym następuje kod. Następny komentarz niezmiennie znajduje błędy w tym pierwszym. Wydaje się, że niektórzy bardzo dobrzy deweloperzy nie rozumieją tego za pierwszym razem, w żadnym języku. Niektóre z błędów:
Kiedy zatrudniam, proszę ludzi, aby napisali dla mnie kod na tablicy, nic w pobliżu nie jest tak skomplikowane (wiem, nie uważasz, że to skomplikowane), a wielu kandydatów kompletnie zawodzi. Mam na myśli pisanie w stylu vb If, Then, End If, ale także umieszczanie nawiasów klamrowych (chyba po bezpiecznej stronie) lub pisanie C # (i pytając najpierw, C #?), Ale nie mając nigdzie żadnego średnika. Nie zaczynaj mnie od błędów logicznych!
źródło
Przeczytałem artykuł o Coding Horror, o którym wspomniałeś, i sądzę, że Jeff ma rację ... ale kiedy ostatni raz został przesłuchany?
Podczas wywiadu zazwyczaj jesteś w stresie i często musisz odpowiedzieć na pytania teoretyczne (bez inteligencji, bez google, bez resharper, ... tylko twoja pamięć niepokojona stresem). To samo dotyczy testów. Stres ci nie pomaga.
Zauważyłem, że jedynym sposobem na sprawdzenie, czy ktoś jest odpowiedni na dane stanowisko, jest praca z nim przez jakiś czas ... Wystarczy wziąć 10 ostatnich osób, które zatrudniłeś na 100 (może więcej), ile to było naprawdę dobre zatrudnić???
Pracodawca powinien wynająć rozwiązanie problemu, a nie małpę kodową, która wie o modułach.
Nie można testować „przez pewien czas wszystkich kandydatów”, dlatego wymagana jest ich rozmowa kwalifikacyjna. Dlatego koncentruję swoje pytania na tym (rozwiązywaniu problemów) i sprawdzam referencje w przeszłości.
Uważam, że FizzBuzz jest niebezpieczny dla firmy, która szuka programistów, którzy mogą zastąpić swój rozwój.
źródło
Niedawno miałem za zadanie przeprowadzić wywiad z ponad 50 programistami na wyższym stanowisku, gdzie będą pracować głównie z PHP.
Rzuciłem problem fizzbuzz na egzaminie przesiewowym, głównie dla zabawy, ponieważ chciałem dziesięciu dobrych pytań i miałem tylko dziewięć. Moim celem w tym czasie było pokazanie ludziom, że możemy się dobrze bawić, nawet podczas pytań podczas rozmowy kwalifikacyjnej.
80% wnioskodawców rozwiązało problem, ale nie skorzystało z operatora modułu.
15% wnioskodawców nie mogło rozwiązać problemu.
5% wnioskodawców rozwiązało problem za pomocą operatora modułu.
Chociaż moje pobieranie próbek jest dość ograniczone (50 kandydatów z jednego kraju), mogę powiedzieć, że:
95% z nich miało BS lub więcej w programie CS (uniwersytety tutaj konkurują, starając się, aby CS brzmiał bardziej spektakularnie).
Byłem naprawdę zaskoczony. Cóż, przestraszony ... ale zdumiony. Nie sądziłem, żebym był bliski odtworzenia wyników, ponieważ problem stał się tak popularny. To pokazuje, że 5% moich kandydatów może nie być super programistami, ale przynajmniej czytają blogi związane z programowaniem.
źródło
x - (x/y)*y
?W ostatniej rundzie rekrutacji miałem 3 pracowników budowlanych z 0, powtarzam zero, wykształcenie programistyczne lub doświadczenie ubiegam się o stanowisko programisty. * Więc to jest spód beczki. Jeśli założysz normalny rozkład umiejętności, możesz zobaczyć, jak średni poziom umiejętności będzie dość niski, a nawet „powyżej średniej” (wśród kandydatów) nadal będzie stosunkowo zły.
Teraz, jeśli wygłupiasz tylko kandydatów, którzy mieli coś, co wyglądało na umiejętność programowania, przekonasz się, że masz teraz:
Ponadto niektóre pytania „fizzbuzz”, które widziałem, dotyczą konkretnej domeny. Możesz progresywnie rozwijać się za pomocą języka / frameworka x przez wiele lat (stąd z lat doświadczenia z x) i nie spotkałem się z niektórymi jego częściami (deweloperzy bibliotek nie wiedzą wiele o tworzeniu komponentów interfejsu użytkownika np.)
Podobnie, wielu programistów wykonuje obecnie prace konserwacyjne, więc ich umiejętności architektury / projektowania mogą być słabe w niektórych obszarach.
Teraz nie jestem pewien, czy 99% jest dokładne, ale IME wciąż jest dość wysoki. Co najmniej w zakresie 80%.
* Nie, nie zadzwoniliśmy ani nawet nie spojrzeliśmy na te aplikacje.
źródło
Tak naprawdę. Prawdopodobnie nie 99%, ale wciąż dość wysoki. Rozmawiałem ze studentami informatyki o stażach i zatrudnieniu w pełnym wymiarze godzin. Przeprowadziłbym wywiad z około 25 studentami na studiach. Powiedziano nam, aby nie zadawać tych samych pytań, ponieważ studenci mówili. Szybko nauczyłem się, że to nie ma znaczenia, ponieważ z 25 dostanę tylko 3 lub 4 studentów, którzy mogliby odpowiedzieć na moje pierwsze pytanie. „Napisz strcmp”
Poprosiłem ich o napisanie funkcji do porównania dwóch ciągów. Może użyć tej funkcji do sortowania słów dla słownika. Byłbyś zaskoczony liczbą uczniów, którzy nie rozumieli, jak porównać dwa słowa, nie mówiąc już o tym, jak napisać tę funkcję. I niektórzy z tych studentów twierdzili, że dostali wszystkie A w CSc.
Rzecz w tym, że programowanie jest BARDZO TRUDNE. Wiele osób lubi myśleć, że umie programować, ale nie wie.
źródło
Kilka myśli:
Nie przeciwstawiłbym się komuś, gdyby jego program zawierał pewne błędy, ale najwyraźniej mieli dobry pomysł. Debugowanie jest częścią programowania.
Myślę, że to smutne, że tak wielu ludzi stara się o pracę, o której nie wiedzą, że nie mogą. Wydaje mi się, że to problem z gospodarką.
Naprawdę łatwo jest zadawać ludziom złe pytania, gdzie jedyną „poprawną” odpowiedzią jest ta, którą udzieliłby ankieter.
źródło
Ten test bardzo ładnie obejmuje kilka rzeczy, które chciałbym wiedzieć o programatorze, którego mógłbym zatrudnić:
Aby rozwinąć kwestię ostatniego punktu, istnieje niezliczona ilość rozwiązań w zakresie gazowania. Czy zależy Ci na czytelności? Prędkość? Zwięzłość? Czy starasz się szybko pisać program? To, jak programista atakuje ten prosty problem, jest bardzo wymowne. Jeśli programista nie może wybrać rozwiązania i przeprowadzić go do końca, co to mówi o tym, jak ta osoba wykona prawdziwe zadanie?
źródło
Niestety wielu osobom z imponująco wyglądającymi CV brakuje podstawowych umiejętności programistycznych. Widziałem wiele przypadków, w których osoby, które wymieniają C i C ++ w swoich życiorysach, nie mogły odpowiedzieć na podstawowe pytania dotyczące wskaźników.
źródło
Są dwa rodzaje ludzi, których mam nadzieję, że FizzBuzz pomoże mi tego uniknąć.
W obu przypadkach tak naprawdę nie dbam o idealną implementację. Test, który musisz wykonać u osób ubiegających się o pracę programisty, polega na tym, że mogą w ogóle programować.
To powiedziawszy, prawdopodobnie nie zawracałbym sobie głowy tym konkretnym testem z kilku powodów. Po pierwsze, jest bardzo dobrze znany i każda z powyższych grup szybko by go wypróbowała. Po drugie, wolałbym użyć pytań na ekranie telefonu Steve'a Yegge'a, aby odeprzeć nieprogramistów, zanim dotarliśmy do nich. Gdyby ktoś rozpoznał te pytania, oznaczałoby to, że przeczytali blog Steve'a Yegge, który sugerowałby mi, że byli w Top 1% programistów, którzy poważnie podchodzą do swojego zawodu i na pewno gwarantują wywiad. Podobnie, jeśli ktoś miał dobrego przedstawiciela tutaj lub na SO, byłbym skłonny przeprowadzić z nim wywiad.
źródło
Trudno uwierzyć, że programiści nie mogą kodować FizzBuzz, dopóki nie zobaczysz „dziewięciu do pięciu”, którzy kopiują i wklejają swoją pracę razem i świadomie nie próbują pisać kodu. Nie mogłem w to uwierzyć, kiedy usłyszałem, jak jeden z naszych starszych programistów uczy programistę C #, z 3-letnim „doświadczeniem”, jak używać słownika. Interfejsy? Wzorce projektowe? stdout? YAGNI? Mój trop nigdy nie słyszał o YAGNI! To niesamowite, czego ci ludzie nie wiedzą.
Teraz w to wierzę. Myślę też, że jest zbyt wielu programistów, którzy robią wystarczająco dużo.
źródło
Myślę, że po części tak popularne jest to, że istnieje więcej niż jeden sposób na udzielenie odpowiedzi, a w zależności od tego, którą drogą wybierze kandydat, możesz uzyskać wgląd w sposób, w jaki kodują. Kilka świetnych przykładów można zobaczyć tutaj, jeśli masz 10 000 powtórzeń na przepełnieniu stosu.
Jeśli chodzi o statystyki 99%, sprawdź, skąd pochodzi ta liczba. Prawdopodobnie jest stronniczy. Jeśli opiera się on na programistach rozpoczynających rozmowę kwalifikacyjną w sprawie pierwszej pracy, to tak, widzę, że jest to możliwe, szczególnie jeśli większość ich kandydatów wychodzi bezpośrednio ze studiów. Naprawdę mogę myśleć o kimś, kto prawdopodobnie wypisze warunek 100, jeśli wypowiedź, jako rozwiązanie tego problemu.
źródło
Uważam, że stwierdzenie, że 99% programistów nie jest w stanie zaprogramować ani rozwiązać prostego testu kodowania, jest bardzo przesadzone. W przypadku testu FizzBuzz albo napotkałeś ten problem wcześniej i możesz go łatwo rozwiązać za pomocą operatora modulo, albo nie napotkałeś go wcześniej i będziesz miał z tym problem. Nic nie mówi ankieterowi o twoich umiejętnościach programowania.
Myślę, że problem wielu programistów najwyraźniej pozostawiających złe wrażenie podczas wywiadu leży w naturze technicznych metod wywiadu. Ankieterzy oczekują, że wnioskodawcy zapamiętują i natychmiast odtwarzają składnię języka, szczegóły i złożoność obliczeniową struktur danych, architektur sprzętowych, wzorców projektowych itp. Itd. Obszar informatyki / inżynierii oprogramowania jest ogromny. Próbowanie zapamiętania wszystkiego jest niemożliwe i nieczułe.
W prawdziwym świecie kluczem jest zrozumienie przypisanego do ciebie problemu programowania / projektowania oraz wiedza, gdzie znaleźć informacje (swoje IDE, strony podręcznika, książki, google itp.), Jak rozwiązać problem. Jest to jednak coś, czego ankieterzy nigdy nie testują.
źródło
Nadal jestem stosunkowo młodszym programistą (koduję dla pieniędzy od około 2 lat i koduję z pewną odpowiedzialnością zawodową jako pomocnik przez około 2 lata wcześniej), więc używaj wystarczającej ilości ziaren soli.
Mam pewne doświadczenie w tworzeniu pierwszego ekranu dla programistów dla projektu dużego przedsiębiorstwa (wiedzieliśmy, że projekt jest skazany, ale hej, i tak chcieli zapłacić). Jako jedyny programista zatrudniony w firmie miałem za zadanie przejrzeć CV i przesłać kandydatów.
To był dla projektu rządowego, więc
być możeprawdopodobnie nie przyciągnąć najzdolniejszych kandydatów, ale nie otrzymują jeden wniosek od każdego z konta github, że rzeczywiście miał kod pokazany, ani nikt, kto miał portfel, więc użyłem fizzbuzz ( dosłownie dokładny problem) jako pierwszy krok dla każdego, kto wyglądał, jakby mógł być w stanie zaprogramować.Poprzedziłem go pseudo-przeprosinami stwierdzającymi, że wiedziałem, że to głupie, ale po prostu chciałem zobaczyć dowolny działający kod, a gdyby chcieli, mogliby wysłać inny przykład o równej lub większej wartości lub naprawdę coś, ale ten fizzbuzz wystarczyłby.
Wynik: nie dostałem żadnej odpowiedzi, która była właściwie poprawna, co jest oszałamiające, biorąc pod uwagę liczbę odpowiedzi w Internecie. Nikt nawet nie zadał sobie trudu plagiatu. Musieliśmy po prostu zatrudnić ludzi, którzy wcześniej pracowali nad nieudanymi poprzednimi iteracjami projektu.
Po początkowym szoku po ćwiczeniach i rozczarowaniu tym, jak przykręcone było oprogramowanie rządowe / kontraktowanie, poczułem się znacznie lepiej z własnymi umiejętnościami, tak małymi zwycięstwami?
Edycja: Przez niepoprawne nie mam na myśli błędu off-by-one (tzn. Poprosiłem o 100, a nie 99) lub innego niewinnego błędu, który jest łatwym rozwiązaniem. Mam na myśli, że nie działa, albo nie chce się uruchomić / kompilować / itp., Albo wyraźnie pokazał, że problem nie został po prostu odczytany i zrozumiany, również znaczna część wycofała aplikację, a zamiast tego nie przesłano żadnego innego kodu.
źródło