Introduction à la programmation

Introduction à la programmation

30 juin 2018 Non Par Adrien Boilley

Cet article s’adresse aux (futurs) étudiants en informatique et aux curieux. Il n’a pas pour vocation de vous apprendre la programmation, seulement de vous initier avec ce monde complexe et d’une implacable logique.

Je vous suggère cependant de vous assurer d’avoir de bonnes bases en informatique : car si vous ne savez pas ce qu’est un clavier, un processeur ou un disque dur : vous ne comprendrez pas la suite.

Dans cette première partie : je vais aborder un aspect assez théorie de la programmation.

Introduction

La programmation sert à manipuler des données, un peu à l’instar d’une chaîne de production dans une usine. Les données vont être chargées, manipulées, puis délivrées.  Un programme possède donc des input (entrées)  pour charger les données, et des output (ou sortie) pour délivrer le résultat). Les entrées et sorties peuvent parfois être identiques selon les circonstances. Un serveur web, par exemple, va recevoir en entrée une requête http envoyée par le client web ; traiter la requête ; et en sortie, renvoyer une réponse http au client.

Le binaire

Le binaire est un langage composé d’une suite de signaux électroniques carrés, appelés bits. La présence du signal est notée 1 et son absence notée 0. Les bits sont regroupés par paquets appelés chaînes. Ainsi : les processeurs sont composés des portes logiques (AND, OR, NOT, XOR) qui permettent de manipuler des chaînes de bits.

Exemple d’addition binaire.

+ 0001001011
+ 0000001111
= 0001011010

Aujourd’hui, le plus souvent, des chaînes de 32 ou 64 bits. La longueur de la chaîne est importante, doubler la longueur d’un chaîne élève au carré le nombre de combinaisons disponibles. Dans la cas de la mémoire vive : une chaîne 32 bits déclare environ 4 milliards  ( 2^32) d’adresses  mémoire. Une chaîne 64 bits permettra de déclarer ce nombre au carré : soit un peu plus de 18 quintillions d’adresses ( 2^64).

L’encodage est une façon de transformer un objet (nombres, textes et médias) en une chaîne de bits. Il existe souvent plusieurs règles d’encodage. Dans le format texte, nous retrouverons facilement : utf-8 (unicode text format) utilisé dans le Web, ISO 8859-15, ou windows1252.

La programmation

Aujourd’hui, et à de rares exceptions près : on ne programme plus directement en binaire. Ce serait trop long et trop fastidieux. On va programmer dans un langage facilement lisible, et un programme dédié va le convertir en instructions binaires.

Le codage

Le codage, c’est écrire un programme selon une algorithmique précise : c’est à dire : transformer une idée en une suite d’instructions concises, organisées selon des règles de syntaxe et de logique.

Par exemple, je veux qu’un programme affiche les fichiers du dossier adrien/ et dont le nom de fichier se termine par *.txt, voilà ce que cela pourrait donner :

 // créer une liste de fichier avec une fonction
 VARIABLE liste = fonction_lister( '/home/adrien/' );
 // Parcourir la liste en identifiant chaque nom de fichier
 PARCOURIR ( liste comme nom_fichier ) 
 { 
   // vérifier la correspondance du nom du fichier
   SI ( fonction_correspondance ( nom_fichier, '*.txt' ) )
   {
      // SI (et seulement SI) c'est vrai : afficher le nom contenu dans la variable 
      ECHO nom_fichier;
   }
 }

Ne prenez pas mes exemples trop au sérieux, je les codes rapidement, juste pour l’exemple. Attendez vous à utiliser l’indentation textuelle, les caractères spéciaux et la coloration syntaxique qui seront des outils bien pratiques pour lire le code de façon claire et rapide.

Exemple bidon et volontairement très trop long, écris en PHP .

Évidement, il est possible de faire beaucoup plus court.

Même chose, sur 3 lignes.

J’espère que vous l’aurez deviné vous même : dans le code : le texte en gris et italique est en fait un commentaire de code : il juste là pour le codeur à n’a aucune utilité pour le programme lui même.

La compilation

Un programme spécifique appelé compilateur va assembler les scripts, interpréter puis compiler l’ensemble pour en faire un programme machine. .

Schéma de la compilation

La compilation se fait avec un compilateur dédié (GCC, CPP, etc). Celui ci peut s’utiliser en ligne de commande, si vous êtes vieille école. Sinon, aujourd’hui, les IDE comme code::blocks embarquent tous les utilitaires d’un coups : éditeur de texte, compilateur et débogueur).

Compilé VS Interprété

  • Les programmes compilés  : a l’instar des langages C, C# ou C++ : le programme d’abord être compilé puis stocké sous la forme d’un fichier appelé “binaire exécutable”.  Sous windows : ce sont des fichiers *.exe.
    • Avantages : un programme binaire est chargé directement par le processeur : le programme est plus léger et s’exécute rapidement.
    • Inconvénients : il faut recompiler à chaque modification.

Schéma : les langages compilés

  • Les programmes interprétés : a l’instar de Python, Perl ou PHP : le programme est conservé sous sa forme de script : le runtime (ou environnement d’exécution) doit d’abord interpréter et compiler le programme avant de l’exécuter.
    • Avantages : peuvent être écris et modifiés rapidement sans se casser la tête.
    • Inconvénients : doit être recompilé à chaque appel ou presque*, et est un peu plus lourd à exécuter à cause du chargement préalable du runtime lui même.

