Dans le cadre du processus d’entretien, nous avons d’abord demandé aux candidats de faire «FizzBuzz». De nos jours, le pourcentage de candidats pouvant répondre correctement à FizzBuzz a considérablement augmenté - cela est peut-être dû à sa popularité sur le Web.
Il y a environ un an, nous avons commencé par poser une question très similaire à celle de FizzBuzz originale. La question a été conçue pour être aussi simple que le FizzBuzz original et pour évaluer également une capacité particulière du candidat, en particulier la capacité de commander et de hiérarchiser de manière logique et significative un ensemble de "règles de gestion" fournies dans certains ordre arbitraire. Le libellé de la question semble au départ légèrement ambigu, ce qui peut compliquer les choses pour les non-anglophones, mais s’il est réfléchi correctement, cela donne également la possibilité au candidat de poser des questions de clarification, ce qui est toujours une bonne chose. .
Nous estimons qu’il est très important d’avoir cette compétence en tant que développeur, car le développement logiciel est généralement basé sur des exigences fonctionnelles qui ne sont dérivées d’aucun ordre particulier dans le temps et qui peuvent imposer des contraintes et des conditions à d’autres domaines du logiciel sans indiquer explicitement et ce, de la même manière. Il incombe au développeur astucieux d’enquêter au moins sur les problèmes et les conflits potentiels liés à la mise en œuvre.
Ce que nous avons constaté, c’est qu’un peu plus de 65% des candidats (taille de l’échantillon de 38) ayant réussi FizzBuzz ont complètement échoué. FizzBuzz v2.0 Normalement, ces candidats seraient détectés plus tard dans le processus, mais cela semble être un bon moyen de détecter les tôt.
Ma question ne porte pas sur le fait que FizzBuzz soit obsolète ou non, mais plutôt sur les facteurs qui pourraient contribuer à un nombre aussi élevé de candidats ne répondant pas à la question FizzBuzz v2.
- La question est-elle trop ambiguë?
- Est-ce que le stress d'un environnement d'interview diminue la capacité de penser de manière critique au point de ne pas pouvoir mener à bien une tâche aussi triviale?
Question:
Écrivez une routine dans votre langage de programmation préféré qui prendra une liste de chaînes en tant qu'entrée et effectuera l'une des opérations suivantes pour chaque chaîne de la liste:
- N'imprimez que Fizz si la chaîne contient la lettre A
- Imprimer uniquement Buzz si la chaîne contient la lettre B
- N'imprimez que BuzzBuzz si la chaîne contient A et B
- N'imprimez que FizzFizz si la chaîne ne contient pas A et B
- N'imprimez que FizzBuzz si la chaîne ne contient qu'un seul A et un seul B.
Voici quelques questions typiques posées par les candidats:
- Devrait-il être sensible à la casse?
- Est-ce que "contient A et B" signifie que A devrait venir avant B
- Que faut-il imprimer si aucun des points n’est atteint?
- Que devrait-il se passer si plusieurs conditions peuvent être remplies?
Nous avons constaté que la très grande majorité des candidats qui ont répondu à la question sans rien demander du tout l’ont fait comme ils l’ont fait avec FizzBuzz.
Réponses:
Il a le potentiel d'être un test bien meilleur que celui de FIZZBUZZ, mais si vous avez le moindre concept de réponse correcte, c'est le pire test au monde. Ces tests ont très peu d’importance dans les entretiens.
Si un candidat répond "correctement" sans poser de question, vous avez alors un problème: le candidat sélectionné sélectionne le mauvais type de programmeur. Il est incapable d'identifier les exigences ambiguës, ou est incapable de comprendre que la plupart des gens ne peuvent pas rédiger d'exigences non ambiguës. . Peu importe que le programme soit techniquement parfait à tous points de vue, il est probablement le genre de type qui fournira des logiciels avec un message "Je m'en moque, ce n'est pas ce que vous voulez, c'est ce que vous avez demandé".
La partie du test ici est l'ordre de priorité des règles. Vous ne le spécifiez pas. L'entrée "ABC" peut imprimer Fizz, Buzz, BuzzBuzz ou FizzBuzz - l'un de ces éléments est correct
Le candidat que je prendrais est celui qui l’a bien (la plupart du temps) bien, mais il a posé beaucoup de questions et, idéalement, a fait beaucoup de "doddling" au tableau blanc.
Par exemple, j'exploiterais ma compréhension de ces exigences en vous donnant une série de textes exemples et en vous demandant ce que vous espériez imprimer et pourquoi. - La discussion sur mon exemple "ABC" devrait déboucher sur des pistes utiles.
Tout comme FIZZBUZZ, le résultat de ce test est aussi bon que vos observations sur la manière dont le résultat a été obtenu - le résultat n'est pas pertinent.
Je voudrais le peaufiner un peu - juste pour le rendre plus intéressant - enlever le "seul". Il est couvert dans la ligne ci-dessus ("imprimez l’un des suivants") et voyez combien de personnes le demandent. Si le candidat manque le "seul" et que vous avez le temps, faites-le remarquer et voyez ce qui se passe. S'il traite du "seul", supprimez-le de l'exigence et demandez-leur de changer le code.
la source
Le mot "seulement" dans vos exigences crée une contradiction dans toutes les questions.
Par conséquent, votre question vérifie la collecte des exigences lorsque vous êtes sous pression. Voulez-vous vraiment tester cette combinaison de compétences?
Si vous souhaitez tester la collecte des exigences, je vous suggère de rendre l'une des questions ambiguës. Si vous voulez remplacer FizzBuzz, supprimez l'ambiguïté.
La hiérarchisation des règles métier ne peut être effectuée qu'avec des connaissances spécifiques à un domaine - à moins que vous n'incluiez un contexte simple pour ce que vous faites (il s'agit peut-être de coupons à échanger contre différentes valeurs), le développeur n'a aucune base pour prendre sa propre décision.
Mais demander à une personne de demander une clarification lorsque cela comporte un risque important de résultats indésirables, n’est peut-être pas la meilleure façon de mesurer son habileté à reconnaître les limites de ses connaissances. Ils peuvent penser qu'il est plus prudent de deviner et de se tromper que de faire remarquer que vous êtes incompétent pour rédiger les exigences ou que, si aucun des interviewers n'est un développeur, il est étiqueté comme ayant une mauvaise attitude.
la source
Avec l'ambiguïté des exigences, on ne peut pas terminer correctement la version 2.0 sans se poser de questions.
la source
Si vous souhaitez supprimer toute ambiguïté, vous pouvez modifier les exigences pour:
Ecrivez une routine dans votre langage de programmation préféré qui prendra une liste de chaînes en tant qu'entrée. Pour chaque chaîne de la liste, procédez comme suit:
la source
Oui, la question est trop ambiguë pour qu'on y réponde sans éclaircissements. Cependant, une règle supplémentaire indiquant que dans les cas où plusieurs règles s'appliquent, votre programme doit sélectionner l'élément le plus spécifique et supprimer l'ambiguïté.
C'est plus probablement une indication du candidat "entassant" le FizzBuzz: stress ou pas, le programme est très simple.
Je pense que le FizzBuzz modifié n'est pas comparable à celui d'origine, car sa solution idéale est différente: bien qu'une chaîne de valeurs
if-then-else
reste acceptable, je pense qu'une solution basée sur des tables est plus appropriée pour ce problème:La taille de l’espace à problèmes n’est
3x3
pas2x2
, donc, mappée sur une table beaucoup plus facilement que le FizzBuzz original. En fait, je trouve plus difficile de comprendre une solution sous forme de tableau au problème original de FizzBuzz .la source
Deux choses ici:
la source
J'ai vu des processus d'entrevue qui encouragent les programmeurs à penser à voix haute et à poser des questions pour voir leur processus de réflexion. J'aime mieux ce processus.
J'ai lu ce fizzbuzz v2.0 et je lui avais posé des questions sur les exigences n ° 3 et n ° 5. Je ne sais pas à propos d'autres personnes mais je trouve qu'en ingénierie je ne veux pas d'ambiguïté alors je pose la question. Parce que plus tard sur la ligne (codée et toutes), je ne veux pas savoir que je devais faire une supposition et que c'était faux.
la source
Le moyen le plus simple d’éviter toute ambiguïté consiste peut-être à donner quelques exemples:
"A" renvoie "Fizz" "aAbA" renvoie "Fizz" "B" renvoie "Buzz" "aBbB" renvoie "Buzz" "AB" renvoie "FizzBuzz" "ABaabb" renvoie "BuzzBuzz" "" renvoie "FizzFizz" "ab "retourne" FizzFizz "
la source
Au lieu de donner à un candidat des exigences contradictoires / peu claires, demandez-lui simplement comment il gère ces situations. Sinon, vous vous sentez incompétent ou pire encore, vous mettez des personnes compétentes sur le rayon de la perfide: "Comment puis-je obtenir les réponses dont j'ai besoin sans impliquer que cette question d'entrevue ou la personne qui la demande est stupide?"
De toute façon, c'est irritant comme tout. Les entretiens sont un processus d’appariement et j’entends par là une rue à double sens. Les questions directes et la clarté de l’intention sont beaucoup plus importantes que de placer le candidat sous pression, IMO. FizzBuzz est un bon exemple de question de codage car elle est courte et agréable. Ne le réutilisez pas directement. Écrivez des questions simples comme celle-ci qui suivent ce modèle.
Mais pour FFS, ne soyez pas malin et cachez le vrai test derrière un autre test. Demandez simplement aux gens comment ils gèrent ce foutu problème. Un dev expérimenté aura à maintes reprises fait face à des exigences ambiguës et sera ravi de vous expliquer ses stratégies. Vous pourriez même apprendre quelque chose.
Et ne présumez pas que tout le monde veut utiliser un tableau blanc ou que la période d’écriture est confortable. Certains d’entre nous dactylographient depuis l’âge de 12 ans (merci beaucoup à Space Quest). Je ne peux même pas penser droit avec un stylo ou un marqueur dans la main. C'est 20-freaking-13, c'est quoi déjà avec les tableaux blancs? Quand les gens me donnent un stylo et du papier et me demandent de faire un test de code, il est difficile d'empêcher un rire.
la source
Je pense que c'est une bonne question d'entrevue. Les exigences ne sont pas claires, tout comme elles le sont souvent dans la réalité. Vous vérifiez si le candidat est suffisamment intelligent pour s'en rendre compte (même sous stress), qu'il / elle n'a pas peur de poser les questions qu'il juge nécessaires et qu'il est capable de placer les exigences dans une structure logique. Et cela en dit un peu sur leurs capacités de programmation, bien que vous devriez également poser des problèmes plus complexes contenant de la récursion et des pointeurs, car ce problème est trop facile.
Cependant, je m'inquiète un peu que les candidats "retenus" ne posent pas de questions. J'essaierais de savoir s'ils ont compris que vous pouvez appliquer jusqu'à 4 règles dans certains cas et que rien dans la question ne résoudrait cette ambiguïté, et de leur demander d'expliquer comment ils ont traité cette question. Peut-être que votre question n’est pas suffisamment ambiguë pour les obliger à demander, ou peut-être devriez-vous leur demander de réfléchir à voix haute.
BTW: Je trouve étrange que vous parlez d'une "solution correcte". Si vous formulez la question de cette manière, il est légitime d’imprimer «Fizz», «Buzz», «BuzzBuzz» ou «FizzBuzz» si vous obtenez «AB». Donc, à mon humble avis, toute solution sans questions posées est tout simplement fausse.
la source