Coder des algorithmes avec Snap ! - Programmation visuelle au lycée

Présentation d’une galerie d’images réalisées avec Snap !
jeudi 27 avril 2017
par  Nathalie CARRIÉ

Snap ! est un langage de programmation visuel dérivé de Scratch extrêmement complet, en évolution permanente.

Cette galerie d’images a été réalisée à l’aide de Snap ! afin de faire sentir l’impact de la programmation visuelle auprès de nos adolescents, qui sont dans l’instantanéité et réclament de plus en plus de visualiser les concepts et d’en voir des animations.
Le codage des algorithmes qui y sont exposés est censé faire apparaître la notion universelle de fonction en mathématiques soulignée dans le nouveau programme de seconde.
Je souhaite aussi, à travers ces images de code, soulever cette question : pourquoi explicitement demander de la programmation textuelle et ne pas autoriser aussi la programmation visuelle au lycée à la rentrée 2017-2018 ?
Je trouve qu’enseigner la programmation visuelle comme point de départ à la programmation permet de se consacrer à l’essentiel : les algorithmes, le fond du problème traité, et non pas à des soucis de syntaxe liés à l’apprentissage d’un langage de programmation textuel.

J’ai découvert Snap ! début 2016, grâce à un petit mail de Yves Martin, je le remercie infiniment. [1]

Bref prélude : LOGO et Scratch

Entrée en matière

J’avais commencé la programmation visuelle avec LOGO, conçu par Seymour Papert, dès mes débuts d’enseignante, en 1991 [2]. J’ai une grande admiration pour Seymour Papert et sa conception de l’enseignement des mathématiques. Nous devrions tous lire ou relire Jaillissement de l’esprit. Ordinateurs et apprentissage [3], aux Éditions Flammarion, 1981, car dans ce livre, Seymour Papert pointait déjà du doigt l’enseignement des mathématiques. Sans complaisance, il expliquait pourquoi cet enseignement, tel qu’enseigné alors, conduisait souvent à la phobie des mathématiques. Chercheur et concepteur de logiciels au laboratoire d’intelligence artificielle du MIT, il a consacré sa vie à réfléchir et à faire des expérimentations sur l’enseignement des mathématiques (et aussi de la physique newtonienne) [4].

En relisant ce livre, on s’aperçoit que nous en sommes toujours au même point en France quant à l’enseignement des mathématiques, avec une incompréhension des mathématiques de la part de nos élèves, incompréhension grandissant avec l’évolution du numérique dans la société. Mais, enfin, l’illustration d’algorithmes par leur codage demandée dès le collège (voire dès l’école primaire), est en train d’ébranler une conception archaïque et inadaptée aujourd’hui de l’enseignement des mathématiques.

Le codage arrive partout. Et c’est un phénomène mondial. En 2013, Obama engage les jeunes américains à apprendre à coder : « President Obama asks America to learn computer science ».

En France, dans l’Éducation nationale, il y a déjà quelques années que les algorithmes sont entrés dans les programmes de mathématiques au lycée (une vingtaine d’années déjà…). Le site académique de mathématiques de la Réunion icosaweb.ac-reunion.fr avait d’ailleurs de très riches ressources en algorithmique. [5]
Mais la programmation en tant que telle n’est entrée dans les programmes de lycée que très récemment (rentrée 2012) avec la spécialité ISN en terminale S.
Quelques enseignants seulement allaient jusqu’à la phase de codage lorsqu’ils élaboraient des algorithmes avec les élèves en classe de mathématiques, soit avec un logiciel, soit avec une calculatrice.

Depuis cette rentrée (2017-2018), le codage est officiellement dans les programmes de collège et d’école primaire. Je dis bien codage, pas seulement algorithmique. Et l’utilisation du logiciel libre Scratch pour coder en classe a largement été préconisée par le ministère de l’Éducation nationale. [6]

J’ai montré dans cet article que « Scratch est idéal pour mettre en œuvre de manière ludique et rapide des algorithmes en classe de seconde » et je fais coder avec Scratch, entre autres [7], dans mes classes de lycée depuis la rentrée 2009. Vous trouverez dans cet autre article, de nombreux exemples de codes écrits pour débuter en algorithmique de manière progressive avec Scratch.

Snap ! : le Scratch qui code du code

Snap ! — Build your own blocks — est un langage de programmation visuel en mode glisser-déposer développé par l’université de Berkeley. Snap ! est une implémentation largement étendue du code du logiciel Scratch du MIT Lab. Logiciel libre développé en HTML5 sous licence GPL3, il est développé par Jens Mönig et Brian Harvey. [8].
Snap ! est donc une page html et se lance en ligne dans un navigateur mais peut aussi se déployer en local (à partir des sources que l’on télécharge sur Github).

