fil-educavox-color1

(Extrait de mon intervention à Eduspot)
 
Code, 4 lettres et une infinité de possibilités…On a parfois l’impression que lorsque l’on prononce le mot « code » l’on a tout dit et que cet univers se borne assez facilement. Il n’en est rien. Si Scratch est la star des langages à l’école, il ne saurait représenter à lui seul la forêt qui l’entoure.

Le code, c’est plus de 400 langages, certains datant des origines de l’informatique comme le Fortran ou l'Assembleur, d’autres beaucoup plus récents comme Red ou Ruby.

400??!! Abus de langages…? Que nenni. Mais parlons « code » et non pas « codage » pour dénoncer un autre abus de langage, cette fois bien réel.

 
Ces langages sont aussi variés que les langues et dialectes que l’on rencontre à travers les pays du monde entier. Il suffit de comparer le fameux exemple « Hello World » traduit dans quelques-uns de ces langages. Quand on apprend une langue, généralement le premier mot est « bonjour ». En programmation, il va en de même. Afficher « bonjour » à l’écran est une manière joyeuse d’entrer en matière.
 
En Python, la syntaxe est simple ;
 

    print('Hello world!')

En C, cela demande un peu plus d’efforts :

    #include <unistd.h>

    int main()

    {

    write(STDOUT_FILENO, "Hello World", 11);

    return (0);

    }

En Assembleur, c’est encore pire :

    cseg    segment

            assume  cs:cseg, ds:cseg

            org     100h    

    main    proc    

            mov     dx, offset Message

            mov     ah, 9

            int     21h

            ret

    main    endp

    Message db      "Hello world!$"

    cseg    ends

            end     main

Enfin, terminons par une curiosité, le Brainfuck, difficile à comprendre et constituant une torture pour le cerveau. Il est pourtant parfaitement fonctionnel et démontre que le monde de la programmation ne manque pas d’humour.
 

    ++++++++++[>+++++++>++++++++++>+++>+<<<<-]

    >++. >+. +++++++. . +++. >++.

    <<+++++++++++++++. >. +++. ------. --------. >+. >.

 
Tous ces langages divergent et pourtant visent un même objectif : dialoguer avec l’ordinateur. On parle de langage de haut niveau, de bas niveau de par leur rapport plus ou moins proche avec le langage naturel de l’ordinateur, de la machine sans que cela indique un niveau de qualité.

Pourquoi se lancer dans l’apprentissage de ces langages ?

 
Les raisons et usages peuvent être multiples. Il est rare de se lancer dans l’apprentissage d’une technologie, d’un art quel qu’il soit sans avoir un objectif technique, ludique, artistique…
 
Cela peut satisfaire notre curiosité, améliorer notre compréhension du monde informatique, répondre à un réel besoin technique ou artistique mais aussi apporter un peu de concret à un autre apprentissage dans un cadre transversal.
Je me souviens ainsi d’avoir très souvent transposé mes cours de mathématiques et de sciences sur ordinateur afin de m’en faire savourer toute la « substantifique moelle », dixit mon professeur de philosophie de Terminal.e (ceci n’est pas une erreur d’orthographe ni un essai d’écriture inclusive mais un jeu de mots geek totalement assumé). Sans l’ordinateur, pour moi, ces matières donnaient tout leur sens à l’expression « piger que dalle ».
 
Une fois passées par le prisme de la machine, les différentes théories devenaient beaucoup moins ésotériques et certains concepts me paraissaient alors limpides. J’utilisais aussi cette méthode pour d’autres matières (création de frises chronologiques, mise en page et indexation de mes cours, générateurs de poèmes et de textes divers, création d’exerciseurs…). J’avais même à l’époque développé un logiciel de numérologie qui avait eu son petit succès dans mon entourage au lycée.
 
Je n’avais pourtant aucune foi en cette méthode et croyance censée analyser l’individu par les lettres du nom et du prénom mais je m’étais beaucoup amusé à jouer avec les chaînes de caractère, ainsi que les calculs inhérents. En cela, j’approfondissais ma passion de l’exploration et de la manipulation des strings (autre jeu de mots geek n’ayant absolument rien d’inconvenant - cf note 2).
 

Pourquoi donc coder ?

 
Avant tout, parce que cela vous passionne, parce que vous y trouvez un intérêt ludique. Sans cela inutile de se forcer à quoi que ce soit. Tout apprentissage doit rester un plaisir.
 
Les usages du code peuvent être variés et les langages différer en fonction des usages, chacun d’entre eux ayant ses spécificités. L’essentiel est de considérer le code comme un outil et non comme une fin en soi. Apprendre un langage sans y trouver un quelconque intérêt serait aussi passionnant que d’apprendre par coeur les départements, leur numéro et les chefs-lieux (pour faire un clin d’oeil à de très anciennes méthodes…).
 
