web-dev-qa-db-fra.com

Quelle est la meilleure façon d'évaluer de nouveaux programmeurs?

Quelle est la meilleure façon d'évaluer les meilleurs candidats pour obtenir un nouvel emploi (parler simplement en termes de compétences en programmation)? Dans mon entreprise, nous avons eu beaucoup de mauvaises expériences avec des gens qui ont de bonnes notes mais qui n'ont pas de réelles compétences en programmation. Leurs compétences sont simplement comme des singes de code, sans la capacité d'analyser les problèmes et de trouver des solutions.

Plus de choses que je dois noter:

  • Le système éducatif de mon pays est nul - vraiment nul. Les gens qui sont bons dans ce genre de travail sont bons parce qu'ils ont du talent ou essaient vraiment d'apprendre par eux-mêmes.

  • Le diplôme universitaire/universitaire/post-universitaire ne signifie pas nécessairement que vous savez exactement comment faire les choses.

  • Les certifications ne signifient également rien ici parce que les personnes en charge du cours de certification n'ont pas non plus de compétences (ou occupent des emplois peu rémunérés).

Nous devons vraiment obtenir les bons candidats qui sont flexibles et n'ont pas de pensée mécanique (car ce type de personnes par expérience a une faible performance).

Nous sommes dans une institution gouvernementale et les candidats ne viennent pas nécessairement de l'extérieur, mais nous avons la possibilité d'accepter ou non des candidats jusqu'à ce que nous trouvions le bon.

J'espère que je ne semble pas trop agressif dans ma question; et BTW je suis moi-même programmeur.

edit: J'ai compris que je demandais quelque chose de vraiment complexe ici. Je ne désactiverai "la bonne réponse" que pour laisser la discussion se dérouler couramment, sans parti pris.

53
Rafael

En ce qui concerne la sélection des candidats, je choisis généralement un plan en trois temps:

  • Test régulier avec questions de codage de type FizzBuzz et de nombreuses questions de connaissances où ils doivent donner des exemples codés. Selon la position, cela peut être OO principes, principes de conception SQL, etc. J'incrémente les difficultés des questions tout au long du test pour voir jusqu'où elles peuvent aller. L'idée n'est pas vraiment d'avoir toutes les questions ont répondu (si c'est le cas, mieux c'est), mais aussi pour voir s'ils peuvent reconnaître quand ils ne savent pas quelque chose. La confiance est essentielle, et je ne veux pas que quelqu'un me ment dans mon équipe.

  • Retour sur le test avec le candidat, et discussion autour des réponses. Extension possible des questions pour atteindre les limites du candidat. Cela peut être étendu, et plus il est vaste, mieux c'est.

  • Dernière partie mais non des moindres, La révision du code . Je demande au candidat d'apporter un morceau de code (j'espace généralement le test/discussion précédent et cet examen de quelques jours, pour le laisser écrire et peaufiner un morceau de code). Ensuite, nous procédons à une révision régulière du code avec deux personnes: une personne qui travaillera directement avec le candidat et la personne qui a examiné le test avec le candidat précédemment. En ce qui concerne la révision du code, vous pouvez lire cet article de JohnFX .

À la fin de tout cela, vous devriez pouvoir décider si vous souhaitez que ce candidat fasse partie de votre équipe ou non.

53
Matthieu

Commencez par leur donner FizzBuzz à résoudre. Cela devrait éliminer les pires d'entre eux.

Ensuite, quelque chose d'un peu plus difficile - par exemple, comment inverser une chaîne sans fonctions de bibliothèque intégrées. Demandez-leur de parler tout en résolvant afin de voir quel est leur processus de réflexion.

Vous pouvez continuer à donner des problèmes plus difficiles s'ils trouvent cela très facile, jusqu'à ce que vous soyez convaincu qu'ils peuvent marcher et pas simplement parler.

20
Oded

Cherchez juste la passion du travail.

Pour citer Joel, recherchez les personnes qui sont " intelligentes, et faites avancer les choses. "

Le reste n'a pas d'importance

14
CaffGeek

Sur la base de mes 25 années de programmation (qui, il est vrai, ne comprend que 5 ou 6 instances d'embauche d'autres programmeurs):

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

