Je m’intéresse à la cuisine depuis plusieurs années, en partie parce que mes horaires de travail me permettent d’être à la maison pour préparer la plupart des soupers familiaux en semaine. C’est une passion que je partage avec un couple d’amis qui, tout comme moi, n’étaient jusqu’à présent que de modestes autodidactes en la matière. Cet hiver, poussés par le désir d’améliorer nos compétences, nous nous sommes inscrits à un cours de cuisine de base dans un collège de Toronto. Notre professeur, un affable chef allemand formé en France, nous a donné de nombreux conseils et techniques pour utiliser correctement nos ustensiles et préparer efficacement de savoureux plats populaires qui m’ont valu des commentaires élogieux de la part de ma famille.
Ces notions d’ustensiles, d’efficacité et de recettes m’ont amené à faire un rapprochement avec le développement de logiciels. Après tout, les programmeurs doivent travailler efficacement avec les outils dont ils disposent, et qu’est-ce qu’une recette si ce n’est une sorte d’algorithme? La précision est importante dans les deux disciplines, la créativité est souvent récompensée et vous pouvez travailler à différents niveaux d’abstraction en fonction du résultat que vous essayez d’obtenir. Utilisons donc l’analogie de la cuisine pour examiner l’évolution du développement de logiciels au cours des dernières décennies et la direction que la technologie quantique devra emprunter dans les années à venir.
Recette de codage
Si vous préparez de toutes pièces un dîner pour deux personnes, vous pouvez vous permettre d’être très précis sur les ingrédients et suivre les recettes à la lettre. Chaque plat pourra alors être une création spéciale et unique. Par contre, si vous travaillez dans un restaurant ou si vous préparez un banquet pour des centaines d’invités, vous devez concevoir le projet avec un certain degré d’abstraction et à plus grande échelle sans sacrifier la qualité, ce qui signifie préparer certains ingrédients à l’avance afin de produire une grande quantité de repas qui plairont à tous. De la même façon, le développement classique de logiciels (dans un univers non quantique) a suivi une voie qui a commencé par le codage « à partir de zéro » et a évolué vers des niveaux de plus en plus élevés de récursivité et d’abstraction.
J’ai déjà parlé du cours de programmation que j’ai suivi au secondaire, qui m’a initié à la notation binaire selon laquelle tous les nombres sont représentés par des séquences de 1 et de 0. L’exécution d’opérations combinant des valeurs binaires est à la base de l’informatique classique, et tous les programmes informatiques actuels doivent être convertis en valeurs binaires (bits) pour pouvoir fonctionner. La magie réside dans ce qui se passe entre la feuille de calcul, le jeu ou l’application pour téléphone intelligent que vous utilisez et les bits sous-jacents qui, en réalité, font tout le travail.
Lorsque j’étais à l’université, le langage machine (ou assembleur) était encore une composante obligatoire du programme d’informatique. Il constituait une avancée par rapport au langage binaire qui n’utilisait que des objets de données et des opérateurs logiques simples (ET, OU, NON, etc.). Les programmes étaient étroitement liés au matériel utilisé et devaient, bien sûr, être traduits en langage binaire. Il s’agissait d’une programmation « à partir de zéro » et, bien que nous ayons beaucoup appris sur les instructions machine spécifiques, l’écriture du programme même le plus simple devenait une tâche fastidieuse. Nous sommes rapidement passés à des langages de programmation plus évolués comme COBOL pour le traitement des affaires ou FORTRAN et Pascal pour des applications plus scientifiques et mathématiques, qui nous ont permis de représenter des structures de données complexes et d’écrire des programmes capables d’effectuer des tâches réelles. Les programmes en langage évolué sont traités par un compilateur qui traduit le code en – vous l’aurez deviné – instructions binaires adaptées au matériel utilisé. C’était notre première expérience de l’abstraction. Un programme écrit en COBOL, FORTRAN ou Pascal est indépendant du matériel, et il existe des compilateurs pour différents types de machines, ce qui permet d’exécuter le même programme sur différents ordinateurs.
Service de données, de la ferme à la table
La suite de l’histoire du développement de logiciels se résume à des efforts d’abstraction et de réutilisation de plus en plus poussés. Les premiers langages évolués ont introduit l’idée de sous-programmes, c’est-à-dire des procédures indépendantes conçues pour exécuter une tâche spécifique et pouvant être réutilisées de nombreuses façons avec différents paramètres. (Un de mes professeurs a publié à ce propos un livre intitulé Steal this Code!, qui recense propose différents sous-programmes pour résoudre des problèmes mathématiques courants du domaine public.) À la fin des années 1980 et dans les années 1990, un nouveau type de codification, la « programmation orientée objet », a connu un succès fracassant en plaçant les objets de données, plutôt que les algorithmes, au centre des opérations et en entourant les objets de sous-programmes ou procédures de traitement des données, poussant l’abstraction et la récursivité encore plus loin. Le langage orienté objet C++ a été très populaire pendant un certain temps, avant d’être supplanté par Java et toutes ses variantes encore utilisées aujourd’hui. Entre-temps, les services intermédiaires tels que les bases de données et les serveurs d’application ont permis d’améliorer la normalisation et la réutilisation des données.
Lorsque vous entendez parler de « conteneurisation », de développement « à faible code » ou « sans code », rassurez-vous, il n’y a là rien de nouveau. Il s’agit en effet de notions déjà connues qui reposent sur l’abstraction et la réutilisation d’actifs de programmation existants. Les outils de développement ont également évolué à mesure que le niveau d’abstraction augmentait. Alors qu’auparavant, les programmeurs écrivaient eux-mêmes chaque ligne de code, les outils de développement visuel qui permettent d’assembler des programmes graphiquement à partir de composants préconstruits – une grande partie du code pouvant être générée automatiquement – sont devenus la norme. Jusqu’à maintenant, les programmeurs devaient réaliser une recette à partir de rien. Aujourd’hui, la récursivité, l’abstraction et les outils perfectionnés leur permettent de réussir des banquets sans déployer davantage d’efforts. La hausse spectaculaire de la productivité qui en a résulté dans le monde des affaires, de l’ingénierie et de la science parle d’elle-même.
Cependant, comme je l’ai déjà dit, certains problèmes sont encore trop difficiles à résoudre, même avec les logiciels perfectionnés d’aujourd’hui. C’est là que l’informatique quantique entre en jeu. Les bits quantiques ou « qubits » nous libèrent des contraintes du code binaire. Ils ouvrent la voie à une approche totalement différente de la programmation et offriront à terme une puissance de traitement que nous pouvons à peine imaginer aujourd’hui. Mais soyons réalistes. Les ordinateurs quantiques n’en sont qu’à leurs débuts et il reste encore beaucoup de travail à accomplir avant qu’ils ne réalisent leur potentiel. En outre, même à grande échelle, ils ne seront utiles que pour certains types d’applications. Le traitement de texte que j’utilise pour écrire ce billet ne sera pas transformé par l’informatique quantique et celle-ci ne m’aidera pas à taper plus vite. En revanche, les ordinateurs quantiques seront très utiles pour résoudre des problèmes à forte intensité de calcul en mathématiques pures et appliquées, par exemple, ou des simulations complexes dans le domaine de la recherche scientifique et de l’ingénierie. L’avenir de la programmation comme des méthodes et des outils de développement d’applications sera hybride, combinant informatique classique et quantique. Les programmeurs devront utiliser le meilleur des deux mondes pour résoudre des problèmes dont nous ne soupçonnons même pas encore l’existence.
Retour dans la cuisine
Étant donné que l’informatique quantique n’en est encore qu’à ses balbutiements, les programmeurs quantiques se retrouvent un peu comme des cuisiniers à qui on demanderait de préparer un banquet à partir de rien. Il y a quelques mois, j’ai participé à un atelier d’introduction à l’informatique quantique d’une demi-journée – un tour d’horizon passionnant mais parfois déconcertant des qubits, des portes quantiques et des circuits. Il me faudra un peu plus de temps pour saisir pleinement les nuances de ce nouveau modèle de programmation et j’essaierai peut-être, plus tard, de rédiger un billet plus technique sur le sujet. Pour l’instant, ce que je vois, c’est que les portes et les circuits sont l’équivalent quantique des opérateurs logiques que j’ai appris à programmer en langage d’assemblage il y a des dizaines d’années. En mieux, oui, et avec infiniment plus de possibilités, mais il s’agit tout de même, en quelque sorte, de coder des données en langage machine quantique. Il est intéressant de constater qu’il existe maintenant des boîtes à outils de développement visuel et que de nombreuses organisations font des essais, dont certains ont été couronnés de succès, pour créer un logiciel capable d’effectuer des tâches d’optimisation et de simulation au moyen d’un code de programmation. Cette approche demeure toutefois fastidieuse et l’application quantique « miracle » ne semble pas être pour demain.
L’évolution suit son cours. J’ai récemment assisté à une démonstration de nouveaux outils de développement de logiciels quantiques qui ont relevé d’un cran le niveau d’abstraction, créant un langage évolué qui ressemble beaucoup à ceux que j’utilisais dans les années 1990. J’ai immédiatement perçu les gains de productivité potentiels. La programmation semblait beaucoup plus intuitive et les programmes pouvaient être adaptés à différents types de matériel quantique. Cette étape du développement de logiciels quantiques a été franchie beaucoup plus rapidement que son équivalent dans le monde classique. C’est très encourageant, mais il reste encore beaucoup à faire. Les outils de développement visuel quantique ne sont pas aussi performants que leurs homologues classiques, et les résultats en matière de réutilisation du code ne sont pas encore optimaux. Cela est dû, au moins en partie, aux limites actuelles du matériel quantique. Dans le monde quantique comme dans le monde classique, il est important que le matériel et les logiciels évoluent au même rythme.
Le secret de la recette est dans la réutilisation
Le développement de logiciels quantiques devrait s’accélérer à mesure que le matériel quantique gagnera en taille et en fiabilité et que le niveau d’abstraction et de réutilisation des composants des logiciels augmentera. Le matériel sera normalisé et les compilateurs pourront bientôt traduire les problèmes codés en langage machine quantique. Bien que la plupart de ces éléments restent encore à inventer, l’industrie peut s’inspirer des progrès réalisés dans le monde classique pour les améliorer. Nous assisterons alors à une explosion de solutions révolutionnaires quantiques pour réaliser des optimisations mathématiques et des simulations techniques et scientifiques, y compris dans le domaine de l’IA et de l’apprentissage automatique.
D’ici peu, nous en arriverons au point où les programmeurs quantiques pourront préparer des banquets gastronomiques à partir de rien, et nous pourrons tous nous régaler des résultats.
Multilingual post
This post is also available in the following languages
Stay up to date with what matters to you
Gain access to personalized content based on your interests by signing up today