it-swarm-eu.dev

FizzBuzz - opravdu?

Pokud jde o otázky týkající se „pohovorového testu“, často se objevuje téma FizzBuzz. Existuje také Coding Horror příspěvek o tom.

Nyní, pokud se obtěžujete se čtením takových stránek, jako je tento, je pravděpodobně méně pravděpodobné, že budete v demografických programátorech, kteří by našli FizzBuzz něco jiného než triviální.

Je však pravda, že s tím bude bojovat 99% programátorů?

Opravdu?

Jaký je důkaz toho?

Některé příklady z reálného života by byly velmi užitečné při zodpovězení této otázky.

60
DanSingerman

99%? Ne. Významné procento? Ano. Z vlastní přímé zkušenosti s rozhovory s lidmi mohu svědčit o tomto. Může se vám to zdát nevýznamné, ale v oblasti programování je mnoho lidí, kteří se po léta víceméně předstírají a používají se na pozicích na nevstupní úrovni a toto selhávají.

I když to snadno vyřešíte, ale dáte mi obrovskou statiku, když budete požádáni o provedení takového podřadného úkolu. Být v týmu znamená, že musíte někdy dělat věci, které se vám nemusí líbit, ale jsou nezbytné. Pokud je to hned s pálkou, ještě předtím, než jsme začali spolupracovat, si myslíte, že by bylo nejlepší vyzkoušet si a potvrdit svůj zvláštní stav nad tím, že děláte něco, o co jsem vás požádal, pak to bude působit jako známka proti vám.

Nezajímá mě nutně, jak elegantní je vaše řešení (i když by to bylo hezké), ale když jsem viděl, jak se na to bodneš na tabuli a promluvíš si to skrz, ukazuje mi, že jsi alespoň ochoten se na to bodnout . Pokud se rozhořčíte a řeknete něco podle slov „Jsem řešitel problémů, ne opice kódu!“ pak vás srazí kolík.

Měl jsem jen dotazované dotazované, odmítají se to dokonce pokusit. Jednoduše odmítněte. Ne. Nedělej to. Ptám se jedné nebo dvou dalších zdvořilých otázek, děkuji jim za jejich čas a rozhovor ukončím.

Říkám to jako manažer a jako vývojář.

46
Todd Williamson

Myslím, že 99% programátorů, kteří se ucházejí o práci (a nechápou ji), se o ni může potýkat. Ale ne 99% programátorů, kteří produktivně drží práci.

To je povaha našeho moderního procesu hledání zaměstnání. Mnoho lidí, kteří se ucházejí o studium, nejsou kvalifikovaní.

Tento příspěvek Coding Horror také hovoří o tom, jak dnes vyučujeme informatiku. V minulosti (zejména na MIT) jste byli povinni se učit věci jako LISP, což do značné míry vyžaduje, abyste pochopili pojmy jako rekurze.

V dnešní době se lidé učí Java), protože je v průmyslu široce používán a zaměření se posunulo spíše k syntaxi než k hlubokému programovacímu myšlení. Nelíbí se mi Java, ve skutečnosti si myslím, že je to ideální první programovací jazyk. Neviděl jsem však své instruktory, jak s nimi učí hluboké programovací principy.

25
Robert Harvey

Nerad to říkám, ale

Hlavním důvodem, proč jsem neviděl odpovědi na programové otázky, je spíše chyba žadatele než odpovědi.

Jasně si pamatuji jeden rozhovor, kde jsem byl dotázán, jak vytvořit konkrétní algoritmus vyhledávání kolekcí, který by běžel v konstanta čas (stejný počet vyhledání bez ohledu na to, kolik položek ve sbírce). Než jsem to vzdal, zabručel jsem na něj 20 minut. To bylo tehdy, když tento génius, který provedl rozhovor, ukázal, že odpověď je něco, co fungovalo v téměř konstantním, ale stále ne konstantním čase. Trochu jako řeknutí „Dej mi odpověď nula“ a poté přijmu 0,1.

