Algorithmes et Computational Thinking

Un algorithme est une méthode qui résoud un problème.

Nous allons aborder cette notion d'algorithme et celle de "pensée algorithmique" ou "computational thinking". L'objectif est de résoudre des problèmes avec plusieurs types de raisonnements : la décomposition, l'abstraction, la reconnaissance de formes (pattern recognition) et la logique algorithmique.

Organisation du cours

Ce cours est largement basé sur la réalisation d'applications qui permettent de voir les différentes notions dans leur contexte (mode projet). Une grande partie des notions est associée à des vidéos que vous pouvez regarder par vous même et à votre rythme (classe inversée) avant de faire les exercices ou réalsier les applications en groupe (de préférence). Il comprend également des quiz auquel chacun peut répondre avant d'en discuter en groupe ou en calsse entière.

Le cours porte sur les notions de base et la manière de les mettre en oeuvre dans le xadre de projets. Il n'est pas spécifique à un lanagge mais vise à préparer à la programmationa evc javaScript. On va utiliser principalement deux langages : Scrath et javascript. Le premier donne une vision de plus haut niveau et permet de réaliser des applications très rapidement. Par contre, certaines notions sont absentes ou incomplètes, dont les listes et les objets. Le second est plus complet et nous l'utiliserons en particulier pour illsutrer les algorithmes de tri.

Mais vous verree que les applications Scratch (ou la plupart) peuvent être traduites en javascript et chacun des concepts importants sera illustré dan sles deux langages.

Notions abordées

  1. Concepts de base
    • l’algorithme comme méthode de résolution de problème
    • structure d’un algorithme (séquences, itérations, et conditions) et notions utilisées (variables, procédures, …)
    • analyser un problème et le décomposer en problèmes plus simples : l'abstraction procédurale
    • identifier les données qui décrivent un problème ou système : l’abstraction de données,
  2. Qu’est-ce qu’ un ordinateur, un langage, un IDE
    • qu’est-ce un ordinateur (logiciel et matériel)
    • qu’est-ce qu'Internet (généralisation avec les API)
    • l’architecture par couche du logiciel (abstraction layers)
    • les langages (niveau, procédural/objet, typés/non typés, séquentiel/évènementiel)
  3. Les données et leur l’organisation
    • variables et types de variables, assignation et opérateurs
    • tableaux, dictionnaires et objets
  4. Le computational thinking ou la pensée algorithmique
    • analyser un problème pour identifier et organiser les données
    • décomposer un problème en sous-problèmes plus simples
    • utiliser la logique pour concevoir une solution (flowhart et pseudo code)
    • identifier des problèmes similaires qui ont déjà une solution
  5. Développer dans le cadre d’un projet, d’une entreprise et pour un client
    • spécifier, concevoir, développer, tester (Cahier des charges etcycle en V)
    • Design Thinking : prototypage, MVP (minimal viable product)
    • Bonnes pratiques, exigences de qualité, documentation, réutilisabilité, modularité, règles de style
  6. Réaliser des applications
  7. Passer à JavaScript

Remarques

L'essentiel dans la réalisation d'une application informatique n'est pas la programmation. Vous passerez bien plus de temps à mettre au point (debugger) vos programmes qu'à les écrire.

" si le deboguage et le procédé qui consiste à retirer les bogues d'un logiciel, alors la programmation et le procédé qui consiste à les mettre"
― Edsger W. Dijkstra

Ce cours propose une revue des notions de base en informatique et sur les méthodes pour les mettre en oeuvre, de façon à donner tort à la critique ironique de Dijkstra.

  • Décomposition : Vous éviterez les erreurs les plus graves si vous savez analyser et décomposer un problème en problèmes plus simples,
  • Abstraction : vous éviterez de vous noyer dans les détails en prenant de la hauteur avec les méthodes d'abstraction (de données et procédurale),
  • Reconnaissance de formes: vous gagnerez du temps en comparant le problème à résoudre, à des problèmes similaires déjà résolus (pattern recognition),
  • Enfin la logique algorithmique permettra de raiter les questions techniques de base (le plus souvent en réutilisant la solution à un problème similaire).

Les applications professionnelles sont toujours des projets réalisés à plusieurs, généralement à partir d'autres projets. Si votre code est bien construit, fiable et facile à lire, ça ce saura vite. Si vous êtes responsable d'une équipe, vous saurez vite qui embaucher ou éviter.

Présentation du cours

Pour mieux vous connaitre, nous vous serions reconnaissants de remplir la fiche de renseignement suivante : fiche de renseignement

Droits d'utilisation et attribution

Le contenu de ce cours est en Creative Commons.
Attribution : "Initiation à la programmation mobile" by onvaessayer.org licence CC BY NC SA 4.0

Vos commentaires et suggestions sont utiles        Envoyer un commentaire

Pierre Huguet