Questions, Défis et Propositions

Jacqueline Zizi
 

   L'informatique est une science naissante passionnante parce qu'elle a beaucoup de points communs avec les mathématiques, mais, par contre, elle a une dynamique très rapide et exponentielle.

   Tout le monde est concerné. C'est donc aussi un phénomène social nouveau. La structure de cet article épouse l'historique de la situation : évolution des machines, changement d'approche logicielle induite, propositions pour son enseignement, discussions des propositions existantes. Je terminerai par quelques-unes de mes propositions.

1) Machines aujourd'hui

Aujourd'hui 26/09/2008, machines entrée de gamme pour le simple particulier

   Tableau comparatif des ordinateurs les plus modestes, premier prix, chez quelques grands constructeurs, à portée de beaucoup d'étudiants. Les éléments sont recopiés des fiches produits de ces machines trouvées sur Internet :

   Donc ces machines intègrent toutes des processeurs à deux coeurs :
(cf. http://fr.wikipedia.org/wiki/Double_coeur).
   Et déjà, beaucoup de constructeurs proposent des processeurs à 4 coeurs.

Top machine pour la France

   L'IDRIS (http://www.idris.fr/) (Institut de Recherches et Développement en Informatique Scientifique) a été dotée de la plus grosse machine française : Blue Gene/P. Elle a fait ses premiers pas, calculs s'entend, au printemps 2008. Elle est arrivée 9e au Top-500 mondial de juin. Saluons la performance! Elle est constituée de 2 machines, une (MPP, ci-dessous) qui a 40 480 processeurs, l'autre (SMP, ci-dessous) qui en a 3 584, mais présente des caractéristiques différentes et intéressantes par ailleurs.

   Cette copie d'écran invite à l'exposé de V. Alessandrini de l'IDRIS fait à la journée Blue Gene/P. C'était le 8 avril 2008 : « Le CNRS et le calcul intensif », une rencontre organisée à l'occasion de l'arrivée de Blue Gene. On trouvera le texte intégral sur le site de l'Idris.

   Pour l'état des lieux préliminaires, en 2006, on pourrra, par exemple, se rapporter à :
http://www.academie-sciences.fr/comites/pdf/groupe_ics_06_12_06.pdf.

Exercice : comparaison avec ces dernières années

   Faire un tableau synoptique des performances des pays européens (France incluse) au Top-500 ces dernières années. Puis discuter les résultats français.

2) Urgence logicielle

Avenir Hard

   « La fin de la "Loi de Moore" se traduit par une prolifération des unités de traitement de l'information ("coeurs") dans les processeurs de base (...) Vers 2012-2015 on disposera de processeurs qui intègreront 124-256 coeurs » (V. Alessandrini)

   Pour la loi de Moore on pourra lire, par exemple : http://www.sciencepresse.qc.ca/node/18636

   En 2012, même en admettant que le nombre de processeurs n'augmente pas, une machine à 45 000 processeurs pourra donc avoir plus de 11 millions de coeurs... OUPS...!

   Les calculs pour résoudre un problème pourront donc être distribués en même temps sur plus de 11 millions d'unités de calcul différentes.

   Mais une machine sans programme qui peut la nourrir et la faire travailler, c'est comme une voiture sans carburant. C'est pourquoi, le changement d'évolution matérielle induit un changement d'approche logicielle.

   « Le parallélisme massif, dans tous ses aspects (mémoire distribuée, mémoire partagée) est incontournable. » (V. Alessandrini)

Avenir Soft

   La façon de procéder avec une machine est une chose, mais distribuer et gérer des calculs sur plusieurs machines pour traiter des problèmes complexes dont la nature n'est pas que séquentielle, en est une autre.

   Ici je voudrais juste donner une image. À table avec papa-maman et 2 enfants, on peut servir de façon tout à fait séquentielle avec un ordre que l'on aura choisi, l'entrée puis le plat principal, fromage et dessert. En admettant que tout le monde soit bien poli, le repas sera agréable.

   Et on peut même penser, qu'en plus, chacun peut être muni d'une mission comme mettre son assiette, verre et couverts dans le lave-vaisselle. Maintenant si on a 11 millions d'enfants, et que, en plus, il faut avoir fini de faire manger tout le monde au plus vite, faut-il avoir une seule personne qui servira l'un puis l'autre ? Probablement pas car un certain nombre d'enfants auront terminé l'entrée et voudront le plat principal avant même que toutes les entrées n'aient été servies. On peut alors penser distribuer les enfants dans des réfectoires avec des tables bien établies puis disposer de plusieurs personnes pour servir les tables. Les chances sont plus grandes de réussite. Mais si le serveur A a les 5 premières tables, puis un serveur B les 5 suivantes, etc. on voit tout de suite naître un problème, le jour où un des serveurs M, malade, au fond du lit avec 40° de fièvre, ne viendra pas, sans avoir pu prévenir. Tout le monde voit bien, d'ailleurs, aujourd'hui les « self » se multiplier dans les établissements scolaires, pour un service plus rapide. On remarquera que ces problèmes d'organisation, n'ont pas grand chose à faire avec la façon de cuisiner ce qui est servi pour chaque personne.

   De même, le risque de panne d'une machine est faible, mais il n'est pas nul. Gérer la distribution des calculs et le retour des résultats, en tenant compte des pannes éventuelles, ne s'improvise pas. Ces problèmes nouveaux, qui conditionnent l'ensemble, n'ont pas grand chose à faire avec la façon de calculer de chaque unité de calcul. Autrement dit la recette du chef et son savoir-faire, sont inopérants pour résoudre ces problèmes. En poursuivant l'analogie, se restreindre au fonctionnement d'une unité de calcul est inopérant pour la formation de nos futurs ingénieurs et scientifiques. On peut même se poser la question de savoir si cela est utile. Dans l'enseignement, une approche différente de celle que l'on pouvait avoir jusqu'à présent, lorsqu'on travaillait avec une seule machine, s'impose donc.

   Dans « Réflexions sur l'enseignement des sciences au lycée » rédigé par le Comité sur l'Enseignement des sciences de l'Académie des sciences :
http://www.academie-sciences.fr/comites/comite_enseignement.htm on peut lire :
« Ces concepts incluent bien sûr les algorithmes, les programmes susceptibles de les implémenter, les structures et le traitement des données. Ils s'étendent à des mécanismes logiques subtils comme la transposition en langage symbolique de la pensée universelle. »

   Et un peu plus loin, toujours dans le même texte :
« Il serait absurde d'enseigner le maniement de l'outil sans compréhension des concepts »

Questions

- Quels sont les concepts de base à enseigner pour changer de cap logiciel dans l'enseignement ?

- Qui va faire les cours d'informatique en lycée si une discipline nouvelle est créée ? Sur quel critère recruter ces personnes ? Comment les former ? En effet : « La question de leur formation est donc cruciale » (même texte, toujours)

Défi

   Les machines sont là.

   Dans combien de temps, les décideurs se sentiront-ils prêts pour que TOUT :
   - matériel, et sa maintenance ;
   - logiciel et veille d'information ouverte, riche et dirigée par la demande des enseignants ;
   - moyens humains de formation.
