Site WWW de Laurent Bloch
Slogan du site

ISSN 2271-3905
Cliquez ici si vous voulez visiter mon autre site, orienté vers des sujets moins techniques.

Pour recevoir (au plus une fois par semaine) les nouveautés de ce site, indiquez ici votre adresse électronique :

Le style des programmes ISN, encore
(avec une autocritique)
Article mis en ligne le 31 décembre 2014

par Laurent Bloch
logo imprimer
Licence : CC by-nd

Ainsi qu’exposé dans un article précédent, je me suis lancé dans la traduction en Scheme des programmes d’un manuel destiné aux élèves de terminale S engagés dans la spécialité ISN (informatique et sciences du numérique). Pour être fidèle au texte du manuel j’ai cru judicieux d’effectuer une traduction juxtalinéaire des programmes déjà publiés dans d’autres langages, la plupart du temps OCaml, parfois Python ou Java. Je dois avouer avoir fait cela assez rapidement, en me contentant de vérifier que mon texte ressemblait à l’original et que le comportement du programme était le même.

Ce qu’il y a de bien quand on publie des programmes, c’est que l’on bénéficie des critiques de ses lecteurs. Elles n’ont pas manqué. J’ai relu mes textes, et j’ai été étonné moi-même des horreurs que j’avais commises. Le simple fait de suivre un chemin déjà tracé par les programmes proposés avait atténué mon sens critique. Plus profondément, cette expérience m’a rappelé ce que j’étais censé savoir : le style particulier d’un langage de programmation correspond à une façon de penser, et on ne passe pas d’un langage à un autre sans changer de démarche. C’est ce que j’avais négligé : les programmes OCaml que j’avais copiés étaient peut-être très bien pour ce langage, mais pas dans le style convenable pour Scheme, bien qu’il s’agisse dans les deux cas de langages de la même famille, fonctionnels en l’occurrence.

Il résulte de ceci qu’un enseignement de la programmation ne peut pas être complètement indépendant du langage utilisé. Le manuel dont je me suis inspiré a été conçu initialement pour Java, un langage qui justifie sans doute que la création de sous-programme ne soit abordée qu’au chapitre 4, mais avec Scheme cette position n’est guère tenable. Scheme est un dialecte de Lisp, langage dont la principale construction est la définition de fonction (de procédure), qu’il convient d’introduire au plus tôt. C’est d’ailleurs d’autant plus facile que la syntaxe de Scheme est plus simple que celle de Java, ce qui permet d’y consacrer moins de temps pour commencer. Et de même pour la définition de fonctions récursives, qui sont au cœur du langage. De mon expérience d’enseignement, ces caractéristiques de Scheme sont des difficultés pour qui est habitué aux langages de style impératif, mais pas pour des débutants.

Outre ces considérations techniques, il y a, pour introduire tôt la création de sous-programmes, une raison de fond déjà formulée par Descartes. La philosophie de Descartes, un peu comme la linguistique de Chomsky, me semble s’appliquer mieux à la programmation des ordinateurs qu’à la compréhension des réalités humaines. Le second précepte du Discours de la Méthode m’enjoint « de diviser chacune des difficultés que j’examinerois, en autant de parcelles qu’il se pourroit, et qu’il seroit requis pour les mieux résoudre ». Et la cinquième des Règles pour la direction de l’esprit nous dit : « Toute la méthode consiste dans l’ordre et dans la disposition des objets sur lesquels l’esprit doit tourner ses efforts pour arriver à quelques vérités. Pour la suivre, il faut ramener graduellement les propositions embarrassées et obscures à de plus simples, et ensuite partir de l’intuition de ces der­nières pour arriver, par les mêmes degrés, à la connaissance des autres. C’est en ce seul point que consiste la perfection de la méthode, et cette règle doit être gardée par celui qui veut entrer dans la science, aussi fidèlement que le fil de Thésée par celui qui voudroit pénétrer dans le labyrinthe. » On ne saurait mieux dire.

Il y a un point pour lequel le style du manuel correspond bien à mes attentes, c’est l’usage des tableaux. Le type d’agrégat le plus naturel en Lisp est la liste, et la récursion sur les listes est le style de programmation le mieux adapté au langage. Mais le sport favori des biologistes auxquels j’enseigne la programmation est l’alignement de séquences, éventuellement longues, ce pour quoi les vecteurs sont mieux adaptés. Alors la récursion sur les listes cède la place à l’itération sur les vecteurs, moins chic mais plus efficace ici, et le manuel en propose des applications intéressantes.

Bref, j’ai corrigé mes programmes pour tenir compte des critiques, ils sont ici mais ils sont sûrement encore imparfaits, n’hésitez pas à me suggérer des améliorations.

Forum
Répondre à cet article


pucePlan du site puceContact puceMentions légales puceEspace rédacteurs puce

RSS

2004-2017 © Site WWW de Laurent Bloch - Tous droits réservés
Site réalisé sous SPIP
avec le squelette ESCAL-V3
Version : 3.86.35