FizzBuzz - naprawdę? [Zamknięte]

60

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.

DanSingerman
źródło
57
To nie 99% programistów, to 99,5% wnioskodawców (z których wielu nie jest programistami).
webbiedave
4
Nie wierzyłem w to, dopóki nie dostałem go na rozmowę - później dostałem pracę, a później nadal rozmawiałem na ten temat z dyrektorem generalnym. Najwyraźniej 99% ma rację. Oo
Fishtoaster
3
Zawsze myślałem, że pytania o fizzbuzz są mitem, a może tylko dla początkujących po studiach, ale pewnego dnia zapytano mnie o to podczas rozmowy kwalifikacyjnej. Tak, czy wielu kandydatów ma z tym problem?
DarenW,
2
Rutynowo rozdaję test FizzBuzz podczas wywiadów i rutynowo każę ludziom nie zdać egzaminu. Jeden grafik przeszedł go jednak pewnego dnia ..... Trochę mnie zaskoczyło :)
Brandon Wamboldt
4
@Rogue Coder - Hej, nie jesteśmy głupi, po prostu dziwni. I większość z nas jest do dupy z matematyki.
Inaimathi

Odpowiedzi:

46

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.

Todd Williamson
źródło
1
Jakie są ich podstawy odmowy podjęcia próby?
Jon Hopkins,
3
Nigdy ich bezpośrednio nie pytałem. Po drugiej odmowie zadałem jeszcze kilka pytań, a następnie zamknąłem wywiad. Gdybym miał zgadywać, byłoby tak, że byli zbyt zdenerwowani, aby spróbować (jeśli jestem charytatywny) lub że w rzeczywistości nie mogli tego zrozumieć na miejscu (jeśli jestem bardziej cyniczny).
Todd Williamson,
1
Znam faceta, który odmawia kodowania w wywiadach. Nie chce też zapisywać w pamięci niczego, co może wyszukać w ciągu kilku sekund Googlinga. Jest „rozwiązaniem problemu”.
kirk.burleson
4
Z drugiej strony, kodowanie tablicy to problem, który daje ci ankieter… może to być problem? Dla mnie odmowa kodowania podczas wywiadu jest równoznaczna z odmową rozwiązania problemu, który ma ankieter. Stąd sprzeczność z terminem „rozwiązywanie problemów” i bardziej przypomina to, że facet jest „rozwiązywaniem problemów”.
Spoike
@Spoike nie, ponieważ osoby rozwiązujące problemy nie muszą znać składni żadnego języka programowania, prawda?
Pierre Arlaud,
25

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.

Robert Harvey
źródło
11
Tak, myślę, że nasz system edukacji (przynajmniej w Stanach Zjednoczonych) stanowi dużą część tego. Znam kogoś, kto uzyskał 2-letni stopień programisty, ukończył z wyróżnieniem i nie umiał czytać ani pisać kodu.
Rachel
8
Argument przeciwko nauczaniu języka Java jest słaby. Pojęć można uczyć w większości języków (recusrion można łatwo napisać np. W Javie). Nie zgadzam się, że nauczanie pojęć jest coraz słabsze, ale nie obwiniam tego arbitralnie o język implementacji.
Steven Evers,
1
Och, rzeczy takie jak Rekursja się uczą, po prostu się nie przyzwyczajają. Otrzymujesz taką samą ocenę za napisanie 100-wierszowej instrukcji IF, jak za pisanie funkcji rekurencyjnej (przynajmniej robiłeś to, gdzie poszedłem), a 100-wierszowa instrukcja IF jest łatwiejsza do napisania, gdy się spieszysz (tj. „odłożyłem pracę domową do 5 minut, zanim trzeba ją oddać)
Rachel
1
@SnOrfus: Nie winię też za to Java. Nie argumentowałem przeciwko nauczaniu języka Java. Tak, możesz uczyć tych pojęć w Javie, ale nie widziałem, żeby tak się stało, zresztą i tak nie na zajęciach z języka Java. To powiedziawszy, MIT początkowo wybrał Scheme dla swoich wstępnych klas programowania, ponieważ ma bardzo prostą składnię, więc zaczynasz myśleć o koncepcjach programowania wcześnie, bez konieczności koncentrowania się na składni języka.
Robert Harvey
4
Kto na ziemi idzie na uniwersytet, gdzie „uczy Java”. Szkoły językowe programowania są mniej niż przydatne (niezależnie od tego, czy są to Java, C ++, Lisp lub cokolwiek innego); czy to właśnie masz w USA? Tam , gdzie studiowałem CS, mniej więcej nauczyłeś się języka progresywnego zgodnie z wymaganiami (chyba wyjątkiem byłaby klasa Paradigms). Kursy uniwersyteckie uczyły matematyki, teorii CS, wielu paradygmatów programowania, rachunku różniczkowego itp. Każdy, kto ukończy to, może z łatwością rozwiązać FizzBuzz, ponieważ musieliśmy rozwiązywać trudniejsze problemy, aby zdać kursy.
Andres F.,
20

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:

  1. Znają wszystkie możliwe prawidłowe odpowiedzi.
  2. Wiedzą, dlaczego poprawne odpowiedzi są prawidłowe.
  3. Wiedzą, jak faktycznie dostarczyć wystarczającą ilość informacji bez podawania odpowiedzi.
  4. Pytania „Rozwiązywanie problemów” nie polegają na znajomości nieujawnionego faktu (jest to największy problem, jaki widziałem).
  5. Napisanie odpowiedzi zajęłoby mniej niż 1 minutę, gdybyś nie musiał jej rozgryźć. Jeśli napisanie kodu zajęłoby 5 minut, naprawdę wymaga więcej rozwiązywania problemów, niż można by zmieścić w ustnej części wywiadu.
  6. Pytania opierają się na czymś więcej niż tylko „Problemie, na który wpadłem raz lub dostałem w szkole, więc powinieneś wiedzieć, jak go rozwiązać teraz ”. Założę się, że masz więcej niż 2 minuty na odpowiedź, dlaczego nie dajesz kandydatowi tej samej uprzejmości.

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ć.