Stručně řečeno je to, že jsem viděl příliš mnoho případů, kdy někdo dotazuje otázku, která nesplňuje následující kritéria:

  1. Znají všechny možné správné odpovědi.
  2. Znají proč správné odpovědi jsou správné.
  3. Umí skutečně poskytnout dostatek informací, aniž by odpověděli.
  4. Otázky „řešení problémů“ se nespoléhají na znalost nezveřejněné skutečnosti (jedná se o největší problém, který jsem kdy viděl).
  5. Odpovědi by trvalo méně než 1 minutu, kdybyste to nemuseli přijít. Pokud by psaní kódu trvalo jen 5 minut, vyžaduje to opravdu více řešení problému, než jaké by bylo možné vložit do ústní části rozhovoru.
  6. Otázky jsou založeny na více než jen „problému, na který jsem narazil jednou nebo ve škole, a proto byste měli vědět, jak to vyřešit právě teď“. Vsadím se, že na odpověď jste měli více než 2 minuty, proč nedáte kandidátovi stejnou zdvořilost.

Vážně (1), myslím, že žádat lidi, aby psali kód v ústní části rozhovoru, je hloupé.

Vážně (2), myslím, že rozhovory s lidmi, aniž by je požádali, aby napsali kód, jsou také hloupí.

Vážně (3), měli byste jim buď dát „domácí úkol“, požádat je, aby přinesli ukázky kódu, nebo jim dát notebook a pár otázek a tichou kancelář, aby na nich pracovali. Pak je nechte na pokoji, zatímco na nich pracují. Obvykle jdu s druhým přístupem, protože to omezuje jejich schopnost získat pomoc venku (podvádět) a můžu to časově omezit.

20
MIA

Četl jsem článek Coding Horror, který zmiňujete, a myslím si, že Jeff má pravdu ... ale kdy je naposledy, kdy dostal rozhovor?

Když jste rozhovor, obvykle jste ve velkém stresu a často musíte odpovídat na teoretické otázky (žádná inteligence, žádný google, žádný znovu zaměstnavatel, ... pouze vaše paměť trápená stresem). To je stejné v testech. Stres vám nepomůže.

Všiml jsem si, že jediný způsob, jak zjistit, zda je někdo pro danou pozici vhodný, je s ním chvíli pracovat ... Prostě vezměte posledních 10 osob, které jste najali, ze 100 (možná více), kolik bylo opravdu dobré pronájem???

Zaměstnavatel by si měl najmout řešitele problému, ne kódovou opici, která ví o modulech.

Nemůžete vyzkoušet „na chvilku všichni žadatelé“, takže je nutný pohovor. To je důvod, proč zaměřuji své otázky na to (řešení problémů) a provedu kontrolu referencí v minulosti.

Můj názor je, že FizzBuzz je nebezpečný pro společnost, která hledá vývojáře, aby potlačila svůj růst.

10
user2567

Vše, co musíte udělat, je hledat na FizzBuzz. Byla na něm obrovská vlna blogových příspěvků. Obecně řečeno, blogger řekl: „Řekl jsem lidem, aby to napsali [v nějakém jazyce], a zde jsou druhy chyb, které udělali:“ a poté vypsal několik úskalí. Zábava začíná v komentářích, kde lidé říkají „ha! To je triviální v [jiném jazyce], vše, co musíte napsat, je toto:“ následovaný kódem. Další komentář vždy najde chyby v první. Vypadá to, že někteří velmi dobří vývojáři to vůbec poprvé nedostanou v žádném jazyce. Některé z chyb:

  • Požádal jsem o 1 až 100 a udělal jsi 1 až 99 nebo 0 až 99
  • zmatek o tom, zda se má číslo vytisknout spolu se šumem a/nebo hlášením
  • neshody ohledně "fizzbuzz" vs. "fizz-buzz"
  • zmeškané optimalizace, jako je porovnání dvakrát, když to jednou uděláte
  • mnohem více

Když najímám, žádám lidi, aby mi kód na tabuli pro mě, nic nikde poblíž tak složité (já vím, nemyslíš, že je to složité) a mnoho kandidátů naprosto selhávají. Mám na mysli psaní vb-stylu If, Then, End If, ale také rovnátka (jen abych byl na bezpečné straně, myslím) nebo psaní C # (a ptát se nejprve, C #?), Ale s nikým jedním středníkem. Nezačínejte mě s logickými chybami!

