FizzBuzz - vraiment? [fermé]

60

En ce qui concerne les questions du "test d'interview", le sujet de FizzBuzz est souvent abordé. Il y a aussi un post de Coding Horror à ce sujet.

Maintenant, si vous vous donnez la peine de lire des sites comme celui-ci, vous êtes probablement moins susceptible de faire partie de la démographie des programmeurs qui trouveraient FizzBuzz tout sauf trivial.

Mais est-il vraiment vrai que 99% des programmeurs auront des difficultés avec cela?

Vraiment?

Quelles sont les preuves pour sauvegarder cela?

Quelques exemples concrets seraient très utiles pour répondre à cette question.

DanSingerman
la source
57
Ce n'est pas 99% des programmeurs, c'est 99,5% des candidats (dont beaucoup ne sont pas des programmeurs).
Webbiedave
4
Je n'y croyais pas avant de l'avoir eu lors d'une entrevue. J'ai plus tard obtenu le poste, puis plus tard, j'en ai parlé avec le chef de la direction. Apparemment, 99% est à peu près correct. Oo
Fishtoaster
3
J'ai toujours pensé que les questions de fizzbuzz étaient un mythe, ou peut-être juste pour les débutants, mais un jour, on m'a posé une question lors d'un entretien. Oui, beaucoup de candidats ont-ils vraiment des problèmes avec ça?
DarenW
2
Je donne régulièrement le test FizzBuzz lors des entretiens et je le fais régulièrement passer par des gens. Un graphiste l'a adopté un jour cependant ..... m'a surpris un peu :)
Brandon Wamboldt
4
@Rogue Coder - Hé, nous ne sommes pas stupides, c'est juste bizarre. Et la plupart d'entre nous craint en maths.
Inaimathi

Réponses:

46

99%? Non. Un pourcentage significatif? Oui. De par ma propre expérience d’interviewer des personnes, je peux témoigner de celle-ci. Cela peut sembler insignifiant pour vous, mais beaucoup de personnes dans le domaine de la programmation ont plus ou moins truqué leur chemin depuis des années et postulent à des postes de niveau débutant et échouent à celui-ci.

Même si vous POUVEZ le résoudre facilement, mais vous me donnez une énorme statique sur le fait d'être invité à faire une tâche aussi subalterne comptera pour vous. Faire partie d'une équipe signifie parfois que vous devez faire des choses qui ne vous plaisent pas, mais qui sont nécessaires. Si, dès le départ, nous avons même commencé à travailler ensemble, vous pensez qu'il serait préférable d'essayer d'affirmer votre statut particulier d'être au-dessus de ce que je vous ai demandé de faire, alors cela agira comme une marque contre vous.

Je ne me soucie pas nécessairement de l’élégance de votre solution (même si ce serait bien), mais vous voir poignarder sur un tableau blanc et vous frayer un chemin à travers elle m’indique que vous êtes au moins disposé à le faire. . Si vous vous indignez et dites quelque chose du genre "je suis un résolveur de problèmes, pas un singe codé!" alors vous serez renversé une cheville.

Les personnes interrogées ont tout simplement refusé de commencer à le tenter. Tout simplement refuser. Non, euh. Je ne le ferai pas. Je pose une ou deux autres questions polies, je les remercie de leur temps et clore l'entretien.

Je dis cela en tant que gestionnaire et en tant que développeur.

Todd Williamson
la source
1
Quels sont leurs motifs pour refuser de le tenter?
Jon Hopkins
3
Je ne leur ai jamais directement demandé. Après leur deuxième refus, je poserais quelques questions de plus et clôturais ensuite l'entretien. Si j’allais deviner, c’est qu’ils étaient trop nerveux pour essayer (si j’étais charitable) ou qu’ils ne pouvaient pas le savoir immédiatement (si j’étais plus cynique).
Todd Williamson
1
Je connais un gars qui refuse de coder en entrevue. Il refuse également de consigner dans la mémoire tout ce qu'il peut rechercher en quelques secondes de Google. C'est un "résolveur de problèmes".
Kirk.burleson
4
Là encore, le codage au tableau blanc est un problème que l’enquêteur vous pose… qu’il faut résoudre, peut-être? Pour moi, refuser de coder dans l'interview équivaut à refuser de résoudre un problème que l'intervieweur a. D’où une contradiction avec le terme "solutionneur de problèmes" et c’est plus comme si le gars était un "refuseur de problèmes".
Spoike
@Spoike Nope parce que les personnes qui résolvent des problèmes n'ont pas besoin de connaître la syntaxe d'un langage de programmation, n'est-ce pas?
Pierre Arlaud
25

