Efficacia di FizzBuzz e Beyond [closed]

38

Come parte del processo di intervista, inizialmente chiediamo ai candidati di fare "FizzBuzz" al giorno d'oggi la percentuale di candidati che possono rispondere correttamente a FizzBuzz è aumentata drammaticamente - ciò potrebbe essere dovuto alla sua popolarità sul web.

Circa un anno fa, come seconda domanda, abbiamo iniziato a fare una domanda molto simile a FizzBuzz originale. La domanda è stata progettata per essere semplice quanto il FizzBuzz originale e per valutare anche una particolare abilità del candidato, in particolare la capacità di ordinare e dare la priorità in modo significativo e logico a un insieme di "regole aziendali" che sono state fornite in alcuni ordine arbitrario. La formulazione della domanda sembra inizialmente un po 'ambigua, che potrebbe rendere difficile per gli anglofoni non madrelingua, ma se il pensiero può essere risolto correttamente può anche dare al candidato l'opportunità di porre domande per chiarimenti, il che è sempre una buona cosa .

Riteniamo che questa sia una competenza molto importante da avere come sviluppatore, in quanto lo sviluppo del software è tipicamente basato su requisiti funzionali derivati in un ordine particolare nel tempo, che possono porre vincoli e condizioni su altre aree del software senza indicare esplicitamente ed è compito dello sviluppatore astuto indagare per lo più su potenziali problemi e conflitti relativi all'implementazione.

Quello che abbiamo scoperto è che poco più del 65% dei candidati (dimensione del campione di 38) che ha superato FizzBuzz ha completamente fallito FizzBuzz v2.0 Normalmente questi candidati verranno rilevati più avanti nel processo, ma sembra essere un bel modo per rilevarli presto.

La mia domanda non riguarda se FizzBuzz è obsoleto o meno, ma quali fattori potrebbero contribuire a un numero così elevato di candidati che non rispondono alla domanda di FizzBuzz v2.

  • La domanda è troppo ambigua?
  • Lo stress di un ambiente di intervista riduce la capacità di pensare in modo critico al punto di non essere in grado di completare un compito così banale?

Domanda:

Scrivi una routine nel tuo linguaggio di programmazione preferito che richiederà un elenco di stringhe come input e per ciascuna stringa nell'elenco eseguirà una delle seguenti operazioni:

  1. Stampa solo Fizz se la stringa contiene la lettera A
  2. Stampa solo Buzz se la stringa contiene la lettera B
  3. Stampa solo BuzzBuzz se la stringa contiene sia A che B
  4. Stampa solo FizzFizz se la stringa non contiene sia A che B
  5. Stampa solo FizzBuzz se la stringa contiene solo una A e solo una B

Alcune domande tipiche poste dai candidati sono:

  • Dovrebbe essere case sensitive?
  • Does "contiene A e B" significa che A dovrebbe venire prima di B
  • Cosa dovrebbe essere stampato se nessuno dei punti è soddisfatto?
  • Cosa dovrebbe succedere se è possibile soddisfare più di una condizione?

Abbiamo scoperto che la stragrande maggioranza dei candidati che ha completato con successo la domanda, non ha chiesto nulla, l'hanno fatto semplicemente come FizzBuzz.

    
posta Gradeinar Pfeffernüsse 11.01.2013 - 01:39
fonte

10 risposte

31

Ha il potenziale per essere un test molto migliore di FIZZBUZZ, ma se hai qualche idea di una risposta corretta, è la peggiore prova al mondo. Questi test hanno un valore molto basso nelle interviste per iniziare.

Se un candidato risponde "Correttamente" senza fare una domanda, allora hai un problema che la selezione del candidato selezionerà il tipo sbagliato di programmatore- Non è in grado di identificare requisiti ambigui, o non è in grado di comprendere che la maggior parte delle persone non può scrivere requisiti inequivocabili. Non importa se il programma è tecnicamente perfetto in ogni aspetto, è probabile che sia il tipo di ragazzo che fornirà software con un "Non mi interessa non è quello che volevi, è quello che hai chiesto".

La parte del test qui è l'ordine di priorità delle regole. Non lo specifichi. L'input "ABC" può stampare Fizz, Buzz, BuzzBuzz o FizzBuzz - ognuno di questi è corretto

Il candidato che prenderei è colui che lo ha capito (soprattutto) giusto, ma ha fatto molte domande e, idealmente, ha fatto un sacco di "balordi" sulla lavagna bianca.

Per esempio, vorrei esplorare la mia comprensione di questi requisiti fornendoti una serie di esempi di testo e chiedendoti cosa ti aspettavi di stampare, e perché. - La discussione sul mio input di esempio "ABC" dovrebbe portare a degli insulti utili per te.