fonctionne en harmonie, de façon efficace ?

   Une solution consisterait à faire que ces 3 pôles ne dépendent pas d'organismes différents, s'ignorant les uns les autres, voire s'opposant pour des raisons politiques. Aujourd'hui qui achète le matériel ? Dans les collèges ? Dans les lycées ? Qui achète les logiciels ? Qui nomme les enseignants ? Qui assure leur formation, iniale et continuée ? Où sont les ingénieurs système ?

   Comment et où un enseignant peut-il s'informer et surtout comparer sur le plan scientifique les solutions proposées ?

Éviter les erreurs passées

   Il n'est pas le lieu d'entrer, ici, dans les détails de l'analyse de l'échec de la réforme de l'introduction des systèmes de calcul formel dans les programmes des classes préparatoires scientifiques.

   Toutefois, on peut remarquer, avec le recul du temps, en lisant les programmes et ses recommandations d'application, que ses rédacteurs étaient des précurseurs.

   Les causes de l'échec sont multiples. Voici une proposition de liste :

  • ignorance des décideurs, en trop petit nombre, quant à une science naissance qu'ils ont confondue avec une quincaillerie à outils ;

  • présence de gourou-lobbies à des fins carriéristes ou d'avantages personnels ;

  • difficulté et la nature insidieuse de la discipline, à évolution très rapide et à expansion très importante, qui favorise l'existence de beaucoup de « mousse », de « gourous"et « d'arguments d'autorité », déclinés avec un vocabulaire non fixé, très évolutif et spécialisé ;

  • enseignants des classes prépa d'excellente qualité mais surchargés, cloisonnés dans leurs discipline, privés de lieux d'information adéquat et de formations adaptées ;

  • absence, dans un fond d'application où tout est dirigé par les concours de :

    • solution à l'épineux problème de l'organisation d'une épreuve,
    • décision sur l'importance du coefficient,
    • accord sur les sujets et les modalités de la correction (automatique ? humaine ?) où parfois, à un demi point près, la destinée d'un adolescent se joue.

3) Proposition de Thierry Viéville

Référence
http://www.epi.asso.fr/revue/articles/a0809d.htm

(i) « En classe préparatoire aux grandes écoles, le calcul formel ou symbolique est enseigné depuis plusieurs années. C'est un outil précieux en mathématiques. Il ne faut pas le confondre avec l'apprentissage de la programmation informatique. À ce jour, la mise en oeuvre de la programmation n'est pas séparée de l'utilisation du logiciel de calcul formel en tant qu'outil. » Thierry Viéville.

(ii) « Adressons nous ensuite à l'autre génération, parfois bloquée par quelques idées reçues. C'est le démontage de ces idées reçues qui permet de lever les blocages pour que l'informatique trouve sa place naturelle. »

Questions

Q1- pourquoi le calcul formel ne serait-il qu'un outil ?

Q2- pourquoi ne serait-il précieux qu'en mathématiques ? Un des points très forts de l'idée de cette réforme était justement de fournir un langage commun à des disciplines différentes.

Q3- pourquoi ne pas confondre ? Puisque pour expérimenter il faut un langage de programmation, pourquoi ne pas exprimer dans ce même langage, concepts, apprentissage de la programmation et applications ?

Q4- en classe prépas aujourd'hui, est-il vrai que « la mise en oeuvre de la programmation n'est pas séparée de l'utilisation du logiciel de calcul formel » ?

Discussion

   Il suffit d'appliquer le démontage préconisé en (ii) aux affirmations faites ou sous-jacentes à celles faites en (i) pour répondre aux questions. Par exemple, pour Q4, la réponse est NON.

   La section suivante apporte un contre-exemple.

4) Avis de terrain, Marie-Aline Pery, commentaires

Référence
http://partages.univ-rennes1.fr/files/partages/Recherche/ENSSAT/web/communication/colloques/MFI2007/CR/marie-aline.pery.pdf.

   En cherchant dans ce texte le mot programmation, on le trouve intervenir deux fois :

(iii) pour les prépas EC associé à des concepts informatiques : « instructions d'itération et de contrôle, algorithmes de tri » ;

(iv) associé aux systèmes de calcul formel : « En classe scientifique hors option informatique, un peu d'algorithmique en première année, apprentissage d'un logiciel de calcul formel (Maple ou Mathematica) et programmation avec celui-ci.
Système constamment critiqué : c'est apprendre à nager avec des chaussures de ski au pied » avait déclaré un responsable de concours, mais on n'a jamais réussi à le remplacer
. »

Discussion

   Cet avis est très intéressant. En effet :
La deuxième apparition du mot programmation en (iv), est un contre-exemple du dernier exercice posé ci-dessus (cf. avis personnel, Thierry Viéville). On remarquera en outre le « hors » qui est bien significatif d'une séparation. Et alors, justement, pourquoi en option utilise-t-on généralement un autre langage que celui du système de calcul formel choisi ?

La première apparition (iii) est associée à une évaluation précise de concepts informatiques nommés. Elle se place dans un contexte du passé, dans un cadre très restreint, celui de la programmation procédurale, sans d'ailleurs comme nous le verrons, que ces concepts soient bien dégagés sur le plan mathématique ou sur le plan conceptuel. Quel sens leur donner sans une machine ? Ils sont d'ailleurs liés à un cadre très restreint :
a) langage imposé (Pascal) ;
b) approche de la machine réduite à une unité de calcul.

L'image citée est très pertinente et dénonce de façon imagée :
a) la difficulté éprouvée par les enseignants de la base pour dégager des concepts, alourdis qu'ils sont par une formation ou auto-formation préalable, pas adaptée du tout à la situation ;
b) la difficulté d'une notation de l'aptitude des élèves à appréhender des concepts. Et pourtant... « Il serait absurde d'enseigner le maniement de l'outil sans compréhension des concepts ».

Défis et Question

  • Comment dégager des concepts dans un monde entièrement numérique ? Comment y abstraire sans langage littéral ? En effet, même les symbolisations-abstractions rencontrées au cours de tout l'enseignement des mathématiques en lycée ne sont pas exprimées avec des nombres. Par exemple l'égalité (représentée par = et pas un nombre), l'inégalité (≤), les opérations (+, - ), les rationnels, les pourcentages, les fonction, les sommes, les intégrales, les symboles logiques (∧, ∨, ¬), les symboles de la théorie des ensembles (∈, ⊂, ∪ et ∩, ∃, ∀, ∅), etc.

  • Par analogie, comment faire des mathématiques de l'ingénieur ou du chercheur scientifique en utilisant exclusivement les moyens numériques développés dans l'enseignement des mathématiques avant l'introduction du calcul littéral ? C'est-à-dire avec les seules connaissances et pratiques possibles à un élève de 6e ?

  • Comment évaluer chez un candidat son aptitude à comprendre des concepts ?

5) Conseil de Jean-Pierre Demailly, une question d'existence...

