On ira tous au paradigme
Oui, mais lequel ?


Michel Polnareff "On Ira Tous Au Paradis" - 1972
Notre balade à travers l'histoire du code informatique va bientôt prendre fin. Comme dans notre région du monde, tout se termine, paraît-il, par des chansons, on vous propose l'un des artistes les plus "geeks" qui soient : Michel Polnareff qui se trouve être né à l'époque des premiers ordinateurs, ainsi qu'un petit jeu de mots innocent sur paradis et paradigme.

L'histoire elle-même ne s'arrête pas là, bien au contraire. Ce sont actuellement des milliers de langages qui existent et des centaines de façons de coder. Comment s'y retrouver et comment éventuellement choisir les langages qu'il faudrait étudier si par pur hasard vous vous lanciez dans le développement après avoir parcouru ExoCode ?

Universum, C. Flammarion, gravure sur bois, Paris 1888 Universum, C. Flammarion, gravure sur bois, Paris 1888.
Pas facile d'y répondre, mais essayons tout de même en commençant par ce qu'on appelle les paradigmes.

Un paradigme, d'une façon générale, c'est une façon d'appréhender les choses, voire même l'univers tout entier, reposant sur un modèle (des usages, une théorie, un courant de pensée...). En informatique, ce sera plus précisément une façon de considérer et d'agencer les éléments d'un programme en fonction des buts et des contraintes existantes et même parfois en fonction des goûts du développeur quand différents paradigmes peuvent servir à la réalisation d'une même application.

Logo du langage Python Logo du langage Python
Nous en avons déjà évoqué quelques-uns : langages compilés (Cobol...) ou interprétés (PHP...), langages structurés (Python...), langages procéduraux (C...) , langages orientés objet (C++...), langages descriptifs (HTML...), langages de script (JavaScript) , langages événementiels (Java...).

Notez d'une part que les exemples cités entre parenthèses ne sont pas exhaustifs, loin de là, et qu'un même langage peut répondre aux règles de paradigmes différents. Exemple : C++ qui est à la fois un langage procédural, orienté objet, compilé...

Écran de smartphone sous Androïd 9 pie Écran de smartphone sous Androïd 9 pie
Actuellement, après le succès de la programmation structurée, puis celui de la programmation objet, c'est la programmation événementielle qui a le vent en poupe grâce à l'usage très répandu des smartphones. Autrement dit, l'intérêt porté aux différents paradigmes est fonction de l'évolution des recherches en ingénierie informatique et finalement des usages et des besoins des utilisateurs.

Beaucoup de langages sont multi-paradigmes nativement ou peuvent le devenir grâce à l'adjonction de bibliothèques (libraries). Les développeurs ont donc un large éventail de possibilités. Mais ils doivent être conscients que, finalement, ce sont bien les capacités des paradigmes de programmation qui doivent orienter leurs choix.

Nous en avons cité quelques-uns ici, il en existe d'autres : programmation fonctionnelle, programmation concurrente, programmation réflexive, programmation récursive, programmation logique... Nul doute qu'à l'avenir, d'autres encore émergeront, bouleversant radicalement les méthodes de programmation. Tout cela doit inciter les développeurs qui se respectent à ne pas s'enfermer dans une seule façon de programmer, mais à être constamment réceptifs à toute évolution.

Schéma montrant le positionnement des notions d'IA, machine learning et deep learning imbriquées les unes aux autres Schéma montrant le positionnement des notions d'IA, machine learning et deep learning imbriquées les unes aux autres.
C'est particulièrement vrai pour les applications en intelligence artificielle (IA) où on traite des "connaissances" plutôt que des "données".

La programmation fonctionnelle (Lisp) et la programmation logique (Prolog) ont été privilégiées dès le début de la recherche en IA. D'autres langages spécialisés pour ce genre d'application sont apparus par la suite, (Scheme, Haskell, OCalm...). De nos jours, des langages plus généralistes comme Python disposent de bibliothèques de haut niveau dans le domaine de l'IA et sont très largement utilisés.