Je pense que 99% des programmeurs qui postulent à un emploi (et ne l'obtiennent pas) risquent d'avoir du mal à le trouver. Mais pas 99% des programmeurs qui occupent un emploi de manière productive.

C'est la nature de notre processus moderne de recherche d'emploi. Beaucoup de personnes qui postulent ne sont pas qualifiées.

Cet article de Coding Horror parle également de la façon dont nous enseignons l'informatique aujourd'hui. Dans le passé (en particulier au MIT), vous deviez apprendre des choses comme Lisp, ce qui vous oblige à comprendre des concepts tels que la récursivité.

De nos jours, Java est enseigné aux utilisateurs car son utilisation est largement répandue dans l’industrie. L’accent a été mis sur la syntaxe plutôt que sur la réflexion en profondeur sur la programmation. Je n'aime pas Java; En fait, je pense que c'est un premier langage de programmation idéal. Mais je n'ai pas vu mes instructeurs enseigner des principes de programmation profonds avec cela.

Robert Harvey
la source
11
Oui, je pense que notre système d'éducation (du moins aux États-Unis) est une partie importante de cela. Je connais une personne qui a obtenu un diplôme en programmation logicielle de 2 ans, qui a obtenu son diplôme avec mention et qui ne sait ni lire ni écrire du code.
Rachel
8
L'argument contre l'enseignement de Java est faible. Les concepts peuvent être enseignés dans la plupart des langues (recusrion s’écrit facilement en Java, par exemple). Je ne conteste pas que l'enseignement des concepts enseignés s'affaiblisse, mais je ne le blâme pas arbitrairement sur le langage de mise en œuvre.
Steven Evers
1
Oh, des choses comme la récursion sont enseignées, elles ne sont tout simplement pas utilisées. Vous obtenez la même note pour l’écriture d’une instruction IF de 100 lignes que celle d’une fonction récursive (du moins où vous l’avez fait), et l’instruction de 100 lignes IF est plus facile à écrire lorsque vous êtes pressé (c.-à-d. 'ai fait vos devoirs jusqu'à 5 minutes avant de devoir le rendre)
Rachel
1
@SnOrfus: Je ne le blâme pas non plus sur Java. Je n'ai pas contesté l'enseignement de Java. Oui, vous pouvez enseigner ces concepts en Java, mais je ne l'ai pas vu se produire, pas dans les classes Java que j'ai suivies, de toute façon. Cela dit, le MIT avait initialement choisi Scheme pour ses cours d'introduction à la programmation, car sa syntaxe était très simple. Vous devez donc commencer à réfléchir aux concepts de programmation très tôt, sans devoir vous concentrer sur la syntaxe du langage.
Robert Harvey
4
Qui sur terre va dans une université où ils "enseignent Java". Les écoles de langage de programmation sont moins qu'utiles (qu'elles soient Java, C ++, Lisp ou autre); est-ce ce que vous avez aux États-Unis? Là où j’ai étudié la CS, vous avez plus ou moins appris le langage prog tel que requis (une exception serait la classe Paradigms, je suppose). Les cours universitaires enseignaient les mathématiques, la théorie de la communication, de multiples paradigmes de programmation, le calcul, etc. Toute personne qui en sortait peut facilement résoudre FizzBuzz, car nous devions résoudre des problèmes plus difficiles simplement pour réussir les cours.
Andres F.
20

Je déteste dire ça mais

La principale raison pour laquelle j'ai constaté que les questions relatives à la programmation ne répondaient pas, était la faute du demandeur plutôt que du répondeur.