Référence
http://www.epi.asso.fr/revue/articles/a0504b.htm.

« je pense que l'éducation nationale aurait tout à gagner à préférer systématiquement les logiciels libres. D'une part, leur développement a atteint aujourd'hui un niveau tel qu'ils peuvent s'imposer comme une alternative crédible dans la plupart des domaines | souvent même comme une alternative techniquement supérieure aux offres commerciales. 
...
On risque sinon de continuer comme aujourd'hui à vivre dans un monde d'illusion et de tromperie éducative. »

Coût du libre
http://candidats.april.org/documents/Logiciel_Libre_Les_Enjeux.pdf.

« En 2007, le marché français du Logiciel Libre a atteint un chiffre d'affaires de 730 millions d'euros. »
« Les entreprises du secteur se rémunèrent sur le support, la formation, l'intégration, le conseil et la spécialisation de briques génériques. »

Discussion

   La réforme des prépas a principalement échoué à cause de l'installation d'un monopole commercial.

   Un choix exclusif entre deux systèmes au lieu d'une ouverture au libre choix de la concurrence, a été une des facilités déterminantes offertes à ce lobby.

   On ne peut donc que souscrire à l'idéal de J.-P. Demailly de faire de la partie logicielle de l'informatique une sorte de mathématique ou tout serait gratuit. Et qui de plus est alléchante car elle se décline en « Open source », préludant l'ouverture.

   Mais hélas, cette proposition est elle-même basée sur un manque d'ouverture et prépare donc l'installation d'un autre monopole :

  • Pourquoi faudrait-il exclusivement choisir entre les logiciels libres et les produits commerciaux ?

  • Pourquoi éliminer un logiciel de qualité utilisé ailleurs dans le monde, par des millions de scientifiques, au vu de sa seule étiquette « commercial » ?

  • Sur quelle étude économique est basée l'illusion qu'un logiciel puisse être gratuit ?

  • Et par-dessus tout, hélas, cette proposition pose une question fondamentale, celle de l'existence.

Question d'existence, défi

   Donner le nom d'au moins un logiciel libre qui soit : « une alternative supérieure aux offres commerciales » ou même plus modestement « crédible » et qui remplisse donc, au minimum, toutes les conditions suivantes :

  1. travaille correctement avec les grands entiers ;
  2. voit et traite en cas de besoin, des nombres de nature différente, comme différents ;
  3. plus généralement ne tombe pas, sans prévenir, dans les défauts de l'érosion numérique signalée de façon très pertinente par exemple ici : http://www.lactamme.polytechnique.fr/Mosaic/descripteurs/FloatingPointNumbers.01.Ang.html
  4. respecte la liberté de chacun, de travailler sur la machine qu'il a choisie. Autrement dit un système multi-plateforme et qui, en particulier, pour les utilisateurs de Macs, possède une interface graphique digne de ce nom : menus, boutons, etc. où l'utilisateur est libre de choisir sa route sans être forcé d'aller écrire, de façon séquentielle dans le terminal des lignes de shell sous l'Unix intégré dans MacOSX. Le choix de mac n'est pas anodin, car qui pourrait nier son rôle précurseur et sa richesse d'innovation ?
  5. ne soit pas de toute évidence, un clône-conditionnant vers un monopole convoité par un produit commercial ;
  6. soit un traitement de textes facile de prise en main, de qualité, et qui intègre sans perte de temps due aux transferts, toutes les autres conditions de (1) à (14) ;
  7. soit un langage-creuset interdisciplinaire avec une documentation intégrée et des milliers d'exemples en « open source », toutes disciplines confondues ;
  8. soit un système de calcul symbolique permettant l'abstraction et de trouver tout seul que x + x = 2 x, sans avoir à faire, au préalable, des « déclarations » ;
  9. soit un système de calcul symbolique permettant de trouver des solutions exactes mais aussi de voir logiquement la structure des solutions, à un niveau que l'on veut ;
  10. permette une pratique des divers paradigmes de programmation (fonctionnel, par règles avec pattern matching, par objets, par liens, procédural, parallèle) ;
  11. s'interface facilement à l'existant (Java, Flash, génération de pdf, code TEX, HTML, XML, etc.)
  12. permette d'initier par l'exemple, les expériences, l'animation et la manipulation, à des concepts de domaines divers : composée de fonctions (mathématiques) , interprète et compilateur (informatique), paradigmes de programmation (informatique), images en machine (biologie), simulations (physique), etc.
  13. soit compatible ascendant, c'est-à-dire que le travail fait il y a 5 ans ou 10 ans soit réutilisable sans problème aujourd'hui et demain ;
  14. propose un cours d'initiation gratuit de formation à destination des professeurs des classes préparatoires aux grandes écoles, qu'ils pourraient s'approprier et dont au moins un professeur de prépa dirait : « c'est exactement ce dont j'ai besoin ».

Une preuve d'existence dans un autre monde

   En gras ci-dessous, on trouvera les questions et en dessous, en graisse normale, les réponses obtenues avec Mathematica : http://www.wolfram.com/.

   Ce qui prouve que dans le monde commercial, il existe au moins un système satisfaisant les 14 conditions précédentes.

   On trouvera ci-dessous en centré-gras les demandes faites à Mathematica et ses réponses, en dessous, en centré-normal. Justifiés à gauche, en petit ce sont des commentaires ou des explications.

Exemple de (1), 3 petites questions :

102 345 678 903 568 054 205 685 899 999 562 431 879 235 413 295 468 297 213 500 687 + 2
102 345 678 903 568 054 205 685 899 999 562 431 879 235 413 295 468 297 213 500 689

1078 + 1
1 000 000 000 000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000 000 000 001

1078 + 1 == 1078
False

Exemple de (2), ces deux nombres sont - ils égaux ?


False

Comment - sont - ils vus en précision machine ?


True

Et en précision arbitraire ?


False

Exemple de (3), somme de 1 de 1 à N, pour N grand


167 772 200 000 001

Exemple de (3), suite récurrente

B au départ, vaut 1 ; A vaut B + 1. Si x vaut 1, après 10 itérations de x → A x - B, que se passe-t-il ? Mathématiquement la suite des itérés est stationnaire. Tous ses termes valent 1.

a) Cas où B est entier :

B = 4095
4095

A = B + 1
4096

