Algorithmes et blocs
« Algorithme + structure de données = programme » (Nicklaus Wirth)
Lorsque l’un des pères de la programmation structurée, Nicklaus Wirth a posé cette équation simplissime, il a en même temps jeté les bases de la pédagogie du codage, au moins pour les langages de troisième génération comme le C ou le Pascal.
Il ne manquait que la gestion des événements et, un peu plus tard, l’encapsulation des données et des traitements, pour que ces principes s’appliquent à tous les cas de figure, ce qui est bien commode pour programmer un Arduino.
L’algorithmique est fondamentale et permet de régler par une succession d’instructions tout un ensemble de problèmes, répartis en classes de complexité. L’apprentissage de l’algorithmique est enfin entré dans les programmes scolaires et n’est plus l’apanage des cours de mathématiques et de programmation, qui partagent la même rigueur. L’assemblage des blocs de Scratch a remplacé les équations, les prédicats et les invariants de boucle. Le langage des algorithmes a peut-être évolué vers une représentation beaucoup plus visuelle et la possibilité d’un test instantané de leurs résultats qui a réduit considérablement le temps de la réflexion préalable. Il n’est pas certain que ce soit une bonne chose et il est même sûr que les algorithmes trop vite codés sont plus souvent à jeter un peu plus tard, car incapables d’évoluer. Mais il vaut mieux un accès plus rapide qui suscite un intérêt que pas de pratique de l’algorithmique.
Les structures de données ont évolué dans deux directions. La première visait à optimiser leur encombrement en mémoire, qui reste le composant le plus coûteux, et a permis de définir des types de données dont le choix judicieux permettait d’atteindre cet objectif. La seconde visait à professionnaliser la programmation et à augmenter son potentiel de traitement en ajoutant des types de données structurées comme les fichiers, les listes et les piles.
1. Les structures de contrôle
Elles se limitent à trois...
Qualités et défauts des algorithmes (complexité, rapidité, "gloutonnerie")
Un algorithme a toujours une, voire des qualités. En premier, il apporte la solution à un problème et permet de la systématiser. Il doit également être rapide dans son exécution ou dans sa compréhension. Enfin, il doit être possible de le faire évoluer sans un coût exorbitant et par quelqu’un qui n’en est pas forcément le créateur ou l’inventeur. Deux mots qui suggèrent une part d’inspiration voire de hasard heureux dans la réalisation, mais qui sont en fait le fruit de l’expérience et d’une disposition d’esprit.
Il est important de dissocier les caractéristiques d’un algorithme de celles du programme qui l’implémente. L’algorithme est mathématique, logique, heuristique. Il est hors des contingences matérielles que suppose la programmation qui doit prendre en compte les contraintes d’une plate-forme technique sur laquelle devra s’exécuter un code binaire rédigé dans un langage informatique et généré par un compilateur spécifique. Sans oublier les langages interprétés plutôt que compilés et qui impliquent des particularités dans le fonctionnement du programme : une machine virtuelle qui ne peut s’allouer qu’une partie des ressources matérielles, un mode en ligne de commande qui oblige à compacter et à imbriquer au maximum.
1. Les critères de choix ou d’évaluation des algorithmes
Comme pour les langages de programmation, il existe des critères de choix entre les différentes possibilités, mais également des grilles d’analyse qui permettent d’évaluer leur pertinence ou leur efficacité.
En général, il existe déjà plusieurs algorithmes pour résoudre un problème particulier (il en existe au moins dix pour le calcul de la date de Pâques) et avant de concevoir sa propre solution, il est utile de les évaluer à l’aide...
Aller au-delà de Scratch : utiliser la bibliothèque de blocs de mBlock
Dans les ateliers de codage, les forums, les labs et tout autre endroit où est discuté le choix d’une technologie ou d’une plate-forme, le sujet se focalise sur une offre ou un fournisseur.
Mais il est probablement plus juste de se faire une raison et d’essayer de donner une ligne directrice ou au moins une trajectoire aux technologies utilisées. À l’heure de la publication de cet ouvrage, Scratch existe depuis un certain temps et est désormais connu et reconnu par de très nombreux utilisateurs. C’est une très bonne base de travail et particulièrement bien installée, puisqu’accessible depuis n’importe quel point d’Internet. Il en existe d’ailleurs plusieurs variantes ou adaptations et l’atelier mBlock en est un exemple.
Toutefois, les actions dans Scratch ne dépassent pas le monde virtuel qui est celui de l’environnement graphique de l’ordinateur sur lequel sont exécutés les scripts. Cela reste un outil puissant de création et de conception de programmes, voire d’algorithmes et dans tous les cas un formidable moyen d’apprendre la logique de programmation.
Mais la possibilité d’agir et d’interagir avec le monde physique, par le pilotage de moteurs ou de servomoteurs, la lecture de valeurs mesurées...