La question n ° 11 du test Joel est: "Les nouveaux candidats écrivent-ils du code lors de leur entretien?". Quels sont les arguments pour et contre de demander aux nouveaux candidats d'écrire du code lors de l'entretien et de prendre une décision à ce sujet?
16
Réponses:
Je ne vois pas les inconvénients. Une entrevue comporte plusieurs parties et un candidat devrait être endossé «en amont» à plusieurs reprises.
J'interviewe environ 10 personnes par semaine. J'apprécie vraiment, vraiment, vraiment le fait que les RH aient fait tout le travail de fond et m'ont présenté de nombreuses notes. Au moment où ils me parviennent, il est temps pour moi de réussir leurs tests.
Les tests dépendent entièrement de la position. Généralement, j'essaye de sonder:
Compétence générale en programmation. Pouvez-vous utiliser efficacement les opérateurs? Pouvez-vous concevoir un système numérique qui a une radix qui n'est pas 10?
Savez-vous comment faire ce que nous vous engageons à faire?
Évaluation de vos contributions à tous les projets open source que vous avez répertoriés
J'essaie d'être bref et amusant. Quand j'entre dans le bureau, j'attrape les réponses, les regarde et mène ensuite un entretien secondaire. Pour être embauché, vous devez généralement passer par trois entretiens.
J'évalue également dans quelle mesure vous vous fondrez dans l'équipe qui vous accueillera. Cette équipe compte sur moi pour le faire efficacement.
C'est une chose de répondre à des questions sous forme de méta, c'est une autre de produire réellement du code. Si je vais vous embaucher, j'ai vraiment besoin de vous voir produire du code.
la source
Toutes mes excuses à Scott Whitlock:
Les inconvénients:
Avantages:
la source
Si vous deviez embaucher un jongleur, vous seriez fou de ne pas le faire jongler avec vous. Ou un musicien que vous auriez auditionné. Sinon, vous obtenez des trucs comme le K-strass génial yo-yo "master" .
Marcher à travers quelque chose sur un tableau blanc est l'équivalent pour les programmeurs d'une jongle de démonstration rapide.
la source
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.)
la source
Un inconvénient auquel je peux penser est qu'il est difficile de "coder à haute voix" devant d'autres personnes. J'ai même du mal à taper avec quelqu'un qui regarde par-dessus mon épaule, et je ne suis pas seul. Je remarque que lorsque quelqu'un m'appelle à son poste de travail pour aider quelque chose, il commence soudainement à faire des fautes de frappe, à sélectionner le mauvais code, voire à faire des erreurs carrément - dont aucune n'aurait été commise si je n'avais pas été assis juste là. Enfer, j'ai vu des gens commencer à utiliser le menu pour les opérations de copier-coller, juste parce qu'ils étaient sous observation. Ce n'est pas un comportement normal, et les codeurs dont je parle sont d'excellents programmeurs et d'ailleurs assez intelligents.
J'ai récemment eu une entrevue au cours de laquelle l'intervieweur m'a demandé comment je coderais une opération particulière et il a dit: «Montrez-moi simplement les mathématiques». Eh bien, je devais d'abord réfléchir au problème avant d'aborder les mathématiques, ce qui m'a obligé à faire des ourlets et des haplings. Ce que j'ai mis sur le tableau blanc au début était embarrassant, et je sentais que je perdais à ce moment-là. J'ai finalement eu le moment A-ha et j'ai trouvé la réponse (en fait, quand j'ai finalement pensé à ce qu'il demandait vraiment ), mais le "gâchis" que j'ai fait avant d'y arriver m'a fait me sentir très mal à l'aise. Néanmoins, j'ai obtenu le poste, mais si l'intervieweur avait été moins patient, je ne l'aurais peut-être pas fait.
Je pense que si vous confiez aux interviewés une tâche de codage, donnez-leur un peu de temps pour travailler sur un ordinateur, peut-être même dans un IDE qu'ils connaissent. Laissez-les écrire le code pour vous et ensuite en parler. Demandez-leur pourquoi ils ont fait les choses d'une certaine manière et si une autre façon ne serait pas meilleure. Vous en apprendrez plus sur ce genre de processus qu'en leur demandant de faire pipi (au sens figuré) dans une tasse juste en face de vous.
la source
Inconvénients: aucun. Chaque fois que vous passez à configurer un PC, à concevoir un test de code et à le réviser, vous éviterez des maux de tête indicibles à l'avenir.
Avantages: "Faites confiance, mais vérifiez" - Ronald Regan. Tant de fois j'ai vu et entendu parler de gens qui ont finalement abandonné une position où, dans l'interview, vous penseriez avoir une rock star. La preuve est dans le pudding; Je veux voir ce qu'ils peuvent faire. Cela représentera ce qui se passe une fois que vous investissez du temps et de l'argent en embauchant quelqu'un et que vous collez un nouveau projet devant lui.
la source
Les inconvénients:
Avantages:
la source
Lorsque j'ai interviewé pour mon emploi actuel, le recruteur m'a donné une liste de questions pour écrire du code. J'ai été très impressionné parce que les questions ont évidemment été écrites par quelqu'un qui avait une connaissance approfondie de SQL, donc cela fonctionne dans les deux sens.
la source
Vous voulez vraiment que la personne écrive du code dans l'interview - encore mieux, demandez-lui de jumeler le programme avec un membre de votre équipe pendant X fois (tout ce que vous pouvez vous permettre confortablement en temps / main-d'œuvre).
C'est à peu près l'une des seules façons de savoir si cette personne peut coder ou non.
Je préfère légèrement la programmation en binôme car elle montrera leur travail d'équipe, leur donne un véritable IDE avec lequel travailler et leur permet de travailler sur un `` vrai '' problème (l'autre personne de la paire peut les guider au-delà des spécificités environnementales que l'interviewé a ne pouvait jamais raisonnablement savoir).
Nous avons commencé à utiliser cette politique d'embauche et nous sommes vraiment satisfaits des résultats.
la source
Vous jugez un oiseau par ses plumes et un programmeur par son code.
Lorsque j'ai commencé avec la société actuelle pour laquelle je travaille, ils m'ont demandé d'écrire du code C qui génère ou vérifie le bit de parité d'une entrée binaire (selon que vous codez ou décodez). C'était une question d'entrevue exactement parce que ces types de problèmes sont résolus pendant le travail. Bien sûr, je ne pense pas à vérifier la parité, mais plutôt à travailler à un niveau bas.
la source
Jusqu'à présent, toutes les réponses (que j'ai lues) ne traitaient pas du fait que le test Joel n'est PAS (juste) une liste de meilleures pratiques pour les entrepreneurs mais une liste de contrôle pour faciliter votre évaluation d'un employeur potentiel .
Le truc c'est que ... s'ils testent à fond leurs candidats, ils embaucheront probablement des gens qui connaissent leur métier ... cela signifie pour vous
au lieu de corriger les bugs après eux ...
la source
Je dirais:
Avantages
Les inconvénients
Reverse
méthode intégrée ou similaire, ou pour des tests écrits des choses comme" Quels sont les arguments de laFoo
méthode de laBar
classe ", quand n'importe quel idiot pourrait Google cela ou utiliser la documentation) par opposition aux questions d'architecture / conception qui montrent le candidat peut faire avancer les choses et résoudre des problèmes commerciaux .la source
L'un des avantages est que cela montre que quelqu'un possède des connaissances de base en programmation ou autre (la dernière fois que j'ai rencontré cela, j'ai été surpris de la base de la question SQL). Il peut également servir de base à une discussion technique, demandant pourquoi le candidat a fait telle ou telle chose, et comment cela pourrait être amélioré.
Cela prend du temps dans l'entrevue, qui pourrait être utilisé pour d'autres choses. De plus, écrire du code sur un tableau blanc n'est pas un environnement naturel, et certaines personnes auront des problèmes de plus en moins graves. Cela pourrait vous faire manquer un développeur qui devient nerveux sans outils ni références normaux.
la source
La programmation est une compétence hautement technique avec un tas de «livrables» clairs. Un candidat peut ou ne peut pas les livrer. Il n'y a donc aucun "inconvénient" à poser des questions techniques. C'est entièrement pour dire, "montrez-moi du code pour cette application, ou" montrez-moi le code pour une application que vous avez DÉJÀ écrite. "
NE PAS le faire pourrait conduire à un résultat comme celui-ci: Un homme riche a interviewé un tuteur pour apprendre à ses enfants à jouer aux échecs (comme un exercice d'expansion de l'esprit). Le tuteur a ouvert une planche à carreaux et a commencé à parler des 64 cases mais n'a pas touché une pièce d'échecs. Pressé par le temps, le père a quand même engagé le tuteur. Et le tuteur a appris aux enfants à jouer à CHECKERS.
la source