Algorithmique
L’algo ou l’algorithmique, c’est apprendre à manier la logique, la structure d’un programme informatique. De nombreux organismes de formation négligent souvent cette matière et débutent directement une formation web sur du HTML/CSS ou JavaScript à tort.
Elle permet d’écrire la logique d’un algorithme, qui est finalement le processus qui résoudra un problème donné.
N’importe quel développeur avec un minimum d’expérience et de niveau te le dira: l’algo est une compétence à ne surtout pas négliger !
L’algorithmique, la base de tout
Lorsqu’on apprend une nouvelle langue, il est nécessaire d’apprendre le vocabulaire certes mais il faut aussi et surtout apprendre les règles qui vont avec. Par exemple, la structure d’une phrase, l’accord des verbes ou encore la grammaire. Si l’on ne passe pas par cette apprentissage, il sera difficile d’atteindre un bon niveau dans la langue.
Prenons un autre exemple, celui de la cuisine. Lorsque l’on souhaite réaliser une recette, il va être nécessaire d’exécuter des actions dans un certain sens et ceci peu importe la recette et les ingrédients utilisés. On ne va pas faire cuire quelque chose qui n’a pas encore été préparé. Et ceci relève du bon sens, ou plutôt de la logique.
De la même manière, selon le type de recette, il y aura un ordre précis à respecter. Pour faire une mousse au chocolat, il sera nécessaire d’avoir monter les blancs en neige pour finir la préparation sinon on ne pourra pas incorporer le reste de la préparation dedans.
Et bien l’algorithmique reprend ces principes. Il correspond aux règles, aux bases qui nous suivront tout au long des différents langages que l’on utilisera durant notre carrière.
Un langage n’est finalement qu’une syntaxe qu’on vient poser sur une logique de développement. Évidemment, certains langages viennent avec des concepts en plus comme l’orienté objet mais dans tous les cas ils utiliseront l’algo pour résoudre un problème.
Algo et logique
Faut-il être fort en logique pour être bon en procédural ? La réponse est non, par contre, être fort en logique sera évidemment un plus lors de l’apprentissage de l’algo.
Reprenons notre recette de cuisine. Ce qui la différencie d’un véritable algo est sa capacité à être dérivée. Le processus logique sera rigide, c’est à dire qu’il exécutera bêtement les instructions qu’on lui a donné. Une recette n’est pas contre pas rigide, et laisse place à l’improvisation. Si l’on souhaite changer d’ingrédients à certains endroits, c’est possible. Si on souhaite modifier le poids de certains ingrédients c’est possible aussi. Et si l’on souhaite effectuer certaines tâches dans un autre ordre qu’indiqué c’est possible aussi.
Reprenons la recette de la mousse au chocolat. J’ai dis un peu plus tôt qu’il était nécessaire d’avoir monté les blancs en neige pour pouvoir continuer la recette, c’est donc une condition. Cependant, d’une personne à une autre et d’une fois à une autre, on pourra très bien commencer par battre les jaunes avec les ingrédients puis monter les blancs, ou bien monter les blancs en premier et battre les jaunes après. Cela n’aura aucun impact sur la suite de la recette.
Un algorithme est par contre beaucoup plus stricte. Il n’acceptera qu’une logique, celle qu’on lui a donné et ne laissera pas de place à l’improvisation. Il faudra donc faire en sorte que tout le processus soit dans le bonne ordre. Et c’est là qu’intervient la logique et la rigueur.
Apprendre l’algorithmique
Si on fait beaucoup de pâtisserie, on comprendra rapidement que la base est souvent la même d’une recette à une autre et on sera rapidement capable de faire ses propres recettes en utilisant les bases que l’on connait.
Développer est assez proche de ce concept. Lorsqu’un développeur aura compris les fondements de l’algorithmique, il sera en mesure d’écrire un algo dans n’importe quel langage en suivant la documentation (qui sera l’équivalent d’un dictionnaire)
Commencer à se former à ce processus de réflexion par des langages comme le Python ou le JavaScript n’est pas une bonne solution. Bien qu’on est un retour visuel de ce que l’on tape, on apprend deux concepts en même temps, la syntaxe du langage et l’algo en même temps, ce qui peut parfois être complexe et finalement ne pas être capable de dissocier les deux.
Ce que je recommande, c’est de passer par le pseudo-code. Il permet de faire abstraction de toute syntaxe de langage et de se rapprocher d’un langage quasi naturel.
On va pouvoir écrire un algorithme quasiment en français, comme si on écrivait une recette de cuisine, à la différence prêt que l’on écrira pas des paragraphes et que l’on utilisera tout de même des mots-clés réservés à la programmation.
Les instructions écrient ne seront pas testables sans passer par des logiciels spécifiques mais on peut quand même les vérifier soit-même en « jouant » soi-même le processus étape par étape.
Un petit exemple ?
L’un des plus connus est très certainement celui du calcul du taux d’intérêts.
On dépose une certaine somme sur un compte bancaire qui nous reverse chaque fin d’année des intérêts sur cette somme et on peut savoir au bout de combien d’années le montant initial aura doublé.
Faisons-le ensemble !
Je dépose 1 000€ sur un compte possédant un taux d’intérêts de 20%.
La première année, je vais donc avoir 20% de 1 000€ soit 200€ qui vont être ajouté sur mon compte.
La deuxième année, j’aurais 20% du montant initial plus les intérêts de l’année passée, soit 20% de 1 200€ ce qui nous donne 240€.
Même principe pour la troisième année avec 20% de 1 440€ soit 288€.
Enfin, même principe pour la quatrième année avec 20% de 1 728€ qui nous donnera 345,6€ et amènera notre solde disponible à 2 073,6€.
Il faudra donc 4 années à un taux d’intérêts de 20% pour doubler la mise de départ.
Matérialisons le sous le format pseudo-code:
CALCUL_INTERETS CONSTANTES ENTIER : taux, montantInitial, montantVoulu VARIABLES ENTIER : nbAnnees, montantEvolutif DEBUT taux ← LIRE(« Quel est le taux d’intérêts ? ») montantInitial ← LIRE(« Quel est le montant initial ? ») montantVoulu ← LIRE(« Quel est le montant final attendu ? ») nbAnnees ← 0 montantEvolutif ← montantInitial TANT QUE montantEvolutif < montantVoulu montantEvolutif ← montantEvolutif + montantEvolutif * (taux/100) nbAnnees ← nbAnnees + 1 FIN TANT QUE AFFICHE(nbAnnees) FIN
Les constantes et variables sont des petites boites dans lesquels on va ranger des valeurs qui nous resservirons pour la suite de l’algorithme. Les constantes posséderont des valeurs qui ne pourront pas changer, elles seront fixes pour tout le processus alors que les variables pourront changer au besoin.
La flèche ‘←’ permet de dire que la valeur se trouvant à droite va être stockée (assignée) dans la variable de gauche. On demande à l’utilisateur les valeurs qu’ils souhaitent tester grâce à ‘LIRE’ qui permet de récupérer fictivement ce que l’utilisateur taperait sur son clavier.
Enfin, on fait une boucle additionnant les intérêts tant que le montant voulu n’est pas trouvé.
On se rend compte ici que l’algorithme est assez simple à comprendre et possède une certaine abstraction, à titre d’exemple voici le même algorithme écrit en JavaScript:
const taux = +prompt("Quel est le taux d'intérêts ?"); const montantInitial = +prompt("Quel est le montant initial ?"); const montantVoulu = +prompt("Quel est le montant désiré ?"); let nbAnnees = 0; let montantEvolutif = montantInitial; while(montantEvolutif < montantVoulu) { montantEvolutif += montantEvolutif * (taux / 100); nbAnnees++; } console.log(nbAnnees) alert("Il faudra " + nbAnnees + " année.s");
Conclusion
Apprendre l’algorithmique n’est souvent pas l’étape la plus intéressante du développement et est souvent fastidieuse, cependant elle sera l’étape déterminante pour devenir un bon développeur et savoir apprendre rapidement de nouveaux langages qui ne représente finalement que la syntaxe pour écrire l’algorithme auquel on aura pensé.
Le pseudo-code est à mon sens un passage obligatoire pour poser de bons fondements pour le reste de la carrière d’un développeur, il sera possible pour accompagner cet apprentissage, de passer par des outils comme Algobox.