MIA
źródło
Czy rozmawiałeś z ankieterą, wyjaśniając, dlaczego ich rozwiązanie nie było stałe? Gdybym był ankieterem, a ty byłbyś w stanie zwięźle i bez złośliwości przekonać mnie, że się mylę, zatrudniłbym cię na miejscu.
Nemi,
1
@Nemi - Tak zrobiłem. Osoba, o której mowa, nie była osobą upoważnioną do zatrudniania, ale dostałem ofertę dotyczącą tego stanowiska.
MIA
8
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 :)
konfigurator
Popraw mnie, jeśli się mylę, ale myślę, że tabele skrótów mają stałe czasy dostępu, zakładając, że są wykonane poprawnie i nie ma kolizji. Dlatego wyszukiwanie za pomocą funkcji skrótu powinno być możliwe w stałym czasie.
Trylks
Hashe mogą mieć kolizje. Dlatego zwykle określa się go jako zamortyzowany stały czas.
Przypon
10

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:

  • Poprosiłem o 1 do 100, a ty zrobiłeś 1 do 99 lub 0 do 99
  • bałagan, czy wydrukować numer wraz z dźwiękiem i / lub szumem
  • nieporozumienia dotyczące „fizzbuzz” vs „fizz-buzz”
  • pominięto optymalizacje, takie jak dwukrotne porównywanie, gdy raz by to zrobiło
  • dużo więcej

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!

