(For those subscribed to my blog who would like to skip the French posts from aggregation, you can subscribe to the English category only)
Bonjour à mes lecteurs francophones, actuels et nouveaux (j'espère). J'ai décidé de commencer à bloguer aussi en français, histoire de rejoindre un nouvel auditoire, mais surtout de mieux profiter de ma langue natale. Si vous utilisez un aggrégateur et n'êtes intéressé qu'à mes billets francophones, abonnez-vous à la catégorie francophone.
Le débat sur comment identifier les bons candidats à un poste de développeur est recommencé depuis un billet de Imran qui se sent obligé de mettre la barre très basse lors d'entrevues. Il propose l'implémentation d'un jeu d'enfant appelé FizzBuzz (tout bon québécois peut y reconnaître le jeu de bar où celui qui se trompe doit boire sa consommation).
Jeff Atwood et Scott Hanselman ont sauté dans le débât, une première fois pour souligner leur étonnement qu'un candidat à un poste de développement puisse échouer un test si banal en entrevue, et par la suite pour se moquer (le mot n'est pas trop fort) de ceux qui ont commenté en donnant leur réponse au problème de FizzBuzz.
L'entrevue
Dans mon ancienne carrière, nous avions à passer plusieurs entrevues. La sélection des candidats était souvent pénible et difficile. Une des questions principales de l'entrevue était la rédaction par le candidat de deux solutions à la suite de Fibonacci. Nous mettions les candidats en contexte, leur expliquions la suite en détails, leur donnions les 8 premiers nombres en exemple, puis leur demandions de rédiger deux fonctions pour trouver le Nième nombre dans la séquence, une première fonction récursive, une seconde non-récursive. S'il vous plaît, n'allez pas me donner la solution ci-bas. Si vous êtes capable de résoudre ce problème, je vous crois sur parole!
Le choc
A chaque phase d'entrevues, j'étais complètement abassourdi de voir 9 candidats sur 10 ne pas réussir ce simple test. La plupart peinaient plus sur la solution récursive, à mon plus grand étonnement. Lorsque ça n'avançait pas assez, nous écrivions même ceci au tableau:
F(0) = 0
F(1) = 1
F(n) = F(n-1) + F(n-2)
Ils s'en trouvaient encore plusieurs pour ne pas trouver la version récursive!!! Incroyable!!!
A chaque fois que nous parlions de notre découragement de voir des candidats échouer ce test, nos patrons soulevaient la possibilité que le test soit plus difficile qu'il n'en paraîssait, et que la nervosité devait jouer contre plusieurs.
La méthodologie
Peu importe, à ce moment là, qu'un candidat ne réussisse pas parfaitement la solution ne l'éliminait pas automatiquement. Car ce test était fait dans des conditions particulières. Nous mettions à la disposition du candidat l'IDE et le language de développement de son choix, même si le poste à combler était pour de la programmation en C# avec VS.NET, ou en C++ avec VS6. Non seulement regardions-nous sa solution au problème, mais aussi comment il travaillait dans son IDE. S'il avait tendance à sur-utiliser la souris, ou à ne pas connaître le fonctionnement de l'IDE de son choix, c'est qu'il ne devait pas avoir assez d'expérience sous la cravatte.
Ma conclusion - alors et aujourd'***
Il nous est arrivé de choisir des candidats qui n'avaient pas bien réussi l'exercice de Fibonacci, parce qu'ils avaient très bien réussi les autres exercices (questions et modélisation). C'était des choix déchirants, mais pour 50 CVs reçus, nous devions faire un choix tôt ou tard. Certaines de ces décisions furent meilleures que d'autres, mais je mentirais si je disais qu'une fut un choix parfait (ceux encore chez Xceed que j'ai passé en entrevue, n'ayez crainte, je ne pense pas à vous). J'étais alors convaincu qu'effectivement, la nervosité pouvait jouer, et le côté faussement "notions de mathématiques" du problème pouvait nous cacher de bons candidats malgré tout.
Mais aujourd'***, alors que je lis la discussion sur FizzBuzz, je réalise que nous aurions dû systématiquement refuser tout candidat incapable de résoudre ce problème. Jeff l'a bien résumé: "Si vous cherchez à engager quelqu'un pour chanter, il est raisonnable de leur demander de chanter à l'entrevue".
C'est la même chose en informatique. Si vous n'êtes pas capable de faire l'abstraction entre le problème posé devant vous, et la programmation d'une solution, vous n'êtes pas un bon candidat. Point.
Je me rappelle une entrevue pour un emploi d'été comme testeur chez Visual Edge (maintenant Actional). Le patron m'accueille et me pose quelques questions. Tout va bien. Il va chercher un développeur pour me passer l'entrevue technique orale, seul avec ce dernier. Je trouve l'entrevue très poussée pour un poste de testeur, mais je réussi bien. Nous allons ensuite rejoindre le patron, et il lui dit que j'ai très bien réussi l'entrevue de développeur et qu'il me recommende. Le patron sourcille et répond qu'ils se sont mal compris, c'est pour un poste de testeur. Le développeur s'étonne, me regarde, et lance au patron que ce serait de valeur de m'engager comme simple testeur. C'est alors que le patron et moi retournons dans son bureau pour passer aux exercices pour être développeur, qui se font sur papier. Il regarde mes réponses, hoche de la tête en approbation et dit que c'est excellent, sauf pour une question qui ne compilera pas à cause qu'il manque des parenthèses. J'ose alors le mettre en doûte, trop confiant de cette entrevue qui va trop bien. Après tout, c'est le patron, et il ne doit plus coder souvent, n'est-ce pas?
Oups, il tire son clavier et répond "on va le tester". Il entre rapidement toute ma réponse et lance "cc" pour compiler le fichier. Ça compile! Il l'exécute. Ça donne le bon résultat. Je sens une gêne envahir le bureau, mais prend soin de dire qu'il a toutefois raison de demander des parenthèses où il en manquait, car ça aide à la lisibilité du code.
Bref, la fin de l'entrevue s'est terminé par "peux-tu rentrer demain matin comme développeur?". Je ne raconte pas ceci pour me vanter (ok, un peu), mais surtout pour vous faire réaliser que lorsque vous avez le bon candidat devant vous, vous le savez immédiatement. Et je suis convaincu aujourd'*** que tant que vous doûtez, vous n'avez pas le bon candidat. Et tant que vous ne testez pas vos candidats à fond, vous doûterez. Malheureusement, on ne peut pas toujours attendre...
Le besoin de résoudre les problèmes
Scott et Jeff trouvent aberrant que certains lecteurs de la discussion sur FizzBuzz se sentent appelés à donner une solution dans les commentaires. Pour eux, ces gens n'ont pas compris le débât. Mes excuses, Scott et Jeff, je respecte beaucoup votre énorme contribution à la Blogosphère, mais vous n'avez pas compris ces gens. Ils sont simplement désespérément en recherche de problèmes à résoudre. Ils sont assoiffés de problèmes, toujours (trop) confiants de pouvoir trouver la solution. Cette soif les pousse à répondre à "1+1" comme s'il s'agissait d'un problème avancé de la théorie des nombres. Ces gens démontrent une soif, même s'ils n'ont rien prouvé de leur compétence. Mais ils n'ont certainement pas prouvé le contraire. On peut grincer des dents en lisant leur réponse fièrement rédigée, mais on n'a pas le droit de rire d'eux. Avouez simplement que vous aussi, dans votre tête en quelques secondes, avez rédigé une solution. Disons simplement que ces gens sont plus visuels qu'auditifs! q;-)