De plus, je suggère:

  • Le FizzBuzz test (ou quelque chose comme ça pour tester la capacité de base à écrire un algorithme.
  • Version plus dure du test FizzBuzz (pour les amener au point de défaillance ou de quasi-défaillance.)
  • Discutez de leur code et voyez s'ils sont prêts à faire preuve d'autocritique et à chercher des améliorations (ce qu'ils n'ont probablement pas eu le temps de faire dans un court test sur place) telles que:
    • bons noms de variables (j'ai eu des codeurs expérimentés très expérimentés qui utilisent des variables en production comme "flag" (WTF ??)
    • modularisation.
    • Anticiper les problèmes et faire du "codage défensif"
  • Une volonté de voir les "défauts" comme des opportunités d'amélioration. Je pense que les meilleurs codeurs recherchent toujours sans faille les défauts de leur code précédent. Ils ne sont pas égocentriques au point de penser que trouver un défaut est un affront personnel. Ils y voient une opportunité de faire mieux. (Ceux qui ne peuvent pas regarder les défauts sans broncher sont dépassés en voyant un défaut (et deviennent super peu confiants ou, pour éviter cela, ils ignorent les défauts.
  • Peuvent-ils déboguer?
  • Peuvent-ils effectuer des tests unitaires? (J'ai parlé à beaucoup trop de programmeurs qui disent "QC fait ça". Je ne parle pas de Testing, je parle de testing: vous écrivez une fonction, ça marche? Est-ce que cela fait des efforts raisonnables pour gérer problèmes probables (entrée NULL, etc.)? Si vous ne pouvez pas le faire, comment savoir quand vous avez terminé?
  • Ont-ils de bonnes compétences en communication? (au minimum: bonne compréhension et connaissance de soi sur le moment où ils comprennent et ne comprennent pas et volonté de dire "je ne comprends pas, veuillez l'expliquer à nouveau".

Une grande partie du résumé ci-dessus provient de Comment repérer un bon programmeur, qui est un excellent article, concentré un peu plus sur les indicateurs à plus longue portée. Cela confirme définitivement mes intuitions et mon expérience. Il y a aussi beaucoup de choses (comme "passion") qui ne sont pas normalement mentionnées dans une liste de contrôle de "ce qui est un bon programmeur".

13
Clay Nichols

L'évaluation de l'intelligence de programmation est une forme de test de Turing. Il n'y a donc (actuellement) aucune procédure d'évaluation sous forme fermée dont le fonctionnement est garanti. Il faut des programmeurs intelligents pour reconnaître d'autres programmeurs intelligents, mais seulement avec une probabilité raisonnable.

Vos chances seront meilleures si vous avez des enquêteurs dans votre équipe qui peuvent sentir les travaux de neige et qui n'aiment pas instinctivement travailler avec des gens stupides (même ceux qui sont beaux, ont des CV impressionnants et peuvent jaillir toutes les solutions usuelles en conserve de mémoire) .

(Une méthodologie de possibilité qui aiderait la qualité du stackoverflow en tant qu'effet secondaire est de déterrer les anciennes questions de stackoverflow, liées en quelque sorte à vos exigences de travail mais qui, à votre avis, ont des réponses inférieures; demandez à l'enquêté comment il répondrait, et demandez-leur de l'afficher si c'est une bonne réponse. Semblable à un recapcha pour la reconnaissance optique des caractères.)

10
hotpaw2

Donnez-leur un problème, de préférence un problème lié au domaine de problème sur lequel ils travailleront, et demandez-leur de discuter de la façon dont ils pourraient l'aborder. Vous pouvez les faire simplement discuter, pseudo-code ou écrire des morceaux de code réel en fonction de votre confiance en leur niveau de compétence

Par exemple, si votre organisation a organisé des conférences, demandez-lui de décrire comment elle coderait un système d'inscription en ligne sécurisé. Ils devraient être en mesure de couvrir certaines des bases et de poser de bonnes questions sur ce qui doit être mis en œuvre. Au fur et à mesure que vous interagissez, vous devriez être en mesure de déterminer si elles conviennent à votre organisation et le rôle que vous avez besoin qu'elles remplissent.

Je ne suis pas un grand fan de la programmation de tests de trivia et de casse-tête. Bien qu'ils puissent être amusants pour certaines personnes, ils peuvent également ennuyer et/ou stresser d'autres personnes, y compris des personnes qui pourraient être les mieux adaptées à votre équipe. De plus, des informations sur de nombreux tests de ce type sont facilement disponibles en ligne et encourageront le bourrage pour les tests et autres tactiques qui affaibliraient leur viabilité pour évaluer la capacité du programmeur.

7
jfrankcarr

La lecture de cette question et de certaines des réponses qu'elle m'a reçues m'a incité à écrire un article qui, selon moi, pourrait être intéressant:

pratiques de recrutement étranges lors de l'embauche de développeurs de logiciels

Ok, donc le titre de l'article est nul, mais l'article va au cœur du problème. Ce n'est pas le problème du candidat que vous avez choisi de les interviewer, peu importe à quel point ils peuvent être inappropriés pour le rôle que vous avez en tête. Si vous n'avez pas réussi à définir une procédure d'embauche bien conçue pour vous permettre de trouver les joyaux à l'état brut, alors vous allez juste devoir vivre avec les conséquences, et oui, cela signifie obtenir quelques candidats qui pourraient ne répond jamais à vos attentes. Pour filtrer vos candidats en fonction de leurs lettres et curriculum vitae, vous devez d'abord, demander à vos candidats d'écrire une lettre sur eux-mêmes et ce qu'ils attendent du poste, puis regarder comment le curriculum vitae est rédigé. Si vous n'avez qu'un ou deux candidats potentiels à interviewer, vous avez probablement effectué correctement la présélection. Si vous ne pouvez pas décider entre vos candidats à ce stade et que vous avez encore une centaine de candidatures, vous avez probablement soit défini vos attentes trop bas, soit vous n'avez pas été suffisamment agressif dans votre processus de filtrage.

Lorsque vous finissez par trouver les 1 ou 2 candidats que vous considérez comme valant vraiment votre temps, ne posez pas simplement une poignée de questions de testeurs stupides, mais investissez plutôt du temps pour apprendre à connaître ces personnes et engager des discussions ouvertes sur les logiciels. l'ingénierie en général. Vous en apprendrez plus sur une approche informelle du candidat que vous ne le ferez jamais dans une situation d'entrevue traditionnelle (et quelque peu contradictoire). De plus, ne vous contentez pas d'une seule entrevue, mais offrez plutôt à vos candidats clés plusieurs réunions où une discussion ouverte est utilisée et où le candidat peut rencontrer ses collègues potentiels. Le temps n'est jamais perdu, car les candidats inappropriés ne réussiront pas très bien dans une discussion très technique et montreront leurs défauts très rapidement en baissant la garde. Si vous passez du temps et que vous n'avez toujours pas d'embauche, vous avez eu l'occasion d'en savoir plus sur vos besoins et pouvez continuer à améliorer votre processus d'entrevue en fonction de ce que vous avez appris des entretiens `` échoués ''.

3
S.Robins

Vous n'avez pas dit pour quelle langue, mais il est assez facile de tester les connaissances de quelqu'un. Cela dépend aussi du niveau que vous recherchez, mais il y a assez grand bassin de questions concernant les questions d'entrevue.

Quelle que soit la manière dont vous décidez de mener votre entretien, ne posez pas ces questions d'entrevue "de réflexion latérale" .

1
BЈовић

Je vous suggère d'aller avec une question FizzBuzz et d'embaucher la première qui passe. D'autres tests ont tendance à être viciés car tous les bons programmeurs n'aborderont pas un problème comme vous, ou ne géreront pas une interview sans bégayer, ou connaîtront les langues que vous voulez ou vous souciez ou la bêtise comme l'échange d'entiers sans une troisième variable (qui en a besoin de toute façon? I signifie, puisque RAM a dépassé 128 octets?).

Pensez-y. Si la question FizzBuzz élimine 199 sur 200, elle élimine simplement des centaines d'interviews. Alliez-vous vraiment interviewer des centaines de prospects?

Il semble que les rendements diminuent après FizzBuzz. Cela suppose que 199/200 est même approximativement proche. Et je suppose que VOTRE temps est précieux aussi ...

1
Harold Bamford
  1. Peuvent-ils défendre ce qu'ils prétendent savoir? Ils l'ont mis sur le curriculum vitae/CV en tant que compétence ou quelque chose qu'ils ont fait sur un autre projet. Voyez à quel point ils peuvent approfondir le sujet.
  2. Peuvent-ils apprendre quelque chose de nouveau? Parlez d'un aspect de haut niveau de la technologie que vous utilisez ou de quelque chose de spécifique au domaine d'activité dans lequel vous travaillez et voyez s'ils peuvent saisir le sujet. Posent-ils des questions intelligentes? Peuvent-ils trouver une analogie? Est-ce semblable à quelque chose qu'ils ont fait dans une autre industrie ou technologie?

  3. Seraient-ils plutôt de la programmation? Il ne doit pas nécessairement être numéro un sur leur liste, mais ils doivent montrer une préférence pour l'écriture de code. Et je veux dire en fait écrire du code et faire quelque chose, pas rester assis et en parler ou dessiner au tableau toute la journée. Pas pour minimiser la planification ou pour promouvoir le codage des cow-boys, mais vous devez éventuellement avoir du code. Évitez ceux qui évitent le clavier. Ce n'est pas une position de gestion.

Vous pouvez faire un score sur une échelle de une à dix choses ou simplement compter sur la capacité de sentir votre propre genre.

0
JeffO

Si cela vous fait vous sentir mieux, de mauvais programmeurs existent dans presque tous les pays. Comment les éliminer est le problème.

Le premier désherbage est le CV. Une chose que je recherche, c'est beaucoup d'expérience linguistique revendiquée et rien pour décrire ce qu'ils ont fait dans cette langue. J'ai vu des curriculum vitae qui affirment à peu près qu'ils connaissent toutes les langues jamais inventées et pourtant leur expérience montre qu'ils n'ont réellement travaillé qu'avec Access et Visual Basic. Ceux-ci vont directement à la poubelle. Les CV de 10 pages vont directement à la poubelle (en particulier les CV de 10 pages de personnes avec moins de 2 ans d'expérience que j'ai acquises). De récents diplômés universitaires avec peu d'expérience, vous devez être très pointilleux sur la façon dont ils se présentent. Les meilleurs candidats font attention à leur curriculum vitae, ils n'ont pas d'erreurs. Cherchez-vous vraiment quelqu'un qui se soucie si peu qu'il n'a pas pris la peine de relire son CV?

Les CV préparés par des professionnels vont aussi à la poubelle. Une fois que vous avez lu des centaines de CV, vous pouvez les sélectionner car ils utilisent exactement le même libellé. Vous ne pouvez pas faire confiance au contenu d'un CV préparé par des professionnels et vous savez que la personne n'a pas fait sa propre préparation. C'est le genre de personne qui s'appuiera sur les autres pour résoudre ses problèmes pour lui, voulez-vous vraiment cela dans une position de programmation?

Cherchez des choses qui font que la personne se démarque de celles que vous choisissez. C'est plus difficile bien sûr avec ceux qui viennent de sortir de l'école, mais recherchez les réalisations, les contributions à l'open source, etc.

La prochaine élimination est l'entretien téléphonique. Renseignez-vous sur les concepts de base qui se rapportent au travail réel que vous avez. Si les gens n'ont pas une connaissance de base des concepts dont vous avez besoin, ils ne valent pas la peine de se présenter à un entretien personnel. Les jeunes pensent souvent que c'est injuste car ils peuvent tout rechercher sur Internet, mais la vérité est que je n'ai jamais rencontré un bon programmeur qui a dû chercher tout sur Internet. Vous devez avoir une certaine connaissance de votre profession que vous n'avez pas à consulter à chaque fois.

Après l'entretien téléphonique, vous devez choisir les 4 à 5 meilleurs candidats et passer l'entretien. Bien sûr, si vous n'avez que 1-2 bons candidats, ne vous embêtez pas à interviewer des personnes que vous avez déjà éliminées. Vous allez maintenant poser les questions difficiles et vous faire une idée de la façon dont ils abordent les problèmes. Je n'utiliserais jamais le test fizzbuzz car il est trop bien connu donc les réponses ne vous disent rien. Au lieu de cela, inventez quelques problèmes à partir de votre propre base de code. Je pourrais leur donner une exigence et un morceau de code et leur demander si le code répond à l'exigence et sinon pourquoi et ce qu'ils pourraient faire pour le faire satisfaire à l'exigence. Je leur demanderais de décrire le problème de programmation le plus difficile qu'ils ont dû résoudre et quelles mesures ils ont prises pour trouver la réponse. Je voudrais poser quelques questions techniques plus approfondies. N'oubliez pas que vous essayez de vous faire une idée de leurs compétences techniques, de leur capacité de résolution de problèmes et de débogage et de leur capacité à s'adapter à votre équipe existante. Je pose également des questions dont ils ne connaissent probablement pas la réponse pour juger de la façon dont ils gèrent le stress, c'est un travail stressant, je ne veux pas de quelqu'un qui se plie à l'entretien parce que le stress du travail est supérieur au stress de l'entretien . Je recherche des forces dans des domaines où nous sommes actuellement faibles et une capacité à travailler en équipe et à se présenter aux clients (nos développeurs traitent largement avec les utilisateurs), votre liste peut être différente.

0
HLGEM

Demandez-leur quel est le défi de programmation le plus intéressant qu'ils aient jamais tenté de résoudre mais qu'ils n'ont pas pu, quelle approche ont-ils utilisé lors de sa résolution, pourquoi ils n'ont pas pu le résoudre et quelle autre approche, selon eux, peut le résoudre.

Cela me suffit pour juger des capacités d'un programmeur en tant que programmeur.

0
Priyadarshi Kunal

Je ne sais pas s'il s'agit d'un commentaire ou d'une réponse, mais essentiellement ce que Matthieu a dit. Vous voulez des questions stupides et faciles qui prennent une minute ou deux (mais pas plus de 5) minutes à faire et elles devraient concerner différents domaines.

De tels exemples de question facile stupide est une question sur la récursivité telle que vous avez une liste et vous devez l'imprimer dans l'ordre inverse sans utiliser de boucle. Une simple question regex si regex se fait normalement dans votre développement. Une question sur les bits et les octets si vous utilisez C++ (écrivez un modèle qui accepte les caractères longs et imprime la représentation binaire. La spécialisation n'est pas requise, utilisez simplement sizeof () pour déterminer la longueur des bits)

Cela devrait vous prendre environ <= 3 minutes par question

0
user2528