Snap ! permet — et c’est de là qu’il tire toute sa puissance — de programmer et d’écrire ses propres blocs (équivalent de la notion de fonction dans le logiciel), d’où son nom d’origine : Build your own blocks.

PNG - 8 ko
Alonzo, mascotte de Snap ! (hommage à Alonzo Church et au Lambda-Calcul))

Snap ! permet de faire de la programmation fonctionnelle, et c’est ce qui fait sa force.

En quelques mots, qu’est-ce que la programmation fonctionnelle ?

La programmation fonctionnelle considère le calcul en tant qu’évaluation de fonctions mathématiques. Un programme est donc une application, au sens mathématique du terme, qui ne donne qu’un seul résultat pour chaque ensemble de valeurs en entrée.


Un langage de programmation fonctionnelle doit permettre de passer des fonctions en paramètre, car les langages fonctionnels emploient des types et des structures de données de haut niveau comme les listes extensibles. C’est ce que Jens Mönig appelle des variables first-class [9].


J’ai présenté Snap ! à l’IREM de la Réunion le 14 juin 2016 à l’aide d’une carte mentale que je joins en bas de cet article.
J’y démontrais entre autres que Snap ! est un langage de programmation qui répond à tous les critères de choix d’un langage idéal pour l’enseignement du codage à l’école [10]. Je joins également un plan de cet exposé en mode texte [11]. Ce plan précise les idées essentielles qui y ont été abordées.
J’y développais aussi pourquoi j’ai été littéralement subjuguée, à la fois par la facilité de programmation que Snap ! procure et par les champs d’applications possibles qu’il laisse entrevoir.
Snap ! permet de créer des blocs simples très rapidement et d’implémenter des fonctions et processus récursifs simples.

Depuis cette rentrée scolaire, j’utilise Snap ! en classe pour accompagner le cours dans mes classes (seconde, première S, seconde ICN et parfois en première STMG) et surtout pour coder et illustrer des algorithmes écrits avec les élèves. Parmi les élèves, Snap ! fait l’unanimité, lors de son utilisation, dès la première séance. La prise en main est assez immédiate et la pratique régulière familiarise les élèves rapidement avec son environnement.
Plus je l’utilise en classe, plus je le trouve adapté à l’enseignement des mathématiques.

Scratch ou Snap ! en classe ?

Peu importe au final, le principal, c’est de faire agencer des blocs de code aux élèves dans le bon ordre afin qu’ils apprennent à créer, comprendre et à lire du code déjà écrit. Cela correspond à mon sens à l’apprentissage de la lecture d’une langue étrangère ayant un alphabet différent du nôtre (exemple : le chinois). La phase d’écriture peut venir bien plus tard, et sera d’autant plus facile à aborder que la lecture aura été comprise.
Il me semble que cela est beaucoup plus facile d’apprendre à lire que d’apprendre à écrire, car savoir lire relève juste d’une mémoire visuelle, tout comme savoir reconnaître des blocs de programmation. Il ne s’agit pas de faire de nos élèves des programmeurs, mais il s’agit bien de leur faire comprendre ce qu’est un algorithme, et de leur en faire créer et exécuter. Il ne s’agit pas de les écrire car cela ajouterait la difficulté liée à la syntaxe du langage de programmation choisi.
Autant se consacrer à l’essentiel : la compréhension des algorithmes.

- Scratch va sortir une version 3 basée sur Blockly. On peut déjà avoir une idée du rendu ici.
Cette version 3 de Scratch sera présentée au colloque international Scratch 2017 qui se déroulera à Bordeaux du 19 au 21 juillet 2017. Scratch2017BDX sera dédié au 10e anniversaire de Scratch et au 50e anniversaire de son prédécesseur, LOGO. J’y présenterai cette communication sur la programmation visuelle : « From Scratch to Snap !, what visual programming brings to my students. »

Lors d’une interrogation publique postée sur la liste educ@april.org de l’April le 2 mars 2016 sur le choix de Scratch ou de Snap ! pour coder en classe, je mettais en avant les atouts de Snap ! :
- Snap ! est codé en HTML5, son exécutable est donc une page HTML/javascript de quelques Koctets.
- Le logiciel est libre sous licence Gnu Affero GPL version 3, ses sources sont donc téléchargeables sur son dépôt dédié sur Github et donc Snap ! est utilisable en local en classe.
- Les projets Snap ! se sauvegardent soit au format XML (toujours seulement quelques kilooctets), par le menu « Exporter », soit sur le cloud de l’université de Berkeley dédié à Snap !, soit dans un dossier local lié à votre navigateur.
- Codage de blocs avec paramètres d’entrée avec ou sans retour (véritable fonction au sens mathématique du terme : nous sommes au coeur de la notion universelle de fonction soulignée dans le nouveau programme de seconde soumis à la lecture des enseignants).