Je me souviens très bien d'une interview dans laquelle on me demandait comment créer un algorithme de recherche de collection particulier qui s'exécutait à temps constant (même nombre de recherches quel que soit le nombre d'éléments de la collection). J'ai tâté et ai bafouillé pendant 20 minutes avant d'abandonner. C’est alors que ce génie de l’interview a démontré que sa réponse fonctionnait presque toujours, mais pas toujours. Un peu comme dire "Donnez-moi une réponse de zéro", puis accepter 0,1.

En résumé, j’ai vu trop de cas dans lesquels une personne interrogée pose une question qui ne répond pas aux critères suivants:

  1. Ils connaissent toutes les réponses correctes possibles.
  2. Ils savent pourquoi les bonnes réponses sont correctes.
  3. Ils savent comment fournir suffisamment d’informations sans donner la réponse.
  4. Les questions de "résolution de problèmes" ne reposent pas sur la connaissance d’un fait non divulgué (c’est le plus gros problème que j’ai vu).
  5. Si vous n’aviez pas à la comprendre, il faudrait moins d’une minute pour écrire la réponse. Si cela prend 5 minutes pour taper le code, il faudra vraiment plus de problèmes que nous ne pouvons en intégrer dans la partie verbale de l'interview.
  6. Les questions sont basées sur plus que simplement "Un problème que j'ai rencontré une fois ou qui m'a été donné à l'école et vous devez donc savoir comment le résoudre tout de suite ". Je parie que vous avez eu plus de 2 minutes pour y répondre, pourquoi ne donnez-vous pas la même courtoisie au candidat?

Sérieusement (1), je pense que demander aux gens d'écrire du code dans la partie verbale d'une interview est stupide.

Sérieusement (2), je pense qu'interroger des personnes sans leur demander d'écrire du code est également stupide.

Sérieusement (3), vous devriez soit leur donner des "devoirs", leur demander de leur apporter des échantillons de code, soit leur donner un ordinateur portable et quelques questions et un bureau silencieux pour travailler dessus. Puis laissez-les seuls pendant qu'ils travaillent dessus. J'adopte généralement cette dernière approche car cela limite leur capacité à obtenir de l'aide extérieure (triche) et je peux chronométrer cela.

MIA
la source
Avez-vous eu une discussion avec l'intervieweur pour expliquer pourquoi sa solution n'était pas du temps constant? Si j'étais l'intervieweur et que vous pouviez me succéder de manière succincte et sans malice, je vous engagerais sur-le-champ.
Nemi
1
@Nemi - Oui je l'ai fait. La personne en question n'était pas un responsable du recrutement, mais j'ai reçu une offre pour le poste.
MIA
8
int? result; for (int i = 0; i < int.MaxValue; i++) { T item = (i < array.Length) ? array[i] : someDummyItem; if (item == whatWereLookingFor) result = i; } return result;- temps constant :)
configurateur
Corrigez-moi si je me trompe, mais je pense que les tables de hachage ont des temps d'accès constants, en supposant qu'elles soient faites correctement et en l'absence de collision. Par conséquent, une recherche utilisant une fonction de hachage devrait être possible en temps constant.
Trylks
Les hachis peuvent avoir des collisions. C'est pourquoi il est généralement indiqué en temps constant amorti.
Rig
10

Tout ce que vous devez faire est de rechercher sur FizzBuzz. Il y avait une énorme vague de billets de blog à ce sujet. De manière générale, le blogueur a déclaré: "J'ai dit aux gens de l'écrire dans [une langue] et voici le genre d'erreurs qu'ils ont commises:", puis une liste de pièges à éviter. Le plaisir commence dans les commentaires où les gens disent "ah! C'est trivial dans [une autre langue], tout ce que vous avez à écrire est ceci:" suivi d'un code. Le commentaire suivant trouve invariablement des bugs dans le premier. On dirait que de très bons développeurs ne réussissent pas du premier coup, dans aucune langue. Certaines des erreurs:

  • J'ai demandé de 1 à 100 et vous avez fait de 1 à 99 ou de 0 à 99
  • bousiller sur s'il faut imprimer le numéro avec fizz et / ou buzz
  • désaccords sur "fizzbuzz" vs "fizz-buzz"
  • optimisations manquées, comme comparer deux fois quand une fois ferait
  • beaucoup plus

Lorsque je recrute, je demande aux gens de coder au tableau blanc pour moi, rien de plus compliqué (je sais, vous ne pensez pas que ce soit compliqué) et de nombreux candidats échouent complètement. Je veux dire comme écrire vb-style If, ​​Then, End If, mais mettre aussi des accolades (juste pour être sûr) ou écrire C # (et demander d'abord, C #?) Mais ne pas avoir un point-virgule nulle part. Ne me lancez pas sur des erreurs de logique!

