J'ai échoué FizzBuzz, voudriez-vous m'engager? [fermé]

27

Je suis développeur avec un diplôme CS et j'ai une expérience de travail en développement dans plusieurs langues depuis près de 3 ans.

Aujourd'hui, j'ai eu une interview, dans l'ensemble ça s'est plutôt bien passé, je me suis préparé à la plupart des questions et je me sentais prêt à tout. À la fin de l'interview, ils m'ont posé UNE question de programmation ... un problème comme FizzBuzz (sans l'imprimer la partie numérique). Je crois que j'ai fait trop d'erreurs et que j'ai donc "échoué". Tout espoir est-il perdu pour moi?

Voici mon code:

  void FizzBuzz()
  {
    for(int i = 0; i <= 100; i++)
    {
      bool isThree = i % 3;
      bool isFive = i % 5;

     if (isThree)
     {
         print "Fizz\n";
     }
     else if(isFive)
     {
         print "Buzz\n";
     }
     else
     {
         print "FizzBuzz\n";
     }
  }
 }

Comme vous pouvez le voir, j'ai foiré les bools qui devraient avoir la syntaxe i% 3 == 0; Si je me souviens bien de la question, j'ai également mis un autre au lieu d'un autre avec isThree && isFive. J'étais assez stressé, mais ce n'est pas une excuse pour avoir manqué un simple problème.

La question est donc de savoir dans quelle mesure est-il important de produire un code de travail sur place par rapport à d'autres facteurs, tels que l'expérience et la personnalité? Par exemple, le code ci-dessus serait-il une rupture de marché?

ja_programmer
la source
31
Je pense que le fait que vous ayez utilisé l'opérateur de module est assez bon
Ryathal
9
vous n'imprimez pas non plus le nombre quand ce n'est ni un multiple de 3 ni 5. Le fait que vous n'ayez pas mentionné cela non plus en publiant cette question rendrait également très sceptique.
whatsisname
13
Comment peut-on répondre à cela au nom de vos enquêteurs?
pdr
5
Conseils tangentiels - faites des projets de problèmes euler 1-10 et vous aurez une poignée sur de nombreuses questions de types standard qui vous seront posées comme "pouvez-vous programmer - écrire ce code"
20
Je ne pense pas que j'embaucherais quelqu'un qui n'a pas réussi à écrire FizzBuzz, mais à mon humble avis, vous avez échoué à écrire parfaitement la syntaxe sur un tableau blanc, ce qui est autre chose.
Michael Shaw

Réponses:

44

Le but de FizzBuzz est de montrer que vous savez réellement programmer , pas que vous avez mémorisé toutes les règles de syntaxe plus fines du langage dans lequel vous avez été invité à programmer (bien que cela ait de l'importance, s'ils veulent savoir comment ils sont expérimentés) vous êtes dans la langue).

Si vous êtes allé si loin dans le stress d'un environnement d'entrevue et pouvez montrer que vous comprenez les erreurs que vous avez faites, je dirais que vous avez réussi.

Robert Harvey
la source
D'accord, je n'essayais pas d'impliquer que c'était moi qui mémorisais la réponse. C'est que je sens que je suis un programmeur tout à fait compétent, mais j'ai l'impression de n'avoir qu'un seul problème de programmation et de ne pas bien le faire, c'est un très mauvais reflet de mes capacités. Ils n'ont également rien dit sur le problème. Je n'ai réalisé l'erreur de mes voies que lorsque je suis monté dans ma voiture et que j'ai commencé à rentrer chez moi. Alors c'était un OMG pourquoi !! réaction.
ja_programmer
Vous ont-ils d'abord posé la question FizzBuzz? S'ils n'ont pas mis fin à l'entretien tout de suite, vous avez réussi. Les enquêteurs tiennent compte d'autres facteurs en plus d'un simple test de codage; les bons employeurs veulent des gens qui savent penser de manière critique et résoudre les problèmes.
Robert Harvey
Ils ont passé la plupart du temps à me poser des questions sur mon CV, à me poser des questions sur les différentes technologies que j'avais utilisées et comment je les utilisais. Et puis ils m'ont demandé le problème de programmation. Ensuite, ils m'ont posé des questions sur moi. Ensuite, j'ai posé un certain nombre de questions et je leur ai serré la main et je suis parti.
ja_programmer
4
Les bons enquêteurs mettront fin à l'entretien lorsqu'il n'y aura plus d'intérêt à vous embaucher, ce qui aurait dû se produire juste après FizzBuzz si vous avez échoué au test. Cela ne signifie pas qu'ils vous embaucheront toujours, mais cela signifie que vous n'avez pas échoué à l'entrevue.
Robert Harvey
4
@RobertHarvey - tout le monde ne coupera pas l'interview sur-le-champ. Avec mon récent candidat qui a échoué FizzBuzz, j'ai continué l'entretien pour essayer de voir s'il pouvait sauver des choses. En d'autres termes, j'étais prêt à accepter de manquer l'exercice en raison du stress de l'entretien.
26

