# data[].attributes.attachment_link.title
Science et technologie à la CSDL par Erick Sauvé - Robot Laser-TAG

# data[].attributes.attachment_link.title
Qu'est-ce qu'un algorithme ? Explication avec un gâteau au chocolat 🍫

# data[].attributes.attachment_link.description
La présente autoformation vous initiera à un logiciel de dessin 3D nommé Tinkercad. Simple (non simpliste) d'utilisation, parfait pour débuter un dessin rapidement (sans une grande formation), ce logiciel permet, par exemple, de concevoir une pièce à imprimer en quelques minutes.

# data[].attributes.attachment_link.description
Défis en électronique avec ou sans l'Arduino afin de construire le robot lumière.

# data[].attributes.attachment_link.title
Dessin et impression 3D, CS Grandes-Seigneuries

# data[].attributes.attachment_link.description
Journée de formation mains sur les touches à propos du dessin 3D (TinkerCad) et de l'impression 3D en MST.

# data[].attributes.attachment_link.readable_text
How to convert PNG to SVG:

1. Click "Choose Files" button to select multiple files on your computer or click the dropdown button to choose online file from URL, Google Drive or Dropbox. Image file size can be up to 200M. You can use file analyzer to get source image's detailed information such as image size, resolution, quality and transparent color etc.

2. Set target image format, image quality and image size. You can use the original image size or select "Change width and height" option and enter customized image size. The format is [width]x[height], for example: 1920x1080. Image quality option only works on a few image formats such as JPG, WEBP or AVIF etc. The value ranges from 1 (lowest image quality and highest compression) to 100 (best quality but least effective compression). If this value is blank, the converter will use the estimated quality of your input image if it can be determined, otherwise 92. The target image format can be JPG, PNG, TIFF, GIF, HEIC, BMP, PS, PSD, WEBP, TGA, DDS, EXR, J2K, PNM or SVG etc.

3. Click "Convert Now!" button to start batch conversion. It will automatically retry another server if one failed, please be patient while converting. The output files will be listed in the "Conversion Results" section. Click icon to show file QR code or save file to online storage services such as Google Drive or Dropbox.

# data[].attributes.attachment_link.description
PNG to SVG - Convert PNG (Portable Network Graphics) file to SVG (Scalable Vector Graphics) file online for free - Convert image file online.

# data[].attributes.attachment_link.readable_text
Convertir une image au format SVG

Déposez les fichiers ici

Saisissez l'adresse URL Dropbox Google Drive

Ce convertisseur d'image gratuit en ligne permet de convertir des images au format SVG, mais cela reste expérimental pour le moment. Vous pouvez charger une image depuis le PC ou indiquer l'URL menant à l'image que vous souhaitez convertir. Il est ensuite possible d'ajouter des effets numériques pour améliorer la qualité de l'image.

Si vous souhaitez convertir des images au format JPG ou PNG en un format SVG, ce convertisseur SVG convertira votre formes et objets en graphiques vectoriels noirs et blancs sans perte de qualité. Ils peuvent plus tard être ré-affinés ou colorés avec un logiciel de dessin vectoriel gratuit, comme Inkscape. Les photos n'afficheront pas toutes l'effet escompté sur le fichier converti en SVG.

Si vous convertissez depuis un autre format vectoriel, comme EPS ou AI, ce convertisseur tâche de conserver tous les vecteurs et les couleurs, et convertit votre fichier vectoriel le plus fidèlement possible.

Le convertisseur SVG permet de convertir des fichiers de plus de 130 formats différents. Pour plus de détails sur les spécifications du format SVG, rendez-vous sur cette page.

Évaluez cet outil 4.5 / 5

Vous devez convertir et télécharger au moins 1 fichier pour fournir des commentaires

Commentaire envoyé

Merci pour votre vote

# data[].attributes.attachment_link.description
Convertir une image au format SVG avec ce convertisseur gratuit en ligne. Il est possible d'ajouter des effets numériques pour améliorer la qualité des images.

# data[].attributes.attachment_link.title
Thingiverse - Digital Designs for Physical Objects

# data[].attributes.attachment_link.description
Download files and build them with your 3D printer, laser cutter, or CNC. Thingiverse is a universe of things.

# data[].attributes.body
M. Elmoznino

# data[].attributes.body
Montérégie

# data[].attributes.attachment_link.title
Premiers pas Arduino, Montérégie - RÉCIT MST

# data[].attributes.attachment_link.description
Rencontre de travail/appropriation mains sur les touches autour de la robotique Arduino. Présentation de la documentation disponible, des différents projets, etc.

# data[].attributes.body
Campus mst