- Il est aussi très simple dans Snap ! de créer des procédures récursives telle que n !.

- Ce logiciel open-source permet de créer un exécutable « stand-alone » de son projet, et cela est proposé pour les trois plateformes : Linux, Mac et Windows ! [12]
- Ce logiciel en ligne est dédié à la transcription de projets Scratch en Snap !, ce qui permet d’importer des projets Scratch dans Snap ! [13].
- Il existe un forum consacré au logiciel. Les développeurs répondent volontiers et sont en général très réactifs.

La réaction d’un enseignant [14] à cette interrogation publique est donnée au bas de cet article [15].

Arrêtons nous un moment sur le lutin de Snap ! par défaut.
- Le lutin de Snap ! par défaut est issu de ce que Seymour Papert appelle la géométrie tortue.
Cette géométrie tortue créée par Seymour Papert est une géométrie dynamique informatique.
La géométrie d’Euclide repose sur une entité fondamentale qui est le point et un certain nombre d’axiomes. Le point d’Euclide n’a aucune propriété intrinsèque : ni dimension, ni couleur...
La géométrie tortue, elle, repose sur « La tortue » — entité fondamentale de la scène (notre univers sur l’écran) (car ici, il s’agit bien d’une géométrie exclusivement réalisable sur un ordinateur avec sortie écran) — qui est dynamique.
En effet, la tortue est définie par sa position et son orientation.

Le lutin de Snap ! par défaut a une forme qui respecte scrupuleusement les consignes de Seymour Papert dans son livre Jaillissement de l’Esprit. La tortue (ici le lutin ou sprite en anglais) possède bien une position et une orientation. Dans la géométrie d’Euclide, les segments et les angles ne sont pas orientés : en fait, lorsqu’on dessine sur le papier, l’oeil et le cerveau décident inconsciemment du sens dans lequel il faut avancer ou tourner. Dans Snap !, qui relève d’une géométrie tortue, les segments et les angles sont orientés (c’est incontournable : l’ordinateur ne peut pas décider du sens tout seul), ce qui conduit inévitablement à utiliser des nombres négatifs. Ainsi, en programmation visuelle, les élèves utilisent spontanément des nombres négatifs (avance de -10, tourne de -30) avant même d’étudier le chapitre sur les nombres relatifs. Snap ! familiarise d’entrée les élèves avec la géométrie moderne (orientée) et conduit les élèves à introduire d’eux-mêmes les concepts de nombre négatif et de repérage pour répondre à un besoin.

J’ajouterai en vrac aux multiples atouts de Snap ! :
- Nombreuses bibliothèques externes à charger qui facilitent le développement. (Pourquoi réécrire ce qui a déjà été fait ?)
- Navigation aisée dans les scripts car l’interface est pensée avec ergonomie.
- Qualité du rendu des images de scripts.
- Une documentation riche est d’ores et déjà disponible en anglais ici.
- Importation des costumes et des sons par simple glissé-déposer dans la zone réservée à cet effet.
- Activation possible d’un mode pas à pas pour le débogage et pour aider le programmeur à comprendre ce qui ne fonctionne pas. C’est très utile pour que l’élève comprenne une erreur de raisonnement.
- Possibilité de mettre en pause l’exécution d’un programme. C’est utile pour noter des valeurs par exemple lorsque l’on n’a pas encore codé leur stockage, ou réalisé une copie d’écran de la scène à un état donné.
- Activation possible d’un mode Turbo.

Et la liste est loin d’être exhaustive...

Sur cette image, 5 lutins
- A, B, C,
- le milieu de [AB],
- le centre de gravité du triangle ABC.

En dynamique, on peut demander aux élèves Qui est qui ?
Quand on programme dans Snap !, on est tout le temps en train de réfléchir aux objets qu’on manipule.
Qu’est-ce qu’un point ?
Qu’est-ce que cette variable ? un réel ? une liste ? une fonction ? un lutin ?
Qu’est-ce qu’un lutin exactement ? Par quoi est-il défini ? Quels sont ses attributs ou propriétés ?
C’est parfois difficile, mais à mon sens, excellent pour faire réfléchir les élèves sur les objets mathématiques.

Et puis, par les lutins (ou particules), nous sommes au coeur même de la physique newtonienne.

De plus, les développeurs sont très actifs. Dans la liste des « ToDo » j’ai relevé une future exportation des images au format svg... Alors là, ce sera « la grande classe » côté graphisme.