Kate Gregory
źródło
2
@Jeff większość programistów najpierw pisze coś, czego nie można skompilować. Te dobre wyglądają i naprawiają proste błędy składniowe. Zestresowani dobrzy lub spokojni ok programiści piszą funkcję, ale nie mają kodu do jej wywołania, piszą coś, co nie jest super zoptymalizowane, cierpią (i nie zauważają) osobno lub mogą pominąć błąd składniowy lub dwa. Straszni programiści piszą kod, który nie jest prawie do kompilacji, robi coś zupełnie złego itp. Na przykład zapętlenie do 3 lub do 5, ponieważ są one w pytaniu, zamiast do zapętlenia do 99 lub 100 lub 101 (ish.) Lub nawet nie kod w ogóle. Naprawdę nie możesz w to uwierzyć, dopóki tego nie zobaczysz.
Kate Gregory
7
Jeśli {"If {} Then {} EndIf" kwalifikuje się jako całkowicie nieudany} Wtedy {Twój styl rozmowy jest wadliwy i / lub masz niesamowite szczęście, że możesz odrzucić kandydata na tak trywialnych podstawach} EndIf
Sparr
7
Co miesiąc programuję w co najmniej kilkunastu językach. Usiądź przed komputerem i poproś, abym pracował w jednym, którego nie dotknąłem od miesiąca, i popełniam takie błędy przez pierwsze pięć minut, kiedy wracam do rytmu, zwykle mając błędy wskazane przez kompilator lub tłumacza.
Sparr
2
@Sparr - na pewno. Jeśli więc poproszę cię o przejrzenie tablicy, prawdopodobnie zauważysz ją i powiesz „ups - używam wielu języków”. Jeśli nie, powiem „w jakim języku to napisałeś?” a potem będziesz. To nie jest podchwytliwe pytanie ani pułapka. Niektórzy ludzie tak naprawdę nigdy nie napisali kodu i twierdzą, że tak. Właśnie o to chodzi w takich pytaniach.
Kate Gregory
2
Ale myślę, że te pytania nie są na to dobre. Na pięć minut przed rozpoczęciem wątku komentarza nie mogłem powiedzieć, czy VB wymaga nawiasów klockowych wokół bloków kodu. Mógłbym ci powiedzieć, że If / Then / EndIf wyglądało głównie jak VB [.Net]. I piszę kod w VB przez ... około dwie godziny co trzy miesiące (zadania rentacoder.com, nigdy nie biorę prawdziwych zadań w VB, nienawidzę tego).
Sparr
10

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
28
IMHO problem polega na tym, że FizzBuzz jest tak niskim pytaniem, że jeśli nie możesz na nie odpowiedzieć nawet pod wpływem stresu, zasługujesz na to, aby ludzie śmiali się z twojej twarzy, jeśli nazywasz siebie „programistą”. Gdyby było to coś nieco bardziej skomplikowanego, na przykład „zaimplementuj sortowanie bąbelkowe”, te wymówki i obawy byłyby uzasadnione, ale nie w przypadku FizzBuzz.
dsimcha
23
Fizzbuzz jest dobry w tym, co jest dla: filtrowanie ludzi, którzy wiedzą nic od ludzi czegoś . A wiedza o czymś może wciąż nie wystarczyć do wykonania pracy. To nie jest test decyzji o zatrudnieniu, to test „czy będziesz marnować mój czas na rozmowę kwalifikacyjną”. Niektórzy menedżerowie ds. Rekrutacji próbują przesuwać fizzbuzz za daleko, aby wykonali dla nich swoją pracę.
Steven Evers,
31
Mój Boże, modulo nie jest jakimś ezoterycznym operatorem. Jest to podstawowa operacja, z którą wszyscy programiści muszą mieć doświadczenie, jeśli chcą się nazywać profesjonalnymi programistami. Niezależnie od tego, czy ktoś może napisać FizzBuzz, nie oznacza to, że go zatrudnisz. To tylko szybki punkt wyjścia, aby sprawdzić, czy ta osoba może nawet spróbować ułożyć przepływ kontrolny potrzebny do wykonania zadania.
webbiedave
12
Myślę, że FizzBuzz jest użyteczny po prostu dlatego, że jest tak zadziwiająco trywialny. Wymaga pętli for, dwóch instrukcji if, modulo i print. Każdy, kto ma jakieś znaczące doświadczenie w programowaniu, powinien być w stanie go rozwalić, choć nie myśli. Jeśli ktoś zmaga się z tym w wywiadzie, uważam to za doskonale ważny test lakmusowy.
Adam Crossland
11
@ snorfus: Zapisano w „Problemie kogoś innego”. Wolałbym raczej przegapić łódkę u jednego dobrego programisty z paraliżującym niepokojem społecznym, niż tracić cenny czas i pieniądze na szkolenia i czekanie na wyniki od kogoś bez umiejętności programowania. Nie możesz sobie poradzić z innymi ludźmi? Zobacz terapeuta.
Aaronaught
10

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.

Tim Post
źródło
Wydawało mi się, że użycie modularnego opertora było najbardziej oczywiste. Jestem zaskoczony, że 95% osób, które rozwiązały problem z powodzeniem, używało czegoś innego. Być może to dlatego, że byli nowymi uczniami i czy matematyka była sama?
jmoreno
Nigdy nie nauczyłem się operatora modułu w żadnej z moich klas. Gdybym nie odbywał staży ani nie uczestniczył w projektach typu open source, nigdy bym się tego nie nauczył, dopóki nie przejdę do branży. Na jednej z moich wstępnych zajęć z informatyki nauczono mnie również, że operator trójskładnikowy jest złą praktyką kodowania, ponieważ jest zbyt zagmatwany i trudny do odczytania.
Robert Fraser
Czego użyli zamiast reszty operatora? x - (x/y)*y?
CodesInChaos
9

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:

  1. kłamcy
  2. entuzjaści modnych słów (raz przeczytałem artykuł o .NET)
  3. źli faktyczni programiści
  4. osoby, które wykorzystały technologię do ukończenia projektu, ale nie dowiedziały się o niej (zobacz pytania dotyczące fizzbuzz dotyczące tego, co jest niezbędne do ich zidentyfikowania)

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.

