8 questions faciles de programmation en JavaScript, façon Spolsky
Comment éviter de passer sa vie à recruter des développeurs ? En suivant le conseil de Joel Spolsky sur les questions faciles de programmation. Voici quelques exemples en JavaScript.
Quand j'ai commencé à faire passer des entretiens techniques, je posais des problèmes de programmation et je passais beaucoup de temps avec chaque candidat, souvent au moins une heure. Ensuite, j'ai essayé de donner des exercices à faire chez soi ou dans une salle, avec du temps pour réfléchir. Mais ce format ne reflète pas toujours le niveau réel. Tout le monde peut copier-coller quelque chose depuis Stack Overflow, et appeler cela "une approche pragmatique", parce que le vocabulaire est une merveilleuse cachette.
Puis je suis tombé sur le guide de Joel Spolsky pour interviewer des développeurs, et cela a changé ma façon de mener les entretiens techniques.
Easy Programming Question
Dans son plan d'entretien, Spolsky propose notamment une "Easy Programming Question". L'idée est de poser des questions vraiment très simples, que tout le monde peut résoudre, puis d'observer la vitesse d'exécution.
Vous verrez qu'il existe une énorme variation dans le temps nécessaire pour résoudre ces questions. Cela fait gagner beaucoup de temps : si quelqu'un ne peut pas écrire ces réponses presque sans réfléchir, il aura probablement du mal avec des sujets plus complexes.
Les bons développeurs peuvent résoudre ces questions en 30 secondes, puis vous pouvez avancer vers des questions plus élaborées.
Et le meilleur, c'est que ces questions simples fonctionnent pour tout le monde, du stagiaire au développeur senior.
Joel Spolsky donne trois exemples :
- Écrire une fonction qui détermine si une chaîne commence par une lettre majuscule A-Z.
- Écrire une fonction qui détermine l'aire d'un cercle à partir de son rayon.
- Additionner toutes les valeurs d'un tableau.
Très souvent, quand je posais ces questions, les candidats essayaient des choses compliquées alors qu'elles peuvent se résoudre en une ligne. Voici mes solutions, avec quelques points à observer.
1. Déterminer si une chaîne commence par une lettre majuscule A-Z
const isCapitalized = str => /[A-Z]/.test(str[0])
- Connaît-il les expressions régulières simples ?
- Sait-il manipuler une chaîne ?
2. Déterminer l'aire d'un cercle à partir du rayon
const circleArea = radius => Math.PI * radius * radius
- A-t-il des bases simples en mathématiques ?
- Connaît-il
Math?
3. Additionner toutes les valeurs d'un tableau
const sumArray = arr => arr.reduce((acc, val) => acc += val)
- Utilise-t-il la programmation fonctionnelle ?
- Connaît-il
reduce? - Préfère-t-il une boucle
for? Si oui, laquelle, et pourquoi ?
Dans tous les cas, demandez s'il connaît une autre façon de l'écrire.
Autres petites questions d'entretien
Ces trois exemples viennent de l'article original de Spolsky, mais on peut imaginer beaucoup d'autres questions courtes, résolubles en une ligne de JavaScript.
4. Ajouter plusieurs valeurs à un tableau trié, qui doit rester trié
const mergeArrays = (arr1, arr2) => [...arr1, ...arr2].sort()
5. Supprimer les doublons d'un tableau
const removeDuplicates = arr => [...new Set(arr)]
6. Inverser un objet (key > value devient value > key)
const revertObject = obj => Object.assign({}, ...Object.entries(obj) .map(([value, key]) => ({ [key]: value })))
7. Vérifier si deux chaînes sont des anagrammes
const isAnagram = (a, b) => a.split('').sort().join('') === b.split('').sort().join('')
Vous pouvez ajouter un .toLowerCase() si nécessaire.
8. Trouver le plus grand nombre dans un tableau
const findLargest = arr => arr.reduce((n, i) => (n > i) ? n : i, arr[0])