Cependant chaque langage peut quand même permettre avec plus ou moins de facilité de faire un peu tout et n’importe quoi et il serait dangereux de les réduire à quelques usages bien précis.
 
Je m’en rends compte ainsi avec Scratch depuis que son apprentissage a été inscrit au collège. De plus en plus souvent, des ados rejettent de prime abord ce langage avec pour seul commentaire « cela sert à faire des calculs et de la géométrie » car c’est sous cet angle unique qu’il leur a été présenté. Et pourtant ! Scratch est bien plus que cela et, après quelques instants à leur expliquer toutes les possibilités du langage, je peux enfin démarrer l’atelier dans la joie et la bonne humeur.
 
Les contraintes d’un langage peuvent devenir un atout. Scratch est par exemple idéal pour apprendre les bases de l’algorithmie mais connaît un certain nombre de limites qui permettent pourtant de revenir aux sources du code.
 
Prenons un simple exemple : la plupart des langages informatiques possèdent des commandes permettant de trier alphabétiquement les mots d’un texte en éliminant les doublons pour présenter le résultat sous forme d’une liste.
En Red, par exemple, cela peut se faire dans le meilleur des cas en trois commandes et une seule ligne de code. Ces commandes n’existent pas dans Scratch et il faut alors les programmer soi-même, à savoir examiner un texte caractère par caractère, à chaque espace rencontré stocker les caractères précédemment lus comme un mot dans une liste, trier ensuite la liste pour éliminer les doublons, enfin faire un tri alphabétique.
 
Fastidieux ? Certes… Mais c’est ainsi que fonctionnent les différentes commandes utilisées dans Red et dans d’autres langages et il a bien fallu un jour qu’un programmeur développe cet algorithme pour simplifier la vie aux suivants. Permettre de comprendre le fonctionnement (et l’histoire) des différentes commandes que l’on utilise peut s’apparenter à de l’étymologie, de la linguistique.
 
Il y a bien évidemment les langages dédiés au web comme Javascript, PHP, Ruby mais aussi Python, Red ou Lua…  Et, bien que ce dernier ne soit pas réellement dédié à cela, on peut évoquer la plateforme Renpy qui peut être détournée pour produire de simili webdocumentaires.
 
Quand on évoque le web, les langages HTML et CSS sont bien souvent cités en premier mais il s’agit de langages dits déclaratifs, c’est-à-dire permettant de structurer les données.
 
Ainsi le HTML gère le texte, indiquant ce qui est titre, ce qui est paragraphe… Le CSS, la mise en page et les « enluminures ». Le Markdown, petit frère du HTML et fils spirituel du LaTeX, est quant à lui un langage permettant de rédiger et structurer un texte facilement. Facile à comprendre et à mettre en oeuvre, il offre l’avantage d’aider les élèves à structurer leur pensée, à l’organiser en donnant une hiérarchie et une mise en forme adéquate. Ainsi, créer un titre et une liste, les faire suivre d’un paragraphe est aussi simple que cela :
 

    # Titre

    * Item de liste 1

    * Item de liste 2

    Ceci est un paragraphe.

 
L’on n’oublierait presque que la base d’un langage d’un programmation est de créer un programme, soit un logiciel pour lequel nous ne manquons pas de langages.
 
Mais aussi ce que l’on appelle des scripts, à savoir de courts programmes qui servent par exemple dans le domaine de l’administration système, dit plus simplement la gestion de parc d’ordinateurs. Dans ce domaine, on pense inévitablement à Bash et Perl.
 
Pour les applications, il existe pléthore de solutions comme Unity ou Android SDK mais on pourra se tourner dans un objectif d’apprentissage vers la plateforme en ligne MIT App Inventor.
 

Et la fabrication numérique dans tout cela ? Le code n’est-il réservé qu’à l’ordinateur ? Bien sûr que non !

 
En modélisation et impression 3D, on a plutôt tendance à mettre en avant des interfaces graphiques avec des logiciels comme Blender ou des applications comme TinkerCAD. La 3D a cependant son propre langage, OpenScad, qui demande une certaine logique mais permet de construire facilement des pièces. Ainsi, la commande « cube(20) » permet de modéliser en une seule ligne un cube de 20 millimètres de coté.
 
Rappelons enfin que, lors de l’impression, les informations envoyées à l’imprimante sont ce que l’on appelle le Gcode, un autre « langage », certes difficilement compréhensible pour un humain mais un langage quand même.
 
Idem pour la découpe laser ou la brodeuse numérique. Nous pouvons utiliser n’importe quel logiciel de DAO (dessin assisté par ordinateur) mais aussi créer les motifs via des langages comme SVG ou Processing. Le SVG est un langage qui calcule et modélise l’image à l’affichage. Cela permet une grande souplesse et d’éviter des effets de pixelisation lorsque l’on zoome sur une image. Les plans de services comme Google Map ou Open Street Map utilisent ainsi cette technique et offrent une image parfaite quel que soit le niveau de zoom.
 