Oui

La plupart des personnes que j'ai interviewées qui ont échoué la partie exercice de code sur une syntaxe mineure ou une logique légèrement décalée ont fini par être les meilleures recrues.

Il est beaucoup plus important pour moi d'avoir l'idée de base de la logique (ce que vous avez fait) et de le convertir en quelque chose de décent et concis d'un point de vue de code (ce que je pense que vous avez surtout fait) que de le rendre absolument parfait.

J'achète un IDE pour sa vérification de syntaxe et non pour l'embauche d'un développeur, et vous auriez réalisé les autres erreurs dans les instants de votre premier débogage.

Vous êtes passé de l'exigence initiale à une première tentative assez directement et sans rien faire de terrible. C'est plus précieux dans de nombreux environnements que la perfection en l'absence de rétroaction. Si l'employeur est accroché aux détails que vous avez manqués, cela pourrait être un signe de l'environnement à venir de toute façon.

Si la tâche était la variante des numéros d'impression, manquer le détail serait un peu mauvais, mais cela n'aurait pas assez de poids pour changer ma décision si je vous aimais pour le poste autrement.

[Modifier] Comme Alex l'a souligné, il y a aussi l'aspect réaction et calme. Personnellement, j'essaie d'éliminer cela avant de passer aux exercices pratiques en essayant de coincer l'interviewé sur quelque chose un peu en dehors de son expérience, mais certains peuvent choisir de combiner les deux. De temps en temps, je rencontre quelqu'un qui n'a que des connaissances en manuels et qui navigue à travers les questions théoriques et de fond, mais qui se demande sérieusement où commencer l'exercice pratique. Certains ne savent même pas par où commencer.

Ces personnes sont exactement ce que je veux éliminer avec cet exercice.

Donc, à moins que vous ayez pris 20 minutes pour que l'intervieweur clarifie l'exigence, j'imagine que votre solution était plus ou moins votre première tentative avec éventuellement quelques corrections au fur et à mesure. Si vous avez obtenu ce que vous avez mis ci-dessus en moins de 5 minutes, vous avez montré que vous pouviez penser suffisamment à mes normes.

Facture
la source
2
Bill, je veux juste dire merci beaucoup pour la rétroaction détaillée. C'est agréable d'avoir d'autres perspectives. C'est juste frustrant de faire des erreurs sur quelque chose d'aussi simple et de savoir que tu es meilleur que ça.
ja_programmer
1
Laissez-moi simplement confirmer ce que Bill vient de dire. Ce type de test est principalement conçu pour voir comment les gens réagissent sous pression. Vous n'êtes PAS censé être un programmeur parfait lorsque vous travaillez dans ces conditions. Vous êtes juste censé ... travailler. Vraiment. On s'attend juste à ce que vous restiez calme et affrontiez le problème du mieux que vous le pouvez. C'est exactement ce que tu as fait.
AlexBottoni
Ce n'est pas seulement le fait de ne pas imprimer les chiffres, c'est aussi l'incapacité de reconnaître qu'à des multitudes de 15, vous n'imprimez pas Fizz ou Buzz mais FizzBuzz. Cela ne montre pas une bonne décomposition du problème. Quand imprimer "FizzBuzz" est imo l'élément le plus important de ce puzzle.
Pieter B
Je n'utilise pas cet exemple particulier car de nombreuses maisons de sous-traitance ont leurs candidats mémorisés, mais d'après mon expérience, les personnes qui commettent les erreurs "oh duh" dans ces exercices se révèlent généralement être de meilleurs collègues. Sa logique est partie du bon endroit, et il n'y a pas un tas de merde supplémentaire, c'est bien. Il a raté quelque chose que vous auriez vu dans la première compilation. Je préférerais avoir un gars qui se trompe 3 fois en 15 minutes, puis qui est bon que le gars qui prend 30 minutes pour commencer.
Bill
@Bill - Quel type de réponses à ce problème voyez-vous? Je ne comprends tout simplement pas comment quelqu'un qui n'a pas eu de cours de programmation ne peut pas en savoir au moins autant que moi. J'ai écrit cela en peut-être une minute à une minute et demie et la seule raison pour laquelle cela a pris autant de temps était parce que je parlais et écrivais sur le tableau blanc en même temps.
ja_programmer
15

