Je n'assisterai pas à votre entretien de test algorithmique

Publié : Dernière mise à jour :
Test algorithmique de Tomasz Nurkiewicz

Comment la personne moyenne embauche-t-elle un tailleur de premier ordre ? Ils demandent aux candidats de leur montrer ce qu'ils ont cousu jusqu'à présent, peut-être même de leur demander de coudre quelque chose rapidement. Puis ils observent les résultats, notent la façon dont ils utilisent la machine à coudre, l'organisation du lieu de travail et évaluent l'attention portée aux détails par le tailleur. Gaspille-t-il trop de tissu ou ne fait-il pas simplement du très bon travail ?

Comment les développeurs de logiciels engagent-ils des tailleurs de premier ordre ? Eh bien, cela se passerait probablement un peu comme ceci : "Ceci est un tableau blanc. Veuillez dessiner la différence entre un Nœud Ghiordes et Senneh. Déterminer la longueur du fil en fonction de la surface du tissu".

Honnêtement, je crois qu'un tailleur de premier ordre devrait faire la différence, mais que vérifions-nous réellement ici ? Voulez-vous une veste élégante ou une équation élégante sur un tableau blanc ?

Mon expérience avec une société de recherche et une banque d'investissement

Permettez-moi de vous faire part de quelques expériences que j'ai vécues en tant que personne interrogée dans deux grandes entreprises. La première vendait des publicités qui s'intercalaient occasionnellement dans les résultats de recherche organiques et la seconde était une grande banque d'entreprise. Dans la première, j'ai passé plusieurs heures à trouver des solutions à des tâches algorithmiques non triviales. Dans la seconde, la situation était similaire, mais je décrivais mes algorithmes par téléphone à une personne assise de l'autre côté de l'Atlantique... et c'est devenu encore plus étrange que cela.

Test algorithmique du tweet

À la société de recherche, je cherchais le plus long suffixe d'une liste liée qui faisait... quelque chose. Franchement, je ne me souviens pas de grand chose. Tout comme je ne me souviens pas de la dernière fois où j'ai utilisé une liste chaînée. Oui, je comprends en quoi elle est différente d'un tableau - implications en termes de performances, cas d'utilisation différents, etc. Il se trouve que je le sais aussi parce que cette question est posée dans chaque foutu entretien ! Mais dans le travail réel, je n'ai tout simplement jamais eu l'occasion d'en tirer parti. Il y avait aussi une question liée à l'équilibrage ou à la traversée d'un arbre d'une manière bizarre. Honnêtement, ce n'est pas une expérience très mémorable. En fait, je pense qu'il serait honnête de ma part de dire que je connaissais cet exercice à l'avance. Non pas à partir d'un livre sur les algorithmes, mais d'un guide sur la façon d'être embauché dans cette entreprise particulière. Nous en reparlerons plus tard.

À la banque d'investissement, on m'a d'abord demandé de générer toutes les permutations possibles d'une liste d'éléments. N'oubliez pas que tout cela s'est passé lors d'un appel téléphonique transcontinental. OK, juste pour le plaisir, je vais m'imaginer me poser ce type de question. Voici les réponses possibles auxquelles je m'attendais, de la pire à la meilleure :

  • Chercher une solution sur internet, prétendre que c'est la vôtre et penser que je n'entends pas le clavier taper.
  • Récitez une solution de mémoire, ligne par ligne, parce que vous vous êtes préparé comme un fou et que, par chance, vous connaissez la solution sur le bout des doigts. Et pas beaucoup plus que ça.
  • Un code impératif et alambiqué qui itère sur l'entrée. Utilisant de préférence des variables comme i, j, k...
  • Solution propre et récursive, car le candidat a compris que ce problème peut être décomposé.
  • Si vous êtes dégoûté par le code écrit à la main, cherchez un peu plus loin et trouvez une bibliothèque qui fait exactement cela (par ex. Collections2 de Goyave)
Tests d'algorithmes sur tableau blanc