Proprio come FIZZBUZZ, il risultato di questo test è buono solo come le tue osservazioni fatte su come il risultato è stato ottenuto - il risultato è irrilevante.

Vorrei modificarlo un po '- solo per renderlo più interessante - prendere il' solo 'out. È riportato nella riga in alto ("stampa uno dei seguenti") e vedere quante persone ci chiedono. Se il candidato manca il "solo" e hai tempo, segnalalo e guarda cosa succede. Se si occupa del "solo", rimuoverlo dal requisito e fargli cambiare il codice.

    
risposta data 11.01.2013 - 02:32
fonte
27

La parola "solo" nelle tue esigenze crea una contraddizione in tutte le domande.

Quindi la tua domanda verifica la raccolta dei requisiti mentre sei sotto pressione, sei sicuro di voler testare questa combinazione di abilità?

Se vuoi testare la raccolta dei requisiti, ti suggerisco di rendere ambigua una delle domande. Se vuoi sostituire FizzBuzz, rimuovi l'ambiguità.

Assegnare priorità alle regole di business può essere fatto solo con conoscenze specifiche del dominio - a meno che tu non includa alcuni semplici contesti per quello che stai facendo (forse sono buoni da riscattare per vari valori), non c'è alcuna base per lo sviluppatore decisione.

Tuttavia, richiedere a qualcuno di chiedere chiarimenti laddove ciò comporti un rischio significativo di esito indesiderato, forse non è il modo migliore per valutare le proprie capacità nel riconoscere i limiti delle proprie conoscenze. Possono immaginare che sia più sicuro indovinare e sbagliare, piuttosto che sottolineare che sei incompetente a scrivere requisiti, o se nessuno degli intervistatori è uno sviluppatore, essendo etichettato come un cattivo atteggiamento.

    
risposta data 11.01.2013 - 09:33
fonte
16

We found that the overwhelming majority of candidates that successfully completed the question, didn't ask anything at all they just did it like they did FizzBuzz.

Con l'ambiguità dei requisiti non si può finire correttamente la v2.0 senza fare domande.

    
risposta data 11.01.2013 - 12:03
fonte
4

Se vuoi rimuovere qualsiasi ambiguità, puoi modificare i requisiti in:

Scrivi una routine nel tuo linguaggio di programmazione preferito che richiederà un elenco di stringhe come input e per ciascuna stringa nell'elenco fai quanto segue:

  1. Stampa "Fizz" se la stringa contiene il carattere '$' e non contiene '?'.
  2. Stampa "Buzz" se la stringa contiene il carattere '?' e non contiene '$'.
  3. Stampa "FizzBuzz" se la stringa contiene esattamente un "$" e esattamente uno "?".
  4. Stampa "BuzzBuzz" se la stringa contiene esattamente un "$" e più di uno "?".
  5. Stampa "BuzzBuzz" se la stringa contiene esattamente un '?' e più di un '$'.
  6. Stampa "FizzFizz" se la stringa non contiene "$" e non contiene "?".
risposta data 11.01.2013 - 02:18
fonte
3

Is the question too ambiguous?

Sì, la domanda è troppo ambigua per poter rispondere senza chiarimenti. Tuttavia, una regola aggiuntiva che dice che nei casi in cui si applicano più regole, il tuo programma dovrebbe scegliere la cosa più specifica, dovrebbe rimuovere l'ambiguità.

Does the stress of an interview environment decrease ones ability to think critically to the point of not being able to complete such a trivial task?

È più probabile un'indicazione del candidato che "blatera" FizzBuzz: stress o no, il programma è molto semplice.

Penso che il FizzBuzz modificato non sia paragonabile a quello originale, perché la sua soluzione ideale è diversa: sebbene una catena di if-then-else resti accettabile, penso che una soluzione basata su tabella è più appropriata per questo problema:

static string[,] FB = new string[3,3] {
    {"FizzFizz", "Buzz", "Buzz"}
,   {"Fizz", "FizzBuzz", "BuzzBuzz"}
,   {"Fizz", "BuzzBuzz", "BuzzBuzz"}
};
static string FizzBuzz(string str) {
    return FB[
        Math.Min(str.Count(c => c == 'a'), 2)
    ,   Math.Min(str.Count(c => c == 'b'), 2)
    ];
}

La dimensione dello spazio del problema è 3x3 , non 2x2 , quindi esegue il mapping su una tabella molto più rapidamente rispetto a FizzBuzz originale. Infatti, trovo una soluzione basata su tabella per il problema originale di FizzBuzz più difficile da capire.

private static string[] FB = new[] {"{0}", "Fizz", "Buzz", "BizzBuzz"};
public static void Main() {
    for (var i = 1 ; i <= 100 ; i++) {
        Console.WriteLine(FB[(i%5==0?2:0)+(i%3==0?1:0)], i);
    }
}
    