Kate Gregory
la source
2
@ Jeff la plupart des développeurs écrivent d'abord quelque chose qui ne serait pas compilé. Les bons regardent et corrigent les erreurs de syntaxe simples. Stressé, bon ou calme, ok Les programmeurs écrivent une fonction mais pas de code pour l’appeler, écrivent quelque chose qui n’est pas super optimisé, souffrent (et ne repèrent pas) un décalage, ou risquent de rater une ou deux erreurs de syntaxe. Les programmeurs horribles écrivent du code qui est loin d'être compilable, fait la chose totalement fausse, etc. Boucler à 3 ou 5, par exemple, puisque ceux-ci sont dans la question, au lieu de boucler à 99, 100 ou 101 (même) code du tout. Vous ne pouvez vraiment pas y croire avant de le voir.
Kate Gregory
7
Si {"Si {} Alors {} EndIf" est considéré comme un échec total} Alors {votre style d'entrevue est défectueux et / ou vous êtes incroyablement chanceux de pouvoir renvoyer un candidat sur une base aussi triviale} EndIf
Sparr
7
Je programme dans au moins une douzaine de langues tous les mois. Asseyez-moi devant un ordinateur et demandez-moi de travailler dans un ordinateur que je n'ai pas touché depuis un mois et je ferai de telles erreurs pendant les cinq premières minutes, tandis que je me retrouve dans le gouffre. par le compilateur ou interprète.
Sparr
2
Sparr - bien sûr. Donc, au tableau blanc, si je vous demande de le regarder, vous le remarquerez probablement et vous direz "oups - j'utilise beaucoup de langues." Si vous ne le faites pas, je dirai "dans quelle langue avez-vous écrit cela?" et puis vous allez. Ce n'est pas une question piège ou un piège. Certaines personnes n'ont en réalité jamais écrit de code et prétendent l'avoir. C'est le point de questions comme ça.
Kate Gregory
2
Mais je pense que ces questions ne sont pas bonnes pour cela. Je ne saurais vous dire, cinq minutes avant le début de la discussion, que VB exige des accolades autour des blocs de code. J'aurais pu vous dire que If / Then / EndIf ressemblait surtout à VB [.Net]. Et j'écris du code en VB pendant ... environ deux heures tous les trois mois (tâches de rentacoder.com, je ne prends jamais de vrais travaux en VB, je le déteste).
Sparr
10

J'ai lu l'article de Coding Horror que vous avez mentionné, et mon opinion est que Jeff a raison ... mais quand a-t-il été interviewé pour la dernière fois?

Lorsque vous êtes interviewé, vous êtes généralement très stressé et vous devez souvent répondre à des questions théoriques (pas d'intellisence, pas de google, pas de resharper, ... uniquement votre mémoire troublée par le stress). C'est la même chose dans les tests. Le stress ne vous aide pas.

J'ai remarqué que le seul moyen de savoir si un poste convient à un poste est de travailler avec lui pendant un certain temps ... Prenez juste les 10 dernières personnes que vous avez embauchées sur 100 (peut-être plus), à quel point était-ce vraiment un bon louer???

Un employeur devrait embaucher un solutionneur de problèmes, pas un singe à code connaissant les modulos.

Vous ne pouvez pas tester "tous les candidats pendant un certain temps", vous devez donc les interviewer. C'est pourquoi je concentre mes questions sur cette question (résolution de problèmes) et vérifie les références antérieures.

Mon opinion est que le FizzBuzz est dangereux pour l'entreprise qui recherche des développeurs pour soutenir sa croissance.


la source
28
IMHO le problème ici est que FizzBuzz est une question tellement lowball que si vous ne pouvez pas y répondre même en situation de stress, vous méritez que les gens rient de rire si vous vous appelez un "programmeur". Si c'était quelque chose de légèrement plus compliqué, comme "mettre en place une sorte de bulle", ces excuses et préoccupations seraient alors justifiées, mais pas pour FizzBuzz.
Dsimcha
23
FizzBuzz est bon à ce qu'il est pour: filtrer les gens qui connaissent rien au peuple quelque chose . Et savoir que quelque chose peut ne pas suffire pour faire le travail. Ce n'est pas un test de décision d'embauche, c'est un test "allez-vous perdre mon temps en entretien". Certains responsables du recrutement tentent de pousser Fizzbuzz trop loin pour le laisser faire leur travail pour eux.
Steven Evers
31
Mon Dieu, modulo n'est pas une sorte d'opérateur ésotérique. C'est une opération de base que tous les développeurs doivent avoir de l'expérience s'ils souhaitent s'appeler eux-mêmes des programmeurs professionnels. Quoi qu'il en soit, si quelqu'un sait écrire FizzBuzz, cela ne veut pas dire que vous les embauchez. C'est juste un point de départ rapide pour voir si cette personne peut même essayer de mettre en forme le flux de contrôle nécessaire pour terminer la tâche.
Webbiedave
12
Je pense que FizzBuzz est utile simplement parce que c'est tellement déroutant. Il nécessite une boucle for, deux instructions if, modulo et print. Toute personne ayant une expérience significative de la programmation devrait être capable de l'exploiter à peine. Si quelqu'un se débat dans une interview, je considère que c'est un test décisif parfaitement valide.
Adam Crossland
11
@snorfus: Classé sous "le problème de quelqu'un d'autre". Je préférerais de beaucoup perdre le bateau avec un bon développeur avec une anxiété sociale invalidante, plutôt que de perdre du temps et de l'argent, en formation, et d'attendre les résultats de quelqu'un qui n'a aucune aptitude pour la programmation. Vous ne pouvez pas vous occuper d'autres êtres humains? Voir un thérapeute.
Aaronaught
10

On m'a récemment demandé d'interviewer plus de 50 programmeurs pour un poste de direction où ils travailleraient principalement avec PHP.

J'ai jeté le problème de fizzbuzz à l'examen de dépistage, principalement pour m'amuser et parce que je voulais dix bonnes questions et n'en ai que neuf. À l'époque, mon intention était de montrer aux gens que nous pouvons nous amuser aussi, même en répondant à des questions d'entrevue.

80% des candidats ont résolu le problème, mais n'ont pas utilisé l'opérateur de module.

15% des demandeurs n'ont pas pu résoudre le problème.

5% des demandeurs ont résolu le problème en utilisant l'opérateur de module.

Bien que mon échantillon soit assez limité (50 candidats d'un pays), je peux vous dire que:

95% d'entre eux avaient un baccalauréat ou plus dans un programme de CS (les universités d'ici rivalisent pour essayer de rendre le son de CS plus spectaculaire).

J'ai été vraiment surpris. Eh bien, effrayé… mais étonné. Je ne pensais pas que je me rapprocherais de reproduire les résultats, car le problème est devenu si populaire. Cela montre que 5% de mes candidats ne sont peut-être pas des super programmeurs, mais au moins ils lisent des blogs sur la programmation.

Tim Post
la source
J'aurais pensé que l'utilisation de l'opertor modulatif était la solution la plus évidente. Je suis surpris que 95% des personnes qui ont résolu le problème utilisent avec autre chose. Peut-être est-ce parce qu'ils étaient nouveaux diplômés et ont fait les calculs eux-mêmes?
Jmoreno
Je n'ai jamais appris l'opérateur de module dans aucune de mes classes. Si je n'avais pas fait de stage ou passé du temps à contribuer à des projets open source, je ne l'aurais jamais appris avant d'entrer dans l'industrie. De plus, on m'a appris, dans l'un de mes cours d'introduction à l'informatique, que l'opérateur ternaire est une mauvaise pratique de codage, car il est trop confus et difficile à lire.
Robert Fraser
Qu'ont-ils utilisé à la place de l'opérateur restant? x - (x/y)*y?
CodesInChaos
9

Lors de ma dernière ronde d'embauche, j'avais 3 travailleurs de la construction avec 0; je répète zéro; la formation en programmation ou l'expérience acquise pour postuler à un poste de développeur de logiciels. * Donc, c'est le fond du canon. Si vous supposez une répartition normale des compétences, vous pouvez voir comment le niveau de compétence moyen sera assez faible et même «au-dessus de la moyenne» (parmi les candidats) sera toujours relativement mauvais.

Maintenant, si vous ne faites que bafouiller les candidats qui possédaient ce qui semblait être une capacité de programmation, vous constaterez que vous avez maintenant:

  1. menteurs
  2. amateurs de mots à la mode (j'ai lu un article sur .NET une fois)
  3. mauvais programmeurs
  4. les personnes qui ont utilisé une technologie pour mener à bien un projet, mais ne l'ont pas appris (voir les questions de fizzbuzz sur idisposable pour les identifier)

De plus, certaines questions "fizzbuzz" que j'ai vues sont spécifiques à un domaine. Vous pouvez progressivement développer un langage / framework x pendant plusieurs années (et donc z ans d'expérience avec x) sans en rencontrer certaines parties (les développeurs de bibliothèques ne connaissent pas grand chose au sujet du développement de composants d'interface utilisateur, par exemple).

De même, de nombreux développeurs effectuent actuellement des opérations de maintenance, de sorte que leurs compétences en architecture / conception peuvent être faibles dans certains domaines.

Maintenant, je ne suis pas sûr que 99% soit exact, mais IME est quand même assez élevé. Au moins dans la gamme de 80%.

* Non, nous n'avons pas appelé ni même regardé ces applications.

Steven Evers
la source
3
Nous avons eu une situation similaire, mais puisque notre contrat avec le client prévoyait l'affectation de 4 développeurs à plein temps au projet, et que le projet était terminé, le responsable des plaques de dallage a appris à programmer sur le dollar du client pour la 3 semaines restantes sur le contrat.
Tangurena
J'ai également vu quelque chose comme cela se produire lorsque certains programmes gouvernementaux / assurance-chômage exigent que le bénéficiaire reçoive une demande pour un certain nombre d'emplois par semaine. Même lorsque ces programmes imposent au destinataire des candidatures nominales pour des emplois pour lesquels il est réellement qualifié, les ressources pour évaluer les emplois pour lesquels il est qualifié et pour faire respecter cet élément particulier de l'obligation de "postuler à un emploi" sont très limitées. .
Daniel Martin
8

Oui vraiment. Probablement pas 99% mais quand même assez élevé. J'avais l'habitude d'interviewer des étudiants en informatique pour des stages et des embauches à temps plein. J'interviewais environ 25 étudiants dans un collège. On nous a dit de ne pas poser les mêmes questions, car les étudiants ont parlé. J'ai vite compris que cela importait peu, car je n'aurais que 3 ou 4 étudiants sur 25 qui pourraient répondre à ma première question. "Ecrire strcmp"

Je leur ai demandé d'écrire une fonction pour comparer deux chaînes. Peut-être utiliser la fonction pour trier les mots d'un dictionnaire. Vous seriez surpris du nombre d’élèves qui n’ont pas compris comment comparer deux mots, encore moins savoir comment écrire la fonction. Et certains de ces étudiants ont affirmé avoir obtenu tous les A en CSc.

Le problème, c'est que la programmation est TRÈS DIFFICILE. Beaucoup de gens aiment penser qu'ils savent programmer, mais ils ne le savent pas.

ChrisMcB
la source
3
L'inflation des grades est nulle, ça fait perdre du temps à tout le monde!
DarenW
8

Quelques idées:

  • Je ne m'opposerais pas à quelqu'un si leur programme contenait des bugs mais ils avaient clairement la bonne idée. Le débogage fait partie de la programmation.

  • Je trouve dommage que tant de personnes postulent des emplois qu’elles ne savent pas qu’elles ne peuvent pas faire. Cela me semble être un problème d’économie.

  • Il est vraiment facile de poser de mauvaises questions aux gens, où la seule réponse "correcte" est celle que l'intervieweur donnerait.

Mike Dunlavey
la source
2
À propos du deuxième point ... ayant passé beaucoup de temps à envisager mon prochain changement de carrière, à étudier diverses industries et à rechercher un emploi, ce fut une difficulté majeure que d’évaluer mon propre niveau de compétence dans différents domaines. Apparemment, c'est un gros problème pour (presque) tout le monde.
DarenW
@ DarenW: Vous avez ma sympathie. Je pense qu'il est important de savoir ce que vous aimez et de travailler à partir de là. Personnellement, j'ai toujours aimé l'école et n'ai jamais douté de mon intérêt pour l'ingénierie. Mes frères et sœurs sont presque tous certains de ce qu'ils font. On n'est pas, et il est facile de voir que c'est une lutte. Votre page d'accueil indique un intérêt pour l'intersection de la science et de l'art - c'est formidable. Certaines personnes ont eu de mauvaises expériences chez les jeunes, et cela peut maintenant utiliser toute leur énergie.
Mike Dunlavey
7

Ce test couvre très bien plusieurs choses que je veux savoir sur un programmeur que je pourrais engager:

  1. Pouvez-vous même programmer du tout?
  2. Pouvez-vous écrire un programme à partir de zéro (car tout le monde ne le peut pas !!!)
  3. Pouvez-vous résoudre un problème sans trop y penser?

Pour élaborer sur le dernier point, il existe d'innombrables solutions au fizz-buzz. Allez-vous pour la lisibilité? La vitesse? Brièveté? Essayez-vous de finir d'écrire le programme rapidement? Comment un programmeur s'attaque à ce problème simple est très révélateur. Si un programmeur ne peut pas choisir une solution et aller jusqu'au bout, qu'est-ce que cela vous dit sur la façon dont cette personne va exécuter une tâche réelle?


la source
6

Malheureusement, beaucoup de personnes avec un CV impressionnant semblent manquer de compétences de base en programmation. J'ai vu de nombreux cas où les personnes qui inscrivent C et C ++ sur leur curriculum vitae ne pouvaient pas répondre aux questions de base sur les pointeurs.

Dima
la source
3

J'espère que FizzBuzz m'aidera à éviter deux types de personnes.

  1. Chanceurs n'ayant aucune connaissance de la programmation ou aucune connaissance pertinente de la programmation. Habituellement, vous pouvez reconnaître ces éléments à partir du CV, mais pas toujours et leur confier une tâche de programmation simple est un bon moyen de préciser qu’ils ne sont pas des programmeurs.
  2. Les diplômés de l’école Java qui ont suivi un cours de programmation mais ne savent pas programmer. Il peut être plus difficile de filtrer ces personnes car elles peuvent parler de théorie mais elles n’ont tout simplement aucune compétence pratique. Poser un problème simple devant eux et demander une solution et une explication de la solution est un très bon moyen de voir la différence entre un Petra Java et un Paula Bean.

Dans les deux cas, je ne me soucie pas vraiment d'une implémentation parfaite. Le test que vous devez faire avec les personnes qui postulent à des emplois de développeur est qu’elles peuvent programmer.

Cela dit, je ne m'embarrasserai probablement pas de ce critère pour plusieurs raisons maintenant. Tout d'abord, c'est très bien connu et l'un ou l'autre des groupes ci-dessus serait rapide à essayer. Deuxièmement, je préférerais utiliser les questions de l'écran de Steve Yegge pour filtrer les non-programmeurs avant de les ramener. Si quelqu'un reconnaissait ces questions, il supposerait qu'il avait lu le blog de Steve Yegge qui me suggèrerait qu'ils étaient dans le top 1% des développeurs qui prennent leur métier au sérieux et qui méritent assurément une entrevue. De même, si quelqu'un avait un bon représentant ici ou sur SO, je serais enclin à l'interviewer.

glénatron
la source
A) Comment est bon "bon"? B) embauchez-vous? :)
Sparr
3