10
Kate Gregory

Nedávno jsem byl pověřen pohovory s více než 50 programátory na vedoucí pozici, kde by většinou pracovali s PHP.

Hodil jsem fizzbuzzový problém na screeningovou zkoušku, hlavně proto, abych se pobavil a protože jsem chtěl deset dobrých otázek a měl jsem jen devět. Mým záměrem bylo v té době ukázat lidem, že se také můžeme bavit, a to i na otázky týkající se rozhovorů.

80% žadatelů problém vyřešilo, ale nevyužilo operátora modulu.

15% žadatelů nemohlo problém vyřešit.

5% žadatelů vyřešilo problém pomocí operátoru modulu.

I když je můj výběr vzorků omezený (50 uchazečů z jedné země), mohu vám říci, že:

95% z nich mělo BS nebo vyšší v učebních osnovách CS (univerzity zde soutěží o to, aby se zvuk CS stal působivějším).

Byl jsem opravdu ohromen. No, vyděšená ... ale ohromená. Nemyslel jsem si, že bych se přiblížil reprodukci výsledků, protože problém se stal tak populární. To mi ukazuje, že 5% mých uchazečů nemusí být super programátoři, ale alespoň čtou programovací blogy.

10
Tim Post

V mém posledním kole najímání jsem měl 3 stavební dělníky s 0, opakuji nulu, programovací vzdělání nebo zkušenosti se týkají pozice vývojáře softwaru.* Takže to je spodní část hlavně. Pokud předpokládáte normální rozdělení dovedností, pak uvidíte, jak bude průměrná úroveň dovedností poměrně nízká a dokonce i „nadprůměrný“ (mezi žadateli) bude stále relativně špatný.

Nyní, pokud fizzbuzzujete pouze uchazeče, kteří měli něco, co se zdálo být programovací schopností, zjistíte, že nyní máte:

  1. lháři
  2. nadšenci buzzword (jednou jsem četl článek o .NET)
  3. špatné skutečné programátory
  4. lidé, kteří použili technologii k dokončení projektu, ale nenaučili se o něm (viz fizzbuzzové otázky o tom, jak je identifikovat)

Navíc některé „fizzbuzz“ otázky, které jsem viděl, jsou specifické pro danou doménu. Můžete se progresivně rozvíjet s jazykem/framework x po řadu let (tedy z let zkušeností s x) a nesetkali jste se s některými jeho částmi (vývojáři knihoven nevědí mnoho o vývoji komponent uživatelského rozhraní např.).

Podobně mnoho vývojářů v současnosti vyvíjí údržbu, takže jejich architektonické/návrhové dovednosti mohou být v některých oblastech slabé.

Teď si nejsem jistý, jestli je 99% přesný, ale IME je stále dost vysoká. Alespoň v rozsahu 80%.

* Ne, nezavolali jsme ani se nepodívali na tyto aplikace.

9
Steven Evers

Ano, opravdu. Pravděpodobně ne 99%, ale stále dost vysoká. Použil jsem rozhovory se studenty informatiky na stáže a na plný úvazek. Na vysoké škole jsem vedl rozhovor s 25 studenty. Bylo nám řečeno, abychom si neměli klást stejné otázky, protože studenti hovořili. Rychle jsem se dozvěděl, že na tom nezáleží, protože dostanu jen 3 nebo 4 studenty z 25, kteří by mohli odpovědět na mou první otázku. "Write strcmp"

Požádal jsem je, aby napsali funkci pro porovnání dvou řetězců. Možná použít tuto funkci k řazení slov do slovníku. Byli byste ohromeni počtem studentů, kteří nerozuměli tomu, jak porovnat dvě slova, natož vědět, jak napsat funkci. A někteří z těchto studentů tvrdili, že dostali všechny A do CSc.

Věc, kterou programuje, je VELMI DIFFICULT. Mnoho lidí si myslí, že umí programovat, ale ne.

8
ChrisMcB