Gottlob Frege Gottlob Frege
Les programmeurs ont donc dû s'adapter au fur et à mesure des évolutions de l'IA et auront sans doute encore à le faire en fonction de l'évolution future des machines et des usages. Il en sera certainement de même pour les futurs ordinateurs quantiques.

À ce propos, développer des applications d'IA sur des ordinateurs quantiques, ça vous dirait ? Bon, nous n'allons pas pouvoir vous aider vraiment, mais, pour conclure, nous vous proposons une dernière petite balade autour de ces deux mystérieux concepts.

***

Construire des machines imitant des comportements d'êtres vivants est un rêve vieux comme le monde. De la statue du dieu Amon levant le bras pour désigner le nouveau pharaon vers 800 avant notre ère au canard artificiel de Vaucanson de 1738, les exemples sont nombreux.

Pour ce qui est d'imiter la pensée humaine et ses modes d'expression, selon les intuitions de Gottfried Wilhelm von Leibniz dont nous avons parlé au chapitre "les précurseurs", il a fallu attendre un peu plus.

Une première avancée est apportée par Gottlob Frege qui perfectionna le système de Boole en y adjoignant des éléments symboliques de telle sorte que la formalisation de la réflexion en langage courant s'en trouvait facilitée. Ce sera nécessaire à la programmation en IA qui nécessitera de manipuler des symboles et des listes de symboles à la place des nombres et des chaînes de caractères.

Vue simplifiée d'un réseau artificiel de neurones Vue simplifiée d'un réseau artificiel de neurones
Une deuxième avancée sera le fruit des réflexions d'Alan Turing qui se demande en 1950 si une machine peut "penser" et propose ce qui est devenu le test de Turing. L'idée de Turing est de faire dialoguer à distance une machine et un humain sans que ce dernier ne puisse en moins de 5 minutes déterminer si son interlocuteur est un humain ou une machine.

Turing, Von Neumann et bien d'autres conjecturent alors sur la puissance nécessaire des machines (elles devraient, dit-on à l'époque, comporter une mémoire d'une taille équivalente au nombre de neurones d'un cerveau humain et une rapidité d'interaction comparable) et sur le fait de savoir si de telles machines auraient une forme de conscience.

Yann LeCun Yann LeCun
Les capacités des ordinateurs actuels sont bel et bien comparables en puissance au cerveau humain, mais ils n'en ont pas vraiment l'architecture qui reste en partie mystérieuse. Par ailleurs, l'IA fait en particulier appel aux réseaux de neurones artificiels qui "apprennent" selon les principes du "machine learning" (apprentissage automatique) ou du "deep learning" (apprentissage profond), méthode dont le français Yann Le Cun est l'un des inventeurs.

Ces similarités apparentes permettent effectivement des prouesses bien visibles dans les jeux de réflexion, les assistants vocaux, la traduction automatique, la reconnaissance de formes, la conduite autonome, et de façon plus cachée dans le ciblage publicitaire dont nos GAFA sont avides, dans le renseignement et les applications militaires.

Mais tout cela reste cantonné dans le domaine de l'IA dite "faible". Il faudra sans doute trouver d'autres façons de programmer pour accéder à l'IA "forte", celle qui donnera une forme de conscience à nos ordinateurs, à supposer que ce soit possible.

Richard Feynman Richard Feynman
Et pour ça, il faut peut-être se tourner vers les ordinateurs quantiques.

La mécanique quantique, qui décrit le comportement des particules élémentaires, est quelque chose de compliqué à appréhender et difficile à simuler sur les ordinateurs des débuts de l'informatique. Ceci à fait dire à Richard Feynman « Au lieu de nous plaindre que la simulation des phénomènes quantiques demande des puissances énormes à nos ordinateurs actuels, utilisons la puissance de calcul des phénomènes quantiques pour dépasser nos ordinateurs actuels ».