Il est difficile de croire que les développeurs ne peuvent pas coder FizzBuzz tant que vous ne voyez pas les «neuf à quatre» qui copient et collent leur travail ensemble et essayez de ne pas écrire de code. Je ne pouvais pas le croire quand j'ai entendu l'un de nos développeurs expérimentés enseigner à un développeur C #, avec 3 ans "d'expérience", comment utiliser un dictionnaire. Des interfaces? Modèles de conception? stdout? YAGNI? Mon chef n'avait jamais entendu parler de YAGNI! C'est incroyable ce que ces gens ne savent pas.

Je le crois maintenant. Je pense aussi qu'il y a trop de développeurs qui en font assez.

kirk.burleson
la source
3

Je pense que la raison pour laquelle cette question est si populaire est qu’il existe plus d’une façon de répondre à cette question et que le choix du candidat peut vous donner une idée de la manière dont il code. Quelques exemples intéressants peuvent être vus ici si vous avez 10K rep sur Stack Overflow.

En ce qui concerne les statistiques à 99%, vérifiez d'où provient ce nombre. C'est probablement biaisé. Si le programme est basé sur des programmeurs débutants interviewés pour leur premier emploi, alors oui, je le vois bien, surtout si la majorité de leurs candidats sortent tout droit de l'université. Je peux en fait penser à quelqu'un qui écrirait probablement une condition de 100 si condition comme solution à ce problème.