Některé myšlenky:

  • Nedokázal bych to proti někomu, kdyby jejich program měl nějaké chyby, ale jasně měli správný nápad. Ladění je součástí programování.

  • Myslím, že je smutné, že tolik lidí se uchází o práci, o které neví, že nemohou. Vypadá to jako problém s ekonomikou.

  • Je opravdu snadné klást lidem špatné otázky, kde jediná „správná“ odpověď je ta, kterou by tazatel dal.

8
Mike Dunlavey

Tento test velmi pěkně zahrnuje několik věcí, které chci vědět o programátorovi, kterého bych si mohl najmout:

  1. Můžete vůbec programovat?
  2. Můžete napsat program od nuly (protože ne každý může !!!)
  3. Dokážete vyřešit problém, aniž byste přes - přemýšleli.

Pokud jde o poslední bod, existuje nespočet řešení fizz-buzzu. Snažíte se číst? Rychlost? Stručnost? Snažíte se dokončit psaní programu rychle? Jak programátor útočí na tento jednoduchý problém, je velmi výmluvné. Pokud programátor nemůže vybrat řešení a vidět ho až do konce, co vám řekne o tom, jak bude tento člověk hrát na skutečném úkolu?

7
user2458

Bohužel mnoho lidí s působivě vypadajícími životopisy zřejmě postrádá základní programovací dovednosti. Viděl jsem mnoho případů, kdy lidé, kteří na svých životopisech uvádějí seznam C a C++, nemohli odpovědět na základní otázky týkající se ukazatelů.

6
Dima

Myslím, že součástí toho, proč se jedná o tak populární otázku, je to, že existuje více než jeden způsob, jak na ni odpovědět, a podle toho, jakým způsobem se kandidát rozhodne jít, vám může poskytnout informace o tom, jak kód kódují. Některé skvělé příklady lze vidět zde , pokud máte 10 K opakování v zásobníku přetečení.

Pokud jde o statistiku 99%, zkontrolujte, odkud toto číslo pochází. Pravděpodobně je to zkreslené. Pokud je to založeno na vstupních programátorských pohovorech pro jejich první zaměstnání, pak ano, vidím, že je to možné, zejména pokud většina jejich kandidátů přichází přímo z vysoké školy. Vlastně mohu myslet na někoho, kdo by pravděpodobně napsal podmínku 100, pokud by prohlášení bylo řešením tohoto problému.

3
Rachel

Doufám, že FizzBuzz mi pomůže vyhnout se dvěma typům lidí.

  1. Kanály bez znalosti programování nebo bez příslušných znalostí programování. Obvykle je můžete poznat z životopisu, ale ne vždy, a dát jim jednoduchý programovací úkol, je dobrý způsob, jak objasnit, že nejsou programátoři.
  2. Java školní grads, kteří absolvovali programovací kurz nebo titul, ale ve skutečnosti neví, jak programovat. Tito lidé mohou být těžší odfiltrovat, protože mohou mluvit o teorii, ale prostě nemají praktické dovednosti. Uvedení jednoduchého problému před ně a požádání o řešení a vysvětlení řešení je docela dobrý způsob, jak vidět rozdíl mezi Petra Java a Paula Bean).

V obou případech se o perfektní implementaci opravdu nestarám. Test, který musíte provést u lidí, kteří se ucházejí o pracovní místa pro vývojáře, je , že mohou programovat vůbec.

To znamená, že bych se pravděpodobně s tímto konkrétním testem neobtěžoval hned z několika důvodů. Za prvé je to velmi dobře známo a každá z výše uvedených skupin by to mohla rychle vyzkoušet. Zadruhé bych raději použil otázky na obrazovce telefonu Steve Yegge , abychom vyloučili neprogramátory, než se dostaneme k jejich přivedení. Pokud by někdo tyto otázky rozpoznal, znamenalo by to, že si přečetli Steve Yeggeův blog, který by Navrhněte mi, aby byli mezi prvními 1% vývojářů, kteří berou svou profesi vážně a určitě zaručují pohovor. Stejně tak, pokud by někdo měl nějaké dobré zástupce zde nebo na SO), byl bych ochoten s nimi pohovořit.

3
glenatron

