web-dev-qa-db-fra.com

Quelle est la meilleure façon de discerner un excellent programmeur lors d'un entretien d'embauche?

Dans le cadre d'une interview: quelle est la meilleure façon d'identifier de manière fiable quand quelqu'un est excellent programmeur. J'entends par là qu'il est l'un de ceux qui sont 10 à 15 fois plus efficaces/rapides/meilleurs que ses pairs vers l'extrémité inférieure du spectre.

Beaucoup d'entre nous ont entendu parler du FizzBuzz Problem comme un moyen d'éliminer les plus faibles. Il est certain que prendre 5 à 10 minutes pour résoudre ce problème est un indicateur sérieux qu'un candidat est un candidat faible. Je postule qu'un bon indicateur est de pouvoir résoudre cela aussi rapidement que vous pouvez écrire. Cela ne semble cependant pas suffisant.

Est-ce peut-être quelque chose comme lui donner un programme de buggy moyennement compliqué et voir à quelle vitesse il peut le bloquer et identifier tous les problèmes?

82
Claudiu

Mes excuses à tous ceux qui ne se soucient pas des réponses longues, mais je pense qu'il est assez important de qualifier vos candidats avant de les embaucher. Quiconque a mené un nombre important d'entretiens dans cette industrie sait que la plupart des candidats ne dureront pas pendant les 15 à 30 premières minutes d'un entretien, la plupart de cette liste ne sera donc pas nécessaire. Gardez juste à l'esprit combien il est coûteux (financièrement et émotionnellement) de licencier quelqu'un avant de rejeter ma liste comme exagéré. J'ai essayé de lister mes sujets d'interview ici par ordre d'importance.

Intelligence générale (casse-tête/énigmes logiques)

Connaissances en informatique

Exercices de programmation

  • PGCD , Factorial , Fibonacci , Tours de Hanoi
  • Inversion de chaîne et de liste
  • Déterminez si une liste liée individuellement a une boucle (pouvez-vous le faire avec seulement deux pointeurs?)
  • Trouvez le bug

Connaissance des techniques de programmation orientée objet et communes modèles de conception

analyse d'algorithme (exécution complexité O (n) et exigences de stockage)

Utilisation d'outils et de méthodologies

Connaissance des vulnérabilités et attaques de sécurité courantes

Mathématiques de base

Cryptographie

  • Cryptographie à clé publique
  • Cryptographie à clé symétrique
  • Fonctions de hachage
  • Protocoles cryptographiques (partage secret, preuves zéro connaissance)

