... étudier l'Informatique?... Maîtriser une centaine de concepts et de formalismes :
et puis, vos encadrants en TP, projets, stages, et vos patrons dans votre vrai travail vous demandent à programmer tout ça ! Et la programmation est pénible, frustrante et énervante, difficilement partageable...
Mince, alors où est le plaisir?!
Ce diagramme est un programme exécutable en XCos. Je veux vous montrer comment coder de cette manière, par l'assemblage d'un "circuit" composé de "boîtiers" connectés.
Avant de passer aux exemples et démonstrations, un commentaire. Il ne faut pas se tromper :
... Mais il ne faut pas oublier, qu'une "conditionnelle" n'exécute pas une commande ou autre, selon un critère, mais une donnée spécifique déclenche l'aiguillage des données (d'entrée ou sortie) entre les noeuds source – cible.
Les données circulent sur les lignes-routes en parallèle, et la synchronisation des actions, l'exécution d'une avant ou après une autre, est un sujet très compliqué et difficile, on peut engendrer plusieurs erreurs, comme dans un système électronique matériel.
Pour rendre les processus lisible pour les humains, Xcos utilise les horloges, qui engendrent les signaux de contrôle.
Cependant, par ex. Simulink par défaut utilise un horloge global, invisible, et les séquences de données "marchent" selon un "temps cosmique"...
Voici un simple diagramme en Matlab-Simulink :
Il montre que ce système synchronise les actions de manière différente de XCos... On note également que l'amas de "fils" peut être simplifié grâce aux multiplexeurs, qui combinent les "lignes parallèles" en séquences composites. Il faut aussi savoir qu'un circuit peut être "emballé" dans un bloc utilisateur, placé dans une librairie et réutilisé, comme procédures dans des langages textuels.
Node-RED est un système qui complète un serveur universel (pas seulement Web, comme Apache) sur votre ordinateur, et permet de piloter les objets connectés. Au lieu de sortir des messages (debug, console), le programme-flot peut envoyer un mail ou un message Twitter, engendrer un signal sur un pin de votre Raspberry, piloter un drone ou tourner votre caméra de surveillance, etc.
Il faut savoir programmer en Javascript: ici le système sert plutôt comme un dispositif d'intégration logicielle, que comme un environnement de codage de bas niveau, même si souvent possible.
Les blocs une fois construits et testés, peuvent être placés dans des librairies et réutilisés, comme dans tout autre système de programmation.
!! Ne confondons pas les architectures dataflow, et le côté visuel du codage. On trouve des "Visual Studios", "Visual C++" etc., qui (disons...) facilitent l'édition des programmes textuels grâce aux interfaces facilitant le regard de l'utilisateur. (Blockly etc. sont comme ça). Souvent ceci n'a rien à voir avec la signification profonde des diagrammes qui composent les programmes. On peut faire le codage par flots sans diagrammes exécutables, avec des langages classiques (Haskell, Clean, Python, Java, Javascript, etc.) Les diagrammes guident les humains.
Le modèle de corde pincée : "guitare" est dessiné ici.
Et, c'est du Javascript :
Freq.:
On initialise un tampon de retardement par l'excitation arbitraire. Ensuite les données se propagent comme des ondes dans une corde, et s'atténuent, en fonction de la fréquence de l'onde ; les fréquences inversement proportionelles à la longueur de la "corde" (+ harmoniques) survivent, et on obtient un son purifié, musical.
Faire cela en Javascript est pénible... Il y a des langages , où on peut construire des structures-boucles, "virtuellement infinies", qui "se mangent la queue". Avec une forte simplification de forme, on code la corde comme
signal = initRand (44100.0/freq) ++ filtr signal where filtr liste = 0.5 * (liste + retard liste) retard (x0 : reste) = reste(bien sûr, il faut pomper cette séquence vers le module de sortie, mais c'est une autre histoire.)
Pour terminer...
La situation dans le domaine de la programmation visuelle montrée ici est un peu paradoxale. Visiblement elle est utile, amusante, et assez populaire dans les milieux professionnels. Cependant, on ne l'enseigne presque pas !!
Le résultat est que les jeunes informaticiens ne connaissent pas ces langages, mais surtout : ne sont pas capables d'en créer des nouveaux. La programmation dataflow devient une sorte de magie noire, ce qui décourage les créateurs des programmes d'enseignement universitaire / ingénieur de les enseigner, et le cercle vicieux est bouclé : le domaine évolue grâce aux "gourous", et presque tous les systèmes comme ça sont payants. Je compte sur vous pour changer cet état d'affaires !