Je těžké uvěřit, že vývojáři nedokážou kódovat FizzBuzz, dokud neuvidíte „devět k pěstitelům“, kteří kopírují a vkládají svou práci dohromady a snažili se nepsat kód. Nemohl jsem tomu uvěřit, když jsem slyšel, že jeden z našich vyšších vývojářů učil vývojáře C # se 3 roky zkušeností, jak používat slovník. Rozhraní? Designové vzory? stdout? YAGNI? Moje vedení nikdy neslyšelo o YAGNI! Je úžasné, co tito lidé nevědí.

Věřím tomu hned teď. Také si myslím, že příliš mnoho vývojářů dělá dost.

3
kirk.burleson

Zjistil jsem, že 99% programátorů není schopno programovat nebo vyřešit jednoduchý kódovací test, což je velmi přehnané. V případě testu FizzBuzz jste se s tímto problémem setkali již dříve a můžete jej snadno vyřešit operátorem modulo, nebo jste se s ním dosud nesetkali a budete s ním bojovat. Vypovídá tazateli nic o vašich programovacích schopnostech.

Myslím si, že problém s mnoha programátory, kteří zjevně zanechávají na pohovoru špatný dojem, spočívá v povaze technických metod pohovoru. Tazatelé očekávají, že uchazeči zapamatují a okamžitě reprodukují syntaxi jazyka, podrobnosti a výpočetní složitost datových struktur, hardwarových architektur, návrhových vzorů atd. Atd. Oblast počítačové vědy/softwarového inženýrství je obrovská. Je nemožné a necitlivé pokusit se zapamatovat si všechno.

V reálném světě je klíčem k tomu, abyste mohli porozumět problémům s programováním/designem, které vám byly přiděleny, a vědět, kde najít informace (vaše IDE, manuálové stránky, knihy, google atd.), Jak váš problém vyřešit. To je však něco, na co se tazatelé nikdy nezkoušejí.

2
mark

Jsem stále relativně juniorský programátor (já jsem kódoval peníze už ~ 2 roky a kódoval jsem nějakou profesní funkci jako vedlejší odpovědnost asi 2 předtím), takže používejte dostatečné množství zrn soli.

Mám nějaké zkušenosti s vytvářením první obrazovky pro kodéry pro velký podnikový projekt (trochu jsme věděli, že projekt byl odsouzen k zániku, ale hej, stejně chtěli platit). Jako jediný programátor ve firmě provádějící nábor jsem dostal za úkol přezkoumávat životopisy a prověřovat žadatele.

To bylo pro vládní projekt, takže možná pravděpodobně nepřitahoval nejtalentovanější uchazeče, ale neobdržel jsem jednu žádost od kohokoli s githubovým účtem, který měl skutečně zobrazený kód, ani od kohokoli, kdo měl portfolio, takže jsem jako první průchod použil fizzbuzz (doslova přesný problém) na každého, kdo vypadal, že by byli schopni programovat.

Upřednostnil jsem to pseudopravím, že jsem věděl, že je hloupé, ale že jsem jen chtěl vidět nějaký pracovní kód, a pokud by chtěli, mohli poslat další příklad stejné nebo vyšší hodnoty nebo opravdu cokoli, ale ten fizzbuzz by stačil.

Výsledek: Dostal jsem jednu odpověď, která byla ve skutečnosti správná, což je ohromující vzhledem k množství odpovědí na internetu. Nikdo se neobtěžoval plagiát. Museli jsme prostě jít s najímáním lidí, kteří dříve pracovali na neúspěšných předchozích iteracích projektu.

Po počátečním šoku z cvičení a zklamání z toho, jak byl vládní software/kontraktace v pořádku, jsem se cítil mnohem lépe o svých vlastních schopnostech, tak malých vítězstvích?

Úpravy: Nesprávným tím nemyslím chybu typu off-by-one (tj. Požádal jsem přes 100, nikoli 99) nebo nějakou jinou nevinnou chybu, která je snadná oprava. Mám na mysli nefunkční, buď nebudu spouštět/kompilovat/atd., Nebo jasně ukázat, že problém nebyl právě přečten a pochopen, také významná část stáhla aplikaci a nikoliv místo toho poslal nějaký jiný kód.

0
BSpiros