Je pense que c'est super utile, et je le fais toujours, mais comme les avantages ont été si bien couverts, je vais discuter uniquement des négatifs (apparents).
Je pense que les tests de code sont peu susceptibles de vous donner de faux positifs: les chances sont faibles que quelqu'un qui ne peut pas écrire de code parvienne à le simuler dans une interview, du moins si vous avez une échelle de questions de difficulté croissante. (Le scénario le plus probable est peut-être qu'ils trichent en demandant à un ami, s'il ne s'agit pas d'une entrevue en personne.)
Les problèmes sont plutôt du côté des faux négatifs: les tests de code vous conduiront-ils à rejeter la personne qui est en fait le meilleur candidat?
Trac
Vous pouvez avoir quelqu'un qui est en fait un très bon développeur, mais qui est très nerveux à propos de cette interview, et ils ont essentiellement peur de la scène. Jouer sous pression est important dans une certaine mesure, mais faire face à la peur de la scène n'est pas un élément clé pour être programmeur (par rapport à d'autres professions), et il serait malheureux de rejeter quelqu'un qui en souffre gravement. Cela peut aggraver: si la personne ne peut pas répondre à une question à laquelle elle sait qu'elle doit répondre, elle peut se resserrer. Ou, comme dans cette question , ils sentent qu'ils ne peuvent pas parler et coder en même temps.
Atténuation: commencez par poser quelques questions sur leur parcours, leurs objectifs, etc. avant de passer aux questions techniques. Commencez peut-être par des questions techniques plus faciles pour qu'elles prennent de l'élan. Ne soyez pas une bite pendant l'entrevue (chicanant sur les points-virgules, etc.).
C'est une mesure bruyante
Les questions de code intéressantes peuvent avoir plusieurs réponses correctes. Si une personne écrit une bonne réponse et une autre une réponse correcte et plus efficace, combien de poids devriez-vous y mettre?
Dans une certaine mesure, cela ressemble au problème avec certaines questions «énigmes»: la personne a la perspicacité ou non et vous obtenez un résultat presque binaire. L'intelligence affecte probablement la probabilité d'avoir cette idée, mais l'échantillonnage à quelques reprises seulement vous donne une mesure grossière.
Cela me dérange pour les questions de code (bien que je les utilise toujours.) La meilleure atténuation à laquelle je peux penser est d'avoir autant que possible une rampe de solutions possibles: la personne peut au moins écrire une réponse brute force brute, ou une réponse pour une partie du problème. Réaliser que c'est mieux que rien est un bon signe. S'ils en découvrent plus, ils peuvent le rendre plus efficace ou plus élégant. Autant que possible, évitez de poser des questions qui obtiennent des réponses binaires.
Ce n'est pas vraiment représentatif
La programmation n'est pas un travail de résolution de problèmes algorithmiques de dix minutes les uns après les autres: il y a beaucoup plus de travail sur la compréhension et la conception de systèmes plus grands et la concentration pendant de longues périodes de temps, pour ne rien dire des compétences interpersonnelles. Les questions de code ne testent pas vraiment cela.
Mais, les questions de code ne sont pas les seules questions que vous allez poser: vous pouvez regarder leur contexte, leurs références, leur travail open source (le cas échéant), pour trouver des preuves d'efforts soutenus, de créativité, de compétences interpersonnelles.
Savoir comment résoudre de petits problèmes algorithmiques et comment les réduire en code est une condition nécessaire mais pas suffisante: si vous ne pouvez pas résoudre de petits problèmes et que vous ne pouvez pas écrire de code non trivial, alors toute la vision globale du monde n'est pas va faire de vous un développeur productif.
N'importe qui pourrait résoudre ce problème
Non, apparemment non. Comme le souligne le célèbre article de FizzBuzz , les problèmes que vous pourriez penser sont un piège trivial non seulement pour les nouveaux diplômés mais aussi pour les personnes ayant des années d'expérience dans l'industrie. Je ne sais pas pourquoi. Soit le test de code est une mauvaise mesure (ce qui est possible, bien que je pense que ce soit peu probable), soit ils ne contribuaient pas beaucoup aux projets de leur curriculum vitae, ou ils faisaient beaucoup en copiant-collant code algorithmique (ce qui est possible.)
Il convient de reconnaître que vous pouvez vraiment faire beaucoup de choses sans écrire de code algorithmique. Les gens gagnent beaucoup d'argent sur des applications dont la valeur réside dans le graphisme ou la logique métier et non dans ce que vous pourriez appeler la "programmation", et c'est très bien. Mais, si vous avez réellement besoin de programmeurs, ce n'est pas un bon choix.
Il n'est peut-être pas bien calibré
Si vous posez une question, la réponse peut très bien vous sembler simple. Cependant, si on vous pose une question par ailleurs comparable à l'improviste, ou une question qui n'est pas orientée vers vos propres intérêts et antécédents particuliers, cela peut être beaucoup plus difficile.
atténuation: exécutez les tests sur certains développeurs que vous connaissez déjà et voyez comment ils le font. Peut-être que quelqu'un déjà dans votre équipe, que vous connaissez est très intelligent, aura des problèmes avec l'un d'eux et vous pouvez envisager de le régler. Peut-être penseront-ils à une réponse meilleure ou différente.
C'est trop comme des anecdotes
Je pense que les questions de code peuvent certainement entrer dans le jeu, si vous insistez pour que les gens connaissent par cœur les API obscures, ou obtiennent la syntaxe parfaite, ou se souviennent de la définition exacte d'un algorithme non trivial. Ceux-ci sont tous raisonnables pour s'appuyer sur des documents, des recherches sur le Web ou des erreurs de compilation, et ont peu de corrélation avec une véritable expertise. Ne pas même savoir où les API sont susceptibles d'être est peut-être un indice que la personne ne l'a pas utilisé récemment, mais ce n'est pas nécessairement un problème tant qu'elle ne ment pas sur son curriculum vitae.
La réponse est donc assez simple: ne posez pas de questions triviales et ne vous attardez pas sur des erreurs triviales. Rappelez au candidat le nom de l'API ou laissez-le le rechercher; corriger les erreurs de syntaxe; ne testez pas les personnes qui mémorisent des définitions de structure de données.
Comment comparez-vous?
Si vous avez deux candidats et que les deux répondent bien aux questions, comment choisissez-vous entre eux? Vous pouvez choisir celui qui a terminé le plus rapidement, mais peut-être que vous commencez à cueillir des lièvres plutôt que des tortues. Vous pourriez faire un autre tour et poser des questions beaucoup plus difficiles, mais je n'en suis pas sûr non plus. Peut-être que vous leur donnez simplement un A + et essayez de choisir entre eux sur d'autres critères (ou essayez de trouver l'argent pour embaucher les deux.)