Logo du projet

Pensée computationnelle avec JavaScript

Mattia A. Fritz
TECFA, Université de Genève

Problème

Frère Luc est l'intendant de l'abbaye. Très économe, il réutilise les bouts de cierges usagés pour en faire de nouveaux. Il est capable de reconstituer un cierge à partir de trois bouts de cierges qu'il fait fondre.

Combien pourra-t-il reconstituer de cierges avec les neuf bouts de cierges qu'il a récupérés ce matin dans l'abbatiale ?

Solution cognitive

  1. Avec 9 bouts, il peut reconstituer 3 cierges.
  2. En brûlant les 3 cierges, il récupère 3 nouveaux bouts.
  3. Avec ces 3 bouts supplémentaire, il peut reconstituer 1 nouveau cierge (récursivité).

Au total, il récupère 4 cierges !

Solution computationnelle

Implémentation en code JavaScript.


            //Set the initial number of pieces available
            var numberOfPieces = 9;
            //How many pieces are needed for a candle?
            var piecesRequired = 3;
            //Set a variable to be incremented for each new candle
            var totalCandlesObtained = 0;
            //Go on until the number of candles can be divided by the pieces
            while (numberOfPieces / piecesRequired >= 1) {
              //At each cycle define the new number of candles
              numberOfPieces = Math.floor(numberOfPieces / piecesRequired);
              //Add it to the previous total
              totalCandlesObtained += numberOfPieces;
            }
            //Print the result
            console.log('TOTAL:' + totalCandlesObtained + ' candles');
          

Récursivité

Généralisation du code


Au total, il obtient {{totalCandles}} cierges.

Connaître la récursivité dans le codage facilite la résolution cognitive du problème ?

Pensée computationnelle est ?

Dans la littérature scientifique, les différentes définitions de la pensée computationnelle peuvent être placées sur un continuum entre deux pôles opposés :

Continuum entre deux pôles

Capacités
Individuelles

Interaction
Personne-Machine

Processus universel

Nous considérons que la pensée computationnelle est le processus de pensée impliqué dans la formulation des problèmes afin que leurs solutions puissent être représentées sous forme d'étapes de calcul et d'algorithmes.

— Aho 2012, p. 832

Traduction libre

Processus délimité

Un algorithme n'est pas une séquence d'étapes quelconques, mais une série d'étapes qui contrôlent une machine abstraite ou un modèle de calcul sans nécessiter de jugement humain. La pensée computationnelle inclut la conception du modèle, et non seulement les étapes pour le contrôler.

— Denning, 2016, p. 33

Traduction libre

Troisième dimension sociale

Diagramme avec intersection de trois cercles

Processus émergent

La pensée computationnelle est un phénomène émergeant de l'interaction entre l'individu, la technologie, et la communauté de référence. La pensée computationnelle possède une dimension sociale que l'individu et la technologie subissent, mais peuvent également déterminer : l'individu avec ses choix ; la technologie avec son fonctionnement.

— Fritz, 2019

Définition provisoire

Informatique : science sociale ?

Étant donné que l'informatique en tant que discipline est de plus en plus intégrée dans la vie humaine et sociale, l'informatique en tant que discipline universitaire doit s'éloigner des modèles de programmes d'études inspirés par l'ingénierie et intégrer les perspectives analytiques fournis par les théories et les méthodologies des sciences sociales.

— Connolly, 2020

Traduction libre

Informatique : science sociale ?

Mouvement bi-directionnel

L'informatique regarde aux sciences sociales, et les sciences sociales utilisent de plus en plus l'informatique.

Informatique

Sciences sociales

Définition pragmatique

La pensée computationnelle est un terme se référant, de manière plutôt flexible, à un ensemble d'habiletés, compétences et procédures qui facilitent la résolution de problèmes en s'appuyant sur des principes tirés des sciences informatiques.

— Fritz & Schneider, 2019