(A# - B) & [1]
1

NestList [(A# - B) & , 1, 10]
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}

Ceci est la liste des résultats des itérés de cette fonction. Résultat normal.

En mathématiques la fonction x → Ax - B peut aussi s'écrire # → A# - B. En Mathematica, le & indique une fonction, dont l'expression en un point # est ce qui précède le &. Donc (A # - B) & représente la fonction # → A# - B. NestList compose ici 10 fois la fonction précédente, avec pour élément initial le nombre entier 1.

Clear [A, B, x]

b) Cas où B est rationnel :

(A# - B) & [1]
1

NestList [(A# - B) & , 1, 10]
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}

Clear [A, B, x]

c) Cas où B est une valeur approchée, signalée par un point :

B = 4095.1
4095.1

A = B + 1
4096.1

(A# - B) & [1]
1

NestList [(A# - B) & , 1, 10]
{1, 1., 1., 1.00001, 1.03126, 129.041, 524 468.,
2.14827x109, 8.79953x1012, 3.60438x1016, 1.47639x1020}

Pas de miracle, on travaille en numérique, en précision machine. Le résultat, faux, incontournable, correspond à l'érosion numérique signalée dans le site : http://www.lactamme.polytechnique.fr/Mosaic/descripteurs/FloatingPointNumbers.01.Ang.html.

Clear [A, B, x]

d) Une façon de faire pour obtenir un résultat numérique correct ?

Calculer en exact puis passer au numérique, comme répètent tous les enseignants de physique tout au long de l'année.

(A# - B) & [1]
1

Calculs effectués avec 50 décimales :

N[NestList [(A# - B) & , 1, 10], 50]
{1.0000000000000000000000000000000000000000000000000, 1.0000000000000000000000000000000000000000000000000, 1.0000000000000000000000000000000000000000000000000, 1.0000000000000000000000000000000000000000000000000, 1.0000000000000000000000000000000000000000000000000, 1.0000000000000000000000000000000000000000000000000, 1.0000000000000000000000000000000000000000000000000, 1.0000000000000000000000000000000000000000000000000, 1.0000000000000000000000000000000000000000000000000, 1.0000000000000000000000000000000000000000000000000, 1.0000000000000000000000000000000000000000000000000}

Clear [A, B, x]

Calculs effectués en précision machine :


N[NestList [(A# - B) & , 1, 10], 50]

{1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.}

Clear [A, B, x]

Une autre façon de faire, plus périlleuse, augmenter la précision des données :

B est calculé avec 50 décimales avant tout :

 

 

A s'adapte

A = B + 1
4096.1000000000000000000000000000000000000000000000

 

Après 10 itérations, tout va bien

NestList [(A# - B) & , 1, 10]
{1, 1.0000000000000000000000000000000000000000000000, 1.000000000000000000000000000000000000000000, 1.00000000000000000000000000000000000000, 1.00000000000000000000000000000000000, 1.0000000000000000000000000000000, 1.0000000000000000000000000000, 1.000000000000000000000000, 1.00000000000000000000, 1.00000000000000000, 1.0000000000000}

Clear [A, B, x]

Mais rien ne va plus pour 30 itérations, et même bien avant

NestList [(A# - B) & , 1, 30]
{1, 1.0000000000000000000000000000000000000000000000, 1.000000000000000000000000000000000000000000, 1.00000000000000000000000000000000000000, 1.00000000000000000000000000000000000, 1.0000000000000000000000000000000, 1.0000000000000000000000000000, 1.000000000000000000000000, 1.00000000000000000000, 1.00000000000000000, 1.0000000000000, 1.000000000, 1.000000, 1.00, 0., 0.x104, 0.x108, 0.x1011, 0.x1015, 0.x1018, 0.x1022, 0.x1026, 0.x1029, 0.x1033, 0.x1036, 0.x1040, 0.x1044, 0.x1047, 0.x1051, 0.x1055, 0.x1058}

Clear [A, B, x]

Exemple de (5)

http://www.eprep.org/colloques/colloque08/communications08/Dieumegard_dia_1.pdf

Exemple de (6)

   Cet article.

Exemple de (7)

   Plus de 3 000 exemples de manipulations jouables avec MathPlayer, téléchargement gratuit, code aussi. C'est de l'Open Source avec pour langage de base Mathematica.
http://demonstrations.wolfram.com/

Exemple de (8)

x + x
2 x

Dis bonjour à la dame :

bonjour
bonjour

 

Exemple de (9)

Reduce [a x2 + b x + c == m, {x}]

que l'on peut rendre plus habituelle avec un raccourci clavier par exemple :

TreeForm [%, 2]

De façon générale, pour un graphe, pas besoin de chercher une loupe, déplacez la souris au-dessus de ce que vous voulez lire et une petit boîte s'ouvrira avec un agrandissement de l'étiquette du noeud. Oui, en Mathematica les tooltips sont intégrés en standard.

Pas d'erreur, le radical est bien interprêté, par exemple :

Solve [ x2 + x + 12 == 0, {x}]

Autre exemple où seuls les deux premiers niveaux de la structure sont mis en évidence :

Exemple de (10)

   Voici deux exemples, qui montrent ce que l'on pouvait faire, déjà, il y a plus de 5 ans :
en biologie : http://homepage.mac.com/jacquelinezizi/OldSite/BE1/Anims/zoom1.gif ;
en physique : http://homepage.mac.com/jacquelinezizi/OldSite/Coalesce/garzi.html.

   Dans ces exemples, et en particulier le second, très simple, tous les paradigmes cités, sauf procédural, sont représentés :
- fonctionnel pour l'évolution de l'ensemble ;
- par règles pour toutes les définitions de fonctions et toutes les options ;
- par objets pour structurer l'ensemble et gérer les nouveaux objets créés en cours de déroulement du programme ;
- par objets pour avoir une information à chaque instant sur toute particule, qu'elle soit initiale ou née en cours de route ;
- par liens, pour que les boutons des palettes fonctionnent.

   L'exécution dépend des choix de l'utilisateur qu'il exprime en cliquant sur les boutons des palettes, exactement comme on le fait avec un Mac ou un PC aujourd'hui.

   Aujourd'hui, 5 ans après, ces exemples sont améliorables car il existe maintenant des possibilités offertes en standard pour représenter les sphères en 3D et faire du parallélisme.

Exemple de (11)

   Le code HTML, XML, etc. lisible par les browsers du web, sont générés automatiquement par Mathematica par la demande Save As et le choix du format. Les références des paragraphes précédents en sont des exemples. Il en va de même pour TEX.

Exemple de (12)

   Outre (7), et (10) ci-dessus, il suffit de lire la suite de cet article (section 7, 8, 9 et 10) pour en trouver des exemples.

Exemple de (14)

   L'idée d'un cours dédié aux enseignants de prépa a fait son chemin et a laissé dans les divers colloques ePrep les traces de son évolution : http://www.eprep.org/

   C'est une idée personnelle. Mon exposé au dernier colloque ePrep :
http://www.eprep.org/colloques/colloque08/communications08/Zizi_dia_1.pdf
aurait du être dédié à cela, ainsi qu'on peut le voir ici :
http://www.eprep.org/colloques/colloque08/communications08/Zizi_des_1.pdf
mais, nécessité de l'ordre alphabétique ou autre, je me suis retrouvée la dernière à parler dans la session 1 du dernier colloque ePrep. Il m'a semblé plus utile de répondre, au pied levé, à des questions posées lors du débat et aussi d'apporter des contre-exemples à certaines affirmations fausses très négatives et martelées avec beaucoup d'assurance, comme par exemple celle-ci : « Avec un calculateur symbolique, on ne peut pas faire une modélisation objet. » (Thierry Viéville).

   En collaboration avec Wolfram Research, qui a assuré toute la logistique en particulier en faisant reproduire les fascicules d'accompagnement, la première séance gratuite de formation a eu lieu au lycée Fénelon à Paris et je suis heureuse d'annoncer que (14) est vraie. Toutefois il me semble fondamental de prendre le temps de faire bien. Mieux encore. Le premier niveau consacré à la manipulation directe est donc à ce jour, en réfection et en relecture, une fois encore, pour quelques jours. Les deux autres niveaux sont consacrés respectivement aux différents paradigmes de programmation et à la modélisation et direction de projets.

6) Associations EPI et ASTI, proposition de Gilles Dowek

Référence

   Un seul document soutenu par ces deux associations, c'est la proposition de Gilles Dowek

   Ce document peut se trouver à une des adresses suivantes :
http://www.eprep.org/colloques/colloque08/communications08/Dowek_Programme_1.pdf ;
http://asti.ibisc.univ-evry.fr/groupe-itic/Programme-04-03-2008.pdf ;
http://www.lix.polytechnique.fr/~dowek/enseignement.html.

Point de vue pratique au niveau des classes de lycée

   Page 6 de ce document, on lit :

« 1. Programmation

- En seconde et première.
Notions de variable, de déclaration et d'affectation. Notion de type scalaire et de type tableau. Notion de séquence. Notion de test. Notion de boucle. Primitives graphiques.

- En première et terminale.
Notion de fonction. Notion de passage d'arguments. Notion de récursivité. Notion d'objet. Notion de cycle de vie d'un logiciel. Notion d'interface homme-machine. »

« 2. Algorithmique

L'apprentissage des algorithmes de base doit être illustré par des exemples qui constituent autant de programmes que les élèves doivent apprendre à écrire (dans un langage largement diffusé, tels Pascal, Php, Ruby, C, Java). Les exemples de programmes illustrant ces algorithmes doivent être le plus attrayant possible. Ils peuvent être issus de problèmes venant d'autres disciplines. Ils peuvent aussi avoir une dimension ludique ou graphique. Voir en annexe une liste d'algorithmes proposés en classes de seconde, première, terminale. »

Réinventer la roue ?

   Le préambule indique une volonté : « développera l'esprit d'initiative, de création. »

   Seulement les notions déclinées sont des grands classiques de l'enseignement de l'informatique en IUT, écoles d'ingénieurs, et Université. Et...
« En fait, quand un projet est meilleur, les programmeurs préfèrent le rejoindre, et y ajouter leurs propres idées, plutôt que de travailler dans leur coin et d'écrire de nouveau des choses qui existent déjà. » Bob Young patron de Red Hat (Linux).

Cependant on nous y invite, alors, pourquoi pas ?

   Ce document a le gros avantage d'exister et donc de servir de support à une discussion de fond. Je ne ferai ici que quelques remarques en m'appuyant sur 4 exemples de « notion » dont il est question : l'algorithme d'Euclide, la notion de boucle, les langages préconisés et les primitives graphiques. Chacun de ces exemples sera développé dans une des sections suivantes.

7) Algorithme d'Euclide

Choix

   L'algorithme d'Euclide qui fournit le PGCD de 2 nombres, vient des mathématiques. Il est très ancien, donc a priori, robuste au changement de modes.

Que va faire un élève ?

   Google → http://fr.wikipedia.org/wiki/PGCD → http://site2wouf.fr/calculator.php où on trouve en bas de page :
« PGCD de deux entiers par la méthode d'Euclide (calculs détaillés) »

   Le compteur du nombre de visiteurs à ce jour est de 581294. (regardez à 2 jours d'écart, c'est impressionnant!) Donc, plus d'un élève va se dire :
« Bon ça c'est ce qu'il me faut et avec le nombre de visiteurs, je suis tranquille ! »

   En faisant un pas de plus, on trouve d'ailleurs le source :
http://forum.site2wouf.fr/viewtopic.php?t=273
« Chic, il est en php un des langages indiqués. On teste ? Ouah, ça marche! On pousse un peu, on tape n'importe quoi, 903115 et 8762454586365832 pour voir ? Super, il donne le résultat, c'est marqué en bas! »

   Tout le devoir à faire par l'élève est donc là.

   Pas bien difficile de le copier et de l'arranger un peu en changeant les noms de variable. Le devoir est bouclé. Au professeur de le corriger.

Que peut faire le professeur ?

   S'il est consciencieux, il vérifiera, au moins déjà le résultat des tests, et il verra bien (s'il a un minimum de temps ou d'équipement) que le résultat de droite est faux.

« C'est pas grave », puisque le logiciel est écrit en php et qu'il est « libre » = « Open Source » :
« Étant ouverts, ils sont aussi beaucoup plus appropriés pour l'étude, puisque rien ne s'oppose à ce qu'on puisse les décortiquer et en comprendre tous les rouages. » (Jean-Pierre Demailly).

Défis

1) En appliquant ce qui précède, trouver l'erreur dans le source et si on y arrive, compter le temps mis pour.

2) Multiplier le temps mis par le nombre d'élèves de la classe. Tenir compte du fait que d'autres peut-être auront choisi comme langage, Pascal ou un autre de ceux indiqués.

Peut-il gagner du temps ?

   Si l'enseignant dispose d'un langage satisfaisant la condition (1), par exemple de Mathematica, il vérifiera facilement que :

GCD [903 115, 87 624 545 862 548 796 532]
180 623

et pourra vérifier un certain nombre de choses, comme :

FactorInteger [87 624 545 862 548 796 532]
{{2, 2}, {37 357, 1}, {180 623, 1}, {3 246 539 903, 1}}

   Sinon que lui conseiller ? Faire les calculs à la main, semble la seule possibilité, mais pour le chronomètre...

Un point de vue plus global, pour y voir plus clair

   Si l'enseignant a participé à une formation où son attention a été attirée sur la condition (1) du défi de la section 5, il regardera plus attentivement l'exemple. Il verra ainsi par exemple que dans le test de droite, bien que le nombre donné soit bien mémorisé, puisque affiché en bas de la page, il a été tronqué dès le début de l'application de l'algorithme.

Pour des applications pédagogiques intéressantes

   Alors, le professeur pourra même donner des challenges aux élèves pour trouver des contre-exemples.

   Ce sera un terrain d'aventure indispensable pour la motivation. C'est un des moments privilégiés où on peut leur montrer l'importance de savoir/pouvoir travailler avec des grands entiers et ce que peuvent donner les égarements de leur remplacement par des « flottants ». C'est dans ces moments là qu'ils travailleront les concepts de PGCD, et peut- être de décomposition en nombres premiers. Et en démontant le code php que vont-ils apprendre ?

   Qu'est-ce qui va les motiver ?

Vers d'autres sources de motivation et d'apprentissage

   Il faut réfléchir pour savoir si oui ou non étudier l'algorithme d'Euclide est utile. Supposons que oui. On vient de voir qu'on peut l'exploiter d'une nouvelle façon. Mais à condition d'avoir des moyens d'investigation fiables.

   Et pourquoi cacher aux élèves que c'est un grand classique et que dans ce domaine, les systèmes de calcul formel donnent directement la solution et des moyens de vérification ? N'est-il pas le moment de laisser libre cours à l'imagination des élèves pour aller plus loin ? Pour leur montrer que oui on peut faire avec des boucles, des tests, des affectations, « que les élèves doivent apprendre à écrire » et le touti. Mais non, on n'y est pas obligé du tout !

Voici une façon de faire :

     euclide [a_, 0] := "PGCD = " <> ToString [a]
     euclide [a_, b_] / ; Quotient [a, b] = 0 := euclide [b, a]
     euclide [a_, b_] := euclide [b, a - b Quotient [a, b]]

Et en voici une deuxième :

     pgcdR [a_, b_] := If [b == 0, a, pgcdR [b, Mod [a, b]]]

Et une troisième :

     euclid[a_, b_] :=
       FixedPointList[{#2, If[{#2 == 0, 0, # - Quotient[##] #2]} & @@ # &, {a, b}]

Et une quatrième :

     Remainder[a_, b_] := Mod[a, b] ;
     Remainder[a_, 0] := 0 ;
     EuclideanAlgorithmGCD[a_, b_] :=
       FixedPointList[{Last[#], Remainder @@ #} &, {a, b}][[-3, 1]]

Et une cinquième :

     

   Onze lignes pour 5 solutions différentes et qui à elles toutes, ensemble, ont une écriture plus courte que le code source en php du programme fatidique. Cependant elles, elles donnent toutes un résultat correct sur le test :

euclide[903 115, 87 624 545 862 548 796 532]
PGCD = 180 623

pgcdR [903 115, 87 624 545 862 548 796 532]
180 623

euclid[903 115, 87 624 545 862 548 796 532]
{{903 115, 87 624 545 862 548 796 532}, {87 624 545 862 548 796 532, 903 115},
{903 115, 722 492}, {722 492, 180 623}, {180 623, 0}, {0, 0}, {0, 0}}

EuclideanAlgorithmGCD [903 115, 87 624 545 862 548 796 532]
180 623

{903 115, 87 624 545 862 548 796 532} //. {R1, R2, R3}
PGCD = 180 623

   En plus, elles font intervenir des concepts différents, polymorphisme, fonction récursive, fonctionnelle, fonction pure ou lambda fonction, règles de réécriture. La programmation par objets, m'est très familière (voir par exemple sur le site de EPI l'article Langages Orientés Objet que j'ai écrit, il y a 14 ans) mais elle ne me semble pas indiquée pour ce genre de problème (même si je vois bien dans le code php qu'elle y est présente, un marteau pilon pour écraser une mouche ?). Mais pourquoi pas, qui veut s'y essayer ?

   Toutes ces façons de faire, sans instruction, sans affectation, sans boucle, donnent un résultat correct sur l'exemple fatidique. Ce qui ne veut pas dire qu'elles sont toutes sans erreur ou optimisées. Ce qui pose beaucoup de questions : de la meilleure façon de faire, de la plus efficace, de la vérification et des tests qu'il vaudrait mieux faire, de la possibilité de créer encore, même en travaillant sur des grands classiques, etc.

8) Langages préconisés. Pascal, « largement diffusé » ?

Pascal

   Les objectifs de la section II Programmation et Algorithmique, p. 5 du document EPI-ASTI, Gilles Dowek sont clairement exprimés :
« acquérir les savoir faire relatifs à l'écriture et à l'exécution d'un programme simple. »

   Programme simple n'étant pas défini dans la proposition discutée, et pas découragée par là où m'avait emmenée Google :
http://fr.wikipedia.org/wiki/Pascal_(langage).

« Même si le Pascal a eu son heure de gloire avec Turbo Pascal et les premiers Delphi, ce langage est actuellement en perte de vitesse. Les nouveaux programmeurs n'utilisent pas ce langage et les amateurs de Pascal actuels sont surtout des fans de la première heure. »

   J'ai pris le premier programme donné dans cette fiche Wikipedia :

   J'ai écrit des centaines de lignes en Turbo-Pascal, donc pas très difficile de comprendre là où ils veulent en venir.

   Dans la foulée, j'ai alors écrit une petite phrase de Mathematica, la suivante :

With [{a = Input["veuillez saisir votre nom"]},
  Print ["Salut", a, " du monde de la programmation"]]

que j'ai évaluée dans ce document, sans avoir à chercher un compilo et un éditeur, en appuyant sur la touche de mon mac. Alors une fenêtre s'est ouverte où j'ai écrit mon nom :

   J'ai cliqué sur OK et voilà :

Salut Jacqueline Zizi du monde de la programmation

c'est le résultat d'une demande d'une ligne, que je ne qualifierai pas de « programme », dans un monde : celui de Mathematica. Et c'est le premier exemple de « programme » donné dans un autre : celui de Pascal. La question se pose donc bien de savoir ce qu'est un programme simple.

Autre observation : Ruby, langage largement diffusé ?

   Qui, honnêtement, parmi les enseignants de prépa, par exemple, avant la lecture des propositions EPI-ASTI, Dowek, en a entendu parler ?

Et pourquoi pas OCAML ?

   On trouve aussi l'algorithme d'Euclide, et traité de diverses façons en CAML :
http://www.enseignement.polytechnique.fr/profs/informatique/David.Monniaux/m1_caml_2008_septembre/td1/sol0.html.

   Ne serait-ce pas à cause de la phrase de conclusion concernant la solution procédurale de l'algorithme d'Euclide :
« C'est moche, pour le meilleur comme pour le pire, Caml n'est pas fait pour écrire des boucles. Qu'on se le dise ! »

9) Boucle et ordre

Et si on voulait définir ce qu'est une boucle ?

   Qui dit boucle dit ordre. Pour s'en convaincre on peut suivre le chemin :

   Définition d'une boucle : http://fr.wikipedia.org renvoie à structure de contrôle qui renvoie à instruction. Et pour instruction on trouve ici :
http://www.linternaute.com/science/technologie/dossiers/06/0604-voyage-ordinateur/3.shtml
une explication, où clairemet l'ordre d'exécution sur une unité de calcul, est détaillée :
« À chaque top d'horloge (pour les instructions simples) le processeur lit l'instruction à exécuter, effectue l'instruction et passe à l'instruction suivante. »

Promenade libre

   Ce matin, j'ai navigué un peu sur Internet et j'ai noté les endroits par où j'étais passée et certaines directions qui s'offraient à moi. Voici le graphe support de ma promenade :

   Peut-on ordonner cet ensemble ? Et pourtant, ce graphe renseigne bien sur ce que j'ai rencontré dans la promenade. De toute évidence je suis allée sur deux sites et je n'ai pas rencontré de lien de l'un vers l'autre. Il renseigne également bien sur la richesse et la structure des 2 sites sans que je n'ai eu à écrire une seule boucle. En quoi une boucle (ou même toute une famille de boucles) peut-elle m'aider ? Par exemple pour aller d'un point à un autre ?

   D'ailleurs, tout le monde sait comment trouver le code source d'un site à partir du menu de son browser Internet. Très bien. Décortiquons. Trouve-t-on dans le code source, par exemple dans le site EPI, celui du haut, une seule boucle ? Alors, sans instruction, sans boucle ni structure de contrôle ni déclaration, comment peut-on faire un tel dessin ?

10) Primitives graphiques

Promenade sans ordre se programme tout simplement sans boucle

   Par un choix de structure des données. Par exemple, pour le site de l'IDRIS, sous forme de liste :

data = {{"IDRIS", { "Nouvelle Plateforme", "9e au classement Top500 de juin 2008", "IBM Power6", "Arrêt définitif de Zahir", "Formation :Utilisation de Babel", "L'IDRIS recrute", "DEISA", "HPC-EUROPA", "Résultats scientifiques", "Parc informatique", "Support technique", "Cours de l'IDRIS", "Accès aux ressources", "Espace utilisateurs", "English version", "Rechercher"}},
{"DEISA", {"Communiqués de presse", "Site officiel", "Utilisateurs standards", "Utilisateurs de test", "Formulaires DEISA"}},
{"Cours de l'IDRIS", {"IDRIS", "Infos Pratiques", "Contact", "Accueil", "Catalogue", "Inscription", "Supports de cours", "CNRS Formations"}},
{"Supports de cours", {"Introduction", "Langage C", "Fortran", "MPI", "OpenMP", "Unix"}}} ;

   Puis, ce choix étant fait, pour plus de clarté, la définition d'une fonction :

foo [{site_, liens_}] := Rule [site, #] & /@ liens

   Et le dessin, par application d'une primitive graphique :

GraphPlot [Join[Flatten[Map [foo, data]]], VertexLabeling True]

Comment agit foo ? C'est simple, il suffit de lui demander :

? foo

Oui, mais comment agit foo ? C'est simple, il suffit de lui demander :

Map [foo, data]

   Elle transforme donc une structure en une autre structure. Et sans faire de boucle, eh oui !

Pour l'autre site, EPI

   Seules changent les données, que l'on structure de la même façon :

data = {{"EPI", {"Le bloc-notes", "L'Association EPI", "Textes et Articles", "Internet", "Logiciels", "Coéditions", "4 formules", "Editorial", "Articles", "Documents", "ITIC", "Nous avons lu", " et Lu sur le net", "Sites visités", "logiel libre", "RSS", "Actualités, annonces", "Archives", "RSS", "IInfo", "Blocnote, Elysée", "Blocnote", "Actualités, annonces", "Actualités, annonces", "sommaire revues", "écrire à EPI", "Archives Edutice", "Asti", "Chercher" }},
{"logiel libre", {"quelques textes", "quelques sites"}},
{"quelques textes", ToString /@ Range [209]},
{"quelques sites", ToString /@ Range [174]}} ;

   Et si on ne veut pas les étiquettes, on recopie ce qu'on a fait au-dessus, sans mettre l'option ; et voilà :

EPI = GraphPlot [Join[Flatten[Map [foo, data]]]]

   On peut même définir en cours de route, si on veut, une variable globale, EPI. Et obtenir ensuite, par exemple si on n'aime pas le bleu, mais sans « l'affecter », un dessin avec des couleurs à son goût :

EPI /. RGBColor[0, 0, 0.7`] Orange

et EPI n'a pas été modifié :

EPI

Questions

   Ainsi, chacun pourra faire son dessin, directement très vite, sans écrire de boucle. Alors se poseront les questions : et si on visite plusieurs sites ? Et si on va plus profondément dans le site, etc. Ouverture vers d'autres notions de représentation des données, par des listes, par des objets, etc. vers d'autres fonctions qui devront opérer sur ces ensembles nouveaux de représentation des données.

11) Constats et propositions

Approche séquentielle versus parallélisme massif incontournable

   La dernière proposition EPI, ASTI, Gilles Dowek, se place pour les « notions » de base pour la programmation dans le cadre exclusif des langages informatiques procéduraux numériques.

   Ce qui induit de façon sous-jacente que le mode de raisonnement est celui d'un homme qui se met à la place d'une unité de calcul pour raisonner, avec un début, une fin une case mémoire fixe, etc. Ce qui formate l'esprit à un mode de pensée totalement séquentiel et ne me semble pas adapté à l'évolution logicielle incontournable annoncée.

   C'est également oublier la deuxième phrase du Comité sur l'Enseignement des sciences de l'Académie des sciences, « Ces concepts incluent bien sûr les algorithmes, les programmes susceptibles de les implémenter, les structures et le traitement des données. Ils s'étendent à des mécanismes logiques subtils comme la transposition en langage symbolique de la pensée universelle. », et qui conditionne, de mon point de vue, la réussite d'un enseignement de qualité pour demain.

   Donc dans la boîte temps allouée pour ces classes et cette discipline nouvelle, le programme proposé doit être taillé, précisé, émaillé d'exemples interdisciplinaires, de façon à garder sa place dans le « bien sûr » de la première phrase et surtout être complété par des propositions pour la deuxième.

   Ce qui suit concerne la deuxième.

Symbolique

   La science informatique ne peut pas se passer du symbolique, comme les mathématiques.

   Confondre la mathématique avec les chiffres est très réducteur et n'a jamais servi de soc à l'enseignement des générations futures. Ce qui ne veut pas dire qu'on peut se passer des nombres et de leurs fascinants mystères. Au contraire. Des moyens logiciels puissants, sont à notre disposition pour mieux les comprendre. Seuls ces moyens ne peuvent rien. Mais les ignorer, c'est rester au moyen âge de l'informatique. C'est aussi se priver d'une façon actuelle disponible pour explorer certaines mathématiques et sciences qui les utilisent.

Stratification, abstraction

   L'informatique, comme les mathématiques, est stratifiée en couches : le binaire, l'hexadécimal, l'assembleur, les langages procéduraux, les langages évolués qui génèrent des boucles et tests des langages procéduraux, qui eux même génèrent un code plus près de la machine, en sont des exemples.

   De même que les mathématiques à partir d'une axiomatique de base dans une théorie déterminée ont été complétées par la construction de théorèmes, puis de théories. Mais quels sont les mathématiciens qui, dans leur démonstration aujourd'hui, remplacent systématiquement tous les résultats connus par le décorticage systématique de tous les détails de preuve pour finalement ne citer que les axiomes de base ? Est-ce que cela serait même possible ? N'existe-t-il pas de nombreux articles qui ne les mentionnent même pas ? Et dans l'enseignement, commence-t-on en 6e par cette axiomatique ?

   Alors si on peut « faire directement » des mathématiques, pourquoi ne pourrait-on pas de la même façon « faire directement » de l'informatique ? Et dans l'enseignement de l'informatique, pourquoi faudrait-il ne faire que s'occuper de ce niveau le plus près de la machine ?

Changement d'orbite

   Le moment est venu de changer d'orbite en informatique, de savoir utiliser ce qui est fait et de bâtir au-dessus sans revenir systématiquement aux couches les plus près d'une unité de calcul.

   La proposition EPI, ASTI, Gilles Dowek, s'appuie sur des exemples classiques. Nous avons vu, sur un exemple, la difficulté et les dangers lorsqu'on reste « le nez dans la couche » et tout au contraire la richesse de l'étude de ces exemples dans un cadre différent, où on peut prendre du recul par rapport à une situation, par abstraction.

Les femmes

   On trouvera de belles références aux femmes dans l'article de Thierry Viéville, et des regrets pour le constat de leur présence (p. 7 de l'article : Réflexions sur l'enseignement des sciences au lycée).

   Décortiquer un objet logiciel pour comprendre, cela peut être, compte tenu des couches logicielles accumulées, long et difficile s'il est sophistiqué. Quels sont les hommes aujourd'hui qui démontent leurs bougies ou leur carburateur avant de prendre le volant ?

   Est-ce qu'on décortique un enfant pour le comprendre et l'aider à devenir un homme ? Qu'elle est la femme qui ne s'est pas émerveillée devant son bébé, lorsqu'elle vient juste d'accoucher ? Quelle est celle qui aurait eu envie de le désosser ?

   Beaucoup de femmes sont à l'aise dans les relations complexes et étudient les objets par les interactions qu'ils ont avec d'autres. Pourquoi pas ? Et n'est-ce pas une des raisons qui font qu'on les rencontre moins que les garçons dans les métiers de l'informatique, dont le vocabulaire actuel ressemble souvent trop à celui des militaires : commande, instruction, écrasement, procédure et autres déclarations ?

   Libres dans un joli cadre avec des règles du jeu connues, pas forcément obligées de faire une chose d'abord et l'autre après, pourvu que cela soit bien propre, bien fait, qu'on ne perde pas son temps et qu'on arrive au résultat. Oui je suis sûre que cela en tenterait plus d'une.

Proposition pour la formation des professeurs de prépa

   Pourquoi commencer par elles/eux ? Parce qu'elles-ils sont au milieu du gué. Parce que c'est encore possible et à portée de main. Parce que la réforme qui a introduit le calcul formel dans leurs programmes, même si elle n'a pas été appliquée dans un esprit d'ouverture, même si elle n'a pas atteint les objectifs fixés, même si elle a été détournée, on ne peut plus « la remplacer » (cf. section 4).

   On peut par contre recibler l'application de cette réforme dans l'ouverture et lui donner les moyens de se développer. On ne peut pas revenir à l'âge de la pierre, chacun dans son coin. Comment ? Procéder par niveau et essaimage, dans le respect des choix de chacun(e) pour avoir un langage commun autour de sujets communs :
Niveau 1 : offrir en une ou deux journées des grandes lignes et des exemples d'une manipulation directe dans l'esprit de toute notre formation, c'est-à-dire à partir d'un cadre conceptuel aussi bien défini que possible ;
Niveau 2 : présenter de la même façon les différents paradigmes de programmation ;
Niveau 3 : modélisation, et direction de projets.

   C'est la proposition que j'ai faite aux colloques ePrep et qui a mûrie au cours des années. Cet article, comme mon intervention, aurait dû se focaliser sur ce dernier paragraphe. Elle n'est pas jetée sur le papier par hasard. Pour les raisons que j'ai déjà invoquées précédemment dans la section 5, il me semble plus utile d'élargir le débat. Depuis, j'ai fait une première séance de formation avec des professeurs de prépa (14) et j'ai lu d'autres articles que j'ignorais à l'époque. Il me semble donc plus important de dire ce que je n'ai pas trouvé ailleurs.

   Moyens ? Pour qu'une formation continuée ne soit pas décourageante, il est indispensable d'avoir des perches de secours, c'est-à-dire un endroit virtuel, site, forum de discussion, hot line, banque d'exemples, tenu de façon professionnelle, avec hébergement définitif et indépendant.

   Mais on a aussi besoin de lieux physiques : vitrine d'information, avec une permanence humaine fiable qui réponde aux questions posées. Et encore, et surtout, du temps. Et puis, une carotte : un merci, un bouquet de fleurs cela fait toujours plaisir et chaud au coeur.

   Pour le temps, en mathématiques, comme en sport, comme en informatique, il y a une part d'entraînement, d'acquisition d'automatisme et de bases. Personne ne peut l'acquérir à la place de l'autre. Il s'agit d'un effort personnel technique, d'acquisition des bases utiles.

   Cette partie de l'enseignement peut et devrait être automatisée, aussi bien pour l'acquisition que pour le contrôle. Elle dégagerait du temps pour les enseignants qui pourraient mieux se consacrer au reste. Des choses simples, directement accessibles, mais bien faites. Avec un contrôle impersonnel quantifié pour noter les progrès et encourager. Voici quelques exemples de sujets : résolution d'équations, de systèmes, calcul de dérivées, calcul d'intégrale, calculs de limites.

Propositions pour les élèves

   On peut déjà à partir de là avoir un moyen de notation sur ces bases, sans risque de discrimination.

   Voire un concours.

   Organiser un concours informatique de programmation, avec de jolis lots, au niveau des classes de seconde/première/terminale, pour les élèves les plus motivés, avec une ouverture totale sur les moyens de résolution, mais avec des objectifs scientifiques très ciblés et beaucoup de rigueur dans la vérification des programmes. Avec bien sûr en préliminaire, des moyens (matériel et humain) mis à disposition pour leur préparation. Déjà, on pourrait leur demander, comme pour un anniversaire, ce qu'ils aimeraient, comme lot-cadeau.

Proposition pour les enseignants-chercheurs

   Le niveau 1 de manipulation directe peut être acquise rapidement et seul par un universitaire qui a déjà l'expérience de plusieurs langages informatiques (TEX peut compter pour 1), s'il a une hot line fiable ou un environnement humain autour de lui, porteur.

   Pour les niveaux 2 et 3, par contre, un cours de formation leur ferait gagner du temps et donnerait une homogénéité et des repères sur le faisable facilement et sur ce qui risque d'être plus délicat. Donc plus d'efficacité. Cela éviterait aussi certaines dérives et pertes de temps dans une utilisation inadéquate. Réinventer la roue sans le savoir, jouer d'astuces non portables, accumuler des lignes de code en pelotes astucieusement imbriquées n'est pas la meilleure façon d'assurer un ensemble robuste, fiable et portable. La connaissance et l'utilisation d'autres voies ou d'autres moyens plus adaptés ne sont, hélas, pas forcément des préoccupations ressenties comme utiles. Et pourtant, elles favorisent le travail en commun, la formation des jeunes. Donc représentent un gain de temps important qui pourrait être occupé par ailleurs.

Jacqueline Zizi

jazi@club-internet.fr

Le présent texte s'inscrit dans le cadre de la session 1 « L'informatique, une discipline à part entière ! Culture, fondamentaux et usages » du colloque international ePrep 2008.
http://www.eprep.org/colloques/colloque08/colloque08.php.

___________________
Association EPI
Novembre 2008

Retour