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 :

  1. Écrire une fonction qui détermine si une chaîne commence par une lettre majuscule A-Z.
  2. Écrire une fonction qui détermine l'aire d'un cercle à partir de son rayon.
  3. 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])

Lectures