Aperçu des sections

  • Généralités

    La notion d'algorithme est très importante quand on apprend la programmation. Vous ne pouvez décemment pas devenir développeur sans maitriser un minimum l'algorithmie. Même si, aujourd'hui, de nombreux outils vous permettent de ne pas avoir à coder des algorithmes complexes vous-même, il s'avère que l'algorithmie et la base de la logique informatique, et il vous faut donc bien maitriser ce concept pour être à l'aise en programmation.

    Il y a de très nombreuses choses à dire sur l'algorithmie, et nous ne ferons qu'effleurer le concept ici.
  • Des mathémaquoi ?

    Un algorithme est un concept mathématique qui permet de trouver une solution à un problème donné en suivant des étapes et des procédures précises, rigoureuses, et connues à l'avance. Quand je parle de concept mathématique, je fais référence à des choses que vous manipulez déjà tous (par exemple : additions et multiplications), ou que vous avez pu voir dans vos études.

    Exemple de concept mathématique simple, les fonctions :

    Ma fonction : 

    • f(x) = 2x

    Mes calculs :

    • f(2) = 4
    • f(3) = 6


    On dit souvent que la programmation, c'est un truc de matheux. Alors cela n'est pas entièrement faux, mais il faut tout de même pondérer cette approche. La programmation est avant tout une histoire de logique. Donc plus vous êtes doué en math, plus vous avez de chance d'être à l'aise en programmation. Mais on peut très bien s'en sortir en tant que développeur si on n'est pas un grand fan des maths. En revanche, vous utiliserez souvent des concepts issus des maths, ou s'appuyant très fortement dessus. 

    Voici quelques exemples :


    • géolocalisation ou 3D : trigonométrie
    • analyse de données : statistiques
    • calculs divers et variés : arithmétiques
    • etc etc...


    J'espère que vous avez gardé de bons souvenirs de vos années d'études :)


    Rassurez-vous, un développeur n'est pas un mathématicien, mais il doit savoir utiliser les maths correctement quand cela s'avère nécessaire. Il y a de nombreux concepts en mathématiques, plus ou moins complexes, mais il s'avère que l'algorithme est totalement adapté à la création de logiciels.

    • Création d'un algorithme


      Votre premier algo : chandeleur 2.0. Miam :)


      L'image du dessus illustre parfaitement un algorithme simple qui pourrait être le programme "disponibilités des ingrédients pour faire des crêpes" (ou chandeleur 2.0). On peut voir ici que des étapes claires sont énumérées (œufs, lait, farine,...), et que seulement deux réponses sont possibles à chaque étape (oui ou non). On peut aussi voir que les réponses oui/non ne génèrent pas forcément toujours le même comportement (le sucre et le beurre sont optionnels dans notre programme).

      On peut aussi constater qu'on a deux résultats possibles à notre programme crêpe : 

      1. on a les ingrédients : on peut faire des crêpes
      2. on n'a pas les ingrédients : on ne peut pas faire de crêpes

      Pour conclure sur les algorithmes et les programmes informatiques en général, on peut visualiser le tout comme une sorte de boîte ou il y a des entrées et des sorties (input/output en anglais). 

      En entrées, on aura le stock d'ingrédients disponibles :

      • 2 oeufs
      • 3L de lait
      • pas de farine
      • 200gr de sucre
      • pas de beurre

      Et en sortie, on aura la réponse du programme :

      • oui, on peut faire des crêpes
      • non, on ne peut pas faire des crêpes


      C'est aussi simple que ça ! Là où ça va se compliquer, c'est lorsque l'on va demander à l'algorithme de gérer des choses bien plus complexes que checker une liste de courses. Par exemple : faire une modélisation du climat... Je vous laisse imaginer les paramètres à prendre en compte (entrées) et la logique nécessaire pour calculer la température qu'il fera dans 10 ans à Toulouse (sortie)... C'est extrêmement complexe !


      Cette vision très simpliste d'un programme informatique est absolument capitale. Vous allez devoir écrire de manière très précise une série d'instructions qui vont être bêtement appliquées par l'ordinateur à une vitesse folle. C'est la toute la puissance des logiciels, ils sont "bêtes", mais extrêmement rapides.

      Ce qu'un enfant apprends naturellement par l'expérience, un ordinateur en est incapable. Donc vous allez devoir lui expliquer tout le "cheminement de pensée" - comme à un bébé - pour arriver au résultat que vous attendez de lui. Mais une fois que votre programme est fini - et correctement codé - il vous fournira un résultat exact en un temps record, et ce de manière constante (pas de fatigue, de maladie, d'états d'âme, etc...).

    • Traduction d'un algorithme


      Comme nous l'avons vu, un algorithme est la représentation d'un "schéma de pensée". Mais nous ne sommes pas encore dans l'univers d'un ordinateur, pour l'instant, on a simplement couché "sur papier" ce que nous avons en tête. Pour qu'un ordinateur exécute un programme, il va falloir lui expliquer dans un langage qu'il comprend. Le seul langage que comprends réellement un ordinateur c'est le binaire, une suite de 0 et de 1, mais nous ne sommes pas encore la.


      Initiation extrêmement brève au binaire


      Tous les langages de programmation ont ça en commun : ils sont une version lisible par un humain d'un code qui sera transformé - tôt ou tard - en binaire. Donc que vous codiez en C, C++, PHP, JavaScript, Java, etc... vous êtes encore bien loin du binaire, et une étape de compilation (transformation de votre code en binaire), sera obligatoire pour que l'ordinateur exécute enfin votre algo.

      Afin de bien comprendre le passage de l'algorithme à un langage de programmation, on va passer par l'étape pseudo-code. Le pseudo-code est une première traduction de votre algorithme, qui se rapproche d'un langage de programmation, sans vraiment en être un. Il vous permettra juste de faire le lien entre la représentation schématique de votre appli, et la traduction en langage de programmation.


      Comme nous le verrons plus tard, tous les langages disposent "d'éléments de langage" que vous devrez exploiter pour coder vos algos. Les éléments de langages sont comparables aux langages humains :


      • on a des noms, des pronoms, des noms propres et des noms communs.
      • on a des adjectifs, des genres et de la ponctuation
      • on a des verbes, et des règles de conjugaison pour exprimer le passé, le présent, le futur
      • on a une grammaire, une syntaxe, une orthographe et un vocabulaire
      • on a des expressions régionales, de la nov-langue, et des modes
      • etc...


      Et bien c'est à peu près le cas pour un langage de programmation. Nous verrons tous ces éléments de langages dans les cours suivant.


      Bref, pour traduire un algorithme en langage de programmation, vous allez devoir apprendre une "nouvelle langue", qui a ses propres règles, et qui va vous permettra de transformer un algorithme en code informatique ! Cette approche est comparable au métier de traducteur, il vous faut bien connaitre les deux langues pour créer une traduction la plus proche possible de la réalité.

      Un des éléments de langages les plus basiques en programmation, ce sont les structures conditionnelles, que nous verrons bientôt ensemble. Elles permettent simplement d'exprimer une condition, et donc d'avoir des résultats différents selon certains critères. On peut les traduire en français par les mots si ou sinon. Ce qui deviendra if et else en anglais.


      Voici un exemple de pseudo-code sur un algo de calcul de remise de prix :


    • Coder un algorithme

      Reprenons notre premier exemple, vérifier les ingrédients pour faire des crêpes :


      Et bien je vous présente une traduction possible en Javascript :


      let oeuf = 0;
      let lait = 0;
      let farine = 0;
      let sucre = 0;
      let beurre = 10;
      if (oeuf <= 0) { /* En francais : si il n'y a pas d'oeuf */
        console.log(`Pas d'oeuf : pas de crêpes aujourd'hui`); /* Alors on affiche le message et on sort du programme */
      } else if (lait <= 0) { /* Sinon, on vérifie les autres ingrédients...*/
        console.log(`Pas de lait : pas de crêpes aujourd'hui`);
      } else if (farine <= 0) {
        console.log(`Pas de farine : pas de crêpes aujourd'hui`);
      } else { /* Si tous les ingrédients de bases sont là, on vérifie qu'on ait les ingrédients "bonus" */
        if (sucre <= 0) {
          console.log(`Pas de sucre : pas grave, on peux faire des crêpes sans sucre`);
        }
        if (beurre <= 0) {
          console.log(`Pas de beurre : pas grave, on peux faire des crêpes sans beurre`);
        }
        console.log(`Sortir les ustensiles et se mettre au boulot !`); /* Les ingrédients sont là, on passe à la suite du programme... */
      }

      Pour finir sur la présentation générale, gardez bien en tête que tous les langages informatiques sont une version lisible par un humain du binaire. Il serait extrêmement fastidieux de coder directement dans le seul langage que comprend un ordinateur : des 0 et des 1. Donc l'exemple que je vous ai mis plus haut sera compilé en binaire à un moment donné, avant son exécution. Certains langages doivent être compilés "manuellement" par les développeurs, et d'autres sont interprétés par un autre logiciel (par exemple : un navigateur web).

      Voici un lien vers le wiki langage de programmation. Très complet. Pas la peine de tout voir et tout retenir, mais c'est pour votre culture, et que vous ayez une idée de l'étendu du domaine.

    • Liens utiles

      Comme je vous l'ai dit en début de cours, nous ne ferons qu'effleurer la notion d'algorithmie ici. Je vous encourage donc à aller jeter un œil sur Internet pour approfondir un peu plus cette notion fondamentale.

      Voici quelques liens utiles pour ceux qui voudraient approfondir l'algorithmie de manière théorique :


      Pour ceux qui n'en n'ont jamais entendu parler, je vous conseille aussi fortement de lire quelques pages sur le binaire. Cela ne vous sera pas forcément très utile au début de votre apprentissage, mais ça reste tout de même un des fondements de l'informatique, et vous pourriez bien y être confronté dans vos expériences professionnelles.