Sérieusement, vous êtes probablement à la recherche d'un nouveau coéquipier. Préféreriez-vous voir une demande de retrait avec un code élégant et récursif ou un simple appel à une bibliothèque ? Une bibliothèque testée par des millions de développeurs, basée sur le "L'art de la programmation informatique" ? De plus, il m'a fallu un certain temps pour trouver une bibliothèque, alors que les boucles imbriquées faites à la main sont partout sur Internet. Quel genre d'attitude recherchez-vous ? Mémoriser et copier aveuglément du code sur Internet, ou faire des recherches pour trouver des solutions éprouvées ?

Un autre exercice que l'on m'a donné consistait à mélanger aléatoirement un tableau en ne disposant que d'un tirage au sort. Il s'agit d'un problème intéressant en soi, mais sans aucun rapport avec les conditions de travail. J'ai réussi à trouver un algorithme (et c'était plutôt agréable), mais, après quelques mois, tout ce que je faisais était de faire passer un morceau de XML d'un côté à l'autre de la banque. Des centaines de transformations banales par seconde et, soit dit en passant, tous les principaux langages... supporte le shuffle: [1], [2], [3], [4]ou un paquet [5].

Les questions d'entretien sur les tests algorithmiques : le fléau du recrutement

Ayant un diplôme en informatique, je ne trouve pas les tests algorithmiques intimidants ou inutiles. En fait, c'est plutôt le contraire, ils sont parfaits pour exercer votre cerveau, comme résoudre un sudoku ou jouer au bridge. J'ai participé à de multiples concours d'algorithmique (par ex. L'avènement du code) et je les ai toujours trouvés agréables. Mais ce n'est que mon passe-temps. Vous préférerez peut-être étudier le DDD ou le SQL avancé. Et je ne suis pas sûr que les algorithmes purs et les structures de données conviennent particulièrement bien à la majorité des processus de recrutement. Ils permettent de vérifier les compétences analytiques abstraites d'un candidat, ainsi qu'une solide formation en informatique et en mathématiques (qui sont deux caractéristiques importantes en ingénierie logicielle), mais ils ne parviennent pas à saisir d'autres caractéristiques importantes ou sont trop alambiqués pour être concluants.

De nos jours, la plupart des tâches informatiques consistent à assembler des API et des frameworks. Nous sommes davantage des tailleurs que des fabricants de tissus. Les compétences algorithmiques sont utiles pour mettre à l'échelle une seule fonctionnalité de votre système, mais une expérience plus ciblée dans les systèmes distribués vous mènera probablement plus loin. Par exemple, la connaissance de la théorie des graphes ou des fonctions discrètes est précieuse. Cependant, l'expérience pratique d'un grand réseau de bases de données répliquées ou la compréhension des raisons pour lesquelles certaines fonctions de hachage sont compromises ont un impact beaucoup plus important sur votre travail quotidien.

Tests d'algorithmes sur tableau blanc

En effet, comprendre ce qu'est la récursion est essentiel. Tout comme savoir pourquoi HashMap est si rapide en Java. Mais comprendre pourquoi Dictionnaire est encore plus rapide en C# est le niveau suivant. Indice : disposition de la mémoire, quelque chose sans rapport avec la complexité théorique du calcul. Cependant, beaucoup pensent que poser des questions purement algorithmiques est le moyen le plus simple de trouver des développeurs exceptionnels et bien formés. Une telle croyance est très romantique, mais souvent extrêmement naïve. Il suffit de voir combien de livres vous aident à réussir spécifiquement les entretiens (fameusement algorithmiques) de Google. Ils n'enseignent pas les fondamentaux de la CS, ils expliquent à peine comment résoudre des classes spécifiques de problèmes de style Google.