Le code ci-dessus serait probablement une rupture pour moi si je n'avais rien d'autre à faire. S'ils suivent le style d'interview de Microsoft, la personne qui vous a posé cette question vous bloquera probablement - et c'est souvent tout ce qu'il faut.

Ce qui me déconcerte, c'est que l'intervieweur ne vous a pas posé de questions sur ce code. Un bon intervieweur a vu suffisamment de son propre code pour savoir que les gens font des erreurs - surtout lorsqu'ils sont pressés. Habituellement, ils disent: "Maintenant, voyez-vous quelque chose de mal avec ce code?" "Non? Eh bien, testons-le". Vous venez avec quelques jeux de résultats, puis exécutez-le via la fonction. Ensuite, vous dites: "Oh merde, cela n'a pas fonctionné." "D'accord, comment le réparerais-tu ..." et ainsi de suite. Si vous survivez à ce dialogue, il est en fait assez impressionnant et démontre une capacité à penser de manière critique, à proposer des cas de test et à déboguer votre propre code.

Notez également qu'ils ne recherchent généralement pas de "code de travail". Qui produit le premier essai de toute façon? Mais logiquement correct avec la gestion des erreurs et de bons ensembles de tests est un bon objectif.

De plus, cela peut vous surprendre, mais vous êtes en concurrence avec de nombreuses personnes qui ne peuvent même pas se lancer sur fizzbuzz. Nous avons tendance à supposer que tout le monde traverse des arbres b + dans leur sommeil ... mais en réalité, ils ne peuvent même pas comprendre des multiples de 3 et 5 et utiliser un opérateur de module. Vous serez peut-être agréablement surpris de voir à quel point vous avez fait mieux que les autres candidats.

Mon conseil, il suffit de le brosser. J'ai récemment interviewé dans de grandes sociétés de logiciels (Microsoft, Amazon, etc.), et c'était la première fois que je passais par un processus d'entretien aussi approfondi. Je me suis ridiculisé lors d'une interview sur place de Microsoft, principalement à cause des nerfs, mais aussi, je ne savais pas à quoi m'attendre ou exactement ce qu'ils recherchaient. J'ai cloué un problème de chemin le plus court pour faire exploser des problèmes vraiment simples. J'ai sauté des valeurs de la mauvaise extrémité d'une pile, j'ai oublié dans une int atoi(char* value)implémentationint val = value[i] - '0';me donnerait la valeur entière du caractère, et plusieurs autres erreurs stupides. J'étais pour la plupart satisfait de l'entretien, mais je comprenais toujours pourquoi je n'avais pas reçu d'offre. Je devais réaliser que ce n'était pas tant une réflexion sur mes capacités que c'était un indicateur que j'avais juste besoin de continuer à l'essayer jusqu'à ce que je sois capable de maîtriser mes nerfs. Finalement, j'ai réussi quelques interviews avec des questions beaucoup plus difficiles et j'ai décroché mon emploi de rêve. C'est vraiment - pour la plupart des gens qui savent réellement ce qu'ils font - juste une question de comprendre ce que les enquêteurs veulent, d'avoir confiance en soi et de le leur donner. Cela prend du temps.

