![]() | |||
Joel on Software Joël à propos de logiciel
| |||
|
D'autres articles de "Joel on Software" en Français D'autres articles de "Joel on Software" en Anglais |
Par Joël Spolsky Traduit par Emmanuelle Phan 23 mars 2000 Embaucher est vital pour Fog Creek Software. Dans notre domaine, il y a trois types de personnes. En bas de l'échelle, ce sont les masses incultes, dépourvues des compétences élémentaires requises pour le poste. Ceux-là sont faciles à repérer et à éliminer ; en général, il suffit de lire leur CV et de leur poser deux ou trois questions. Tout en haut de l'échelle, ce sont les superstars, ceux qui sont capables de vous écrire un compilateur lisp en assembleur pour Palm Pilot, juste pour se détendre un week-end. Et au milieu, il y a un tas de «maybes», qui semble-t-il pourraient peut-être apporter une petite contribution. La difficulté, c'est de différencier les superstars des «maybes», parce que chez Fog Creek Software, on n'embauche que les superstars. Voici quelques techniques. D'abord, la qualité numéro un pour se faire embaucher chez Fog Creek :
Voilà. C'est tout ce qui compte. S'en souvenir. Se le réciter tous les soirs avant de se coucher. Nous cherchons des gens ayant des aptitudes, pas des connaissances particulières. De toute façon, quelles que soient les compétences qu'un individu apporte aujourd'hui, elles seront complètement dépassées dans pas longtemps. Mieux vaut quelqu'un capable d'apprendre n'importe quelle technologie, plutôt que quelqu'un qui, par hasard, maîtrise justement la programmation SQL. Définir l'intelligence n'est pas choses aisée. Mais elle peut être décelée lors d'un entretien grâce à quelques questions, comme nous allons le voir. Aller au bout des choses est crucial. Les personnes intelligentes qui ne vont pas au bout des choses ont souvent un doctorat du troisième cycle et travaillent dans une grosse boîte, où personne n'écoute leurs considérations dénuées de tout sens pratique. Elles préfèrent se lancer dans des considérations sur un problème théorique plutôt que s'assurer que les commandes partent à l'heure. Ces individus se reconnaissent facilement à leur propension à trouver une similitude théorique entre deux concepts totalement divergents. Par exemple, ils vont dire : «Les tableurs sont juste un cas particulier des langages de programmation», disparaître pendant une semaine et revenir avec un article brillant, passionnant, sur le calcul théorique des attributs linguistiques d'un tableur comme langage de programmation. Brillant, mais inutile. Maintenant, ceux qui vont au bout des choses sans intelligence font des trucs débiles en oubliant apparemment de réfléchir, ce qui oblige quelqu'un d'autre à venir réparer les dégâts. Ceux-là sont en fait des charges pour l'entreprise : non seulement ils ne lui apportent rien, mais ils consomment le temps des collaborateurs efficaces. C'est le genre de personnes à écrire des tonnes de code dans tous les sens, plutôt que de créer une sous procédure. Le boulot est fait, simplement il n'est pas fait de manière la plus rusée. La règle essentielle en entretien :
L'entretien doit déboucher sur une décision. Les seules alternatives sont : On le prend ou Au suivant. Là, allumer son PC et envoyer le rapport au recruteur. Le sujet du message doit être le nom du candidat. La première ligne doit être : On le prend ou Au suivant. Ensuite, justifier sa décision en 2 paragraphes. Il n'y a pas d'autres alternatives. Ne jamais déclarer : «On le prend, mais pas dans mon équipe». Cela sous-entend que le candidat n'est pas assez intelligent pour vous, mais peut-être assez pour les loosers des autres équipes. C'est fort impoli. Si ça vous démange de dire «On le prend, mais pas pour mon équipe», traduisez automatiquement par «Au suivant», et tout ira bien. Si vous avez le candidat idéal pour une tâche particulière, mais qui ne serait pas bon dans une autre équipe, c'est un Au suivant! Tout va tellement vite qu'on a besoin de gens qui peuvent être efficaces n'importe où. Si vous tombez sur un singe intelligent, très fort, mais vraiment très fort en SQL, mais qui n'apprendra jamais rien d'autre : Au suivant! Pas d'avenir pour lui chez Fog Creek. Ne jamais dire : peut-être, je ne sais pas... Cela signifie : Au suivant! C'est beaucoup plus facile qu'on ne le pense. Difficile à décider? Dire non, simplement. De la même manière, si vous n'avez pas d'opinion, cela signifie : Au suivant! Ne jamais hésiter : «Oui, c'est bon, je pense, quoi que je me demande si...». C'est un «Au suivant!» Il est important de se souvenir que : il vaut mieux rejeter un bonne candidature qu'en accepter une mauvaise. Un mauvais choix va vous coûter beaucoup, en argent et en temps - celui que les autres vont perdre à corriger les bugs. En cas de doute, quel qu'il soit, c'est : Au suivant! Lorsque vous conduisez un entretien, ne vous préoccupez pas du fait que, si vous rejetez plein de monde, Fog Creek ne va trouver personne, au final. Ce n'est pas votre problème. C'est le problème des ressources humaines, c'est le problème de Joel, mais ce n'est pas votre problème. Gardez en tête cette question : qu'est-ce qui est pire, une boîte médiocre pleine de guignols, ou une boîte qui reste petite mais excellente? C'est bien sûr important de dénicher de bons candidats, et tout le monde doit se sentir concerné par la recherche et le recrutement de gens intelligents et «qui vont au bout des choses». Mais lors des entretiens, il faut faire comme si des foules de bons candidats se bousculaient pour rentrer chez Fog Creek. Ne jamais abaisser son niveau d'exigences, aussi difficile qu'il paraisse de trouver de bons candidats. Mais comment prendre cette difficile décision? Il faut simplement se demander en permanence, pendant l'entretien : ce gars-là est-il intelligent? Ce gars- làva-t-il au bout des choses? Pour être en mesure de donner une réponse, il va falloir poser les bonnes questions. Juste pour rigoler un peu, voilà la pire des questions à poser : «Quelle est la différence entre varchar et varchar 2 dans Oracle 8i?» C'est une question terrible. Il n'y a aucune corrélation possible et imaginable entre les personnes qui connaissent justement la réponse - parfaitement inutile - à cette question, et celles que Fog Creek souhaite embaucher. Qui en a quelque chose à faire, de la différence? Il faut 15 secondes pour trouver la réponse sur le web. En fait, il y a des questions encore pires. J'y reviendrai plus tard. Donc, nous en arrivons maintenant à la partie rigolote : les questions à poser en entretien. Cette liste de questions provient de mon premier boulot chez Microsoft. En fait, il y a des centaines de questions célèbres venant de chez Microsoft. Chacun a la série de questions qu'il préfère. A vous aussi de développer les questions et un style d'entretien qui vous aidera à prendre la décision «On le prend/Au suivant» Voilà quelques-unes des techniques que j'ai utilisées avec succès. Avant l'entretien, je lis le CV des candidats et je jette sur papier un plan d'entretien. Il s'agit simplement de la liste des questions que je veux poser. Voici le plan type d'un entretien pour un poste de programmeur.
Avant l'entretien, je suis extrêmement attentif à éviter tout ce qui pourrait risquer de me donner des préjugés sur le candidat. Si l'on considère le candidat comme intelligent avant même qu'il n'entre dans la pièce, simplement parce qu'il est thésard et Polytechnicien (ou parce qu'il a un Ph.D. du MIT), alors rien de ce qu'il pourra dire en une heure ne nous fera revenir sur cette idée préconçue. Si l'on considère d'emblée que le candidat est un gros nul, rien de ce qu'il pourra dire ne nous fera revoir cette impression initiale. Un entretien est comme une balance très, très sensible -- c'est très difficile de juger quelqu'un sur une entrevue d'une heure, ça peut donner l'impression de jouer à la roulette russe. Mais en connaître un petit peu sur le candidat à l'avance, c'est comme rajouter un gros poids sur un plateau de la balance. Un jour, juste avant un entretien, une chargée du recrutement entra dans mon bureau. «Tu vas adorer ce gars», dit-elle. Qu'est-ce que ça m'a énervé! J'aurais dû lui dire «eh bien si tu es si sûre que je vais l'adorer, pourquoi tu ne l'embauches pas directement, plutôt que me faire perdre mon temps avec cet entretien?». Mais j'étais jeune et naïf et j'ai assuré l'entretien. A chaque propos pas très-intelligent que le candidat tenait, je me disais «bon, ça doit être l'exception qui confirme la règle». Je le regardais à travers des lunettes roses. J'ai fini par dire «On le prend», même si il était nul. Et vous savez quoi? Tous les autres interviewers qui l'ont rencontré on dit « Au suivant». Donc : ne pas écouter les chargés de recrutement ; ne pas poser de questions sur les candidats avant de les recevoir ; et ne jamais, au grand jamais, parler des candidats avec un autre recruteur avant que chacun n'ait pris sa décision de manière indépendante. C'est une méthode scientifique! La phase d'Introduction de l'entretien a pour but de mettre le candidat à l'aise. Je passe environs 30 secondes à lui présenter qui je suis et comment va se dérouler l'interview. Je le rassure systématiquement sur le fait que ce qui nous intéresse est la manière dont il résout les problèmes, pas la réponse exacte. A propos, vous ne devez pas être séparé du candidat par un bureau. Cela crée une barrière formelle et ne met pas le candidat à l'aise. Il vaut mieux déplacer le bureau contre le mur, ou bien en faire le tour et s'asseoir de l'autre côté avec le candidat ; cela aide à le mettre à l'aise. Le résultat en est un meilleur entretien, parce que moins déformé par la nervosité. La seconde partie est une question sur les derniers projets pour lesquels le candidat a travaillé. Pour les candidats étudiants, interrogez-les sur leur projet de fin d'étude, si ils en ont réalisé un, ou sur une des matières de leur cursus qui aurait donné lieu à un projet et qu'ils ont vraiment appréciée. Par exemple, je demanderais «quel cours avez-vous préféré ce dernier semestre? Ce n'est pas nécessairement un cours d'informatique». En fait, je suis en général plutôt content si ils en choisissent un qui ne soit pas lié à l'informatique. Parfois en regardant les matières de leur cursus, on voit bien qu'ils ont vraiment choisi le moins de cours d'informatique possible, mais beaucoup de matières liées à la musique. Et ils vous affirment que leur cours favori était celui sur les Bases de Données Orientées Objet. Ouais, bon. J'aurais mieux aimé qu'ils reconnaissent préférer la musique aux ordinateurs, plutôt que de fayotter. Si le candidat a déjà une expérience, vous pouvez parler de son job précédent. En posant cette question, je recherche une chose : la passion. Une fois que vous avez identifié un des projets pour lequel la personne a travaillé récemment, voilà les signes positifs :
OK, le troisième point de cette liste est la question impossible. Ca, c'est amusant. L'idée est de poser une question à laquelle il n'y a pas de réponse possible, juste pour voir comment ils s'en sortent. «Combien y a-t-il d'optométristes à Lyon?» «Combien de tonnes pèse le Sacré-cœur?» «Combien de stations-service à Bruxelles?» «Combien d'accordeurs de piano à Paris?»
Pour les questions de programmation, je demande aux candidats d'écrire une petite fonction en C. Voilà les problèmes que je pose, typiquement :
Il ne faut pas donner un problème qui prenne plus de 5 lignes de code ; ils n'auraient pas le temps de le faire. Regardons-en quelques uns en détail. N°1: Inverser une chaîne de caractères sur place. Aucun des candidats que j'ai vus dans ma vie n'a réussi celui-là du premier coup. Sans exception, ils essaient d'allouer un autre buffer et d'inverser la chaîne dans ce buffer. Le problème, c'est : qui alloue le buffer? Qui libère le buffer? En posant cette question à des dizaines de candidats, j'ai mis en évidence un fait intéressant. La plupart des personnes qui pensent connaître le C ne comprennent pas du tout les allocations mémoire et les pointeurs. Ils n'ont pas pigé. C'est étonnant que ces personnes travaillent comme programmeurs, mais c'est vrai. Par cette question, il y a des moyens de juger les candidats :
Le n°3, permet de voir s'ils ont bien appris les opérations sur les bits en C...mais ça, c'est une connaissance, pas une aptitude, il est possible de les aider sur ce point. La chose intéressante, c'est de les regarder écrire une fonction qui compte tous les bits d'un octet, puis de leur demander d'en écrire une beaucoup, beaucoup plus rapide. Les candidats vraiment intelligents vont créer une table de correspondance (après tout, elle n'aura que 256 entrées). Cette table n'aura à être créée qu'une seule fois. Avec les bons candidats, on peut parler intelligemment de différents compromis espace/vitesse. Poussez-les encore plus loin : dites-leur que vous ne voulez pas passer de temps à construire la table de correspondance pendant l'initialisation. Les candidats brillants vont suggérer un schéma de cache où les bits sont comptés à leur première utilisation, puis stockés dans une table de correspondance, de manière à ce qu'on n'aie pas à les recompter si ils sont à nouveau utilisés. Les candidats vraiment, vraiment brillants, vont essayer d'imaginer une table utilisant une sorte de raccourci qui s'appuie sur les masques ...(N.d.T. j'y comprends rien là) Voilà quelques techniques qui peuvent être utiles lorsqu'on regarde quelqu'un écrire du code :
Inévitablement, leur fonction va être buggée. Donc on arrive à la question 5 : Votre code vous satisfait-il? Peut-être demanderez-vous : «OK, où est donc le bug?». C'est la question ouverte quintessencielle de la mort. Tous les programmeurs font des erreurs, c'est normal, il faut juste qu'ils soient capables de les trouver. Avec une fonction sur les chaînes de caractères, c'est presque toujours qu'ils ont oublié de terminer par «Null» la chaîne résultat. Avec presque toutes les fonctions, il y a des erreurs dans lesquels on tombe à tous les coups. Parfois, c'est l'oubli des points-virgules. La fonction ne va pas marcher avec des chaînes de caractères de longueur 0, ou bien générer un Erreur Générale de Protection si la fonction malloc se plante... Très, vraiment très rarement, vous allez tomber sur le candidat qui ne fait aucune erreur, dès le premier essai. Dans ce cas, la question est encore plus drôle. Quand vous allez lui dire «Il y a un bug dans ce code», il va le revoir attentivement, et vous allez voir s'il sait faire preuve de diplomatie tout en restant ferme sur le fait que son code est parfait... En règle générale, c'est toujours une bonne idée de demander au candidat s'il est content de la réponse qu'il a donnée, avant de continuer. Partie 6 : la question de conception. Demander au candidat de concevoir quelque chose. Jabe Blumenthal, le concepteur à l'origine d'Excel, aimait à demander aux candidats de concevoir une maison. Selon Jabe, il a eu des candidats qui se sont levés et sont directement allés au tableau dessiner un carré. Un carré! Ceux-là ont été des «Au suivant», immédiatement. Avec des questions de conception, que cherchez-vous à savoir?
Cela nous amène au n°7 : Le Challenge. Celui-là est très drôle. Au cours de l'entretien, s'arrêter à quelque chose d'absolument, positivement, incontestablement correct que dit le candidat. A ce moment-là dire «un instant, un instant», et passer 2 minutes à jouer l'avocat du diable. Discuter seulement alors que vous êtes sûr qu'il a raison.
Il faut admettre que, en situation d'entretien, on n'est pas sur pied d'égalité. Il y a donc un risque que le candidat ait peur de se disputer avec vous, à cause de votre pouvoir. MAIS les bons candidats auront tendance à être honnêtement passionnés par le débat, à en oublier qu'ils sont en entretien et prendre à coeur de vous convaincre. Ce sont ceux-là dont nous voulons. Pour finir, il est bon de demander au candidat si il a des questions. Certaines personnes aiment voir si le candidat pose des questions intelligentes ; c'est une technique classique des guides d'entretien. Personnellement, je me fiche des questions qu'ils posent ; à ce moment, j'ai déjà ma décision. Le problème, c'est que les candidats doivent voir 5 ou 6 personnes dans la journée, il leur est donc difficile de poser à 5-6 personnes des questions brillantes à chaque fois. Donc s'ils n'ont pas de question, ce n'est pas grave. Je garde toujours, toujours 5 minutes à la fin de l'entretien pour vendre Fog Creek. Cela est très important, même si vous n'allez pas embaucher ce candidat. Si vous avez eu la chance de trouver un candidat vraiment bon, vous allez faire l'impossible pour qu'il ait envie de venir. Concernant les mauvais candidats, ils doivent être enthousiastes à propos de Fog Creek Software, de façon à ce qu'ils s'en aillent avec une image positive de la compagnie. Voilà le raisonnement : ces personnes ne sont pas simplement des candidats à l'embauche, ce sont aussi des clients. Ils sont également nos vendeurs pour nos efforts de recrutement : si ils pensent qu'il fait bon travailler pour Fog Creek, ils vont encourager leurs amis à postuler. Ah, je me souviens que j'ai promis de donner quelques exemples des mauvaises questions à éviter. D'abord, il y a les questions illégales. Tout ce qui a rapport à la race, la religion, la nationalité, l'âge, la situation vis-à-vis du service militaire, la situation d'ancien combattant, l'orientation sexuelle, au handicap physique, est simplement illégal [aux Etats-Unis]. Si un CV mentionne que le candidat était à l'armée en 1990, ne pas lui demander si il a fait la guerre de Golfe, même pour rendre la conversation sympathique. C'est contraire à la loi. Si, selon le CV, le candidat a assisté à des cours au Technion de Haïfa [Institut de Technologie d'Israël], ne pas lui demander, même de manière informelle, si il est Israélien. C'est contraire à la loi. Il y a ici une bonne discussion sur les questions illégales (mais les autres parties sur les questions d'entretien sont complètement stupides). Ensuite, éviter toutes les questions qui pourraient laisser à penser qu'on considère comme importantes, ou qu'on utilise comme critère de sélection, des informations dont on n'a rien à faire ou qu'on n'utilise pas pour la sélection. Le meilleur exemple est, je pense, demander à quelqu'un si il a des enfants ou si il est marié. Cela pourrait donner la fausse impression que nous considérons les personnes avec enfants comme susceptibles de se montrer peu assidues, ou de partir en congés maternité. Enfin, éviter les questions casse-tête, comme celle où il faut former 4 triangles identiques avec 6 allumettes. Comme ce sont des questions où il faut juste connaître le truc, on n'obtient aucune information sur «intelligent/va au bout des choses», car cela dépend si ils connaissaient le truc avant ou pas. Conduire des entretiens est plus un art qu'une science, mais il faut se souvenir du principe «intelligent/ va au bout des choses» et tout se passera bien. A l'occasion, il est bon de demander à ses collègues quelles sont leurs questions préférées et quel genre de réponses ils obtiennent. Ceci est de longue date le sujet de conversation favori à l'heure du déjeuner, dans la cafet' du bâtiment 16, à Redmond. Cet article est paru en version originale anglaise sous le titre The Guerrilla Guide to Interviewing | ||
![]() Joël Spolsky est le fondateur de Fog Creek Software, une petite société éditrice de logiciel située à New York. Il est diplômé de l'Université de Yale et a travaillé comme programmeur et manager chez Microsoft, Viacom et Juno. | |||
Le contenu de ces pages représentent l'opinion d'une personne.
Contenu protégé par le copyright ©1999-2005 par Joël Spolsky. Tous droits réservés.