Composantes principales

Schéma avec 4 composantes

Décomposition

Diviser un problème complexe ou un système en petites parties plus simples à gérer.

S'il y a un problème que vous ne pouvez pas résoudre, alors il y a un problème plus facile que vous ne pouvez pas résoudre : trouvez-le.

— Polya, 1945/2014

Traduction libre

Reconnaissance de pattern

Identifier des similarités entre problèmes ou à l’intérieur du même problème donné.

Chaque élément de connaissance doit avoir une représentation unique, non ambiguë et faisant autorité au sein d'un système.

— Hunt & Thomas, 1999

Traduction libre

Abstraction

Se focaliser exclusivement sur les parties importantes du problème.

Le processus d'abstraction — qui consiste à décider quels détails nous devons mettre en évidence et quels détails nous pouvons ignorer — est à la base de la pensée computationnelle.

— Wing, 2008, p. 3718

Traduction libre

Algorithmes

Trouver une solution à travers une règle composée par une série d’étapes.

Un algorithme est une procédure de calcul bien définie qui prend une valeur, ou un ensemble de valeurs, comme entrée et produit une valeur, ou un ensemble de valeurs, comme sortie.

— Cormen, Leiserson, Rivest, & Stein, 2009, p. 5

Traduction libre

Mais...

Ces informations ne sont pas suffisantes pour apprendre et tirer profit de la pensée computationnelle. Il est nécessaire de combiner les connaissances déclaratives et procédurales.

Schéma de la mémoire

Comment ?

Il existe principalement trois modalités d'enseignement de la pensée computationnelle qui peuvent être combinées :

  1. Activités débranchées
  2. Environnements avec blocs de code
  3. Langages de programmation textuels


Plus de recherche nécessaire sur bénéfices et transfert entre différentes modalités.

Activités débranchées

Activités qui n'utilisent pas un dispositif numérique, mais une modélisation abstraite du fonctionnement.

Exemple d'activité débranchée
Programming Boty de L. Boufflers et S. Linh Quang.

Blocs de code

Environnements graphiques qui emboîtent des instructions en forme de briques.

Exemple de bloc de code Capture d'écran de Scratch. Crédits : Thenerdie / CC BY-SA

Langages de programmation

Utiliser une notation conventionnelle destinée à formuler des algorithmes et produire des programmes informatiques qui les appliquent.

Continuum entre deux pôles

Informatique *

Sciences sociales

* Pas dans toutes les filières

Pourquoi JavaScript ?

  1. Disponible dans les navigateurs web (environnement pour commencer)
  2. D'une simple page web interactive à applications complexes
  3. Un langage pour les gouverner tous (web, logiciels, objects connectés, ...)
Logo JavaScript
Logo non officiel de JavaScript
Toute application qui peut être écrite en JavaScript, sera éventuellement écrite en JavaScript

— Loi de Atwood

Utilisation en sciences sociales

Quelques cadres d'utilisation possibles :

  • Applications multimédia pour l'éducation, la rééducation ou la remédiation
  • Analyse et visualisation dynamiques de données
  • Animation et simulation de phénomènes
  • Matériel expérimental et plateformes de recherche online
  • Sites pour projets ou labos "grand public" (look and feel)
  • ...

Terrain difficile

Se trouver entre deux systèmes computationnels complexes et distincts, en plus distribués !

Cerveau et dispositifs numériques comme systèmes computationnels

Pour aller plus loin

Les concepts abordés dans cette présentation sont traités de manière plus exhaustive dans Initiation à la pensée computationnelle avec JavaScript sur EduTechWiki.

EduTechWiki est un wiki sur la technologie éducative hébergé est maintenu par TECFA, une unité de l'Université de Genève, depuis 2006.

Merci pour votre attention !

Mattia A. Fritz
TECFA, Université de Genève

Licence Creative Commons
Présentation créée avec Reveal.js.