«Test» du tableau blanc lors d'une interview: moyen légitime de sauvegarder votre code (tableau blanc)? [fermé]

15

D'après ce que je comprends, avoir une erreur (même une faute de frappe comme ou manquant ";") dans votre code de tableau blanc vous coûtera souvent des points d'interview. Éviter cela fera inévitablement un code de relecture encore et encore (perte de temps et éventuellement d'énergie / concentration neuronale) ou même en utilisant un algorithme plus simple (et donc moins efficace) - et ces deux façons sont à nouveau "coûteuses"!

Alors, pourquoi ne pas simplement écrire du code rapidement aussi élégant et efficace que vous auriez un cadre de test (unitaire) à votre disposition et ensuite le tester normalement (juste sur le tableau blanc)?

Quelqu'un a-t-il essayé / vu cette approche? L'idée est-elle digne?

[cela s'applique également au cas du stylo et du papier]

mlvljr
la source
23
Si je voulais que quelqu'un écrive du code sur un tableau blanc ou du papier pendant une interview, je ne m'attendrais pas à ce que ce soit 100% correct du point de vue syntaxique - cela le met sous trop de pression. Oui, cela devrait être globalement correct, mais les points-virgules manquants ou même obtenir un nom de méthode / profil de paramètre légèrement incorrect sont (ou devraient être) OK.
ChrisF
17
Je suis un grand fan du codage de tableau blanc dans les interviews, mais quiconque s'attend à ce que votre code de tableau blanc soit syntaxiquement parfait le fait mal. Le but est de voir comment vous attaquez un problème, pas de voir que vous pouvez produire du code syntaxiquement parfait dans un environnement totalement irréaliste.
Tim Goodman
3
vous devriez être en mesure de dire lequel est lequel en leur demandant de faire un commentaire sur ce qu'ils font par exemple ou en discutant de la solution avec eux une fois qu'ils ont terminé.
ChrisF
6
Être trop préoccupé par la syntaxe et l'orthographe exactes coûtera des points à l'intervieweur dans mon livre.
JeffO
2
c'est à cela que sert le code psuedo
jk.

Réponses:

49

Je veux absolument que vous testiez le code du tableau blanc que je vous demande d'écrire. Je veux que vous parliez à haute voix pendant que vous l'écrivez, l'examinez, repérez la plupart des erreurs de syntaxe que vous avez faites et montrez comment cela pourrait être plus efficace. En fait, c'est un peu l'intérêt de le faire au tableau blanc. Ce n'est pas un genre de chose à un coup, à tout écrire, uh-huh-you-get-70/100. C'est une conversation, médiée par un code et tenue sur le tableau blanc au lieu de traverser mon bureau.

Voici quelques excellentes façons d'échouer au test de "codage du tableau blanc":

  • refuser
  • ne posez pas une seule question de clarification (langue, plate-forme, quelque chose sur les exigences) ET ne me dites pas vos hypothèses à ce sujet ET faites des hypothèses qui sont bien loin de ce que j'aurais répondu

(par exemple: l'écrire dans Fortran, interpréter "afficher" ou "imprimer" comme "écrire dans le journal des événements", ce genre de chose. Je pourrais le permettre si vous me disiez à l'avance que c'était vos hypothèses)

  • demandez-moi dans quelle langue je le veux, recevez une réponse qui se trouve dans la description de poste, puis écrivez-la dans une autre langue parce que vous n'êtes pas à l'aise dans la langue que j'ai demandée.

(Nous sommes des consultants ici. Je teste le comportement du consultant autant que le codage. Demander au client n'est correct que si le client a réellement le choix. Contrôler les conversations avec les gens qui vous paieront est difficile. C'est la leçon 1. C'est un marquer contre vous sur n'importe quel sujet, mais pour le spécifique "vous embauchez un programmeur X mais je ne veux pas écrire X pour vous" vous avez maintenant deux grosses marques noires.)

  • Montrez-moi ce que vous êtes un astronaute de l'architecture en remplissant deux tableaux blancs avec des interfaces, des modèles d'usine, des abstractions, des injections et des tests lorsque je voulais que vous "imprimiez les nombres de 1 à 5".

(vous pensez que j'exagère, mais j'ai eu un gars qui a généralisé mon problème de façon spectaculaire - respectant l'exemple ci-dessus, disons qu'au lieu de 1 à 5, sa solution ferait n'importe quelle séquence arbitraire d'entiers (d'où je me suis demandé) et avait 5 ans fois aussi longtemps que n'importe qui d'autre - et il a oublié d'appeler la fonction qui a fait le travail. Des invites répétées et suggérant de le parcourir comme s'il était le débogueur ne l'ont pas amené à remarquer que la fonction n'a jamais été appelée.)

Je dis toujours "vous aimez ça?" "pouvez-vous améliorer cela?" "guide-moi à travers ça" et ainsi de suite. En règle générale, le point-virgule manquant est repéré, ou le point par point, dans cette conversation. Sinon, je le marque habituellement jusqu'aux nerfs.

D'autres choses que vous ne pensez peut-être pas importantes au tableau blanc qui comptent pour moi:

  • quand vous avez terminé, puis-je encore le lire? Avez-vous taché, griffonné, changé de couleur, dessiné des flèches, barré et laissé généralement un gâchis qui ne peut plus être utilisé? Ou savez-vous que les tableaux blancs sont effaçables, pointent vers des lignes de code dans l'air au lieu de les encercler / flécher, et me laissent quelque chose que je pourrais prendre en photo et conserver dans le fichier de conception?
  • combien m'avez-vous demandé comme vous l'avez fait? Aimez-vous être laissé seul et ne pas discuter de votre code, ou voyez-vous le code comme une chose collaborative? Comment avez-vous réagi lorsque je vous ai posé des questions pendant que vous l'écriviez encore?
  • avez-vous ricané à la tâche «facile» ou évanoui à la tâche «difficile»? Avez-vous été impoli de vous demander de montrer que vous pouvez coder? Êtes-vous facilement intimidé par un problème technique ou arrogant quant à votre capacité à trouver un bon algorithme?
  • travaillez-vous dans votre tête ou vous souvenez-vous d'une solution que vous avez lue quelque part? Je peux généralement dire pour les problèmes difficiles.
  • avez-vous planifié à l'avance où vous avez commencé à écrire? Les gens qui manquent de tableau blanc commencent généralement trop bas ou écrivent trop gros - je peux dire qu'ils ne savaient pas que cela allait être 20 lignes de code et donc ne laissaient de la place que pour 5 - croyez-le ou non, ce petit détail est reflété dans des tâches d'estimation plus importantes également.
  • l'avez-vous vérifié avant de dire que vous aviez fini? Vous ai-je vu pointer ou taper votre chemin à travers elle et la tester vous-même avant de vous le demander? Quand je vous ai demandé, ou vous ai posé des questions spécifiques à ce sujet, avez-vous relu, ou êtes-vous simplement revenu de mémoire? Êtes-vous prêt à considérer que votre première version pourrait ne pas être complète?

Je recommande fortement de pratiquer le codage sur le tableau blanc. Je préviens toujours les personnes interrogées qu'elles seront invitées à le faire. Si vous avez accès à un véritable tableau blanc, posez-vous quelques problèmes simples et entraînez-vous à les utiliser. Il contribuera à votre performance et à votre confiance.

Désolé, je sais que je suis en territoire TL; DR, mais voici le problème - le codage sur le tableau blanc ne se limite pas au codage . C'est un test de plus que votre compréhension de la syntaxe. Il y a beaucoup de comportements de bons programmeurs qui sont démontrés dans votre réponse à cette tâche. Si vous pensez qu'il ne s'agit que de codage, vous manquez le point.

Dans d'autres conversations sur les tests de tableau blanc, les gens me disent que je peux rejeter un bon candidat avec. Honnêtement, c'est un risque que je suis prêt à prendre. Chaque tour d'embauche contient plusieurs personnes que je pourrais embaucher. Certaines personnes avec un excellent curriculum vitae, qui se débrouillent bien dans la partie questions-réponses de l'entrevue, se désagrègent au tableau blanc et ne peuvent clairement pas (avec une quantité d'incitation) écrire du code simple dans la langue qu'elles prétendent connaître. J'aurais peut-être embauché certains d'entre eux. Tout outil qui l'empêche est un outil que je continuerai à utiliser. Je n'ai jamais trouvé personne pour louer un bateau parce que tous mes candidats se sont trompés sur le tableau blanc et je ne m'attends pas à le faire.

Kate Gregory
la source
2
Semble être une excellente réponse (et pour être honnête, beaucoup plus intéressant que j'espérais initialement recevoir). Merci beaucoup.
mlvljr
9
@KingOfHypocrites avez-vous réellement lu la réponse? Je me fiche de manquer un point-virgule. Regardez ce que ça veut dire. 20 minutes au tableau blanc en disent long sur vous.
Kate Gregory
7
Je suis curieux de savoir si des recherches ont validé l'interview sur le tableau blanc. Divulgation complète: je suis devenu curieux après avoir échoué à une entrevue sur un tableau blanc, dur. Je n'ai pas interviewé depuis quelques années, je n'ai jamais été un bon interprète / présentateur et j'ai pratiquement gelé. Vos idées sont excellentes et si j'avais lu ceci en premier, j'aurais pensé à cette partie du processus d'entrevue très différemment (et j'aurais parlé plus). Cela dit, beaucoup de gens ont des opinions bien arrêtées sur ce sujet, mais cela semble être tout. Je suppose qu'il existe une justification objective à cette pratique, étayée par des données à l'appui. Y a-t-il?
Suboptimus
3
+1 Pour être honnête, j'aborderais le tableau blanc comme un proxy pour un exercice de programmation par paires, dans l'espoir de maintenir un flux de conversation sur la tâche comme le suggère Kate - bien que je préfère avoir une machine et en fait un programme de paires avec le candidat (ou être le binôme candidat avec l'intervieweur). La façon dont vous codez ensemble est aussi importante que la façon dont vous codez seul, dans une organisation de toute taille.
Julia Hayward
4
Je sais que c'est vieux mais je viens de m'y rattacher, et je voulais souligner: l'une des caractéristiques d'un trouble du traitement visuel est le manque de capacité à estimer l'espace dans lequel vous écrivez et donc à manquer de place . Si la personne que vous évaluez manque non seulement de place pour plus de lignes, mais aussi que les personnages deviennent plus petits vers la fin d'une ligne car ils se rendent compte qu'ils ont commencé trop gros, ils pourraient simplement avoir un trouble d'apprentissage plutôt que de ne pas comprendre combien de temps le code sera. Demandez-leur d'estimer quelque chose de non spatial et vous obtiendrez peut-être un meilleur résultat.
Yamikuronue du
17

Je pense que vous avez fait une supposition incorrecte ici. Il n'y a aucun moyen que je m'attende à ce qu'un candidat écrivant du code sur un tableau blanc puisse obtenir tous les ';' parfaitement en place. Si vous interviewez dans un endroit qui vous pénalise pour cela, je suggère qu'ils ne sont pas une organisation pour laquelle vous voulez travailler :-).

Martijn Verburg
la source
2
J'ai échoué une entrevue parce que, comme ils l'ont dit, je n'avais pas écrit de code parfaitement optimisé lors de la première passe d'un test avec un stylo et du papier (provenant de l'école de mise en route avec des tests unitaires puis d'optimisation ). Là encore, ils n'avaient pas de cadre de test en place, ils ont juste supposé qu'ils avaient des codeurs qui l'ont fait correctement la première fois!
Julia Hayward
3
@JuliaHayward - Une évasion chanceuse pour vous par les sons! Je ne peux pas croire que les gens continuent de faire ça.
Martijn Verburg
7

Les tests sur papier ou tableau blanc sont extrêmement inefficaces. Je me souviens une fois que j'ai eu une interview où j'ai dû chercher des erreurs dans du code sur papier. L'un d'eux était que la classe héritait d'une interface mais qu'il manquait l'implémentation d'un membre. Je savais que c'était probablement l'une des erreurs, je le cherchais et pour une raison quelconque sur place, je ne pouvais tout simplement pas le voir (même si j'ai mentionné que je cherchais cela comme l'un des problèmes).

En l'occurrence, j'ai toujours eu ce travail, mais cela m'a fait penser à ce qui s'était passé. Dans un scénario réaliste pour ce genre de chose, je vais obtenir des lignes ondulées au moment où quelque chose ne va pas (c'est C # dans Visual Studio) et la chose ne va pas se compiler. Je ne vérifie jamais cela dans la vraie vie parce que cela n'arrive jamais (c'est impossible) et donc je suis désaccordé de voir ce genre de chose. Les points-virgules manquants en sont un exemple encore plus extrême - totalement irréaliste dans le monde réel, sauf si vous écrivez dans le bloc-notes et envoyez votre code par courrier électronique à quelqu'un d'autre pour le compiler!

Si quelqu'un demande à utiliser un tableau blanc lors d'une interview pour soutenir quelque chose qu'il veut dire, c'est parfait, mais je ne le ferais jamais dans l'autre sens.

FinnNk
la source
2
Votre histoire semble prouver que votre test a été efficace. Au lieu de demander généralement "Comment révisez-vous le code?" ils vous en ont donné à revoir. Vous avez parlé à voix haute et dit quelque chose comme "doit vous assurer qu'il implémente tout" et même si vous n'avez pas repéré celui qui manquait, vous leur avez montré que vous savez réellement comment vérifier le code pour les erreurs, pas seulement répondre aux questions à ce sujet . Vous n'avez probablement pas non plus signalé un certain nombre de non-erreurs que certaines personnes pourraient avoir, et peut-être avez-vous également vu d'autres erreurs. Et puis vous avez obtenu le poste. Cela me semble efficace, pour tout le monde!
Kate Gregory
2
En outre, les points-virgules manquants continuent d'être rejetés comme n'étant pas un véritable négatif. Une faute de frappe constante sur la syntaxe de votre langue préférée signifie que vous êtes un développeur plus lent que quelqu'un qui a internalisé toute cette syntaxe. Vous revenez constamment et réparez des choses que vous avez oubliées. Il y a de fortes chances que vous soyez déréglé par le rythme constant de l'IDE. De plus, les personnes qui laissent tous leurs points-virgules au tableau blanc et ne remarquent pas lorsque vous les invitez ne sont pas au même niveau que les bons développeurs qui, une fois par semaine, oublient de taper un point-virgule dans l'IDE, puis corrigent il.
Kate Gregory
2
+1 c'est inefficace. Cela ne prouve absolument rien. Je suis sûr que beaucoup de gens qui échouent au test sont meilleurs que le gars moyen qui le réussit.
3
@Kate - J'arrive d'où vous venez, mais je ne suis pas d'accord - d'autant plus que je suis maintenant assis de l'autre côté de la table. Si quelqu'un manque régulièrement des points-virgules, je veux voir cela dans l'IDE et non dans un cadre artificiel. C'est comme le code d'accès à mon bureau - je peux taper le numéro sans réfléchir, demandez-moi de l'écrire avec 100% de confiance et j'aurais du mal. Une interview ne sera jamais 100% réaliste, donc je ne veux pas me démener pour le rendre encore moins.
FinnNk
1
Je suis beaucoup moins susceptible d'omettre une syntaxe importante au clavier que sur un tableau blanc, car la frappe est renforcée par la mémoire musculaire. Cependant, une erreur de frappe (et un harcèlement de mon éditeur ou du partenaire de paire), en particulier dans une situation de programmation de paire, est susceptible de me jeter dans une boucle de rétroaction où les erreurs renforcent les nerfs qui causent des erreurs. Je pense que les polyglottes sont susceptibles d'être désavantagées par rapport aux candidats monolingues.
dcorking
5

Je l'ai fait. Lors d'une interview, on m'a demandé d'implémenter un encodage de longueur sur le tableau blanc, et pendant que je raccourcissais une partie du code (expliquant ce que j'abréviais) pour l'adapter au tableau blanc, j'ai toujours trouvé une collection de tests pour cette unité, et parcouru l'un d'eux pour valider ma solution et montrer comment les tests pourraient aider. On m'a proposé ce poste, donc je suppose que les tests ont été utiles, ou au pire, pas ennuyeux.


la source
4

J'utilise cette approche lorsque je passe des tests pour l'école. J'écris d'abord la fonction, puis sur le côté, j'écris un petit tableau d'entrées, de sorties et de variables. J'ai attrapé quelques erreurs stupides de cette façon. Il est toujours préférable de tester, même sur papier / tableau blanc, que de ne pas tester.

Je suis en désaccord avec paniquer sur les points-virgules dans un cadre professionnel, cependant.

Note à soi - pense à un nom
la source
4

Demander à un candidat de coder sur un tableau blanc est stupide. Il existe des outils modernes comme les extraits de code, jsfiddle et intellisense. De plus, aucun ingénieur ne devrait être tenu de mémoriser la syntaxe. La syntaxe est recherchée et référencée. Si vous mémorisez du code, vous n'avez probablement pas passé de temps dans votre carrière à apprendre à coder dans un environnement multi-locataire, à optimiser la syntaxe ou même un environnement hébergé.

James Bailey
la source
3
Quiconque à moitié décent dans une langue particulière devrait avoir la syntaxe mémorisée de simplement l'utiliser beaucoup. Si un gars écrit du code C # toute la journée et ne connaît pas la plupart de la syntaxe du haut de sa tête, il va être lent et terrible. Vous pouvez également rechercher ce qu'est 2 ^ 8, mais tout développeur digne de ce nom devrait savoir ce que c'est du haut de sa tête juste après l'avoir rencontré si souvent. Il en va de même pour la syntaxe.
whatsisname
1
Ce n'est tout simplement pas vrai. Il n'est pas nécessaire de mémoriser la syntaxe de nos jours. Dire que les développeurs qui savent coder dans de nombreux langages comme sql, vb, c #, javascript et utiliser json, angularjs, telerik et autres ne valent pas leur prix car ils ne peuvent pas mémoriser la syntaxe, c'est idiot. Être un bon ingénieur logiciel ne se résume pas à des opérateurs mathématiques comme vous le dites. Que diriez-vous de comprendre les exigences, les structures de conception, les modèles, l'expérience de l'industrie? Il y a littéralement suffisamment de syntaxe dans les langues et les bibliothèques pour remplir l'arrière d'un camion.
James Bailey
Il ne s'agit pas d'être "nécessaire". C'est que si vous utilisez quelque chose assez souvent, vous vous en souviendrez. Si un gars prétend être un développeur SQL mais ne peut pas écrire une déclaration de jointure du haut de sa tête, c'est parce qu'il est soit a) incompétent b) mentait sur ses qualifications, ou c) a un cerveau très étrange, tout trois situations que je ne veux pas avoir à gérer.
whatsisname
1
Une «jointure» n'est pas ce qui est généralement demandé sur un tableau blanc. Ce sont souvent des énigmes et des choses sans rapport avec le travail. Et si le candidat est certifié, a un diplôme et un curriculum vitae solide. Vous pensez toujours qu'il est "incompétent" parce qu'il ne code pas sur un tableau blanc pour gagner sa vie? Les responsables marketing ne sont pas invités à mettre en tableau blanc une stratégie marketing trimestrielle sur les spots d'interview. C'est idiot. Vous devriez pouvoir parler avec le candidat et en déduire facilement s'il peut coder.
James Bailey
3

Lorsqu'un restaurant veut embaucher un chef, le propriétaire ne lui demande pas de cuisiner un "pot au feu" avec un cure-dent et une casquette.

Ne demandez pas à un développeur de coder sur un tableau blanc lors d'une interview.


la source
3
Et lorsqu'on lui a demandé?
mlvljr
Pendant l'interview
3

Le codage du tableau blanc est difficile. Je n'ai jamais été initié à cela avant d'être interviewé par Disney. Ne sachant pas à quoi m'attendre et ne pouvant pas le déboguer, je suis tombé dessus en le discutant et en résolvant le problème, mais dans un pseudo code en quelque sorte. Quand ils ont demandé, cela pouvait-il fonctionner?

Je veux dire, bien sûr, vous pourriez juste avoir à corriger les erreurs de syntaxe, correct. Je pense qu'ils ont perdu un très bon candidat si je n'étais pas embauché à cause du tableau blanc. Je regarde les qualifications et on dirait que je suis bien qualifié pour le poste et que je peux faire le travail. J'excelle dans le travail actuel où je suis et j'aurais souhaité pouvoir avec eux.

Merci pour votre contribution Kate, j'ai lu chaque mot. C'est juste pour moi en tant que programmeur, le tableau blanc ne montre vraiment pas vos compétences. Je suis un excellent programmeur qui travaille dans plusieurs langues. Je connaissais la langue dans laquelle je devais programmer, mais sur un tableau blanc, j'ai soudain oublié.

Je construis une intégration complexe et un traitement des cartes de crédit, mais sur un tableau blanc, je ne me souvenais même pas comment faire la syntaxe appropriée, rien ne m'invite.

En tant qu'employeur, j'aime les tests du tableau blanc; cependant, j'embauche un programmeur, je veux voir leurs compétences réelles s'ils font le travail. C'est génial s'ils peuvent communiquer, mais je dois les voir être en mesure de résoudre des problèmes.

David
la source
1
Merci pour l'entrée, semble-t-il, c'est juste ce que je pensais en posant la question - on peut vraiment coincé dans un code de tableau blanc sans savoir s'il est (déjà) correct, et n'ayant aucun moyen de le vérifier "réellement". Une solution délicate - écrivez un test de tableau blanc! ;)
mlvljr