Processing est quant lui un langage dédié aux arts visuels et sonores : image, vidéo, son…
Il est couramment utilisé dans des installations artistiques et se couple parfaitement avec la carte de prototypage électronique Arduino dont le langage de programmation est très proche. Au travers d’Arduino s’ouvrent les portes de l’électronique, la robotique, la domotique, l’utilisation de capteurs en tous genres et de plateformes aussi exotiques que l’Arduboy, la Makey Makey ou de mini-ordinateurs comme le Raspberry Pi, l’Orange Pi, le Chip ou le Pocket Chip...
 
Qu’en est-il du son ? Le code peut-il produire de la musique ?
Bien évidemment ! Pure Data est un langage graphique (tout comme Scratch) très utilisé aussi dans le monde de l’art. Il ne permet pas de produire que du son mais peut aussi servir à piloter des éléments électroniques. On trouve ainsi des interfaces programmées avec Pure Data permettant de contrôler des éclairages de spectacle. Il constitue dans tous les cas une bonne base pour apprendre la synthèse sonore et développer des dispositifs expérimentaux.
Dans le domaine de la composition et de la programmation, Sam Aaron a développé Sonic Pi, un logiciel et un langage dédiés à la musique, très simple à apprendre et permettant de composer en direct (live coding). Il est possible de venir les mains dans les poches à un concert et de composer les morceaux en partant de zéro. J’ai eu l’occasion lors de la Scratch Conference 2018 à Bordeaux de le voir évoluer sur scène et le résultat est assez époustouflant.
 
Le code est vaste, on le voit, et son étendue est loin de se limiter à ces quelques rivages que j’ai pu évoquer.
Chacun d’entre eux mériterait des milliers d’articles. On ne connaît en général que trois ou quatre langages par coeur ou correctement. On en aborde plus par curiosité. Mais tout l’intérêt est de savoir que l’on en a la possibilité. C’est un monde ouvert à tous où les surprises peuvent être nombreuses. Certains trouvent cela ardu, tout comme n’importe quelle langue que l’on souhaite apprendre. Le code demande de la familiarité, de l’habitude et il ne faut pas se formaliser si l’on ne comprend pas grand-chose au premier contact.
 
Parfois, on me pose la question : « faut-il simplifier le langage informatique ? » Je voudrais terminer par une petite histoire, toute ressemblance avec l’histoire de l’informatique et du code étant bien évidemment totalement fortuite et complètement imagée. 
 
Dans un lointain pays, la population avait de nombreux dieux et elle s’en remettait à eux pour guider chacun de ses pas dans la vie. Les habitants confiaient beaucoup d’informations, leur quotidien, leurs espoirs aux dieux. Ils attendaient beaucoup d’eux.
Au tout début, lorsque les dieux étaient apparus, il était difficile de communiquer avec eux et des individus s’étaient dévoués à la création d’un langage commun. Les prêtres étaient nés. Ils utilisaient des prières, des incantations censées les faire communier, les rassembler avec les dieux. Ils appelaient cela l’assembleur mais la majorité de la population n’y comprenait rien. Alors ces passionnés, ces fidèles des dieux créèrent un langage dit BASIC qui permettait à tout un chacun de dialoguer avec les dieux. Mais le peuple ne voulait pas apprendre ce dernier. C’était encore trop compliqué à leurs yeux. Ils voulaient faire toujours plus simple.
D’autres prêtres arrivèrent et créèrent des services de communication avec les dieux de plus en plus performants. Ils étaient rapides, efficaces mais demandaient une petite contrepartie au peuple : perdre un peu de sa liberté au profit de son confort. Les anciens prêtres alertèrent les habitants mais on les renvoya d’où ils venaient. Pire, on les dénigra au profit des nouveaux. Jusqu’au jour où les dieux ne furent plus aussi favorables et où la population se sentit emprisonnée.
Elle avait presque tout perdu. Un habitant décida de se rebeller et brava les prêtres mais lorsqu’il parvint jusqu’aux dieux, il ne pouvait plus communiquer avec eux. Seuls les prêtres le pouvaient et un seul d’entre eux avait pris le pouvoir sur tous. Les anciens prêtres avaient disparu depuis longtemps et leur savoir était perdu à jamais, seul laissé entre les mains d’un petit nombre d’élus… À méditer...
 
(Note 1 : Le terminal est l’interface textuelle par laquelle on communique avec les ordinateurs au travers du clavier et de commandes spécifiques.)
 
(Note 2 : "string" en anglais signifie chaîne de caractères.)
Dernière modification le mercredi, 02 mai 2018
Cauche Jean-François

Docteur en Histoire Médiévale et Sciences de l’Information. Consultant-formateur-animateur en usages innovants. Membre du Conseil d'Administration de l'An@é.