Que voulait dire Feymann par là ? Une chose assez simple en fait. Les ordinateurs classiques utilisent des bits ne pouvant être que dans deux états : 0 ou 1, exclusifs l'un de l'autre. En gros, si on double le nombre de bits, on double la capacité de la machine. Un ordinateur quantique, dans l'esprit de Feymann, utiliserait des qubits qui pourraient être dans plusieurs états superposés à un même instant. Si on ajoute un seul qubit à une telle machine, on double sa capacité. Partant de là, les performances d'un ordinateur quantique augmenteraient exponentiellement en fonction de ses composants et non linéairement comme celles d'un ordinateur classique.

À la cinquième case, l'échiquier possède 31 grains de riz. À la cinquième case, l'échiquier possède 31 grains de riz.
Si vous n'êtes pas familier avec ces notions, pensez à l'échiquier de Sissa sur lequel on met soit un grain de riz sur chaque case (progression linéaire), ce qui donne un total de 64 grains de riz, soit un grain de riz sur la première case, puis 2 deux sur la deuxième, puis 4, puis 8, en doublant à chaque fois (progression exponentielle), ce qui donne un total de 18 446 744 073 709 551 615 grains de riz. Cela vous donne une petite idée de la puissance théorique de l'informatique quantique.

Peter Shor Peter Shor
Revers de la médaille, un ordinateur quantique pourrait être extrêmement performant dans certains domaines particuliers, mais serait incapable de réaliser la plupart des tâches assumées par les ordinateurs classiques.

Ses domaines de prédilections sont par exemple la recherche dans une base de données. L'algorithme de Grover (découvert par Lov Grover en 1996) permet à un ordinateur quantique de faire aboutir une recherche dans des éléments non classés en un temps beaucoup plus rapide et en utilisant moins d'espace de stockage qu'un ordinateur classique. Plus précisément, la recherche se ferait en un temps proportionnel à racine de N (et non pas proportionnel à N comme avec les algorithmes classiques) et avec un espace de stockage proportionnel à log(N).

Exemple de disposition d'un cryptosystème quantique Exemple de disposition d'un cryptosystème quantique.
Autre exemple, l'algorithme de Shor (nommé ainsi en l'honneur de Peter Shor) qui sert à décomposer un nombre en un produit de facteurs premiers. Cet algorithme permettrait de casser en quelques heures les codes des cryptosystèmes à clé publique, tels que le RSA, très utilisé actuellement pour les transactions sur Internet, là où les systèmes classiques demandent d'énormes moyens et un temps se comptant en mois sinon en années. Inversement, il permettrait de chiffrer des données avec une robustesse bien plus grande qu'actuellement.

Si les ordinateurs quantiques sont encore balbutiants, possèdent un faible nombre de qubits et, pour tout dire, sont extrêmement chers, on peut quand même commencer à s'entraîner à les coder, par exemple via le service en ligne "IBM Quantum Experience" où IBM met un véritable processeur quantique de 5 qubits à la disposition de ceux qui veulent tester leurs propres algorithmes.

Logo de libquantum Logo de libquantum
Autre solution : simuler un processeur quantique sur un ordinateur classique, entre autres avec Linux. Debian et Ubuntu proposent en effet une bibliothèque de sous-programmes en langage C nommée libquantum. Réalisée par Bjorn Butscher et Hendrik Weimer, elle met en particulier à disposition les algorithmes de Shor et de Grover à titre d'exemple.

***

L'ordinateur du futur sera-t-il un compagnon en partie autonome grâce à l'IA forte, en qui vous pourrez avoir toute confiance grâce à la robustesse de son code totalement public, capable de prouesses fantastiques grâce à ses multiples processeurs quantiques intégrés... ou restera-t-il une machine envahissante, énigmatique et intrusive autant qu'indispensable, aux algorithmes tenus secrets et complètement sous le contrôle de forces qui nous dépassent ?

Enfer ou paradis ? Peut-être y pouvez-vous quelque chose maintenant, même modestement.
Page précédente - Sommaire - En savoir plus