Le tri est l'une des questions d'entretien en algorithmique les plus couramment (ab)utilisées. Savoir comment Quicksort est précieux, même si, par exemple, Java ne l'a pas utilisé depuis presque une décennie. Comprendre ce qu'est O(nlogn) peut également s'avérer utile. Mais le plus souvent, ce n'était pas la complexité algorithmique qui provoquait l'arrêt de mon système. Au lieu de cela, il s'agissait d'un problème N+1 - quelque chose que j'ai rencontré à la dure mais qui a été à peine abordé au cours de ma formation en informatique. Si vous ne pouvez pas résister à l'envie de poser des questions sur le tri, discutez au moins de ce que signifie la stabilité d'un algorithme. Vous utiliserez très probablement un algorithme prêt à l'emploi et rapide. La différence entre stable et instable est très probablement votre seule préoccupation. Indice : le tri est stable en Java, mais pas en C#.

Tests d'algorithmes sur tableau blanc

Gardez à l'esprit que les questions algorithmiques sont excellentes si c'est vraiment ce dont vous avez besoin au quotidien. Les experts en apprentissage automatique doivent comprendre ce que descente du gradient et cela nécessite une solide formation en mathématiques. De même, les statistiques, la recherche, l'infographie et le développement de jeux ont tendance à exiger un certain niveau de connaissances en informatique. Sinon, utilisez votre temps de recrutement à bon escient et posez les bonnes questions.

Une meilleure approche pour un test algorithmique: concevoir et travailler ensemble

J'ai fait passer des entretiens à des tonnes de personnes au cours de ma carrière, je considère que cela fait partie de mon travail, surtout pour les postes plus élevés. De nombreux entretiens ont été oubliés, mais il est arrivé que des candidats soient extrêmement satisfaits, même s'ils n'ont pas obtenu le poste. Cela permet d'établir une excellente relation et de créer une marque pour votre entreprise. Comment ai-je fait pour créer une telle expérience ?

  • Préférez la résolution de problèmes de la vie réelle. Concevez une architecture semblable à celle de Twitter ou développez un site web semblable à celui d'Instagram. Ces exercices sont bien plus agréables que la recherche du chemin le plus court ou du palindrome le plus long.
  • Préférez la programmation en binôme aux croquis sur tableau blanc. Voir comment un candidat travaille, comment il navigue dans le code, cherche des réponses, aborde les obstacles - cela devrait vous en dire long. De plus, travailler ensemble réduit le stress et rend le processus plus humain.
  • Préférez une base de code existante à un éditeur vide. Nous aimons les projets entièrement nouveaux, mais la modification d'une base de code existante est beaucoup plus proche du travail réel.
  • Je préfère les tests au code de production pur. Coder, c'est bien, mais le candidat recherche-t-il ou développe-t-il des tests parallèlement à l'implémentation ? Cet aspect est presque universellement négligé lors d'un test algorithmique.
Test de l'algorithme

N'oubliez pas qu'il n'est pas nécessaire de se réunir sur place pour travailler ensemble. Le partage d'écran et la collaboration en temps réel sont aujourd'hui très faciles à mettre en œuvre, notamment grâce aux technologies suivantes DevSkiller.

Résumé

Il n'y a rien de mal à poser des questions algorithmiques lors d'un entretien d'embauche. C'est une partie importante de notre domaine. Cependant, étant donné le peu de temps dont vous disposez pour le recrutement, il existe des moyens plus sages de choisir votre prochain meilleur ingénieur. En exerçant des compétences réelles, vous vous assurez qu'un candidat est excellent dans ce dont vous avez réellement besoin. De plus, cela réduit le stress et améliore la perception qu'a le candidat de votre entreprise.

Partager le poste

En savoir plus sur le recrutement dans le secteur des technologies

Abonnez-vous à notre Learning Hub pour recevoir des informations utiles directement dans votre boîte aux lettres électronique.

Vérifier et développer les compétences de codage de manière transparente.

Voir les produits DevSkiller en action.

Certifications de sécurité et conformité. Nous veillons à ce que vos données soient sûres et sécurisées.

Logo DevSkiller Logo TalentBoost Logo TalentScore