Jonathan Henson
la source
Je suis d'accord que le code serait aussi un facteur de rupture pour moi (j'ai été dans certaines positions principales où je devais revoir le code). Je m'attendais à ce qu'ils me posent un certain nombre de problèmes de programmation et qu'ils fassent ce que je pensais être l'approche "traditionnelle" consistant à m'expliquer le problème si nécessaire. Comme vous l'avez dit, "Voir tout ce qui ne va pas avec ce code" m'aurait immédiatement prévenu. Je ne m'attendais pas à FizzBuzz et j'ai pensé que c'était un exercice de vitesse. Et j'étais très nerveux, je n'ai pas beaucoup dormi la nuit précédente. Heureux d'apprendre que vous avez obtenu l'emploi de vos rêves. Je vais continuer à interviewer pour obtenir le mien aussi!
ja_programmer
@ja_programmer bien fizzbuzz est un exercice de vitesse. Vous êtes censé le terminer en moins de 2 minutes. Ils ne testent pas vos capacités de résolution de problèmes, juste votre capacité à écrire rapidement du code simple. On m'a également demandé "Voyez-vous des problèmes avec ce code?" quand le code était complètement correct et qu'ils essayaient juste de jauger ma confiance ou de me faire chier - je n'ai pas encore décidé.
Jonathan Henson
Bon point, ils pourraient dire que si c'était correct. Cependant, je pense que dans ce cas, j'avais besoin d'une bonne tape à l'envers de la tête que les "problèmes avec ce code" auraient gagnés. Si j'avais passé un test simple comme une personne normale, je remarquerais que ma logique était incorrecte. De plus, en ce qui concerne votre question, je vais aller avec un peu des deux;)
ja_programmer
2
+1 pour No? Well let's test it. Je demande aux candidats d'écrire du buzz lors des entretiens. Je leur fais également passer un test unitaire. Parfois, leur fizz buzz échoue, mais leur test unitaire le détecte, ce qui les amène à le réparer - c'est très bien. Les gars qui sont rejetés sont ceux qui écrivent une solution défaillante, puis écrivent un test qui ne parvient pas à détecter cela. Je leur demande, êtes-vous satisfait de ce test, si c'est le cas, c'est quand ils échouent.
Qwerky
12

Je dois dire non, mais pas pour la raison que vous avez donnée, mais que vous avez mis la section FizzBuzz en dernier. Avec la façon dont votre code fonctionne, il n'imprimera jamais FizzBuzz lorsque vous vous y attendez. Comme l'a commenté Lee, il l'imprimera pour chaque valeur non divisible par 3 ou 5.

Mais l'essentiel est que vous en tiriez des enseignements. J'aime le fait que vous soyez ici pour savoir comment vous auriez pu faire mieux. Assurez-vous de faire quelques casse-tête de code et de rechercher des questions d'entrevue courantes. Aussi, essayez peut-être de vous chronométrer ou faites autre chose qui augmenterait la pression afin que vous puissiez essayer d'imiter le sentiment que vous allez ressentir lors d'une entrevue. Et préparez-vous, préparez-vous et faites plus de préparation pour l'entrevue si vous voulez vraiment la sortir du parc.

David Peterman
la source
3
Il imprimera FizzBuzz chaque fois qu'il in'est pas divisible par 3 ou 5.
Lee
1
Ouais, je m'en rends compte. Je ne sais vraiment pas à quoi je pensais.
ja_programmer
@Lee désolé, tu as raison, je voulais dire que ça n'imprimerait jamais quand il le voulait.
David Peterman
1
@mattnz Non, mais je m'attends à ce que quelqu'un qui revendique 3 ans d'expérience soit capable de rédiger un énoncé de fonctionnement if, et même s'il se trompe, soit capable de me dire avec précision où il s'est trompé. (aucune infraction à l'OP, juste essayer d'être aussi honnête que possible)
David Peterman
6
@mattnz: Je serais moins préoccupé par les bugs et la compilation que par le fait que la logique du programme est complètement fausse. Je pourrais vivre avec l'erreur isThree = i% 3, mais la partie "sinon imprimer FizzBuzz" le tue pour moi. Je donnerais probablement un petit coup de pouce à la personne interrogée pour voir si elle peut attraper et résoudre ce problème, mais sinon, c'est un dealbreaker.
Misko
9