Steven Evers
źródło
3
Mieliśmy podobną sytuację, ale ponieważ w naszej umowie z klientem powiedzieliśmy, że do projektu przydzielono 4 pełnoetatowych deweloperów, a projekt został w zasadzie zrealizowany, facet z wieszakiem sheetrock musiał nauczyć się programowania na dolara klienta za 3 pozostało tygodni do zawarcia umowy.
Tangurena,
Zauważyłem również, że coś takiego się wydarzyło, gdy jakiś program świadczeń rządowych / ubezpieczenie na wypadek bezrobocia wymaga, aby osoba otrzymująca zasiłek aplikowała na określoną liczbę miejsc pracy w tygodniu. Nawet jeśli te programy mają jakieś nominalne wymaganie, aby odbiorca stosował się do zadań, do których faktycznie się kwalifikuje, zasoby do oceny, do których zadań się kwalifikują i egzekwowania tego konkretnego elementu wymogu „ubiegania się o pracę” są bardzo ograniczone .
Daniel Martin
8

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.

ChrisMcB
źródło
3
Stopień inflacji jest do bani, marnuje czas dla wszystkich!
DarenW
8

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.

Mike Dunlavey
źródło
2
Jeśli chodzi o drugi punkt ... spędziłem dużo czasu, zastanawiając się nad kolejnym krokiem w karierze, studiując różne branże i szukając pracy, to była główna trudność w ocenie własnego poziomu kompetencji w wielu różnych sprawach. Najwyraźniej jest to duży, duży problem dla (prawie) wszystkich.
DarenW
@DarenW: Masz moją sympatię. Myślę, że ważne jest, aby wiedzieć, co lubisz i stamtąd pracować. Osobiście zawsze lubiłem szkołę i nigdy nie wątpiłem w moje zainteresowanie inżynierią. Moje rodzeństwo jest prawie całkowicie pewne tego, co robią. Jedno nie jest i łatwo zauważyć, że to walka. Twoja strona główna wskazuje na zainteresowanie skrzyżowaniem nauki i sztuki - to świetnie. Niektórzy ludzie mieli złe doświadczenia w młodości i to może teraz zużyć całą ich energię.
Mike Dunlavey,
7

Ten test bardzo ładnie obejmuje kilka rzeczy, które chciałbym wiedzieć o programatorze, którego mógłbym zatrudnić:

  1. Czy w ogóle potrafisz programować?
  2. Czy możesz napisać program od zera (bo nie wszyscy potrafią !!!)
  3. Można rozwiązać problem bez nad -thinking go.

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
6

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.

Dima
źródło
3

Są dwa rodzaje ludzi, których mam nadzieję, że FizzBuzz pomoże mi tego uniknąć.

  1. Kanclerze bez znajomości programowania lub bez odpowiedniej znajomości programowania. Zazwyczaj można je rozpoznać z CV, ale nie zawsze, a proste zadanie programowania jest dobrym sposobem na wyjaśnienie, że nie są programistami.
  2. Absolwenci szkół Java, którzy ukończyli kurs lub stopień programowania, ale tak naprawdę nie wiedzą, jak programować. Osoby te mogą być trudniejsze do odfiltrowania, ponieważ mogą rozmawiać o teorii, ale po prostu nie mają praktycznych umiejętności. Stawianie przed nimi prostego problemu i proszenie o rozwiązanie oraz wyjaśnienie rozwiązania jest całkiem dobrym sposobem na dostrzeżenie różnicy między Petra Java a Paula Bean.

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.

glenatron
źródło
A) Jak dobre jest „dobre”? B) Czy zatrudniasz? :)
Sparr
3

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.

kirk.burleson
źródło
3

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.

Rachel
źródło
3
Podejrzewam, że liczba 99% wskazuje na prawdę (prawdę rekurencyjną) stwierdzenia, że ​​87% wszystkich statystyk jest sporządzanych na miejscu.
Adam Crossland
1
@Adam Crossland: 100% statystyk na temat statystyk jest również przygotowywanych na miejscu.
Macha
Mimo to wydaje się przerażające, że ktoś nie mógł rozwiązać fizzbuzzu po studiach. Jeśli nie mogą tego zrobić, co mogą zrobić?
Morgan Herlocker,
2
@ironcode Poszedłem do szkoły z kimś, kto nie był w stanie nawet zrozumieć fizzbuzz ... Byłbym zaskoczony, gdyby napisał coś, co wydrukowało 100 wierszy z zakodowanymi wartościami fizzbuzz. Ukończyli z wyróżnieniem.
Rachel
2

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ą.

znak
źródło
14
Czy zdajesz sobie sprawę, jak łatwy jest FizzBuzz? Nie musisz go napotkać. Jeśli zmagasz się, rozważ zmianę kariery.
John Smith
Ale można to rozwiązać bez modulo za pomocą podziału. Prawidłowe rozwiązanie wykorzystujące / zamiast% zadziałałoby dla mnie. Muszą więc zrozumieć bardzo podstawową matematykę i bardzo podstawowe programowanie.
Almo
0

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że prawdopodobnie 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.

BSpiros
źródło