Rachel
la source
3
Je soupçonne que le chiffre 99% indique la vérité (la vérité récursive, pas moins) de l'affirmation selon laquelle 87% de toutes les statistiques sont établies sur-le-champ.
Adam Crossland
1
@Adam Crossland: 100% des statistiques sur les statistiques sont également préparées sur place.
Macha
Pourtant, il semble horrible que personne ne puisse résoudre Fizzbuzz en dehors du collège. S'ils ne peuvent pas faire ça, que peuvent-ils faire?
Morgan Herlocker le
2
@ironcode Je suis allé à l'école avec quelqu'un qui n'arrivait même pas à comprendre fizzbuzz ... Je serais surpris qu'ils puissent même écrire quelque chose qui imprime 100 lignes avec les valeurs fizzbuzz en dur. Ils ont obtenu leur diplôme avec les honneurs.
Rachel le
2

Je trouve que la déclaration selon laquelle 99% des programmeurs sont incapables de programmer ou de résoudre un simple test de codage est très exagérée. Dans le cas du test FizzBuzz, vous avez déjà rencontré ce problème et pouvez le résoudre facilement avec l'opérateur modulo ou vous ne l'avez pas encore rencontré et aurez de la difficulté à le résoudre. Il ne dit rien à l'interviewer sur vos compétences en programmation.

