Snap! (langage)
Snap! est un langage de programmation graphique et multisystème, conçu pour l'apprentissage de l'informatique et des mathématiques auprès d'élèves et de débutants. En imbriquant et en associant des blocs d'instructions élémentaires paramétrés, les étudiants créent des histoires, des animations ou des jeux qui s'exécutent ensuite à l'intérieur de leur navigateur Web.
Pour les articles homonymes, voir Snap.
Snap! | ||
Date de première version | ||
---|---|---|
Paradigme | Visuel, événementiel, impératif[1], objet[2], fonctionnel/récursif[3] | |
Auteurs | Brian Harvey et Jens Mönig[4] | |
Dernière version | 6.8.1[5] | |
Typage | dynamique | |
Influencé par | Scratch Smalltalk Scheme Logo |
|
A influencé | BeetleBlocks, Snapi | |
Écrit en | JavaScript (pour Snap!, anciennement Squeak pour les versions BYOB < 4.0) | |
Système d'exploitation | multiplateforme | |
Licence | GNU Affero General Public License[6] | |
Site web | snap.berkeley.edu | |
Extension de fichier | .xml (pour Snap!, anciennement pour BYOB : .ypr et .ysp) | |
Les programmes ainsi créés sont comparables à des organigrammes tout en étant directement exécutables, ce qui permet un gain de temps et de motivation pour les jeunes enfants. Les performances de ce langage permettent toutefois une utilisation avancée et l'étude de concepts de haut niveau et son adoption pour des cours universitaires[7].
Snap!, développé par l'Université de Californie à Berkeley, est entièrement basé sur HTML5 et ne nécessite aucune installation de logiciel en local. C'est un logiciel libre sous licence AGPL.
Historique
BYOB[8],[9] (Build Your Own Blocks, « construisez vos propres blocs ») a été développé conjointement par Jens Mönig[10] et Brian Harvey[11],[12] comme une extension de Scratch qui était utilisé à l'Université de Californie à Berkeley, pour un cours intitulé « The Beauty and Joy of Computing[13] » (« la beauté et la joie de l'informatique »). Selon Brian Harvey[14], Scratch pourtant dérivé de Logo, a le gros défaut de ne pas intégrer la notion de procédure, et donc de récursion, idée centrale en informatique et également centrale dès le départ dans l'enseignement par Logo. De plus, son support des structures de données est faible.
BYOB, en s'inspirant de Scheme, lui-même inspiré de Logo, visait donc à compléter Scratch. Il s'installait par-dessus Scratch et lui apportait ce qui manquait cruellement, surtout bien sûr aux étudiants plus âgés de l'Université de Californie à Berkeley, mais pourquoi pas aux plus jeunes désireux de mieux appréhender les techniques de codage et les aborder de manière plus logique et efficace. Entre autres, les notions d’algorithmes et de structures de données peuvent être abordées directement et complètement avec BYOB et son successeur Snap!, sans que cela nuise à la convivialité nécessaire pour les plus jeunes enfants[15].
Scratch souffre aussi d'un autre défaut, celui d'être basé sur le logiciel Adobe Flash, très controversé et qui n'est pas disponible sur toutes les plateformes (très mal supporté sous Linux, et absent sur IOS[16] et de plus en plus abandonné par les grands sites de vidéo, dont Dailymotion et Youtube[17]. De là est né Snap![18], la version 4 de BYOB, autonome et totalement basée sur HTML5 et javascript[19],[20], donc indépendante de la plateforme puisqu'entièrement exécutée dans le navigateur web.
Publications officielles
Snap! a été reconnu par la fondation Logo[21] et évalué par un magazine en ligne destiné aux programmeurs[22]. En France, il a été évalué par l'Académie de Poitiers[23]. Un article de fond sur la programmation visuelle lui est consacré sur le site de l'IREM de la Réunion [24].
Compatibilité et interopérabilité
Capable de fonctionner sur n'importe quel navigateur Web compatible HTML5 et supportant JavaScript, ce qui est le cas de la majorité d'entre eux actuellement, Snap! Ne nécessite aucune installation et fonctionne immédiatement sur tous types de systèmes et appareils, y compris sur les tablettes utilisées par plusieurs écoles.
Les blocs et les projets développés avec Snap! peuvent être enregistrés localement dans un fichier XML, qui pourra être ensuite réimporté dans un nouveau projet sur n'importe quel appareil. Un bloc peut ainsi facilement être utilisé par plusieurs projets[25].
Snap! est également disponible de façon hors ligne[26] mais cette version n'est toutefois plus à jour[réf. nécessaire].
Interface utilisateur
Elle est semblable à celle de Scratch (avec la disposition d'avant la version 2) et l'utilisation est la même, avec 39 langues disponibles. Elle existe toutefois en deux versions qui ne diffèrent que par le nombre d'instructions et fonctions de base. La version simplifiée est destinée aux débutants et utilisateurs de Scratch, tandis que la version étendue propose pour les utilisateurs avancés plus d'instructions et fonctions de base, qui peuvent certes être créées avec l'interface simplifiée, mais qui sont ainsi mises directement à disposition.
Comme pour Scratch, il est possible d'enregistrer son projet sur le site (ici, ce sera bien sûr le serveur de l'Université de Californie à Berkeley) après avoir créé un compte. Chaque projet peut soit rester confidentiel, soit être ouvert à tous. Un projet peut aussi être exporté au format XML et enregistré localement sur le poste de l'utilisateur.
Puisque Snap! ne nécessite aucune installation, il est possible de la voir et l'utiliser directement sur le site consacré à cet effet (voir les liens externes ou utiliser l'un de ceux des interfaces mentionnées ci-dessus).
Fonctionnalités
Les principales caractéristiques qui différencient Snap! de Scratch sont :
- les expressions utilisant des fonctions imbriquées, se composant d'une ou plusieurs « fonctions anonymes », chacune étant représentée par un bloc ayant une ou plusieurs cases vides pour y insérer un paramètre, chacun de ces paramètres pouvant être lui-même une Fonction d'ordre supérieur. (Leur base en informatique théorique étant les fonctions de première classe, elles-mêmes basées sur le Lambda-calcul).
- La programmation multi-paradigme qui permet à la fois la programmation fonctionnelle et procédurale ou impérative[3] ainsi que la méta-programmation orientée objet[2].
- Les données de première classe
- Les listes de première classe (listes pouvant contenir des listes[27])
- Les sprites (lutins) de première classe[28]
- Les procédures de première classe
- Les fonctionnalités décrites ci-dessus permettent d’écrire aisément et simplement des fonctions récursives
- le transcodage de Snap! vers les langages couramment utilisés (C, javascript, python etc.)
Cela apporte des particularités appréciées même des plus jeunes ou plus débutants, par exemple le fait de pouvoir scinder un lutin en plusieurs parties pour l'animer, comme on peut le voir sur dans le projet "hélicoptère" de l'Académie de Poitiers[29].
Utilisations
Comme pour tout langage de programmation, les utilisations sont innombrables. Toutefois, par son interface intuitive et conviviale, disponible en de nombreuses langues, et sa conception multiparadigme qui le rend aussi bien abordable aux jeunes enfants du primaire que puissant et éducatif pour des universitaires, Snap! vise principalement l'enseignement et la conception de prototypes. Jens Mônig[4] donne sur sa chaine Youtube[30] de nombreux exemples dans ces deux domaines.
Utilisation dans le cadre de la réforme du collège de 2015
Snap! est tout à fait adapté à être utilisé dans ce cadre. Son interface intuitive et ludique permet aux plus jeunes enfants d'aborder facilement les notions de base du codage informatique et le fait qu'il ait été conçu également pour des universitaires de haut niveau garantit que les notions acquises ne sont pas rendues inexactes par une simplification mal pensée. Un bon exemple en est la notion universelle de fonction mise en avant dans le nouveau programme de seconde en préparation.
Snap! a été testé et apprécié par l'académie de Poitiers[23] et l'IREM de la Réunion[24]. Ce dernier donne des exemples détaillés et commentés d'utilisations avec les élèves.
Conversion de Scratch vers Snap!
Il est possible de transformer un projet Scratch 2 vers Snap![31] Selon les projets, il peut parfois y avoir quelques petites adaptations à faire, mais elles sont généralement minimes. Et c'est un excellent moyen d'apprendre à mettre au point un projet ! Attention, la nouvelle version de Scratch (3.0) n'est pas encore supportée.
Cette facilité permet d'évoluer facilement vers ce que certains n'hésitent pas à appeler un vrai langage, alors qu'ils considèrent Scratch comme un simple outil éducatif. La personnalité des auteurs de Snap! (Brian Harvey était un enseignant très attaché à transmettre ses connaissances et sa passion) fait qu'il n'a rien perdu de son caractère ludique et éducatif au passage.
Du projet à l'exécutable
Il est également possible de transformer le projet en un programme exécutable[32] qui pourra fonctionner sur Windows ou MacOSX. Comme on peut choisir de laisser le code visible, on peut donc retrouver une version hors ligne permettant de travailler sur son projet, tout en étant « jouable ».
Manuel de référence
Les auteurs ont pris le soin d'écrire un manuel de référence (en anglais) de 109 pages permettant de se familiariser aussi bien avec la manipulation des blocs qu'avec les nouveaux concepts apportés par Snap! par rapport à Scratch. Il est disponible au format PDF sur le site de l'Université de Californie à Berkeley[25].
Voir aussi
Liens externes
- site officiel
- Code source (licence AGPL)
- Manuel de référence (anglais)
- Traduction du Manuel de référence (français)
- Interface de programmation Snap! (simplifiée)
- Interface de programmation Snap! (étendue)
- Utilitaire en ligne de conversion de Scratch vers Snap!
- Utilitaire en ligne de conversion de Snap! en exécutable
Notes
Notes et références
- (en)Manuel de la version 4.1, page 30
- (en)Manuel de la version 4.1, page 51
- (en)Manuel de la version 4.1, pages 26 et 30
- (en)https://github.com/jmoenig Jens Mönig sur Github
- « https://github.com/jmoenig/Snap/releases/tag/v6.8.1 » (consulté le )
- « https://snap.berkeley.edu/tos »
- (en)
- (en) BYOB (old version) Downloads
- (en) BYOB Manuel de Référence Version 3.0.7 (PDF 560Ko)
- (en) Jens Scratcheur Inscrit il y a 9 années, 10 mois Germany
- (en) bharvey Compte enseignant Inscrit il y a 8 années, 8 mois ago United States
- (en) Brian Harvey Computer Science Division University of California at Berkeley
- (en) UC Berkeley EECS - CS10 : The Beauty and Joy of Computing - Fall 2011
- (en) Bringing “No Ceiling” to Scratch: Can One Language Serve Kids and Computer Scientists? - B.Harvey and J. Mönig
- (en) Bringing “No Ceiling” to Scratch: Can One Language Serve Kids and Computer Scientists? - Paper Constructionism 2010, Paris, Brian Harvey & Jens Mönig
- « Adobe lance Flash sous iOS... sans Flash - iPhone XS, XR, iPad et Apple Watch : blog et actu par iPhon.fr », (consulté le )
- « YouTube abandonne Flash pour HTML5, la filiale de Google franchit le cap après 4 ans d'expérimentation » (consulté le )
- « Snap! (Build Your Own Blocks) 4.2 », sur snap.berkeley.edu (consulté le )
- (en) About Snap, Université de Californie à Berkeley
- (en) Sites miroirs et version minimum des navigateurs (site de l'Université de Californie à Berkeley)
- (en) Page de l'histoire de la fondation Logo
- (en) IProgrammer Snap! review
- « Scratch et Snap ! Pour initier à la programmation - Page 2/3 - Mathématiques - Pédagogie - Académie de Poitiers », sur ww2.ac-poitiers.fr (consulté le )
- (fr) Coder des algorithmes avec Snap! - Programmation visuelle au lycée
- (en) Manuel de référence de Snap! (PDF 3,4 Mo)
- http://dm1r.fr/wp-content/uploads/2017/05/Snap-offline.zip
- (en) Linked Lists in Snap! (Jens Mönig - PDF 671 Ko)
- (en) First-Class Sprites in Snap! (Jens Mönig - PDF 3,1 Mo)
- « Scratch et Snap ! Pour initier à la programmation - Page 3/3 - Mathématiques - Pédagogie - Académie de Poitiers », sur ww2.ac-poitiers.fr (consulté le )
- « Jens Mönig », sur YouTube (consulté le )
- « Snapin8r2 », sur djdolphin.github.io (consulté le )
- « Snapp! », sur snapp.citilab.eu (consulté le )
- Portail de la programmation informatique
- Portail des logiciels libres
- Portail des TIC pour l'enseignement