La visite de la galerie d’images d’un choix de scripts créés avec Snap ! depuis plus d’un an vous éclairera sur la puissance de Snap !. Chaque script est accompagné d’un lien qui mène au projet en ligne sur le cloud de Berkeley. Chaque script est aussi téléchargeable au format xml (faire importer ensuite dans Snap ! pour l’ouvrir).
La galerie étant sous licence Creative Commons Non Commercial Share Alike, vous pouvez copier, modifier et redistribuer à souhait ces projets, sous réserve d’en citer la provenance.

Beauté du code en images

La beauté du code qui en résulte parfois m’a donné l’idée de créer cette galerie d’images de scripts. Je veux convaincre par l’image de la force de Snap !.
J’ai d’ailleurs présenté cette galerie d’images en mode Sans paroles lors du séminaire IREM du 14 avril 2017 pendant 25 min, présentation suivie d’un débat de 20 min.

Parfois, les mots sont inutiles.
Lisons ensemble ce poème extrait de Jaillissement de l’Esprit, en préliminaire du chapitre IV.
À lire page 95 dans le lien « Mindstorms » au bas de cet article.

Le mille-pattes allait insouciant
Quand le crapaud, en plaisantant,
Lui dit : "Très cher, quand vous marchez,
Ce doit être bien compliqué
De savoir quelle patte avancer ? "
Le mille-pattes en fut si troublé
Qu’il se retrouva au fossé,
Son millier de pattes emmêlé...

(Anonyme)

J’adore l’image qui en ressort...

Cette citation soulève le problème d’une pensée trop conscientisée qui peut mener à l’écroulement d’une action entreprise. C’est pour cela, que parfois, en classe de mathématiques, il est bon à mon sens de laisser les élèves créer et découvrir avec Snap ! en leur ayant donné quelques consignes pour démarrer. Les notions mathématiques suivront nécessairement. Je pense que l’une des raisons de l’échec de l’enseignement des mathématiques jusqu’à récemment, vient de la notion de rigueur même liée aux mathématiques que l’on a voulu inscrire dans les programmes. Faisons d’abord des mathématiques concrètes, et après, formalisons les, avec rigueur bien sûr. Mais chaque chose en son temps...


Je vous propose maintenant un guide de navigation à travers la galerie snap.nathalierun.net.

- > Premier script avec Snap !



- > Repérage dans le plan

Dès que l’on veut utiliser la scène sur laquelle les objets vont être représentés, on a besoin de connaître le système de coordonnées.
La scène est un rectangle qui mesure par défaut : 480 pixels de large par 360 pixels de haut. Mais Snap ! permet de modifier les dimensions de la scène. Après, il faut réfléchir au préalable sur ce que nous voulons comme rendu final. On peut garder les mêmes proportions et passer en 800x600 [16] si l’on veut une plus grande scène et une meilleure définition du rendu sur l’écran.
Du coup, les élèves doivent obligatoirement apprendre à se repérer, et à déplacer leur(s) lutin(s) sur cette scène.
On pourra aller voir les projets de géométrie analytique, qui permettent de couvrir le programme de seconde pour tout ce qui concerne le repérage (repère, coordonnées, milieu, distance, vecteur, équation de droite affine).
L’animation Chasse au Trésor sort tout droit de l’activité 2 page 116 du Sésamanuel de seconde. Cette activité est d’une richesse incroyable et aborde un grand nombre de notions du programme de seconde. Utiliser l’animation permet aux élèves de découvrir par eux-mêmes le sens de variation de la fonction distance du joueur au trésor.

- > Fonctions et opérateurs

Les fonctions peuvent être vues absolument partout, dans tous les projets, car la notion de fonction en mathématiques de lycée est universelle.
Je me limite dans ce paragraphe à quelques exemples de fonctions à variables réelles.

PNG

- > Promenades aléatoires

Ces promenades m’ont été inspirées par la lecture d’une fiche de statistiques du document d’accompagnement de seconde des programmes de juin 2000 (« Onze fiches de statistique »). En 2010, je faisais simuler ces promenades aléatoires sur tableur par les élèves (voir cet article sur les simulations). Puis l’idée m’est venue de le faire avec Scratch.
Vous trouverez dans la galerie quelques promenades réalisées importées dans Snap !.
 [17]



- > Algorithme d’Euclide



- > Clonage avec Snap !



- > Suites en première