Je pense que le problème avec de nombreux programmeurs laissant apparemment une mauvaise impression lors d’une interview tient à la nature des méthodes d’interview techniques. Les intervieweurs attendent des candidats qu'ils mémorisent et reproduisent instantanément la syntaxe de la langue, les détails et la complexité informatique des structures de données, des architectures matérielles, des modèles de conception, etc. Le domaine de l'informatique et du génie logiciel est vaste. Il est impossible et insensible d'essayer de tout mémoriser.

Dans le monde réel, il est essentiel de pouvoir comprendre le problème de programmation / conception qui vous est assigné et de savoir où trouver des informations (votre IDE, vos pages de manuel, vos livres, Google, etc.) pour résoudre votre problème. C'est quelque chose que les enquêteurs ne testent jamais.

marque
la source
14
Vous rendez-vous compte à quel point FizzBuzz est facile? Vous n'avez pas besoin de l'avoir rencontré. Si vous éprouvez des difficultés, envisagez un changement de carrière.
John Smith
Mais il peut être résolu sans modulo en utilisant la division. Une solution correcte utilisant / au lieu de% fonctionnerait pour moi. Ils doivent donc comprendre les mathématiques très basiques et la programmation très basique.
Almo
0

Je suis encore un programmeur relativement peu expérimenté (je code depuis environ 2 ans et depuis quelque 2 ans, je sais utiliser une capacité professionnelle comme responsabilité secondaire pour environ 2 ans auparavant), utilisez donc suffisamment de grains de sel.