risposta data 11.01.2013 - 18:31
fonte
2

Due cose qui:

  1. sì, penso che la maggior parte delle persone abbia googlato il buzz fizz e poi inciampi quando provano ad espanderlo
  2. Scopri: link Spiega bene come puoi risolvere il ronzio fizz usando le astrazioni appropriate.
risposta data 11.01.2013 - 14:47
fonte
2

We found that the overwhelming majority of candidates that successfully completed the question, didn't ask anything at all they just did it like they did FizzBuzz.

Ho visto i processi di intervista che incoraggiano i programmatori a pensare ad alta voce e a porre domande per vedere il loro modo di pensare. Mi piace di più questo processo.

Ho letto questo fizzbuzz v2.0 e avrei chiesto informazioni sui requisiti n. 3 e n. Non conosco altre persone, ma trovo in ingegneria che non voglio alcuna ambiguità, quindi faccio domande. Perché in seguito (codificato e tutto), non voglio scoprire che dovevo fare un'ipotesi ed era sbagliato.

    
risposta data 11.01.2013 - 17:43
fonte
2

Forse il modo più semplice per evitare l'ambiguità è mostrare alcuni esempi:

"A" restituisce "Fizz" "aAbA" restituisce "Fizz" "B" restituisce "Buzz" "aBbB" restituisce "Buzz" "AB" restituisce "FizzBuzz" "ABaabb" restituisce "BuzzBuzz" "" restituisce "FizzFizz" "ab" restituisce "FizzFizz"

    
risposta data 14.01.2013 - 23:08
fonte
2

Invece di dare a un candidato requisiti contraddittori / non chiari, basta chiedere loro come gestiscono queste situazioni. Altrimenti ti stai rendendo incompetente o peggio mettendo persone competenti sul fascio di tradimento infido di "come ottengo le risposte di cui ho bisogno senza implicare che questa domanda di intervista o la persona che chiede è stupida?"

In ogni caso, è irritante come tutto il resto. Le interviste sono un processo di abbinamento e con ciò intendo una strada a doppio senso. Domande dirette e chiarezza di intenti sono molto più importanti del mettere il candidato sotto una pentola a pressione, IMO. FizzBuzz è un buon esempio di una domanda di codifica perché è breve e dolce. Non riutilizzarlo direttamente. Scrivi semplici domande come quelle che seguono quel modello.

Ma per FFS non ci si abitua e si nasconde il vero test dietro un altro test. Basta chiedere alle persone come gestiscono il dannato problema. Uno sviluppatore esperto avrà affrontato ripetutamente richieste ambigue e sarà lieto di dirti le loro strategie. Potresti persino imparare qualcosa.

E non dare per scontato che tutti vogliano usare una lavagna o un periodo di scrittura a mano constrongvole. Alcuni di noi stanno scrivendo da quando avevamo 12 anni (grazie mille a Space Quest). Non riesco nemmeno a pensare dritto con una penna o un pennarello in mano. È il 20-freaking-13, che cosa è già con le lavagne? Quando le persone mi passano una penna e un foglio e mi chiedono di eseguire un test del codice, è difficile sopprimere una risata.

    
risposta data 15.01.2013 - 15:36
fonte
1

Penso che sia una bella domanda per il colloquio. I requisiti non sono chiari, così come sono spesso nella realtà. Controllate se il candidato è abbastanza intelligente da rendersene conto (anche sotto stress), che non ha paura di porre domande che ritengono necessarie ed è in grado di mettere i requisiti in una struttura ragionevole. E ne parla un po 'delle loro capacità di programmazione, anche se dovresti anche porre alcuni problemi più complicati contenenti ricorsione e puntatori, dato che questo problema è troppo facile.

Tuttavia, mi preoccupo un po 'dei candidati "di successo" che non fanno domande. Cercherò di scoprire se si sono resi conto che in alcuni casi è possibile applicare fino a 4 regole e che non vi è nulla nella domanda che possa risolvere tale ambiguità, e chiedere loro come hanno affrontato la questione. Forse la tua domanda non è abbastanza ambigua da costringerli a chiedere, o forse dovresti chiedere loro di pensare ad alta voce.

BTW: Trovo strano che tu stia parlando di una "soluzione corretta". Se pronunci la domanda in questo modo, è legittimo stampare "Fizz", "Buzz", "BuzzBuzz" o "FizzBuzz" se ottieni "AB". Quindi IMHO qualsiasi soluzione senza domande è assolutamente sbagliata.

    
risposta data 15.01.2013 - 12:57
fonte

Leggi altre domande sui tag