Vous venez de réaliser votre discussion technique, et cette dernière s’est très bien passée ? Félicitations à vous ! Nul doute que vous avez été capable, durant cet entretien, de montrer vos compétences et vos connaissances.
Vous avez été suffisamment bon pour que l’entreprise désire passer à l’étape d’après avec vous, et vous demande de réaliser des tests d’algorithmique. Dans ce chapitre, je vais vous :
expliquer ce que sont les tests d’algorithmique ;
donner l’objectif de ces derniers ;
proposer des aides à la préparation et à la résolution de ces épreuves.
Bouclez votre ceinture, on passe la seconde, et je vais faire de vous un expert en tests d’algorithmique !
Projetez-vous dans la réalisation de tests d’algorithmique
Définition de l’algorithmique et des tests d’algorithmique
Selon l'université Paris 7, l’algorithmique, c’est :
Comme vous pouvez le constater, c’est une définition un peu complexe et compliquée pour expliquer un concept qui est, en fait, assez simple.
Pour nous, développeurs, l’algorithmique, c’est résoudre un problème spécifique via l'exécution d’un programme, grâce à du code que nous aurons préalablement écrit.
Autrement dit, à la différence d’un projet plus complet comme la création ou la consommation d’une API, un problème d’algorithmique nous fait travailler sur quelque chose de beaucoup plus spécifique.
C’est un peu comme la différence entre la macroéconomie et la microéconomie. D’un côté, en macroéconomie, on étudie les grands agrégats économiques (le revenu, l’investissement, l’inflation) et d’un autre côté, en microéconomie, on étudie des éléments plus précis tels que les consommateurs, les ménages, etc.
Autrement dit, l’algorithmique se rapproche de la microéconomie, alors que les projets tels que vos projets OpenClassrooms, sont, eux, plus proches de la macroéconomie.
Intérêt des tests d’algorithimique
Pourquoi me demandera-t-on de réaliser des tests d’algorithmique ?
Tout d'abord, ces tests permettent d'estimer votre connaissance des types et fonctions natifs de votre langage.
À la différence de la discussion technique et des mini-projets, les tests d’algorithmique vous demandent de travailler sur des éléments précis de votre langage.
Ces éléments peuvent être les suivants :
manipuler des chaînes de caractères, ou strings, dans votre langage. En JavaScript, il existe de nombreuses méthodes vous permettant de convertir une chaîne de caractères en un tableau, de filtrer et de le retransformer ;
chercher et supprimer des occurrences via des expressions régulières ;
convertir en tableau des données sous forme d’objets litléraux ;
etc.
En fonction des langages informatiques, la manipulation, le traitement et la transformation des données se font de manière différente. Ces tests permettent donc de voir si vous connaissez bien les bases de votre langage, ainsi que votre logique.
Deuxièmement, ces tests permettent de voir votre capacité à appréhender des problèmes et à les résoudre.
Dans ces tests, à la différence des mini-projets, le cadre de réalisation est beaucoup plus restreint. On ne vous demande pas de monter une architecture ni de travailler avec un framework. On vous demande simplement de résoudre un problème précis.
Vous aurez souvent des tests automatisés écrits au préalable, qui vous permettront de tester si votre solution est viable. En fait, faire des tests d’algorithmique, c’est un peu comme travailler avec des tests unitaires.
Les tests unitaires permettent de tester une fonction ou une classe spécifique ; par exemple, faire la somme des prix pour une commande, alors qu’un test d’intégration ou un test fonctionnel permet, lui, de tester l’intégralité d’un parcours utilisateur.
Le cadre de réalisation
Où et comment réalise-t-on les tests d’algorithmique ?
En fonction de l’entreprise pour laquelle vous postulez, si c’est plutôt une start-up ou une ESN, vous allez soit réaliser les tests de chez vous (souvent dans le cadre des ESN), soit les réaliser dans les locaux de l’entreprise (dans le cadre des start-up).
Vous allez pouvoir les réaliser soit sur des plateformes dédiées, soit via un ordinateur de la société qui vous sera mis à disposition pour l"occasion.
Les tests d’algorithmique donnent parfois lieu à une discussion technique après ou pendant. Il est donc important que vous soyez capable d’expliquer ce que vous avez fait.
Évitez le copier/coller de solutions
Quand on réalise ces tests, il peut parfois être tentant d’aller chercher la solution directement sur Internet. En effet, en tant que développeur, nous passons une bonne partie de notre temps à lire des bouts de code d’autres développeurs.
Il peut parfois arriver que nous soyons bloqué sur un script et que nous cherchions sur Internet une aide pour nous débloquer sur notre problème. C’est une situation tout à fait courante en entreprise.
Cela dit, en entretien, copier/coller des bouts de code peut s’avérer une mauvaise idée. D’une part, parce que vous risquez de copier une solution qui fonctionne pas ou qui ne fonctionne qu’à moitié.
Pire encore, vous risquez de copier une solution que vous n’êtes pas capable d’expliquer si le recruteur vous pose des questions dessus. Et croyez-moi, vous ne voulez pas vous faire coincer là-dessus en entretien.
Autre point gênant avec le copier/coller ; de nos jours, les plateformes sur lesquelles vous réalisez votre test, peuvent déceler si vous faites des copier/coller. Ne vous tirez donc pas une balle dans le pied, comprenez les solutions que vous trouvez sur Internet, et sachez les expliquer.
Exemples de tests d’algorithmique
Bien que les tests d’algorithmique soient légion, le concept général est souvent le même. Vous allez devoir manipuler les données en, par exemple, changeant leur type (de nombres à chaînes de caractère), ou encore les trier, sortir les erreurs, etc.
Ces exemples ne sont pas spécifiques à un langage informatique. Vous pourrez donc les retrouver aussi bien en JavaScript qu’en Python ou qu’en Swift. L’implémentation et les solutions seront peut-être un peu différentes, mais l’approche restera globalement la même.
Transformation d'un nombre décimal en nombre romain
Bienvenue dans ce premier screencast dédié aux tests d’algorithmique.
Dans ce premier test, je vais vous demander de créer une fonction appelé parseToRoman qui, pour un nombre donné, va retourner sa valeur en chiffres romains.
function parseToRoman(number) {
}
parseToRoman(4); // === "IV"
parseToRoman(37); // === "XXXVII"
parseToRoman(143); // === "CXLIII"
parseToRoman(1234); // === "MCCXXXIV"
Souvenez-vous, si vous rencontrez des difficultés, de penser à décomposer votre problème en problèmes plus simples et de ne pas hésiter à utiliser la méthode des 4P de la résolution de problèmes.
Algorithme de décriptage de ROT13
Dans ce deuxième test, on va faire notre petite machine de Turing et on va craquer un algorithme de chiffrement.
Nous allons donc essayer de craquer ce qu’on appelle le ROT13 (ou Rotate By 13 Places). L’idée est de décaler chacune des lettres de l’alphabet de 13 places. Autrement dit, le H devient le U, le E devient le R, etc.
C’est un test que je trouve assez intéressant, parce que vous y manipulez avant tout des nombres et des chaînes de caractères.
function transformToRot13(stringToTransform) {
}
toRot13('URYYB JBEYQ'); // HELLO WORLD
toRot13('BCRAPYNFFEBBZF'); // OPENCLASSROOMS
toRot13('PRPV RFG ZBA PBQR FRPERG'); // CECI EST MON CODE SECRET
Bon courage et amusez-vous bien.
Préparez-vous à ces tests
Jusqu’à présent, je vous ai présenté l’objectif et le contexte de réalisation des tests, ainsi que quelques exemples. Comme pour la discussion technique, la réussite de cette étape se joue dans la préparation.
Dans cette partie, nous allons voir des outils de préparation possibles, pour que vous ne soyez pas surpris le jour J.
Approfondissez votre connaissance de votre langage
Bien connaître le framework que vous utilisez au quotidien est une chose, mais connaître les bases de son langage en est une autre.
En effet, le principe des tests d’algorithmique est que vous travaillez sur votre langage sans aucune librairie ni framework.
Pour en savoir découvrir plus sur votre langage, il n’y a rien d’autres à faire que de suivre des cours et tutos (sur la manipulation de dates en Python, par exemple), et de lire la documentation technique de votre langage. Celle de PHP, par exemple, est plutôt bien réalisée .
Utilisez des méthodes de résolution de problème
“The Four P’s to Problem Solving” est l’une des méthodes les plus connues pour résoudre des problèmes. Elle a pour but de vous aider à décomposer un problème complexe en de petits problèmes plus simples à gérer. Elle repose donc sur quatre grandes étapes :
prep - c’est l’étape où vous allez essayer de comprendre le problème et de le décomposer en parties plus simples ;
plan - c’est le moment où vous allez écrire du “pseudocode” qui correspond aux instructions que vous souhaitez réaliser ;
perform - c’est l’étape où vous transformez votre pseudocode en vrai code ;
perfect - enfin, vous essayez d’améliorer le code écrit, en le refactorisant, et en traquant d’éventuels bugs.
# Un exemple de pseudo code
Fonction factorielle (n)
r = 1
Pour i de 1 jusqu'à n avec un pas de 1
r = r*i
Fin pour
Retourner r
Fin Fonction
Ce que vous devez retenir quand vous bloquez sur un problème d’algorithmique, c’est que vous devez décomposer votre problème complexe en de multiples problèmes plus simples à réaliser.
En fait, c’est un peu comme quand vous jouez aux Lego. Vous créez de petites structures à droite, à gauche, puis vous les assemblez pour en faire quelque chose de cohérent et de stable.
Entraînez-vous sur des plateformes
Pour vous aider à préparer ces tests, je vous ai regroupé plusieurs plateformes que vous pouvez utiliser pour vous entraîner.
Plateforme | Langage | Langage | Niveau |
Anglais | JavaScript | Principalement niveau débutant | |
Anglais | JavaScript | Débutant à intermédiaire | |
Anglais | Nombreux langages | Tout niveau |
En bref
Les tests d’algorithmique vous font travailler sur votre langage et non sur un framework ou une architecture. Ils sont là pour montrer votre logique et votre capacité à résoudre des problèmes.
Ils sont réalisés soit dans les locaux de l’entreprise, soit chez vous sur une plateforme informatique dédiée.
Résoudre le problème est une chose, savoir l’expliquer en est une autre. Évitez les copier/collers de code que vous ne comprenez pas.
Pour les résoudre, essayez de décomposer votre problème en des problèmes plus petits et plus simples. C’est comme quand vous jouez aux Lego.