J'ai quelques expériences de premier écran de codeurs pour un projet de grande entreprise (nous savions un peu que le projet était condamné, mais bon, ils voulaient tout de même payer). En tant que seul programmeur de la société à recruter, on m'a confié la tâche de réviser les CV et de sélectionner les candidats.

Ce fut un projet gouvernemental donc il peut - être n'a probablement pas attirer les candidats les plus talentueux, mais je n'a pas reçu une demande de toute personne ayant un compte github que le code effectivement avait montré, ni personne qui avait un portefeuille, donc je FizzBuzz ( littéralement le problème exact) en guise de premier abord pour quiconque semblait pouvoir programmer.

Je l'ai précédé d'une pseudo-excuse indiquant que je savais que c'était stupide mais que je voulais juste voir un code fonctionnel, et s'ils le voulaient, ils pourraient envoyer un autre exemple de valeur égale ou supérieure ou vraiment n'importe quoi, mais ce fizzbuzz suffirait.

Le résultat: je n’ai pas reçu une réponse qui soit en fait correcte, ce qui est ahurissant compte tenu du volume de réponses sur Internet. Personne n'a même pris la peine de plagier. Nous devions simplement embaucher des personnes qui avaient déjà travaillé sur les précédentes échecs du projet.

Après le choc initial de l'exercice et la déception suscitée par la passation de marchés logiciels / logiciels gouvernementaux, je me sentais beaucoup mieux à propos de mes propres compétences, de petites victoires?

Edit: Par pas correct, je ne veux pas dire une erreur inattendue (c’est-à-dire que j’ai demandé 100, et non pas 99) ou un autre bogue innocent qui est une solution facile. Je veux dire non fonctionnel, soit ne fonctionnera pas / compilera / etc, soit montrera clairement que le problème n’est tout simplement pas lu et compris, une partie importante du logiciel retire l’application et aucun n’envoie un autre code à la place.

BSpiros
la source