# data[].attributes.attachment_link.readable_text
Celles et ceux qui ont fait (ou vu) des projets de robotique (Lego ou autres) ont sûrement remarqué que les défis sont souvent des labyrinthes où le robot doit se déplacer en évitant des obstacles.

Dans le présent projet, nous construisons un tel robot à peu de frais (moins de 25$, donc l'élève pourrait même garder son robot).

Attention! Le but ici n'est pas de faire de la compétition de robotique comme on voit avec les robots Lego (NXT, EV3). Mais bien d'apprendre comment ça se passe au niveau des circuits. Il sera relativement difficile de programmer notre robot pour qu'il circule dans un labyrinthe. Par contre, l'élève pourra "voir" au coeur du robot, ce qui est riche en apprentissages.
Note aux débutants : La présente documentation a pour but d'inspirer, non pas d'être copiée-collée sans comprendre le programme et les circuits. Car le copier-coller en Arduino ne fonctionne pas nécessairement.
Les pièces

Pour réaliser notre robot de base, nous aurons besoin des pièces suivantes (les liens sont à titre d'exemple, d'autres fournisseurs peuvent avoir de meilleurs prix).

Le châssis
Attention! Afin d'éviter des bris (suite à la manipulation fréquente des pièces) voir ces conseils.
Avec un peu d'imagination, on peut utiliser plusieurs types de châssis. De l'impression 3D (si vous avez accès à une imprimante 3D, la conception par ordinateur du châssis est une tâche intéressante en science et technologie) à l'utilisation de gouttières en PVC, plusieurs matériaux pourront servir à assembler votre robot.

Voici des exemples de châssis qui ont chacun leurs forces et faiblesses.

Une descente de gouttière divisée en deux (devrait être renforcée, car un peu trop souple).

Une descente de gouttière complète.

Un bouchon de 4″.

Un bouchon de 4″ avec les moteurs à l'extérieur (Jean-François Garneau).

Une morceau de plancher flottant (Jean François Garneau).

Châssis imprimé avec une imprimante 3D (Jean-François Garneau).

Attention! Les connexions électriques (image ci-dessous) sur les moteurs sont fragiles. Pour éviter des problèmes, un renforcement (avec colle chaude ou autres moyens) est nécessaire avant de débuter ses manipulations/expérimentations.

De plus, pour que le robot se déplace en ligne droite, des ajustements seront nécessaires (roues parallèles, le frottement, etc.).

Montage

Le montage pour les moteurs nécessite le pont en H et une alimentation.

Voici la description des connexions dans le schéma ci-dessous (vous aurez à ajuster les sorties selon votre montage).

Le pont en H utilisé ici peut contrôler la vitesse de rotation des moteurs à l'aide des broches ENA et ENB (optionnel dans le tableau ci-haut). Pour débuter, nous vous suggérons de ne pas les utiliser (avoir toujours le maximum de courant dans les moteurs), ceci simplifie un peu le projet.

À noter également la mise à la terre à connecter sur la carte Arduino (protection du circuit).

La programmation
Inspiration :
C'est ici que ça devient intéressant pour la résolution de problème. Car on doit faire des tests pour trouver la bonne orientation des moteurs selon le ce qu'on envoie comme signal dans les sorties 4,5,6 et 7 (les "IN" sur le pont en H).

Voici un exemple pour faire tourner les roues. Le tout est d'observer dans quel sens les roues tournent avec cette programmation et d'ajuster au besoin.

void setup()
{
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
 pinMode(8, OUTPUT);

}
void loop()
{
 //moteur A
 digitalWrite(7, HIGH);//INA
 digitalWrite(6, LOW);//INB
 //Moteur B
 digitalWrite(5, HIGH);//INC
 digitalWrite(4, LOW);//IND
}

Un peu de théorie, capteur de distance

Un des capteurs intéressants pour ce type de bolide est le capteur de distance. Voir cet article pour les détails de son utilisation.

Bolide et distance

Nous voici prêts pour programmer un robot qui avance tant qu'il y a au moins 25 cm d'espace devant lui. Voici une vidéo présentant le résultat.

Le programme en Blockly@rduino est ici (version xml compressée pouvant être importée).

Le programme en mode texte :

# data[].attributes.attachment_link.description
Celles et ceux qui ont fait (ou vu) des projets de robotique (Lego ou autres) ont sûrement remarqué que les défis sont souvent des labyrinthes où le robot doit se déplacer en évitant des obstacles. Dans le présent projet, nous construisons un tel robot à peu de frais (moins de 25$, donc l'élève pourrait même garder son robot).

# data[].attributes.attachment_link.title
Tutoriel : écrire un premier programme avec Arduino

# data[].attributes.attachment_link.title
COMMENT FABRIQUER UN ROBOT AUTONOME AVEC UN ARDUINO ?!

# data[].attributes.attachment_link.description
Share your videos with friends, family, and the world

# data[].attributes.body
École branchée

# data[].attributes.attachment_link.readable_text
À l'automne 2017 a été dévoilée la stratégie numérique du Québec. Un des objectifs visés est d'assurer le développement des compétences numériques, entre autres par l'apprentissage de la programmation. Ce dossier se veut un outil pour faire connaissance avec le développement de la pensée informatique.
Un dossier conjoint de Carrefour éducation et d'École branchée
par Adam Desjardins, enseignant d'informatique,
Amy Tran, enseignante d'informatique et de mathématique,
Marc-André Girard La progression des apprentissages en programmation , directeur du secondaire,
Collège Beaubois
Sommaire du dossier
Remerciements et références
Codage et programmationCodage, programmation et robotique

Robotique
Historique
Pourquoi en parle-t-on maintenant?
Motivation, interdisciplinarité et littératie numérique

Quelques stratégies pédagogiques pour aborder la programmation en classe
Le modelage
L'ordonnancement
L'autorégulation
Voler de ses propres ailes!

La pensée informatique
Décomposer, structurer et reformuler
Autoévaluation - autorégulation

Environnements de développement et langages de programmation
Langages de programmation vs environnements de développement
Langages éducatifs vs " vrais " langages
2 facteurs à considérer dans le choix d'un langage
La syntaxe
L'environnement de développement

Il en est question dans tous les milieux scolaires. On dit parfois programmation, codage ou robotique. On en fait même des compétitions! Ce sont là des composantes d'une compétence du 21 e siècle : le développement de la pensée informatique.

Codage et programmation

En éducation, ces deux termes ont tendance à être utilisés de manière équivalente, ce qui n'est traditionnellement pas le cas dans le domaine de l'informatique.

La programmation fait souvent référence au fait d' analyser des problèmes et de les résoudre à l'aide d'algorithmes, puis de traduire ceux-ci dans l'un des nombreux langages de programmation existants. Ceux qui occupent cette fonction sur le plan professionnel sont des analystes-programmeurs . La fonction de programmeur (sans la partie ) existait lors de l'arrivée des premiers ordinateurs dans les années 1950 et a presque disparu aujourd'hui. À noter que, de façon générale, les algorithmes sont des méthodes de résolution de problèmes à l'aide de différentes étapes de traitement d'un certain nombre de données.

De manière générale, lorsqu'on parle de codage, on fait référence au fait de traduire en langage de programmation un algorithme existant. Bref, la tâche de codage est plus une opération de traduction que de raisonnement en soi. Dans ce dossier et de façon générale en éducation, le terme programmation est privilégié

Que l'on parle de coder ou de programmer en milieu scolaire, l'important sur le plan pédagogique est ceci : plus la tâche implique une grande portion d'analyse, plus on vise l'utilisation de la métacognition et le développement d'aptitudes en résolution de problèmes. Et c'est justement là que se trouve la pertinence de la programmation en contexte scolaire! Nous y reviendrons.

Robotique

La robotique est l'une des façons d'appliquer des notions de programmation. Dans un contexte pédagogique, elle permet de concrétiser certaines notions qui seraient souvent beaucoup plus abstraites si elles étaient enseignées de manière formelle ou traditionnelle. De plus, certaines applications robotiques utilisées en milieu scolaire ne nécessitent peu ou pas de notions approfondies en programmation.

Enseigner les concepts de programmation grâce à la robotique constitue un bon point de départ et prépare les élèves à passer à un niveau de programmation plus formel.

Un aspect intéressant de la robotique est la variété de périphériques d'entrées (capteur de lumière, détecteur de distance, sonde à température, etc.) et de sorties (moteur, lumière, son, etc.) possibles. Il y a également un élément motivationnel pour l'élève dans le fait de voir directement et concrètement les résultats de sa programmation par l'entremise des actions d'un robot.

Historique

Vouloir rendre accessible l'apprentissage de la programmation est une idée qui ne date pas d'hier. Par exemple, en 1964, le langage BASIC a été inventé pour initier les étudiants universitaires et a longtemps été utilisé pour montrer les bases de la programmation.

L'idée d'enseigner formellement cette matière n'est pas nouvelle non plus. On n'a qu'à penser au langage Logo. Les premières versions de ce langage ont été conçues vers la fin des années 1960 et des expériences en contexte scolaire ont été menées dans les années 1970 dans quelques écoles des États-Unis. C'est toutefois dans les années 1980 que les tentatives d'implantation à plus grande échelle ont eu lieu, particulièrement en cinquième et sixième année du primaire, y compris au Québec.

Au Québec, il n'y a pas eu de déploiement à grande échelle d'un enseignement formel de la programmation, outre le programme de formation ISI (Introduction à la science de l'informatique) créé par le Ministère de l'Éducation du Québec en 1982. Ces cours optionnels étaient proposés aux élèves de quatrième et cinquième secondaire, mais ont pratiquement disparu des écoles. D'ailleurs, sans être la raison officielle de cette disparition, le coût des ordinateurs a longtemps constitué un frein à l'implantation des cours de programmation dans les écoles québécoises.

Pourquoi en parle-t-on maintenant?

Nonobstant le désir des grandes entreprises de voir leurs besoins de main-d'œuvre comblés, il faut reconnaître que la capacité de résoudre des problèmes et d'exprimer des solutions dans un langage informatique prend de plus en plus de place dans l'éventail des compétences les plus utiles sur le marché du travail.

À plus large échelle, c'est une prise de conscience collective qui est en train de s'opérer : il faut développer de nouvelles compétences chez les élèves. Par exemple, il devient de plus en plus important que les jeunes développent une compréhension des outils qu'ils utilisent quotidiennement pour en comprendre le fonctionnement, en maximiser l'utilisation et développer un regard critique face à cette même utilisation. En quelque sorte, il s'agit d'un niveau élevé de littératie numérique qui s'opère dans le développement de la pensée informatique.

Motivation, interdisciplinarité et littératie numérique

Les nouveaux besoins du marché de l'emploi coïncident avec d'autres facteurs humains qui constituent une opportunité pédagogique sans précédent. L'attrait des jeunes (et moins jeunes) pour les jeux vidéo en constitue un exemple frappant. En effet, la conception de jeux par la programmation est un tremplin intéressant pour les individus, autant sur le plan motivationnel que pédagogique. Ce sont des apprentissages qui détonnent avec ce que les élèves sont habitués à faire en classe. De plus, la possibilité de concrétiser certains contenus théoriques par la programmation plaît particulièrement aux garçons. Ces situations d'apprentissage se prêtent particulièrement bien à l'interdisciplinarité et à la transversalité. À lui seul, l'apprentissage d'un langage de programmation permet le développement d'une série de compétences transposables dans plusieurs domaines. Par exemple, les tâches informatiques s'intègrent naturellement à celles abordées dans les cours de mathématiques et de sciences. Nombre d'enseignants créatifs extrapolent même ces arrimages en français, en histoire et dans d'autres matières.

L'omniprésence du numérique dans le quotidien ne constitue-t-elle pas à elle seule une raison valable de se questionner sur ce qui se trouve derrière l'écran pour en comprendre le fonctionnement, et ainsi d'évacuer la conception magique que nous sommes portés à octroyer à ces machines? Justement, les cours de programmation pourront diminuer les effets d'un potentiel " fétichisme technologique " (attrait pour le " gadget ") et permettre de garder une distance critique face aux outils utilisés quotidiennement.

Avant même de choisir un outil pour enseigner la programmation, il convient de bien définir jusqu'où on désire accompagner les élèves dans leur apprentissage. Définir les différentes phases d'apprentissage de la programmation est une tâche colossale qui n'est pas encore achevée en ce qui concerne l'enseignement primaire et secondaire, la recherche étant encore à ses débuts dans ce domaine. Malgré cela, il est possible de définir quelques éléments d'apprentissage en consultant ce qui s'est déjà fait par le passé et ce qui semble fonctionner aujourd'hui.
Procédure séquentielle simple
Actuellement, les plateformes les plus populaires destinées à l'apprentissage de la programmation utilisent toutes plus ou moins les mêmes façons de faire : programmation séquentielle, procédurale et événementielle.
Structure répétitive simple

Programmation séquentielle Programmation procédurale Programmation événementielle

Grosso modo, la programmation séquentielle implique la définition d'une " recette " que l'ordinateur doit suivre dans un ordre prédéfini. Pour les élèves plus jeunes, c'est un bon point de départ parce qu'à ce niveau, les programmes sont essentiellement des recettes.

Dans la programmation procédurale, on crée plusieurs " recettes ", appelées routines ou procédures. Cette façon de travailler étant très modulaire, elle permet de décomposer un problème complexe en plusieurs sous-problèmes plus simples.

En programmation événementielle, les procédures peuvent être exécutées suivant certaines actions de l'utilisateur. Un clic de souris sur un bouton est un exemple d'événement qui peut déclencher l'exécution d'une procédure.

Il existe beaucoup d'autres paradigmes de programmation, comme la programmation orientée objet qui demande une plus grande capacité d'abstraction. Ici, l'objet représente un concept, une idée ou toute entité du monde physique, comme une voiture, une personne ou encore une page d'un livre. Il possède une structure interne et un comportement, et il sait interagir avec ses pairs. Il s'agit donc de représenter ces objets et leurs relations ; l'interaction entre les objets via leurs relations permet de concevoir et réaliser les fonctionnalités attendues, de mieux résoudre le ou les problèmes. Il est possible, avec certains élèves de la fin du secondaire, d'aborder ce style de programmation. De plus, il est même souhaitable que les élèves soient exposés bien avant à certains concepts inhérents à cette façon de programmer.

Afin de montrer le plus simplement possible quelle pourrait être la progression des apprentissages au niveau des structures de programmation, voici une série d'exemples en pseudocode illustrant les premières phases d'apprentissages :
Prise de décision
C'est souvent par cette étape que l'on aborde la programmation. Un exercice typique consisterait à faire bouger un personnage dans un labyrinthe, ou encore faire un dessin. Un programme dessinant un triangle équilatéral pourrait ressembler à ceci :

À cette étape, on pourrait imaginer que l'élève doive écrire un programme qui fait bouger une balle vers la droite en déplaçant celle-ci de 100 pixels (le pixel est une unité de mesure de la taille d'une image) au total. Le pseudocode pourrait ressembler à ceci :

Répète 100 fois { Avance la balle d'un pixel vers la droite

}

Lorsqu'on ajoute la structure de programmation répétitive, qui permet d'exécuter une ou plusieurs lignes de code un nombre déterminé de fois, on ne l'utilise effectivement que pour cette tâche. Toutefois, son intérêt se révélera beaucoup plus loin dans le processus d'apprentissage, par exemple, dans les traitements impliquant des variables indicées (comme x 1 , x 2 , x 3 ... x n ) et tout ce qui s'y apparente, notamment les chaînes de caractères et les tableaux.

Ce nouvel élément permet à l'ordinateur de prendre une décision en fonction d'une information qui est variable. Par exemple, le fait de choisir au hasard la couleur des pièces que devra utiliser un joueur d'échecs :

Affecte une valeur aléatoire entre 1 et 2 à la variable xSi x vaut 1 alors { le joueur a les pièces blanches le joueur a les pièces noires

}
Structure répétitive avec condition
Cette phase d'apprentissage comporte plusieurs cas de prise de décision : simple, binaire ou multiple. En voici différents exemples :

Cas simple : Cas binaire : Si x alors a, sinon b.
Cas multiple : Si x alors a, sinon si y alors b, sinon si z alors c, etc.

Cette structure permet de répéter des instructions tant qu'une certaine condition est remplie. Par exemple, un programme qui fait bouger un cheval vers la droite jusqu'à la ligne d'arrivée :

Tant que le cheval se situe avant la ligne d'arrivée { Avance le cheval vers la droite d'une unité

}

Afin de pouvoir résoudre des problèmes de différentes natures, l'élève doit pouvoir combiner ces structures de programmation. Cela nous amène à définir les stratégies pédagogiques permettant de développer de véritables compétences en programmation.

De plus en plus d'enseignants désirant intégrer la programmation dans leurs approches pédagogiques se butent au fait qu'il existe peu d'ouvrages didactiques à cette fin. Ainsi, voici quelques façons d'aborder la programmation, et ce, sans mettre en péril sa gestion de classe!

Le modelage

Exemple d'exercice

Voici une commande qui permet au lutin de poser une question :

Maintenant, à votre tour de créer un questionnaire!

Dès la fin du primaire
L'enseignant peut modeler l'activité en présentant un exemple de programmation et en invitant les élèves à faire de même, avec peu ou pas de divergence face au modèle imposé. Sur le plan cognitif, les élèves sont en contact avec divers éléments liés à la logique, en développant des compétences de structuration des démarches et, finalement, en étant sensibilisés à l'importance d'une démarche rigoureuse.

Cette méthode d'enseignement s'apparente à une liste d'instructions d'une recette : les élèves n'ont qu'à les suivre attentivement pour accomplir la tâche. À notre avis, cette approche est plutôt adaptée pour les jeunes du 1 er cycle du primaire. C'est d'ailleurs ce que l'on retrouve le plus fréquemment dans nos écoles actuellement.

L'ordonnancement

Avec cette deuxième façon de faire, l'élève doit choisir une série d'instructions permettant d'accomplir une tâche parmi celles fournies au préalable par l'enseignant. Ce dernier présente la fonction d'une série de commandes et propose aux élèves de les mettre dans un ordre adéquat. Sur le plan cognitif, cette méthode d'enseignement mobilise la créativité du jeune et permet de développer la prédiction et l'anticipation d'événements. C'est, en quelque sorte, la porte d'entrée du développement des compétences informatiques, soit la capacité de penser de façon séquentielle pour parvenir à un résultat prévisible. Aussi, selon notre expérience, cette façon de faire est plutôt motivante pour les élèves étant donné qu'ils peuvent aboutir à une multitude de résultats différents, ce qui leur confère un certain pouvoir dans leur propre démarche d'apprentissage.

À notre avis, cette approche est particulièrement pertinente pour les jeunes de la fin du primaire. Ces derniers sont alors plus autonomes et, en cas de blocage, ils ne craignent pas d'employer une démarche d'essai-erreur. De plus, étant donné que les programmes écrits sont uniques à chaque élève, une discussion sur la propriété intellectuelle est facilement envisageable suite aux activités pédagogiques, sans compter que des activités de débat ou de critique constructive peuvent également être tenues. Ce qui importe ici, c'est de permettre à l'élève de justifier ses choix et de les expliquer.

L'autorégulation

Parlant d'esprit critique, voici une approche un peu plus avancée où les élèves sont amenés à approfondir leurs connaissances des différentes commandes en programmation en analysant un programme déjà écrit et en y repérant des aspects-clés.

Comme mentionné précédemment, la tâche de codage se compare aisément à une tâche de traduction. D'une part, l'enseignant peut présenter un programme aux élèves et leur poser des questions précises quant aux différents résultats à prévoir. Cet exercice de verbalisation de l'abstraction permet en outre, d'une façon bien intéressante, de développer les compétences analytiques des jeunes en décortiquant les blocs de programmation et en les traduisant dans une pensée plus formelle, prête à être réinvestie dans l'action.

D'autre part, l'enseignant ou le tuteur peut présenter un programme comportant des erreurs techniques aux élèves et leur demander d'y remédier. Cet exercice est plus communément appelé une Cognitivement, cette approche favorise le développement des compétences autorégulatrices, lesquelles s'apparentent à un raisonnement métacognitif. Au lieu de voir les erreurs comme étant des catastrophes, ce type d'exercice invite les élèves à apprendre et à tirer profit des erreurs pour les transformer en réussites. De plus, le développement de nombreuses autres compétences est favorisé, comme la capacité de déconstruire un problème pour en identifier toutes les composantes et ainsi bâtir une solution originale et novatrice.

Cette approche peut être entamée chez les élèves du 1 er cycle au secondaire et, fait intéressant, elle permet le développement de plusieurs compétences transposables dans les autres disciplines, notamment les mathématiques, les sciences et l'éthique.

Voler de ses propres ailes!

Finalement, l'enseignant propose aux élèves d'écrire leur propre programme pour accomplir une tâche. L'enseignant doit adopter un rôle d'observateur et de guide en invitant l'élève à réfléchir par lui-même à sa propre démarche de programmation : quels ont été mes erreurs et les obstacles rencontrés? Comment m'y suis-je pris pour les outrepasser?

Le rôle de l'enseignant consiste également à créer une communauté de partage des connaissances et des apprentissages au sein de la classe pour susciter la collaboration chez les élèves. Comment peuvent-ils s'aider mutuellement à surpasser les obstacles? Des conseils à offrir? Des expertises à partager?

Aussi, afin d'expliciter les processus métacognitifs de l'élève face à la tâche, il est recommandé d'adopter une méthodologie rigoureuse, telle que la tenue d'un journal de bord. Cet outil peut recueillir les traces de recherche, les plans de conception, un bilan de la progression à chaque cycle, une évaluation des pairs, des autoévaluations, etc.

Cette façon d'enseigner ne mise pas sur l'apprentissage des blocs de code spécifiquement, mais plutôt sur le développement d'une compétence issue de la pensée informatique dans une pleine autonomie.

Il se peut que vous ayez entendu parler de la pensée informatique (parfois appelée pensée computationnelle ), ou bien de sa forme anglaise computational thinking . Peu la connaissent, mais plusieurs la pratiquent sans s'en rendre compte. En fait, en 2006, Jeannette Wing a inspiré un grand nombre d'éducateurs en déclarant ceci :

La pensée informatique est un ensemble d'attitudes et d'acquis universellement applicables que tous, et pas seulement les informaticiens, devraient apprendre et maîtriser.

En effet, la pensée informatique s'apparente à une compétence ou une façon de faire du 21 e siècle. Le monde de l'informatique est souvent perçu comme un domaine abstrait et complexe. Par exemple, les discussions à propos d'intelligence artificielle et de voyages vers Mars exposent des réalités de plus en plus abstraites et difficiles à saisir. De plus en plus de problématiques nécessitent que l'être humain fasse appel à une machine afin de les résoudre. La pensée informatique , c'est donc "  une forme de raisonnement permettant de résoudre des problèmes complexes " en analysant une situation, en la décortiquant et en l'abordant de façon séquentielle. C'est une manière d'aborder un problème étape par étape et de prévoir les incidences de chacun des gestes qui sera posé.

La pensée informatique n'est donc pas l'apanage de la science informatique et, bien au contraire, elle constitue un atout dans toutes les disciplines scolaires et dans toutes les sphères de la vie quotidienne.

Décomposer, structurer et reformuler

La pensée informatique contribue énormément au développement des compétences en résolution de problèmes. Quelle est la tâche à accomplir? Est-elle difficile? Si oui, à quel moment précisément devient-elle complexe? Évoluer dans un monde informatique favorise les habiletés à décomposer un problème, en restructurer les tâches et en reformuler les objectifs.

Les ordinateurs ne sont pas capables de penser par eux-mêmes, du moins, pas encore. Ainsi, toutes les choses merveilleuses qu'ils accomplissent viennent des commandes précises rigoureusement formulées par l'humain.

Autoévaluation - autorégulation

En ce qui concerne le choix d'un langage de programmation aux fins d'enseignement, il faut distinguer plusieurs choses.

Langages de programmation vs environnements de développement

Le langage de programmation fait référence à la f açon de coder : la syntaxe et le paradigme de programmation supportés. Quant à lui, l' environnement de développement fait référence au cadre logiciel dans lequel on utilisera un langage de programmation.

Par exemple, l'environnement de développement Visual Studio permet de programmer dans plusieurs langages tels que C++, Python, C#, Visual Basic, etc. Par contre, on ne peut pas dire qu'on a programmé quelque chose en Visual Studio, mais on pourrait dire qu'on a programmé quelque chose dans Visual Studio en utilisant le langage C++. Dans le même ordre d'idées, on peut dire qu'on a programmé quelque chose avec , mais dans ce cas, on fait référence à la fois à l'environnement de développement et au langage de programmation.

Langages éducatifs vs " vrais " langages

Aussi, il faut distinguer les langages créés dans un but purement pédagogique de ceux qui permettent la création de véritables applications pouvant être distribuées. Par exemple, Scratch, Blockly et beaucoup d'autres langages visuels ont été développés spécifiquement pour l'apprentissage des bases de la programmation. Ils conviennent parfaitement aux élèves du primaire et du début secondaire. Par contre, plus les élèves développent des compétences dans ce domaine, plus ils voudront exploiter de véritables applications nécessitant des structures de programmation que n'offrent pas ces langages visuels.

2 facteurs à considérer dans le choix d'un langage

La syntaxe

La première chose à considérer dans le choix du langage de programmation est la syntaxe. Voici deux exemples de code où l'on additionne tous les nombres entre 1 et 10 pour affecter le résultat à une variable x :

Le code de gauche est en langage BASIC alors que celui de droite est en C++.

Sans connaître la programmation dans ces deux langages, on peut constater que le code de gauche possède moins d'éléments syntaxiques que celui de droite et se rapproche un peu plus d'une langue naturelle : " pour i compte de 1 à 10 et répète : x est augmenté de i ". Le code écrit dans les langages visuels comme Scratch est beaucoup plus simple. La transition vers des langages formels sera plus facile si l'on tient compte de cette simplicité syntaxique.

L'environnement de développement

La deuxième chose à considérer est l'environnement de développement. Le fait de pouvoir créer une interface en déplaçant des objets sur une fenêtre accélère la programmation et permet d'obtenir des résultats plus rapidement, ce qui n'est pas négligeable sur le plan motivationnel. Il existe plusieurs solutions sur le marché, dont certaines sont gratuites lorsqu'elles sont utilisées dans un contexte éducatif. XOJO ( www.xojo.com ) en est un exemple intéressant. Il offre un environnement graphique et permet de coder dans un langage orienté objet dérivé du BASIC.

Peu importe la solution que l'on retient pour enseigner la programmation de manière formelle, il convient de minimiser le temps consacré à l'apprentissage de la syntaxe du langage et, conséquemment, minimiser le temps que les élèves auront à consacrer au débogage pour des erreurs syntaxiques. Tout cela afin de consacrer un maximum de temps à la logique de programmation qui permet de développer la pensée informatique.

Il existe des dizaines d'outils pour enseigner la programmation dans un cadre robotique. En voici quelques exemples, présentés dans un contexte de progression des apprentissages.

Bee-bot et Blue-bot

Bee-bot est un robot qui peut se déplacer sur une surface. Pour le programmer, il suffit d'appuyer sur des flèches sous forme de boutons. offre les mêmes fonctions de base que , mais il est programmable en utilisant une application disponible sur iOS ou Android.

Les enfants d'âge préscolaire et du début du primaire pourront utiliser cet outil pour débuter l'apprentissage de la programmation séquentielle en faisant suivre au robot des chemins sur un tapis de jeu, ou pour trouver un chemin à travers des obstacles. Des ensembles contenant des activités et plusieurs robots sont disponibles. Il s'agit d'un bel outil pour introduire la pensée informatique.

Le prix de détail d'un est d'environ 140 $, alors qu'on devra débourser approximativement 190 $ pour le .

Cubelets

Les enfants du préscolaire et du primaire pourront apprendre des principes de robotique, mais également être exposés à une certaine forme de logique formelle, puisque des cubes permettent d'effectuer des inversions et des opérations minimum ou maximum. Ces dernières équivalentes aux trois opérateurs de base en logique : le " et ", le " ou " et la négation. De plus, les sont adaptés à cette clientèle et sont robustes.

On devra investir environ 400 $ pour un ensemble de 12 , convenant à une équipe de deux élèves. D'autres ensembles sont disponibles, allant jusqu'à près de 6 000 $ pour la trousse de l'enseignant et 162 Cubelets, avec tous les accessoires nécessaires (chargeurs, câbles et adaptateurs ).

LEGO Mindstorms EV3

Mindstorms EV3 est un ensemble d'éléments robotiques programmables offrant une immense variété de designs possibles. Il nécessite l'usage d'une application pour tablette Android ou iOS ou d'un logiciel pour ordinateur (Mac ou PC). La programmation est très visuelle, sous forme de blocs interconnectés en séquence.

a eu la brillante idée d'intégrer la robotique à ses légendaires blocs, ce qui permet d'initier les enfants à la pensée informatique tout en développant leur motricité fine.

L'âge minimum recommandé par pour cet ensemble est 10 ans, soit dès la quatrième ou cinquième année du primaire, notamment à cause des petites pièces. Mindstorms demeure une solution intéressante pour plusieurs années par la suite, y compris au début du secondaire. De nombreux concours de robotique utilisent Mindstorms et sont de plus en plus populaires au Québec comme ailleurs dans le monde. Un ensemble de base se détaille environ 430 $.

mBot

Le prix de cette gamme de robots, environ 130 $ pour le modèle le plus abordable, est une autre force de ce produit. Cela en fait un robot accessible autant pour les écoles que les familles.

Arduino

Bien qu'il en existe plusieurs variantes, il s'agit essentiellement d'un microcontrôleur électronique permettant d'analyser ou d'émettre des signaux électriques. On peut l'utiliser pour lire l'information provenant de capteurs, commander des moteurs, etc. On doit le programmer avec le langage C++, ce qui, pour l'enseignant, nécessite certaines connaissances de base en programmation.

Raspberry Pi

Le Raspberry Pi est un petit ordinateur fonctionnant sous , un système d'exploitation libre. Il occupe un très petit volume et offre plus de puissance de calcul qu'un . Ceci permet notamment de contrôler beaucoup de composantes ou d'appareils en même temps.

Nous tenons à remercier Brault & Bouthillier qui nous a permis de tester certains des produits mentionnés dans ce dossier.

Les produits mBot, Arduino Uno et Raspberry Pi ont été achetés chez Abra Electronics, à Montréal.

Références
A National Talent Strategy: Ideas for Securing U.S. Competitiveness and Economic Growth : http://www.microsoft.com/en-us/news/download/presskits/citizenship/MSNTS.pdf
Activité de débogage : Brennan K., Balch C., Chung M. Informatique créative . Harvard Graduate School of Education, Creative Commons. En ligne : https://files.inria.fr/mecsci/CreativeComputingFr/CreativeComputing20140806_FR_ttfrancais.pdf

Jeannette Wing: Wing J., " Computational Thinking ", Communications of the ACM , March 2006, vol. 49,n o 3.

Pensée informatique : Girard, M.-A. (2016). [Entrevue avec Alexandre Lepage] La pensée informatique : accessible à tout le monde. En ligne : www.ecolebranchee.com/2016/12/07/pensee-informatique-accessible/

# data[].attributes.attachment_link.title
La programmation et le développement de la pensée informatique

# data[].attributes.attachment_link.description
À l'automne 2017 a été dévoilée la stratégie numérique du Québec. Un des objectifs est d'assurer le développement des compétences numériques, entre autres par l'apprentissage de la programmation. Ce dossier se veut un outil pour faire connaissance avec le développement de la pensée informatique.

# data[].attributes.attachment_link.description
Hackster is a community dedicated to learning hardware, from beginner to pro. Share your projects and learn from other developers. Come build awesome hardware!