Non. Le but de FizzBuzz est de voir si vous êtes capable d'élaborer une logique conditionnelle de base, qui couvre tous les cas. Contrairement à l'opinion de certaines personnes, FizzBuzz ne concerne pas l'opérateur de module, connaissant les opérations ternaires ou les opérandes booléens. C'est un simple exercice conditionnel et vous l'avez échoué.

Le problème est structuré de sorte que tout le code "élégant" ne couvre pas au moins un cas.

Réponses acceptables:

if div3 print fizz
if div5 print buzz
if !div3 && !div5 print x


if div3 {
    print fizz;
    if div5 {
        print buzz;
    }
} else {
    if div5 {
        print buzz;
    } else {
        print x;
    }
}
RokL
la source
2
Votre deuxième exemple est beaucoup trop déroutant.
Brian
7

Je donne aux gens des problèmes de programmation triviaux à faire sur le tableau blanc. Que le code résultant soit exempt de bogues n'est pas du tout le point de décision. Au lieu de cela, je me soucie d'un certain nombre de comportements exposés lors de l'écriture du code. C'est interactif et j'apprends beaucoup sur les candidats pendant que ça se passe.

J'entre plus en détail lors des "tests" du tableau blanc lors d'une interview: moyen légitime de sauvegarder votre code (tableau blanc)?

Bien sûr, votre intervieweur ne ressemble peut-être pas à moi. Mais il est tout à fait possible que vous ayez passé une interview avec moi tout en produisant du code qui est un tout petit peu plus loin, et tout à fait possible d'avoir échoué avec le code identique.