Pour introduire les suites, j’ai demandé à mes élèves de dessiner le triangle de Sierpinski, avec les consignes suivantes :

        FRACTALE DE SIERPINSKI
        **********************
       
        Données :        Triangle ABC, n le n°d'étape
                        (le triangle ABC seul représente l'étape 0)

        Initialisations :
                Triangle ABC               
                A* milieu de [BC]
                B* milieu de [CA]
                C* milieu de [AB]

                Remplir les triangles BA*C*, A*CB*, C*B*A
                Laisser vide le triangle A*B*C*

                Recommencer le processus précédent sur chacun des 3 triangles
                BA*C*, A*CB*, C*B*A jusqu'à l'étape n.
       

        Construire les étapes 1, 2, 3, 4 et 5.

        A chaque étape : donner :
                - le nombre de triangles colorés Tn
                - leur côté cn
                - leur aire individuelle an
                - leur périmètre individuel pn
                - l'aire totale du domaine couvert An
                - le périmètre total des triangles Pn

Ce qui a été fait en classe est ici.

Ci-dessous les calculs faits avec Snap !, à retrouver dans la galerie dans le dossier Sierpinski.

Ce qui me plaît aussi avec Snap ! , c’est que l’on peut réaliser de belles choses.
PNG - 75.1 ko



- > Simulations, Couleurs RVB et autres friandises...

Notons juste ici que le clonage rend les simulations de jeux tels que le jeu de la vie de Conway et autres automates cellulaires très accessibles, pour réaliser du codage consistant en Terminale S ISN.

La galerie propose une simulation réalisable en seconde autour des familles de quatre enfants. Il est amené à être complété et amélioré.

Elle propose également un codage des couleurs RVB afin d’en comprendre le fonctionnement. Cela a déjà fait l’objet de cet article détaillé, Rouge, Vert, Bleu, de 0 à 255.

Vous trouverez également un calcul de loi binomiale, de produit scalaire, un projet sur le second degré, un calcul de la mesure principale d’angles orientés, un convertisseur Shadok, et ce n’est que le début...

Carte mentale de navigation dans la galerie

Je vous souhaite une bonne découverte (ou utilisation) de Snap ! ainsi qu’une bonne visite de cette galerie d’images.

Remarque : J’aurais pu mettre dans cet article des liens directs vers chaque notion de la galerie que je souhaite mettre en avant, mais comme cette galerie est amenée à être alimentée régulièrement, les liens ne seraient plus valides [18]. Je vous laisse donc la découvrir seuls, ou linéairement en suivant les points abordés précédemment, ou plutôt à travers cette carte mentale de navigation :

JPEG - 222.1 ko

[1Donc cet article, c’est plus d’un an de travail et de réflexions...

[2Le mot LOGO vient du grec Logos « parole, discours, intelligence ».

[3Mindstorms, à lire en anglais. D’ailleurs Mindstorm est le nom du premier robot humanoïde développé par Lego.

[4Quelque chose me dit que les concepteurs du robot Thymio se sont inspirés de la tortue LOGO, petit robot créé par Seymour Papert pour ses expérimentations en sciences de l’éducation.

[5Je sais, le lien est mort, malheureusement pour toutes ces ressources qu’il abritait mais aussi pour Éric Hakhenholz (père de CaRMetal et de DGPad) qui en était le brillant concepteur (rares étaient les sites académiques aussi bien pensés et interfacés) et pour moi-même qui l’ai maintenu et alimenté durant de nombreuses heures de travail pendant six années... jusqu’à son abandon en 2004). Voir cet article consacré à IcosaWeb à la Une d’un Café Pédagogique de l’époque. Je suis juste parfois un peu écoeurée... Heureusement que les élèves sont là pour nous donner la foi ;-)

[6Malgré son encapsulation dans une technologie propriétaire très lourde à mettre en oeuvre à chaque utilisation.

[7Calculatrice TI-82, Algobox, tableur.

[8Il n’est pas étonnant de constater que Brian Harvey avait écrit la première implémentation libre de LOGO : UCBLogo.

[9Types de données de première classe
Un type de données est considéré comme étant de première classe dans un langage de programmation si des instances de ce type peuvent être :
- la valeur d’une variable
 - un membre d’un agrégat (tableau, liste, etc.)
 - un argument (entrée) à une procédure
 - la valeur retournée par une procédure
 - utilisé sans avoir de nom (étant la valeur d’une variable).

[10Ces critères sont détaillés dans cet article.

[11Exporté de la carte mentale précédente.

[12Imaginez le bonheur de vos élèves lorsqu’ils auront réalisé leur premier logiciel !

[13La différence de gestion des listes dans Scratch et dans Snap ! vous demandera éventuellement d’apporter au code quelques modifications mineures.

[14Gilles Lassus.

[15Merci pour cette interrogation publique.
Enseignant en ISN et en Seconde ICN, j’utilise Snap ! depuis cette année. Nous l’utilisons notamment dans le cadre du projet PoppyEducation mené par l’INRIA (projet robotique). Rapportée à son extrême facilité d’accès, la puissance de ce logiciel est impressionnante. D’abord sceptique face à un langage « à la souris » où on ne passerait son temps qu’à assembler des blocs, j’en suis maintenant un fervent défenseur : l’essentiel de la réflexion des élèves se porte sur l’algorithme en lui-même, et non plus sur la syntaxe. Pour des programmeurs débutants, la différence des courbes d’apprentissage est flagrante. Je partage la déception de voir Scratch choisi au détriment de Snap !. Ceci dit, on a évité les solutions maison de type AlgoBox (qui, malgré ses qualités, est très vite limité).

[16800 pixels de large par 600 pixels de haut.

[18En effet, j’ai utilisé ce petit soft extra Single File PHP Gallery 4.7.0 écrit en PHP par Kenny Svalgaard. Comme il n’y a pas de base de données — d’ailleurs c’est pour cela qu’il est léger et pratique —, à chaque ajout, je dois réinitialiser la galerie.


Documents joints

Idées essentielles
Idées essentielles
issues de la présentation de Snap !
Présentation IREM du 14 juin 2016
Présentation IREM du 14 juin 2016
carte mentale au format PDF
Présentation IREM du 14 juin 2016
Présentation IREM du 14 juin 2016
carte mentale au format MM
Présentation IREM du 14 juin 2016
Présentation IREM du 14 juin 2016
carte mentale au format SVG

Portfolio

Alonzo en 3D

Commentaires

Logo de Nathalie CARRIÉ
vendredi 26 mai 2017 à 13h16 - par  Nathalie CARRIÉ

Monsieur Jerzy Karczmarczuk,
Vous me faites très justement remarquer dans un message privé que l’affirmation « Snap ! is designed to support functional programming » ou : « ...permet de faire de la programmation fonctionnelle... » et : « c’est un langage fonctionnel » sont vraiment différentes.
Je modifie donc cette affirmation dans le texte, afin de ne pas induire le lecteur en erreur, et laissant le soin aux spécialistes d’en décider.
Merci pour cette précision.

Logo de Nathalie CARRIÉ
mercredi 24 mai 2017 à 10h45 - par  Nathalie CARRIÉ

Bonjour,


Je vous remercie sincèrement pour avoir posté votre commentaire car il m’a permis de modifier quelques lignes de l’article pour essayer d’être plus claire, notamment en ce qui concerne la propriété d’être fonctionnel du langage Snap !. J’ai ainsi changé l’illustration d’une fonction récursive par le choix proposé pour les paramètres d’un bloc de Snap !.

Je ne suis certes pas spécialiste en informatique car je suis professeur de mathématiques mais votre réponse montre que vous avez été un peu vite dans votre évaluation du langage Snap !.

Je vais essayer de répondre point par point à votre commentaire.


Tout d’abord, mon affirmation : « Snap ! est en fait un langage de programmation fonctionnelle ... » est correcte. Elle ne vient pas de moi mais du développeur lui-même qui explique que Snap ! permet de faire de la programmation fonctionnelle.
Si vous en doutez, je vous propose de communiquer directement avec lui.
Voici son tweet épinglé sur Twitter : Snap ! is designed to support functional programming, higher order functions and custom control structures.
Je vous propose aussi (et surtout) de programmer quelques scripts avec Snap !. Car vous vous êtes arrêté aux exemples que je donnais sur cette page.
D’ailleurs, la mascotte de Snap ! porte un lambda sur sa frange, en l’honneur de Alonzo Church, le père du Lambda-calcul. Et j’ai cru comprendre que le Lambda-calcul était à l’origine de la programmation fonctionnelle.


Vous avez clairement survolé cet article.
En effet, cette simple image montre que Snap ! emploie des types et des structures de données de haut niveau. Mais je pense que vous n’avez pas cherché la signification des deux petits triangles...


Je vous cite :
La présence des constructions fonctionnelles, comme des procédures récursives, ne change pas la catégorie du langage.
Mes exemples n’étaient pas là dans cet article pour démontrer que le langage est fonctionnel. Je n’ai pas eu cette prétention. Je m’adresse à des enseignants et à des élèves, je veux juste montrer que l’on peut efficacement faire des mathématiques du secondaire avec Snap !.
Si je mettais en illustration ce genre d’images, je faisais fuir dans la minute qui suit, les lecteurs à la première lecture de mon article. Ils ne seraient pas allés plus loin pour voir ce que Snap ! permet de faire en classe.
Je ne connais pas beaucoup de langages visuels qui permettent de programmer ce genre de fonctions, où les paramètres sont des lutins. Il me semble par exemple que Scratch dans sa version actuelle ne le permet pas. Je n’ai pas la chance de connaître les langages visuels que vous avez cités.


Point a.
Sincèrement, j’ai du mal à vous suivre.
Moi, je le ressens comme tel (langage visuel). Et Snap ! se définit comme tel.
Voir la page « About Snap ! » ici : http://snap.berkeley.edu/about.html.
D’ailleurs, dans Wikipédia, Snap ! est cité comme langage de programmation graphique ou visuel :
https://fr.wikipedia.org/wiki/Langage_graphique.


Point b.
Bien évidemment, apprendre la syntaxe d’un langage demande beaucoup de rigueur et est très formateur. C’est même fabuleux de programmer en C, ou en Python, et j’adore ça. J’ai beaucoup programmé avant d’enseigner, dans des bureaux d’études en Sciences.
Par contre, la réalité du terrain quand on enseigne est là et je ne pense pas que vous soyez face à des élèves de collège ou de lycée.
Très sincèrement, vous ne vous rendez pas compte de la difficulté d’expliquer, même à des Terminales, par exemple, l’indentation en Python. Six mois après le début des cours, les élèves ont encore ce genre d’erreurs de syntaxe. Idem pour l’oubli des 2 points. Personnellement, je trouve cela dommage de passer du temps la-dessus, alors que nos élèves ont tant à apprendre. Je pense que nous devons hiérarchiser les priorités. Nous ne sommes pas là pour former des développeurs, mais pour faire des Mathématiques.


Point c.
Pour moi, mélanger les syntaxes français et anglais, cela n’a pas d’importance car il suffit dans Snap ! de changer de langue. Mes élèves d’ailleurs me demandent les 2 pour les corrections. Désolée si vous ne pouvez pas faire la part des choses.


Merci encore pour ce message car il m’a permis de clarifier quelques-unes de mes idées...
Salutations.

Logo de Jerzy Karczmarczuk
dimanche 21 mai 2017 à 23h01 - par  Jerzy Karczmarczuk

Madame,

votre affirmation : « Snap ! est en fait un langage de programmation fonctionnelle ... » est incorrecte. Snap ! est un langage impératif, vos exemples sont plus impératifs que fonctionnels, le manuel de référence mentionne les commandes et les actions, ce qui nous mène loin du monde de la programmation fonctionnelle. La présence des constructions fonctionnelles, comme des procédures récursives, ne change pas la catégorie du langage ; de telles constructions sont actuellement disponibles dans pratiquement TOUS les langages de programmation. SVP, ne confondez pas vos lecteurs - débutants...

Dans votre recommandation de l’article, envoyée au forum de la SIF vous affirmez : « enseigner la programmation visuelle comme point de départ à la programmation permet de se consacrer à l’essentiel : les algorithmes, le fond du problème traité, et non pas à des soucis de syntaxe liés à l’apprentissage d’un langage de programmation textuel ». Je ne veux nullement polémiquer sur le fond, seulement observer que

a. Snap ! n’est pas un langage proprement dit visuel, comme Simulink, Labview ou d’autres langages basés sur le paradigme des flots de données. Il est textuel.

b. La syntaxe n’est pas que l’« emballage des algorithmes », mais constitue un instrument de communication structurée, et donc c’est un élément assez fondamental - comme dans l’apprentissage d’une langue naturelle, d’ailleurs...

c. Finalement, SVP, évitez de mélanger dans votre code les structures syntaxiques en français et en anglais.

Merci. Mes salutations amicales.

JK

Logo de Nathalie CARRIÉ
dimanche 30 avril 2017 à 11h54 - par  Nathalie CARRIÉ

Merci pour ce commentaire.

Si j’ai retenu une chose de mes cours sur Python l’année de ma formation en ISN, c’est l’idée de devoir fractionner un projet en plusieurs petites tâches simples à accomplir, chacune de ces tâches faisant alors l’objet d’une fonction spécifique.
Merci pour ce principe fondamental.

Logo de Seb
vendredi 28 avril 2017 à 05h49 - par  Seb

Très bel article.

Je suis tout à fait d’accord avec toi sur : il faut montrer et faire lire du code avant de demander à en écrire. Utiliser Scratch / Snap depuis le collège et jusqu’en seconde environ me semble parfait. Inculquer la pensée informatique avant tout. Mais ensuite 1re, Terminale il faut préparer à l’après et donc commencer à utiliser de vrais langages de programmation. Le glissé-dépose c’est très bien mais ça montre ses limites quand on manipule des plus gros programmes avec de grosses données, non ? A partir de la 1re je serai pour l’utilisation de plateformes style codecombat ou checkio.

Annonces

Prochains rendez-vous de l’IREM

Séminaire EDIM-IREM

- Mercredi 3 mai 2017, 14h-18h, PTU, Saint-Denis, salle S23.6
- Mardi 13 juin 2017, 14h-18h, campus du Tampon
- Mercredi 14 juin 2017, 14h-18h, PTU, Saint-Denis, salle S23.6


Brèves

À travers les labyrinthes : algorithmes et fourmis

dimanche 1er septembre 2013

Quand les chercheurs mettent au point des modèles d’optimisation et de recherche de plus court chemin qui s’inspirent du comportement de masse de colonies de fourmis...
À écouter : Sur les Épaules de Darwin, émission diffusée sur France Inter samedi 31 août 2013.

Rencontres Mondiales du Logiciel Libre à St-Joseph

mardi 20 août 2013

Les RMLLd se dérouleront pour la 2e fois à Saint-Joseph du 22 au 25 août.
C’est une opportunité pour les élèves qui suivent la spécialité ISN et les passionnés d’informatique.

Voici pour le samedi et le dimanche quelques interventions choisies :
- http://2013.d.rmll.info/Raspberry-votre-ordinateur-au-format-carte-de-credit?lang=fr
- http://2013.d.rmll.info/Materiel-libre-et-DIY?lang=fr
- http://2013.d.rmll.info/Arduino-de-l-electronique-libre?lang=fr

Noter aussi les conférences Art et Culture du dimanche, ainsi qu’une conférence plus engagée.

Le programme complet se trouve ici. Une radio sera ouverte pour l’occasion.
Des plaquettes à distribuer se trouvent ici.

Hyper-vidéos pour l’algorithmique au lycée

dimanche 19 août 2012

Olivier Roizès, à la demande de l’ADIREM, a réalisé une collection d’hyper-vidéos de présentation de logiciels et environnements de programmation. Ces hyper-vidéos, c’est-à-dire des vidéos contenant des éléments clicables, devraient être utiles aux enseignants désireux de se familiariser avec Python, CaRMetal, R, Rurple, Scilab ou Xcas.

Ouverture du SILO

mardi 1er novembre 2011

Le SILO (Science Informatique au Lycée : Oui !) est un espace collaboratif documentaire de partage et de formation collégiale, à destination des professeurs appelés à enseigner l’informatique au lycée.

Une initiative du CNDP, de l’INRIA et de Pasc@line, à laquelle se sont associés SPECIF, fuscia, EPI et ePrep.

Sur le Web : Site du SILO

Introduction à la science informatique

lundi 12 septembre 2011

Le CRDP de Paris publie le premier ouvrage destiné aux professeurs chargés d’enseigner la nouvelle spécialité « Informatique et sciences du numérique » en Terminale S à la rentrée 2012. Cet ouvrage a été coordonné par Gilles Dowek, directeur de recherche à l’INRIA.

Sur la création de la spécialité ISN, on pourra également consulter l’interview donnée au Café pédagogique par l’inspecteur général Robert Cabanne.

Sur le Web : CRDP de Paris

Deux publications sur l’algorithmique

samedi 17 octobre 2009

L’IREM d’Aix-Marseille publie une brochure de 73 pages, téléchargeable librement, intitulée Algorithmes et logique au lycée. Ces notions sont illustrées et déclinées sur des exercices du programme de spécialité mathématique en série L, mais sont adaptables aux programmes à venir.

Le hors série thématique n° 37 du magazine Tangente, disponible actuellement en kiosque, s’intitule « Les algorithmes. Au cœur du raisonnement structuré ». Extrait de l’éditorial : « La rédaction de Tangente a conçu la quasi-totalité de ce hors série thématique pour qu’il puisse être lu par des élèves de Seconde ».

Une carte mentale pour l’algorithmique

jeudi 10 septembre 2009

Sur son site, Jean-Jacques Dhénin a publié une carte mentale géante qui renvoie vers plus de 30 documents en ligne sur l’algorithmique. Tout ce qu’il faut — et même davantage — pour faire face au nouveau programme de Seconde !

Un catalogue libre d’algorithmes pour le lycée

dimanche 30 août 2009

Guillaume Connan, de l’IREM de Nantes, publie un catalogue libre de 119 pages d’algorithmes pour le lycée. Sur son site très riche, on trouvera d’autres documents en rapport avec l’algorithmique, notamment sur l’utilisation des langages fonctionnels au lycée et sur la comparaison programmation fonctionnelle/programmation impérative.

L’algorithmique à l’IREM de Lille

vendredi 26 juin 2009

Le groupe AMECMI de l’IREM de Lille vient de mettre en ligne des ressources importantes au service des professeurs de Seconde :

- Algorithmique et programmation (Emmanuel Ostenne)
- Bibliographie amoureuse de l’algorithmique (Alain Juhel)

Statistiques

Dernière mise à jour

samedi 27 mai 2017

Publication

745 Articles
Aucun album photo
131 Brèves
11 Sites Web
127 Auteurs

Visites

153 aujourd'hui
593 hier
2024863 depuis le début
26 visiteurs actuellement connectés