Nous avons fait échouer une nuance de la question FizzBuzz à un candidat d'entrevue de niveau supérieur 1 2 .
Je veux dire, vraiment, complètement, complètement, a échoué à la question - même pas proche.
J'ai même le coaché jusqu'à penser à utiliser une boucle et que 3
et 5
étaient vraiment à considérer comme des cas particuliers.
Il l'a fait sauter.
Juste à des fins d'AQ, j'ai posé la même question exacte à trois coéquipiers; leur a donné 5 minutes; puis est revenu pour récupérer leur pseudo-code. Tous ont réussi et n'avaient jamais vu la question auparavant. Deux ont demandé quel était le truc ...
Lors d'un autre exercice logique, le candidat a montré une certaine compréhension de certaines des fonctionnalités disponibles dans le langage qu'il a choisi d'utiliser (C #). Ce n'est donc pas comme s'il n'avait jamais écrit une ligne de code. Mais sa logique puait toujours.
Ma question est de savoir si j'aurais dû lui donner ou non la réponse aux questions de logique.
Il savait qu'il les avait fait exploser et l'a reconnu plus tard dans l'entretien.
D'un autre côté, il n'a jamais demandé la réponse ni ce à quoi je m'attendais.
Je sais que des exercices de codage peuvent être utilisés pour préparer les candidats à l'échec (encore une fois, voir le deuxième lien ci-dessus). Et j'ai vraiment essayé de l'aider à rentrer chez lui en répondant au cœur de la question. Mais c'était un candidat de niveau supérieur et Fizz-Buzz est, franchement, ridiculement facile même après avoir tenu compte de la nervosité des entretiens.
J'avais l'impression que j'aurais dû lui montrer un moyen de résoudre le problème afin qu'il puisse au moins apprendre de l'expérience. Mais encore une fois, il n'a pas demandé.
Quelle est la bonne façon de gérer cette situation?
1 D'accord, ce n'est pas le lien vers la vraie question FizzBuzz, mais c'est une bonne discussion P.SE autour de FizzBuzz et des liens vers ses différents aspects.
2 Pour aider à clarifier, c'est la nuance de Fizz-Buzz que j'ai demandé et c'est du premier problème de Project Euler . Impression de remplacement Fizz | Buzz pour additionner les chiffres et vous avez la même question fondamentale.
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Write a function that finds the sum of all the multiples of 3 or 5 below 1000.
3 Cette question a attiré plus d'attention que ce à quoi je m'attendais et j'apprécie toutes les réponses. Certaines des réponses ultérieures sont vraiment entrées au cœur de ma question, je vais donc permettre à la communauté de réviser et de voter avant d'attribuer «la» réponse.
4 J'ai choisi "la" réponse sur la base des votes de la communauté à ce moment-là. Et je pense que la réponse de Yannis est appropriée pour des entretiens avec de nouveaux développeurs. Je pense que la réponse collective se concentrant sur le fait de ne pas demander la réponse est également parfaite.
Réponses:
La plupart de mes entretiens ont été avec des étudiants à la recherche d'un stage, et le plus souvent ils ont raté des exercices simples (?). Je voulais un moyen facile et convivial de communiquer leurs erreurs, et ce que j'ai trouvé était assez simple: j'ai résolu les exercices moi-même et leur ai montré mes solutions après avoir fini avec les leurs.
J'ai eu quelques discussions extrêmement intéressantes et révélatrices avec des candidats qui ont commencé par comparer nos différentes approches pour résoudre le même problème. Après un certain temps, j'ai même anticipé certaines erreurs, juste en vérifiant à quelle école le candidat fréquentait (certains "professeurs" sont ... des crétins). Et bien, dans les rares cas où un candidat n'a pu trouver de solution, je lui en avais déjà donné une pour la prochaine fois.
la source
Donner la réponse
J'allais dire que si le candidat n'était pas assez intéressé pour demander, je ne perdrais pas mon souffle, mais la réponse @Yannis_Rizos est bien meilleure.
Les entrevues sont assez rapides. Je sais que je regarde souvent les choses pendant des jours après une entrevue.
Les personnes qui ne peuvent pas coder FizzBuzz Classic
J'imagine qu'un gros point d'achoppement est de connaître l'opérateur%. On pourrait espérer que quelqu'un pourrait penser à comparer
(myInt / 3) == (myDouble / 3.0)
mais peut-être avec le stress d'une interview ... Pourtant, FizzBuzz Classic force une approche par force brute, le plaçant dans la catégorie des problèmes d'algorithme les plus faciles à résoudre. À titre indicatif, avez-vous essayé de demander aux gens de simplement coder "Fizz" pour un demi-crédit et peut-être d'ajouter "Buzz" plus tard comme amélioration?Je pense que la réponse ultime à votre question est qu'il est vraiment très difficile de trouver de bons candidats.
Questions d'entretiens en général
J'ai souvent trouvé plus facile et plus productif de demander aux candidats de décrire le dernier projet de programmation qui les passionnait. J'ai eu 100% de succès avec cette question, ce qui signifie que les personnes qui parlaient avec animation d'un projet de programmation et pouvaient répondre à des questions techniques à ce sujet étaient de belles recrues et celles qui ne pouvaient pas, ne l'étaient pas. Cela a les effets secondaires agréables de mettre le candidat à l'aise et d'encourager une discussion ouverte. Avec cette question, le candidat vous dira en effet à quoi ils conviennent le mieux.
Peut-être qu'à un algorithme de réflexion, des questions sont également nécessaires, mais je les ai abandonnées au profit de la question "projet préféré".
Sum (Son) de FizzBuzz
Votre question d'entretien n'est pas équivalente à FizzBuzz:
Lorsque FizzBuzz Classic vous oblige à passer par n itérations (pour imprimer chaque numéro ou Fizz / Buzz), votre problème peut être fait en n / 5 + n / 3 + n / 15 itérations, ou même pas d'itérations - une correction directe- le calcul des points est possible. Le programme suivant compare ces trois méthodes:
Sortie (somme de FizzBuzz <1000):
Avec un n plus grand pour la comparaison des performances:
Note à ceux qui ont voté contre ce sujet hors sujet
Le point de présenter une solution à cette question est de montrer que bien que la solution de force brute à Sum of FizzBuzz soit similaire à FizzBuzz Classic, de meilleures solutions au problème Sum sont disponibles, ce qui en fait un problème fondamentalement différent. La somme de FizzBuzz est extrêmement difficile si vous ne vous souvenez pas de la formule appropriée pour la somme d'une série, ou si vous ne réalisez pas qu'elle s'applique lorsque vous progressez de 3 ou 5.
Si vous dérivez la formule pour la somme d'une série en divisant la série en deux, en inversant une moitié et en les associant, vous obtenez (n + 1) (n / 2) qui peut vous emmener sur un chemin vraiment désordonné en ce qui concerne la division entière et les restes tronqués. La version (n (a1 + an)) / 2 de cette formule est absolument critique pour une réponse simple pour toutes les valeurs de n.
la source
t = { |i| (i * (i+1)) / 2 }; fizzbuzz = { |n| 3 * t((n-1)/3) + 5 * t((n-1)/5) }
Peu m'importe le niveau de l'interview, ni même vraiment si c'est une question de niveau "FizzBuzz" ou une question avancée. Si vous demandez à un candidat de résoudre une question, et il ne le peut pas, mais ne vous embêtez même pas à vous demander la bonne réponse, alors il ne vaut pas votre temps. Comment diable pourriez-vous être si paresseux intellectuellement?!?
Et même si vous puez totalement en tant que programmeur et que vous essayez simplement de vous frayer un chemin vers un emploi, pourquoi ne seriez-vous pas au moins assez pragmatique pour obtenir la bonne réponse maintenant, afin de la connaître pour la prochaine entrevue?
Donc non, vous ne devez pas «donner» la réponse, mais vous devez vous attendre à ce que le candidat insiste pour entendre la bonne réponse après son échec. S'ils ne le font pas, c'est un énorme drapeau rouge dans mon livre.
Si quelqu'un a fait exploser FizzBuzz dans une interview de niveau junior parce qu'il ne se souvenait pas de l'opérateur de module et ne pouvait tout simplement pas se résoudre à passer sans lui, mais il s'est ensuite passionné pour le refaire une fois que vous avez expliqué la bonne réponse, ou au moins parler avec le bon code avec vous, c'est presque aussi bien que d'y répondre correctement.
la source
J'ai tapé fizzbuzz au téléphone avec l'intervieweur lors d'un pré-écran. C'est quelque chose que, même si tout le monde n'a pas entendu parler, vous devriez être en mesure de bricoler ensemble après un semestre de cours, mais certainement après avoir acquis le statut de "senior".
Il n'y a vraiment aucun rétablissement à ne pas pouvoir faire cela. C'est l'une de ces nuisances nécessaires dont vous avez besoin pour vous éloigner au cas où.
Je dirais qu'il est logique de fournir un pré-écran afin que vous ne perdiez pas le temps de tout le monde à les amener sur place pour une interview.
la source
Il serait intéressant de savoir ce que vous pensez que la réponse "correcte" à votre question FizzBuzz est. D'où je suis assis, un bon (en C) écrit à la lettre de votre question est:
Un meilleur pourrait être:
Pourquoi diable écririez-vous un programme pour le faire alors que vous pouvez le calculer directement?
Le fait est qu'il y a plus d'une façon d'écorcher un chat, et le fait que le candidat en question n'a pas immédiatement commencé à écrire des
for
boucles et desmod
opérateurs ne signifie pas qu'il est stupide. Si vous voulez savoir ce que le candidat sait, discutez du problème - découvrez ce qu'il pense. S'il est coincé ou confus, découvrez où et pourquoi. Il pourrait vous conduire à une approche que vous n'avez jamais envisagée.En tant qu'enquêteur, ce n'est pas à vous de donner une leçon au candidat . S'ils ne savent vraiment pas comment écrire du code, il n'est absolument pas nécessaire de les embarrasser en s'attardant sur ce qu'ils ne savent pas. S'ils sont suffisamment intéressés pour demander, n'hésitez pas à partager. Sinon, terminez l'entrevue, remerciez-les de leur temps et passez au candidat suivant.
la source
discuss the problem
, cet élément est venu avec d'autres questions lors de l'entrevue. Malheureusement, le candidat a été ... moins que disposé à répondre. Je n'ai pas ajouté cet aspect à la question d'origine, car j'essayais vraiment de respecter les lignes directrices de P.SE pour une "bonne subjectivité".Votre «problème» est que vous êtes un humain empathique, il est donc difficile de regarder quelqu'un lutter avec un problème dont vous connaissez la réponse (c'est également un problème si vous exécutez des études d'utilisabilité). Du point de vue des fonctions d'intervieweur, vous n'êtes en aucune façon obligé d'enseigner à la personne interrogée comment programmer ou résoudre un problème, ou la solution à un problème que vous posez.
Lorsque vous coachez une personne interrogée, ce n'est pas pour qu'elle obtienne la bonne réponse. C'est pour que vous puissiez voir s'ils ne peuvent vraiment pas résoudre le problème ou s'ils se sont juste accrochés à une ou deux erreurs ou malentendus.
Donc, si vous voulez donner à la personne interrogée la solution après coup, vous le faites uniquement pour vous. En général, je préfère utiliser ce temps pour permettre à l'interviewé de tenter un autre problème. Mais un programmeur "senior" qui ne peut pas répondre à FizzBuzz est probablement hors de la liste. Si vous décidez de donner des solutions, assurez-vous de ne pas vous tromper en pensant que l'entretien s'est mieux déroulé que si vous pensiez, "il ne pouvait pas résoudre le problème, mais quand je l'ai expliqué, il l'a bien compris", alors vous êtes sur un chemin dangereux).
Et oui, j'ai été un interviewé qui était au-dessus de sa tête et ne pouvait même pas faire la première tentative pour résoudre un problème d'entrevue. Cela signifiait simplement que je devais en apprendre beaucoup plus pour pouvoir travailler dans ce domaine.
la source
Obtenir la bonne réponse n'est pas la partie importante de ce test. Ce que vous mesurez, c'est l'approche de quelqu'un à la résolution de problèmes, la façon dont il aborde la question, tout ce qui est créatif ou intéressant en cours de route; ce genre de choses. Même s'ils obtiennent la mauvaise réponse, ils peuvent toujours être viables selon ces critères.
OK, ne pas savoir que l'opérateur de mod est inexcusable, et d'après les mesures que j'ai fournies, ce candidat semble toujours être une radiation, mais je ne pense pas que donner la bonne réponse à ce candidat sera de toute avantage.
Cela revient à votre opinion personnelle d'ici. Souhaitez-vous donner un retour sur l'entretien afin d'aider le candidat à mieux réussir lors des futurs entretiens (et pour que les futurs enquêteurs n'aient pas à subir ce que vous venez de traverser)? Si c'est le cas, formulez vos commentaires dans les termes que je viens de décrire ci-dessus: dites-leur que ce n'est pas seulement la bonne réponse, mais comment ils travaillent pour arriver à la réponse est un facteur critique.
la source
how they work to arrive at the answer is a critical factor.
Alors que je m'attendais à ce qu'un opérateur de module soit utilisé, c'est uniquement parce que c'est comme ça que je l' aurais résolu. J'étais très ouvert à voir toute autre approche qui a résolu le problème sans créer d'erreurs flagrantes de conditions aux limites (voir mes divers commentaires sur l'approche avec récursivité ...).À mon avis, il n'y a aucune situation à gérer. En supposant que vous avez rejeté sa candidature, le manque d'intérêt (apparent) du candidat n'est pas quelque chose dont vous devez vous préoccuper.
En effet, même s'il l' a demandé, vous ne lui devez pas d'explication. Et si vous en avez parlé à vos collaborateurs RH, ils pourraient vous conseiller de ne pas poursuivre les discussions avec le candidat pour des raisons juridiques.
Il convient également de noter que le problème FizzBuzz a différentes «meilleures» réponses selon la façon dont vous le demandez. Si vous demandez la solution "la plus simple" et la solution "la plus efficace", les meilleures réponses sont radicalement différentes. Et cela peut colorer injustement votre jugement ... si vous n'êtes pas clair dans la façon dont vous avez posé la question. (D'un autre côté, un bon candidat / expérimenté aurait la clairvoyance de clarifier cela avant de commencer à coder ...)
la source
Pour répondre à votre question, non je ne donnerais pas la réponse. Si la personne veut être un meilleur ingénieur logiciel, elle trouvera la réponse. Si vous leur donnez une réponse, vous leur volez cette opportunité.
La question la plus pertinente est quand pouvez-vous vous appeler un développeur senior? Cela varie selon les organisations et les pays. Par exemple, une entreprise avec laquelle j'ai travaillé considérait des ingénieurs logiciels avec 5 ans d'expérience en tant qu'aînés. Aucun accent n'a été mis sur la qualité de l'expérience, mais uniquement sur la durée.
Jusqu'à ce que nous arrivions à une norme qui catégorisera tous les ingénieurs logiciels, quelle que soit leur langue, il nous appartient de décider du niveau de leurs compétences. Et nous continuerons d'entendre des «ingénieurs principaux» échouer au test de compétences le plus rudimentaire.
Il y a la question semaines a été demandé « Quand devez - vous vous appeler un développeur principal » . J'ai également écrit un article de blog sur le sujet.
la source