Mathématiques discrètes

  • Logique
  • Théorie des ensembles
  • La théorie des graphes
  • Théorie de l'information
  • Combinatoire
  • Preuves (comme l'existence de nombres irrationnels, de nombres premiers infinis)

Vous pouvez également consulter le livre Programmation des entrevues exposées . C'est une bonne référence sur le sujet.

65
rboyd

Ah, l'éternelle question.

J'ai fait beaucoup d'entretiens cette année (j'ai deux candidats prévus demain), et d'après mon expérience, l'embauche est plus une question d'intuition et de compétences humaines, et moins de connaissances techniques.

  1. Prenez votre temps avec les CV. Certains CV peuvent être rejetés en quelques secondes, certains prennent une demi-heure. Parfois, je pense à un candidat basé sur un CV beaucoup plus longtemps que je ne l'interviewe. Quelques fois, j'ai préparé des questions d'entrevue spécialement pour ce candidat, même si je n'ai généralement pas préparé de questions.

  2. Connaissances techniques - il y a un minimum que je veux, et c'est généralement assez facile à dire. En cas de doute, lors de l'entretien, parlez des projets qu'il a mentionnés dans le CV, et allez aussi loin que nécessaire. C'est généralement plus que suffisant pour vous dire ce qu'il sait et ce qui le motive. L'éducation n'est pas importante, les emplois précédents sont importants, les projets personnels possibles obtiennent un score élevé.

  3. Demandez-lui ce qu'il veut faire et où il veut aller dans sa carrière - avez-vous besoin de ce qu'il a, et pouvez-vous fournir ce qu'il veut? De plus, vers la fin de l'entretien, je pose généralement des questions sur un salaire préférentiel. S'il est hors de ma portée, ou si je ne paierai pas autant pour ce qu'il sait, c'est là que nous terminons l'interview.

  4. Plus important encore, le candidat doit s'intégrer dans l'équipe et je dois être convaincu que nous serons en mesure de travailler ensemble. Je n'ai pas besoin de l'aimer, mais je dois être capable de le gérer, et il doit pouvoir me gérer. Si ce n'est pas le cas, je passe, car je ne pourrai pas utiliser ses connaissances techniques. D'un autre côté, si c'est le cas, et s'il apprend vite, son manque de connaissances techniques ne m'empêchera pas de l'embaucher.

J'ai formé des filles des RH à me transmettre tous les CV dès qu'ils les reçoivent; Je programme un entretien personnellement, aussi vite que possible (idéalement après-demain après avoir reçu un CV pour de bons CV). Ensuite, il obtient une entrevue d'une demi-heure ou d'une heure avec moi et au moins un collègue (généralement mon patron ou un membre de l'équipe), où je peux le connaître et répondre à toutes les questions. Même si je rejette sa candidature sur place, il obtient une visite de 20 à 30 minutes de l'entreprise et je parle de ce que nous faisons et de la façon dont nous le faisons. Ensuite, je l'envoie aux RH pour un test psycho et un peu de codage papier vraiment SQL/SQL. Les deux tests ne jouent presque jamais un rôle significatif dans ma décision, c'est plus une vérification que j'ai bien jugée lors de l'entretien. Après les résultats, c'est une conversation de 15 minutes où je lui fais une offre, et si nous négocions les conditions dont nous sommes tous les deux satisfaits, il est embauché.

C'est un processus pour lequel j'ai dû me battre grâce à la bureaucratie de l'entreprise, après avoir raté quelques bons candidats, et qui fonctionne parce que c'est moi qui décide de l'embauche (bien que j'écoute les conseils des RH et des collègues, mon Le mot est final). Plus de décideurs, processus plus long. Plus le processus est long, plus vous devez être Google pour être au top.

Dès que je suis certain que c'est un match nul, je termine l'interview, il fait la tournée de l'entreprise et c'est fini. Cela peut prendre aussi peu que deux minutes au téléphone lors de la planification de l'entretien. Même si vous rejetez un candidat, vendez l'entreprise. Si vous avez fait du bon travail, une bonne embauche peut se faire par le bouche à oreille d'un candidat rejeté.

Aussi, un conseil. Envoyez des lettres de refus (ou e-mails) pour chaque candidature que vous recevez. Dans mon entreprise actuelle, je laisse habituellement cela aux RH (en dehors de ceux que je raconte lors de l'entretien), mais à un moment donné, il a été inestimable d'obtenir une réponse ravie d'un candidat rejeté du type "MERCI! Vous êtes la première entreprise à avoir a répondu au lieu de me demander s'ils répondraient un jour! "

28
Domchi

Cette réponse est un peu hors des sentiers battus, mais je pense que c'est un point précieux.

Les meilleurs programmeurs interviewent rarement. Ils n'ont pas à. Si votre entreprise est en train de changer le monde, ou est entourée de secret de façon passionnante, ou si plusieurs programmeurs qu'ils respectent sont allés là-bas, alors ils peuvent postuler, mais en règle générale, les grands programmeurs obtiennent des emplois via leur réseau d'associés, pas en envoyant des curriculum vitae.

Donc: la meilleure façon de dire à un excellent programmeur lors d'un entretien d'embauche est que il n'est pas là.

24
Rich

Toute réponse doit inclure des exemples de code. Embaucher un programmeur sans voir son code, c'est comme embaucher un chef sans essayer sa cuisine.

17
Andy Lester

Il est possible qu'un "excellent" programmeur ne vienne pas vers vous pour une entrevue. Vous devez probablement le voler à quelqu'un d'autre.

11
interstar

Une façon de dire aux programmeurs passionnés des programmeurs "Je veux juste un emploi" est de leur demander quel livre ils lisent cette semaine. Demandez-leur ensuite quels livres ils ont lus au cours des dernières semaines.

J'ai trouvé que les programmeurs passionnés lisent TOUJOURS, et généralement la liste comprendra quelques programmations/comp. Sci. livres dans la liste récente.

Il ne s'agit pas seulement de "suivre la profession" - les programmeurs passionnés ont un désir et un amour pour la programmation, et ont tendance à dévorer du matériel sur une variété de sujets - pas seulement le langage qu'ils utilisent actuellement, mais les méthodologies, d'autres langages (en particulier nouveaux ou "bizarres" ou anciens), d'autres aspects de l'informatique (peut-être la robotique, ou l'IA, ou les jeux, ou ...)

S'ils n'ont pas du tout de liste de livres récente, ils ne sont probablement pas très programmeurs, d'après mon expérience.

À votre santé,

-R

9
Huntrods

Il y a différentes échelles de temps auxquelles quelqu'un peut être "rapide": certaines personnes intelligentes peuvent résoudre des énigmes difficiles en quelques secondes, mais certaines personnes intelligentes produisent beaucoup de bon code en un mois, même si elles ne sont pas si rapides aux questions d'entrevue.

Demandez aux candidats s'ils sont actifs dans un projet open source où vous pouvez consulter une partie de leur code, et passez un peu de temps à lire les archives de la liste de diffusion de ces projets et à valider les journaux. Cela vous en dira beaucoup plus que tout ce que les candidats peuvent démontrer lors d'un entretien. (Bien sûr, cela ne peut pas remplacer l'interview, car tous les bons codeurs ne font pas de travail open source.)

7
Jouni K. Seppänen

Le livre " Smart and Gets Things Done: Joel Spolsky's Concise Guide to Finding the Best Technical Talent " peut aider à trouver une réponse.

Table des matières:

  • Introduction
  • Chapitre 1: "Frapper les hautes notes"
  • Chapitre 2: "Trouver de grands développeurs"
  • Chapitre 3: "Un guide pratique pour les développeurs"
  • Chapitre 4: "Tri des CV"
  • Chapitre 5: "L'écran du téléphone"
  • Chapitre 6: "Le guide de la guérilla pour les entretiens"
  • Chapitre 7: "Fixer des équipes sous-optimales"
  • Annexe: "Le test Joel"

L'article de Joel "The Guerrilla Guide to Interviewing (version 3)" peut également être utile.

Et l'article "Done, and Gets Things Smart" par Steve Yegge sur le sujet.

7
sergtk

Demandez-leur de coder sur un tableau blanc. La seule façon pour vous de savoir s'ils savent écrire du code.

4
ManiacPsycho

Posez-leur une série de questions qui les obligent à coder et faites en sorte que les questions deviennent plus difficiles. S'ils semblent apprécier le défi, vous en avez probablement un en direct.

S'ils ne peuvent pas répondre à la première question facile, comme "écrire une boucle for" ou quelque chose de stupidement facile, alors vous savez que cette personne ne peut pas coder.

4
ManiacPsycho

Vous devez principalement juger le travail qu'ils ont déjà accompli. Tout code ou idée que quelqu'un génère lors d'une entrevue anxieuse est un mauvais indicateur de ce qu'il peut réellement produire au sein d'une équipe.

Pour relever des défis de codage, utilisez la messagerie instantanée avec quelque chose comme codepad.com et laissez-les le faire dans le confort de leur propre maison. Écrivez-vous une grande partie de votre code sur un tableau blanc devant votre patron, avec un délai de 30 minutes et votre bonus en ligne? Je ne.

Alors, l'entretien est-il inutile? Non, mais l'accent devrait être mis sur eux pour expliquer ce qu'ils ont fait et exactement ce qu'ils ont apporté.

Vous allez également être soumis à toutes sortes de biais psychologiques une fois que vous rencontrez quelqu'un face à face. N'embauchez pas accidentellement un programmeur parce qu'il a établi un meilleur contact visuel ou est plus grand que quelqu'un d'autre. Pour contourner ces problèmes, je conduirais autant d'entrevue que possible par messagerie instantanée/e-mail avant de les rencontrer face à face.

3
twk

La langue n'a pas d'importance. La logique le fait. Je veux dire que les IDE et les complices sont si bons de nos jours que tout bon programmeur peut choisir n'importe quelle langue (ok peut-être pas assembleur) en une semaine; devenir décent en quelques semaines et être très bon en quelques mois.

C'est son cerveau que vous devez confirmer. Et tu fais ça, mon discours. Je leur demande de résoudre des problèmes simples. Pas en écrivant du code mais en me guidant dans leur logique pour arriver à une solution.

Mais j'avoue que s'il ne peut pas écrire une simple boucle comptant de 1 à 10, vous avez des problèmes.

2
Stephen Cox

Avoir un bon programmeur présent dans l'interview est le meilleur à mon avis.

Seul un expert peut juger si le demandeur connaît juste beaucoup de questions d'entrevue ou s'il réfléchit réellement aux problèmes et peut entrer dans les détails. Rappelez-vous, vous ne voulez pas embaucher des gens pour résoudre des énigmes d'entrevue, vous voulez les embaucher pour faire le travail réel.

Les énigmes doivent exclure les personnes qui ne maîtrisent pas les bases. Si vous voulez tester les compétences, préparez quelques éléments sur lesquels vous (ou votre "bon programmeur") pouvez entrer en détail et vous concentrer sur celui auquel le candidat doit réfléchir pendant un certain temps. Comment aborde-t-il des problèmes dont il ne connaît pas immédiatement la solution?

1
mdm

Je ne pense pas que vous devriez parler de passion lors de l'entretien. Franchement, cela ressemble à une entreprise qui cherche "passion" signifie vraiment "travailler sans argent pour l'idée".

La passion ne garantit même pas l'excellence. Je veux dire que je passe presque toute ma vie à programmer, à lire sur la programmation, à apprendre des langues folles comme Erlang ou Clojure et je ne suis pas payé pour tout cela. Pourtant, je suis nul à la programmation.

Je pense qu'un excellent programmeur devrait avoir une trace des projets réussis dans lesquels il a été activement impliqué. Ainsi, faire en sorte qu'un programmeur écrive quoi que ce soit au-dessus de FizzBuzz de base n'est pas nécessaire dans l'interview. Parlez de leurs projets passés et de ce qu'ils ont fait. Vous embauchez des programmeurs pour résoudre les cubes Rubik et compter les billes ou travailler sur longs et gros et épuisants projets logiciels de plus de 50 lignes de coe?

1
mannicken

http://www.inter-sections.net/2007/11/13/how-to-recognise-a-good-programmer/

De l'article:


Les critères en puces

Donc, en résumé, voici quelques indicateurs et contre-indicateurs qui devraient vous aider à reconnaître un bon programmeur.

Indicateurs positifs :

  • Passionné de technologie
  • Programmes comme passe-temps
  • Va parler de votre oreille sur un sujet technique si encouragé
  • Projets personnels importants (et souvent nombreux) au fil des ans
  • Apprend les nouvelles technologies par lui-même
  • Opinion sur les technologies les mieux adaptées à divers usages
  • Très mal à l'aise à l'idée de travailler avec une technologie qu'il ne croit pas avoir "raison"
  • Clairement intelligent, peut avoir de grandes conversations sur une variété de sujets
  • A commencé la programmation bien avant l'université/le travail
  • A quelques "icebergs" cachés, de grands projets personnels sous le radar CV
  • Connaissance d'une grande variété de technologies non liées (peut ne pas figurer sur le CV)

Indicateurs négatifs :

  • La programmation est un travail de jour

  • Je ne veux pas vraiment "parler de boutique", même quand on l’encourage à

  • Apprend les nouvelles technologies dans les cours parrainés par l'entreprise

  • Heureux de travailler avec la technologie que vous avez choisie, "toutes les technologies sont bonnes"

  • Ne semble pas trop intelligent

  • A commencé la programmation à l'université

  • Toute l'expérience de programmation est sur le CV

  • Concentré principalement sur une ou deux piles technologiques (par exemple tout ce qui concerne le développement d'une Java), sans aucune expérience en dehors de celle-ci

1
Ronny Brendel

Tout d'abord, il existe un moyen de vous faire une idée avant même le début de l'entretien:

S'ils ont un blog ou contribuent à un ou plusieurs projets open source, il suffit de regarder le code et les articles qu'ils ont écrits. Tout d'abord, s'ils ont fait l'une ou l'autre de ces actions, ils ont l'initiative de faire avancer les choses. De plus, vous pouvez comparer ces choses à l'expérience de travail qu'ils ont inscrite sur leur curriculum vitae et avoir une idée s'ils rentrent chez eux et en apprendre davantage après le travail, ou s'ils rentrent chez eux et oublient le travail après 17 heures.

Essentiellement, ont-ils une passion pour la programmation ou non? Voilà la vraie question.

1
Chris Pietschmann

Un excellent programmeur pourra également travailler avec ces pairs à spectre inférieur. Tant qu'ils peuvent faire le test et ne pas se vautrer dans leur ego, alors vous avez un bon candidat, non?

Ce test de fizzbuzz est un peu drôle cependant. La solution à laquelle j'imagine utilise l'opérateur modulo. Ce que je ne sais que par l'élaboration de coordonnées de cartographie de feuille de personnage (jamais mentionné à l'école ou au collège). Le programmeur moyen serait-il même au courant de cela ou ai-je eu une éducation de merde?

0
Yes Fish...

Un critère que j'utilise est de voir le "type" de langues et d'outils sur lesquels il a travaillé, que ce soit dans des projets académiques ou professionnels, et ce qu'il a accompli exactement. A-t-il toujours travaillé au niveau de l'application en utilisant des bibliothèques standard (toujours un gars C # ou VB6?) Ou a-t-il fait un projet en utilisant C sous Linux traitant de choses hardcore comme les pointeurs, la gestion de la mémoire, la récursion, la synchronisation des processus, l'exclusion mutuelle, les événements, etc. S'il a toujours utilisé ces concepts fondamentaux et fondamentaux sous une couche d'abstraction, je serai douteux.

C'est évidemment en plus de lui faire écrire du code. Rien ne remplace cela. Je réponds cependant au fait que certaines personnes peuvent écrire du code plus rapidement que d'autres, et les gens ont des temps de réponse différents lorsqu'ils sont sous les projecteurs d'une interview.

0
Ather