Kate Gregory
la source
1
Merci pour le lien. C'était une assez bonne lecture. C'est tout ce dont j'ai entendu parler (il y a quelques années) lors de mon entretien préparatoire. J'aurais aimé avoir entendu vos conseils avant cette dernière interview. On ne m'a posé aucune question, mais je n'ai pas non plus répondu et donné des informations. Enfin peut-être un peu, mais je pense que la plupart de ça a été marmonné. Je prendrai vos conseils à cœur et les utiliserai dans une future interview (je l'espère bientôt). Merci!!
ja_programmer
4

Si j'évaluais cela, je chercherais les choses suivantes:

  1. Le candidat essaie-t-il de bien comprendre les exigences avant de passer à la mise en œuvre? Le candidat cherche-t-il à résoudre mon problème ou à utiliser ses outils pour animaux de compagnie dans sa boîte à outils de programmation? Comment le candidat résout-il ses problèmes?
  2. Le candidat parle-t-il couramment au moins un langage de programmation?
  3. Le candidat a-t-il une compréhension de la logique booléenne?
  4. Que fait le candidat pour assurer la qualité de ses solutions?
  5. Comment le candidat réagit-il aux commentaires sur son code?

-

C'est difficile à dire sur # 1. Votre question indique que votre problème ne comprenait pas la partie "numéro d'impression" et votre solution ne comprend pas cela en fait. Je n'ai pas d'autre choix que de vous croire sur parole, mais si en fait c'était le problème classique de FizzBuzz qui comprenait l'impression des nombres qui n'étaient pas divisibles non plus, alors il semble que vous ayez sauté à une solution avant de bien comprendre les exigences, ce qui serait une marque.

Je vous donnerais un crédit partiel pour les numéros 2 et 3. Vous saviez utiliser l'opérateur de module et possédiez la structure d'une solution de travail, mais vous avez manqué des parties des deux.

Il semble que vous n'ayez pas fait # 4, ce qui vous marquerait. À l'avenir, je recommanderais de prendre du recul par rapport au tableau blanc et d'examiner votre solution avant de l'appeler terminée. Je voudrais également (sans être invité) passer par quelques tests unitaires pour votre solution, qui auraient rapidement démontré où vous aviez gâché.

Ils ne vous ont pas donné de chance sur # 5, ce qui est regrettable. Mais le fait est que je ne veux pas quelqu'un qui pense que chaque ligne de code qu'ils ont jamais écrite est de l'or pur qui ne pourrait pas être amélioré, mais plutôt quelqu'un prêt à accepter les commentaires sur ses solutions et à engager une conversation sur son approche .

-

Donc, si j'évaluais cela, je voterais «Non embauché». Des choses comme celles-ci sont en quelque sorte une mesure d'un art de la performance plutôt qu'une capacité de programmation , mais la maîtriser peut encore aider votre carrière. Donc, mes recommandations pour les futures entrevues technologiques seraient:

  1. Avant l'entretien, pratiquez quelques-uns de ces types d'exercices à froid, en utilisant le moins possible de ressources extérieures. Pas pour mémoriser des solutions, mais pour être sûr que vous êtes à l'aise avec votre langue préférée

  2. Posez des questions sur le problème pour valider vos hypothèses.

  3. Avant d'annoncer que votre solution est terminée, reculez du tableau blanc et regardez-la, et parcourez quelques cas de test unitaires simples.

JohnMcG
la source
Bien que je sois d'accord avec cela comme objectif d'entretien de base, ce n'est pas le but du fizzbuzz. Fizzbuzz mesure une chose et une seule chose. Pouvez-vous écrire du code simple rapidement et correctement? Habituellement, les enquêteurs souhaitent que cette question soit posée en moins de 2 minutes. Ce n'est pas tout, je sais, mais c'est pour cela que la question est conçue.
Jonathan Henson
1
Le but de fizzBuzz est tout ce que l'intervieweur veut que ce soit. Si je devais utiliser fizzBuzz ou un exercice similaire, c'est ce que je rechercherais.
JohnMcG
1
Certes, toute question d'entrevue est ce que l'enquêteur veut utiliser pour évaluer les choses qui l'intéressent. Mon point est que FizzBuzz est une très mauvaise question pour évaluer autre chose que, "Peut-il / elle écrire le code correct rapidement?" Ce n'est pas vraiment assez difficile techniquement pour évaluer les compétences de pensée critique. Si quelqu'un se bloque sérieusement sur cette question, en voulez-vous même dans votre équipe? C'est comme embaucher un ingénieur qui ne peut pas faire de calcul de base. Alors que tout le monde veut s'assurer que l'ingénieur connaît son calcul de base - il est vraiment non négociable qu'il le fasse.
Jonathan Henson
2

Demander à quelqu'un de résoudre un problème sans lui donner la possibilité d'obtenir des commentaires sur sa solution est une approche discutable, car il ne lui est pas permis de s'améliorer.

Tout ce test nous indique que vous n'avez pas démontré de très bonnes compétences de résolution de problèmes "haut de gamme".

Cela pourrait être l'un des éléments de la décision de vous embaucher ou non, mais pour moi, ce ne devrait certainement pas être le seul.

S'ils vous auraient fourni un environnement de test ou d'exécution unitaire, les erreurs que vous avez commises auraient été moins excusables.

guillaume31
la source
1
Il y a un moment et un endroit pour améliorer vos capacités, mais l'entretien d'embauche n'est pas le cas.
RokL
Impliquez-vous qu'un recruteur ne devrait pas se soucier de la capacité de la candidate à s'améliorer?
guillaume31
1
L'amélioration de soi se fait sur des échelles de temps supérieures à une heure. Ce n'est pas important pour le recruteur.
whatsisname
Je pense que compte tenu de la facilité du problème, je n'aurais pas dû faire d'erreurs malgré le stress. Cela étant dit, je pense qu'il y a des motifs "d'amélioration" dans des problèmes comme celui-ci, si l'intervieweur pousse un peu le candidat. Même dire quelque chose d'aussi simple que "pensez-vous que vous pourriez améliorer cela?" donnera au candidat un indice que quelque chose ne va pas ou qu'il pourrait faire mieux. Je n'ai reçu aucun commentaire de ce genre.
ja_programmer
@whatsisname: Je pense que cela devrait être important pour le recruteur, mais pas de la façon dont vous pourriez le penser. Si le candidat est refusé, le recruteur a besoin de commentaires pour comprendre pourquoi afin qu'il puisse présenter de meilleurs candidats à l'entreprise à l'avenir, et expliquer à ce candidat comment devenir un candidat plus fort pour l'avenir. Je pense qu'il y a place à un bénéfice mutuel.
alroc