Un livre d’informatique peut être passionnant, instructif, élégant : il est rare de pouvoir dire, comme de l’ouvrage de Pascal Manoury aux Éditions Paracamplus, qu’il est, en plus, délicieux. C’est pourtant le mot qui me vient à l’esprit après avoir, à plusieurs reprises, ouvert au hasard cet ouvrage concis mais plein de suc : chacune de ces incursions aiguisait mon appétit pour les nourritures programmatiques alors proposées, pour certaines d’entre elles au moins classiques et bien connues, mais présentées avec une élégance et énoncées selon un style qui leur conféraient une saveur inédite, et toujours exposées sous un jour original, propice à la surprise d’aspects auxquels je n’avais jamais pensé, bref au jaillissement d’idées neuves.
Ce livre s’adresse aux étudiants de seconde année de licence d’informatique [1] et leur propose, selon les styles alternés de la programmation impérative ou fonctionnelle, un itinéraire classique : récurrence et itération, structures de données, exceptions et reprise du calcul après rupture, types et modules, structures de graphes, pour finir avec les classes d’objets et leurs instances.
Le langage choisi par l’auteur pour illustrer son propos est OCaml (naguère Objective Caml), avec lequel je ne suis pas particulièrement familier, mais l’usage qui en est fait est limpide, au fur et à mesure que tel ou tel trait du langage est mis à contribution, il fait l’objet d’un petit exposé introductif, et le lecteur trouvera à la fin du volume un bref aide-mémoire récapitulatif du langage.
Longtemps Ocaml m’avait rebuté par sa syntaxe peu élégante que ne justifiait même pas la conformité aux usages les plus répandus ; je lui reprochais en outre une logique peu accessible aux étudiants issus de formations pauvres en mathématiques, tels les biologistes qui constituent mon public. Il y a une dizaine d’années une conférence à Montréal m’avait donné l’occasion de dîner avec Manuel Serrano et Xavier Leroy, un des concepteurs du langage, et je dois dire que ses explications passionnantes du portage du compilateur Ocaml sur processeur Itanium avait fait remonter mon estime pour ce langage. Le livre de Manoury exhibe des exemples d’emploi élégant d’Ocaml, on peut lui en savoir gré, comme à Andrew Tanenbaum d’avoir ajouté 200 pages de C élégant à son livre de système, et à Achille Braquelaire d’avoir écrit son manuel de C, pour la même raison.
Cette élégante simplicité se donne par exemple à voir dans le passage relatif aux arbres binaires étiquetés (pp. 69-72), qui donne à l’étudiant une première approche du sujet en moins de trois pages : cette concision est essentielle, elle permet au grimpeur d’assurer ses prises et d’atteindre rapidement la plate-forme d’où il pourra envisager de poursuivre son apprentissage. Le lecteur qui se sera donné la peine d’étudier ce passage en essayant les programmes donnés par l’auteur sur son ordinateur aura, en peu de temps, abordé la notion de type récursif, envisagé son application au cas des arbres binaires étiquetés, construit un tel arbre, écrit un programme de parcours d’arbre selon trois algorithmes différents, et enfin écrit un programme de recherche dans un arbre. Cette rapidité de l’exposé, quiconque a enseigné la programmation le sait, est une grande qualité, parce que plus la leçon est longue, plus il est difficile de retenir jusqu’au bout l’attention de l’auditoire.
Le chapitre 7 (pp. 87-98), sur les graphes, prolonge agréablement le propos des arbres, avec la même densité. Les graphes donnent l’occasion d’approfondir la notion de type abstrait de données, puis la façon d’en rédiger la signature et la spécification en Ocaml. De là le lecteur apprendra à résoudre le problème de la recherche d’un chemin entre deux sommets d’un graphe, d’abord dans le cas facile du graphe sans cycle, puis dans le cas du graphe avec cycles. On passera ensuite seulement aux trois façons retenues par l’auteur pour implémenter une structure de graphe : en extension, par liste d’adjacence, par matrice d’adjacence, avec, à l’occasion de la première méthode, l’introduction des tables associatives (hash tables), cette merveille informatique. Quelle que soit la représentation choisie, le lecteur saura comment ajouter à son graphe un sommet ou un arc et comment énumérer les voisins d’un sommet. Que de science en si peu de pages, et surtout en si peu de temps ! Quiconque enseigne la programmation devrait se jeter sur le livre de Pascal Manoury pour lui emprunter ses méthodes d’exposition, qui doivent sans grande peine pouvoir être transposées à d’autres langages de programmation : ainsi on aura une approche de la ligne de plus grande pente pour descendre, du sommet aride de l’ignorance, dans la vallée fertile du savoir en programmation.