Schéma : les langages interprétés

(*) Ou presque : car les runtimes embarquent souvent un système de cache dans lequel ils stockent les scripts une fois compilés. Si un script n’a pas été modifié : le runtime puise directement dans le cache pour ne pas avoir à recompiler le même script x fois.

A ce premier chapitre nous pouvons conclure que les langages compilés permettent de faire des programmes lourds et complexes (des jeux vidéos par exemple) et les langages interprétés des scripts rapides pour des fonctions simples et évolutives (le web, le réseau, les maths, etcs… ).

Monde professionnel

Dans le monde professionnel : c’est un tantinet plus compliqué. Il faut décider d’une architecture, réunir des librairies et frameworks (ensemble de librairies), coder, compiler, passer les testes unitaires, pousser sur le git (versioning (alpha, beta, release ou stable)), assurer la mise en production (mise en service/distribution) et enfin le debbuging pour assurer le fonctionnement et sécurité.

Les langages

Chaque langage de programmation a ses spécificités. Vous pouvez retenir qu’il existe plusieurs grandes familles de langage, plus ou moins confondues d’ailleurs selon le paradigme (ou l’utilité) du langage.
Alors oui : je ne classe pas les langages tout à fait de la même façon que wikipédia : c’est un choix personnel à des fins didactiques.

Déclaratifs

  • les langages déclaratifs servent à décrire quelque chose. Mais une fois décris : l’objet ne se transforme pas, le résultat recherché sera plutôt statique. Les page webs sont écrites en HTML : un langage déclaratif qui sert à décrire la structure de la page web.
    <html>
      <body>
       <h1> Coucou </h1> 
       <p>Comment ça va ?</p>
      </body>
    </html>

Impératifs ou Procéduraux

  • les langages procéduraux servent à donner des instructions. Contrairement à un langage déclaratif :  les langages procéduraux servent à créer des programmes évolutifs : l’état du programme va évoluer le temps de son exécution, en fonction de la nature des données et / ou des instructions reçues.
    Voici un exemple en javascript :

    var resultat = 12 + 8; //additionne 12+8 dans la variable.
    alert(resultat);       //afficher le contenu : donc 20.

Orientés Objets

  • L’orienté Objet est généralement une extension du langage procédural : permet de créer des objets en série à partir d’un modèle (appelé aussi class). Un peu comme on fabrique des pièces en plastique à partir d’un moule. Un objet étant un ensemble de valeurs appelées propriétés et de  fonctions appelées méthodes. Créer un objet s’appelle aussi : instancier une classe.
    Voici un exemple en PHP :

    // Instancier maJolieClass dans la variable $MonObjet.
    $MonObjet = new maJolieClass( $arguments );
    // $MonObjet doit utiliser la méthode faire_ceci. 
    $MonObjet -> faire_ceci ( $autres_args );

Orientés réseaux

  • ce sont des langages utilisées pour échanger des données et/ou des instructions à travers des réseaux informatiques. Le protocole http en fait parti. Voici une requête SQL qui sert à interroger un SGBD (système de gestion de bases de données, une sorte de serveur).
    /* Sélectionner "stocks et prix" dans le tableau 'produits' 
    où le produit est appelé "lessive" */ 
    SELECT stocks,prix FROM produits WHERE nom = 'lessive' ;

Événementiels

  • Le programme ne bouge pas tant qu’il ne reçoit pas d’instructions : que ce soit des événements utilisateurs (claviers, souris), des événements internes (déclencheurs, horloge) ou des événements réseaux (requêtes réseaux).
    Dans l’exemple : un bouton cliquable en JQuerry, une extension de javascript.

    /*Créer un événement au clique sur un bouton html : affiche 'coucou'.*/
    $('#bouton').click(function(){
      alert('coucou');
    });

Web

  • les langages ci dessus : PHP, Javascript, Jquery sont des langages préformatés pour être utilisé dans le web. Il permettent d’utiliser rapidement des langages réseaux  SQL ou HTTP.
  • Le web gère aussi deux types de connexion client : synchrone (le client envoie une requête, le serveur répond) ou asynchrone (message au serveur seul). On parle de programmation AJAX (Asynchronous Javascript And Xml).

Shells

  • basés sur des langages procéduraux : les shells servent à manipuler et gérer des systèmes d’exploitation.  L’instruction suivante est une commande Linux qui affiche le modèle du processeur. Le résultat dépendra bien sûr de la machine, chez moi, un I5-7200.
    $ cat /proc/cpuinfo | grep "model name" | head -n 1 | cut -c 14- 
    Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz

Visuels

  • il s’agit d’une programmation visuelle destinée à faciliter le développement d’interfaces graphiques.

Concurrents

  • que l’on appelle aussi la programmation multi-thread : l’idée étant de diviser un processus principal en sous-processus distincts.

Conclusion

Il ne s’agit là que d’une présentation sommaire. D’autres aspects importants comme l’environnement, le git et le travail collaboratif et bien sûr : le codage lui même seront aborder plus tard.