Programmation par glisser-déposer - cela volerait-il? [fermé]

12

Tous les langages de programmation que je connais sont écrits - c'est-à-dire tapés sous forme de longueurs de texte d'une manière ou d'une autre. Mais je me demande s'il y a un langage de programmation où vous pouvez simplement glisser-déposer le programme entier; pour obtenir une boucle, sélectionnez cette case ici et faites-la glisser vers cette section du "code" là-bas, et ainsi de suite. Et s'il n'y en a pas un comme ça, cela volerait-il si on était inventé?

Personnellement, je ne pense pas que ce serait une si bonne idée, mais j'aimerais savoir ce que vous en pensez.

gablin
la source
Ne dites jamais jamais (vous avez dit: "Je ne pense pas que ce serait une si bonne idée") - il peut y avoir une situation étrange, où l'idée la plus étrange peut bien fonctionner.
ern0
6
"Est-ce que ça volerait?" Honnêtement, si je pensais que les systèmes de commandes de vol dans l'avion que je suivais étaient programmés par quelqu'un qui faisait de la programmation par glisser-déposer, je ne pourrais pas monter dans cet avion. ; D
glenatron
J'aime vraiment cette question, même si je souhaite que certaines des réponses soient plus longues et plus profondes.
Nicole
1
Ironman l'utilisera et volera! Mais il n'existe pas dans le monde réel!
Manoj R
@glenatron - Alors voyagez en train ... Les systèmes de contrôle de vol sont pour une partie des automates à états finis qui sont construits graphiquement et pour une autre partie des systèmes d'ingénierie de contrôle qui sont construits à partir de blocs de base et assemblés dans des interfaces GUI. Le reste est UML.
mouviciel

Réponses:

23

Beaucoup de tenues ont fait des systèmes de programmation par glisser-déposer.

National Instruments "Labview" est probablement le plus connu et le meilleur.

Le problème fondamental qu'ils rencontrent tous est qu'il n'existe aucun moyen connu de convertir un Flying Code Monkey en programmeur et ingénieur expert. Comme UN exemple, il n'y a aucune différence pour un Flying Code Monkey entre un processus O (N ^ 2) ou O (N ^ 3) et un processus O (N log N), ce qui signifie qu'ils doivent être fournis avec des routines en conserve pour les algorithmes O (N log N), qui peuvent être adaptés sur mesure aux capacités graphiques rapides qu'ils vont créer.

Le deuxième problème qu'ils rencontrent tous est que, lorsque vous fournissez les blocs spéciaux requis par le premier problème, les frais généraux imposés par le déplacement des données entre les blocs commencent à coûter cher. J'ai travaillé avec un très bon système de ce type appelé Rippen. Lorsque j'ai fait le profil, pour voir où nous en étions dans une application de traitement de capteur à hautes performances, j'ai été plutôt troublé de voir qu'environ 20% de mon temps CPU était consacré au déplacement de données. (Puisque je faisais du traitement d'image LADAR, faisant un bon morceau de traitement en virgule flottante sur chaque pixel d'une image d'entrée, 20% du CPU était BEAUCOUP de surcharge de déplacement de données.)

Vous pourriez probablement contourner la partie 2 en allant vers un système basé sur un compilateur: vous lui donnez votre image, et il se compile dans un programme exécutable fortement optimisé, mais je ne suis pas certain que cela réglerait vraiment les problèmes, et cela pourrait nuire la nature interactive de l'outil.

John R. Strohm
la source
Vous pouvez en théorie avoir un mode Debug et Release (optimisé).
Job
15

La réponse simple est non.

En ce qui concerne la programmation, la saisie textuelle dépasse de loin en termes d'informations spécifiées sa contrepartie visuelle.

Nuit noire
la source
Au fur et à mesure que vous montez de plus en plus haut, vous avez de plus en plus de chances d'articuler le problème graphiquement. La programmation de flux de données est une telle approche (voir ma réponse à cette question): les composants sont donnés, ce sont des boîtes noires, la tâche du "programmeur" (meilleur terme: concepteur d'application) est simplement de les organiser en réseau.
ern0
12

LabVIEW est assez graphique.

Depuis le site Web de LabVIEW :

LabVIEW

Zeke
la source
Huh, ça a l'air bien. Que pouvez-vous en faire? Est-il spécialisé pour un seul type de "programmation", comme la physique, ou pouvez-vous l'utiliser pour autre chose?
gablin
2
Oui, il existe des professionnels LabVIEW: lavag.org . Forums de discussion: forums.ni.com . Comparaison Erlang: bit.ly/2yC0Tn . Description du compilateur: bit.ly/c6quPK . Exemple de programmation générale: bit.ly/cSnt5D . Utilisation dans le LHC: bit.ly/9Yp4oo . C'est un langage de niche utilisé partout: ni.com/solutions . C'est cher comme l'enfer, fuit des abstractions à gauche et à droite, installe une tonne de services inexpliqués et souffre de tonnes d'amatuers. Il est multiplateforme, simple à paralléliser et aussi facile / difficile que n'importe quelle autre langue.
Joe Z du
2
Il exécute des robots LEGO. ni.com/academic/mindstorms
rwong
1
@Zeke: Si un VI (équivalent LabVIEW d'un programme ou d'une fonction) vous oblige à faire défiler dans plus d'une direction, alors il n'a pas été écrit correctement.
oosterwal
1
@oosterwal: Vous avez raison, c'est courant. De plus, la langue est volontairement commercialisée auprès des scientifiques et des ingénieurs car elle est facile à apprendre. Conservé aux petits programmes, c'est vrai. Comme les programmes nécessitent plus de sophistication, le code a tendance à échapper à un contrôle assez spectaculaire. (Edit: Pas à cause de la langue en tant que telle, mais aux utilisateurs bien intentionnés. Divulgation complète: Je suis un scientifique certains jours :)
Joe Z
6

Yahoo! Pipes est probablement un parfait exemple d'un langage graphique du type que vous décrivez; vous faites glisser des primitives (tout, depuis les sources de données sur lesquelles vous agissez, jusqu'aux boucles et conditions) pour produire un flux d'informations à travers le système.

C'est très spécifique au domaine, mais c'est surtout le point; Les tuyaux sont centrés sur les données, ce qui rend la visualisation (plutôt que l'expression) primordiale. De même, des environnements de tutoriels comme Scratch ou Sprog! mettre l'accent sur la visualisation de ce sur quoi vous travaillez comme outil d'apprentissage; l'efficacité de la saisie des données est une priorité beaucoup plus faible dans ce domaine.

esm
la source
Si plus de développeurs d'applications Web amateurs connaissaient Pipes, le monde serait un meilleur endroit. +1
Sparr
3

De temps en temps, quelqu'un propose un langage de programmation par glisser-déposer ou un outil de conception qui va "mettre fin à la programmation telle que nous la connaissons" et faire de tous ceux qui l'utilisent un programmeur.

La raison pour laquelle aucun d'entre eux n'a encore fait le travail et nous a tous mis au chômage, c'est qu'en fait, peu importe la quantité de fonctionnalités de glisser-déposer que vous créez et peu importe la facilité d'utilisation que vous en faites, le simple fait est que la programmation est difficile.

Les véritables disciplines de la programmation consistent tout autant à savoir comment résoudre les problèmes, à comprendre comment modéliser les processus et organiser les données pour qu'elles soient utilisables. Même comprendre ce qui est possible avec un ordinateur.

Il existe des preuves (si elles sont controversées) suggérant que certaines personnes ne peuvent pas apprendre à penser de cette façon, ce qui m'amène à quelques réflexions intéressantes et pertinentes. Pour commencer, si vous ne pouvez pas penser de cette façon, il y a beaucoup de programmeurs, vous pouvez donc toujours embaucher quelqu'un pour mettre en œuvre une idée si vous en avez une et vous pensez que cela vaut la peine de payer. Si vous pouvez assez bien travailler avec la logique de programmation, vous pourriez aussi bien apprendre un vrai langage plutôt que de jouer avec un environnement de glisser-déposer relativement simple.

Je pense à la programmation générale ici. La même chose ne s'applique pas nécessairement dans un scénario de type DSL plus limité où le glisser-déposer peut être un utilisateur de processus vraiment utile qui est spécialiste dans ce domaine plutôt que spécialiste informatique.

glénatron
la source
La programmation est un processus complexe, dur et long, qui nécessite des tonnes de travail d'ingénieur. C'est pourquoi l'industrie essaie de rendre le développement d'applications disponible pour les non-programmeurs: réduire les coûts de développement, optimiser l'utilisation des ressources humaines. De plus, en tant que programmeur, je peux dire qu'il y a beaucoup de tâches qui devraient être effectuées par des non-programmeurs, mais ils n'ont pas d'outils pour ces tâches, donc cela doit être fait par des programmeurs, qui 1. détestent faire ce genre de tâches 2. sont chères 3. ne sont pas les meilleures personnes pour le faire. Donc, je salue chaleureusement toute idée qui pointe dans ce sens, par exemple la programmation visuelle.
ern0
1
Je sais pourquoi l'industrie essaie de le faire. Mais mon point est que si vous pouvez programmer, vous êtes un programmeur et les personnes qui ne peuvent pas programmer ne pourront pas le faire mieux car il existe des outils visuels pour effectuer les mêmes tâches qu'autrement, ils auraient dû écrire du code pour. Les outils ne sont pas le problème, la chose que vous avez à faire avec eux est le problème.
glenatron
Je veux dire une programmation plus libérale. C'est aussi la programmation, lorsque vous dites à votre machine à laver de faire fonctionner le lavage pendant 5 min, sécher pendant 10 min. Quelqu'un devrait donner un nom différent pour différentes "couches" de programmation. La programmation de flux de données est-elle une programmation? Est la création de feuilles de calcul (sans macros)? Oui, ils le sont, mais aussi de types différents que font les soi-disant programmeurs. Quoi qu'il en soit, il y a de fortes différences dans ce que font les programmeurs, je veux dire, les modules glisser-déposer dans SuperIDE12 ++ avec les plugins VS le codage d'assemblage. En outre, c'est juste une grande différence, si votre plate-forme a GC. Ou: script VS compilateur. "Programmation" est un terme trop courant.
ern0
3

Le meilleur système de programmation par glisser-déposer que j'ai vu est pour les robots Lego Mindstorms NXT.

Cela vous permet de faire des choses assez étonnantes, en contrôlant des fonctionnalités assez complexes.

Cependant, à un moment donné, il tombe en panne et vous devez revenir à un autre système.
Voir cet article: http://www.wired.com/geekdad/2007/11/the-best-progra/

Il est possible, cependant, que si cela était amélioré et que différents scénarios soient pris en compte, la nécessité de cela deviendrait de moins en moins.

Bravax
la source
Do love Mindstorms (qui a évolué à partir de Lego Dacta, qui avait un codage plus traditionnel [un langage similaire à Logo / Lisp]), l'a étudié à l'école il y a 15 ans. Excellent cadeau pour un programmeur pour obtenir ses enfants, s'ils en ont.
Orbling
1
NXT est, en fait, LabVIEW. Eh bien, LV qui a été un peu coupé
Joe Z
Je ne l'ai jamais su, merci! J'en suis très impressionné.
Bravax
2

La programmation de flux de données (ou programmation basée sur les flux) peut être en quelque sorte. Bien que la programmation du flux de données ne soit pas complète de Turing.

La programmation de flux de données est la méthode de création d'applications, lorsque vous placez des instances de composants sur la scène et connectez leurs ports, afin qu'ils forment un réseau de traitement des messages. Les composants peuvent être choisis dans une bibliothèque, ils ont des ports consommateurs (entrée) et producteurs (sortie), qui sont prêts à se connecter avec les ports d'autres composants.

Voici un bel exemple, où même pas une souris utilisée pour construire une application de synthé, mais à mains nues et de petits cubes: http://www.youtube.com/watch?v=0h-RhyopUmc

Les articles de Wikipedia sont un bon point de départ: http://en.wikipedia.org/wiki/Flow-based_programming http://en.wikipedia.org/wiki/Dataflow_programming

La génération de sons est un domaine typique de la programmation de flux de données. Il existe des systèmes de synthé open source: http://www.synthedit.com/ http://alsamodular.sourceforge.net/

Si vous avez un Mac, vous pouvez avoir un Quartz Composer préinstallé en usine: http://developer.apple.com/graphicsimaging/quartz/quartzcomposer.html

J'ai également créé un système DF avec un de mes amis, mais nous n'avons pas encore d' éditeur visuel , seulement un visualiseur de script.

ern0
la source
3
Pourquoi considérez-vous que la programmation de flux de données n'est pas complète de Turing?
oosterwal
Jouer avec des connexions de boîte n'est pas Turing complet. L'écriture des composants est Turing-complete (il n'y a généralement pas de restrictions, juste le framework DF, qui doit être utilisé pour communiquer avec d'autres composants).
ern0
1
Le matériel sous-jacent de tout processeur est essentiellement un flux de données. Comment cette construction complète non Turing peut conduire à un système complet Turing?
mouviciel
@mouviciel Ma première réaction a été "non, le CPU n'est pas un flux de données", mais ça l'est. Quoi qu'il en soit, c'est un mauvais exemple pour les systèmes de flux de données; mauvaise conception. Il n'y a qu'un seul composant source (l'horloge externe / interne), ce qui déclenche le composant CPU pour traiter l'instruction suivante. Même si nous comptons d'autres pièces, par exemple l'audio, la carte vidéo, le système DMA, etc. en tant que composants, c'est encore une mauvaise conception: les composants sont trop gros et trop spécialisés. Mais l'idée est bonne, c'est peut-être un moyen d'augmenter les performances / la polyvalence, de construire des ordinateurs avec des unités plus petites et de connecter des pièces comme des composants de flux de données?
Ça sent le
2

Le système de programmation Scratch du MIT est presque entièrement glisser-déposer.

L' inventeur d'applications de Google semble similaire (et crédite Scratch).

Je ne voudrais pas coder quoi que ce soit de gros dans moi-même, mais pour enseigner la "pensée programmeur", Scratch est superbe. C'est de la vraie programmation, mais avec une gratification visuelle instantanée et les blocs à assembler évitent une grande partie de la frustration des "erreurs de syntaxe" qui rebute les nouveaux arrivants (une vue que je vois en écho dans cet article ). Essayer d'enthousiasmer les jeunes enfants avec une ligne de commande en python ne suffit pas de nos jours.

timday
la source
1

Cela existe déjà, mais peut-être pas sous la forme à laquelle vous pensez. Simulink et Alice en sont deux exemples.

Simulink est un moyen graphique d'assembler des simulations de systèmes dynamiques. Alors que la plupart des constructions sont plus complexes que ce que vous pensez habituellement de la programmation, des choses comme for et if peuvent toujours être construites graphiquement. Simulink est un peu un gros problème dans les applications aérospatiales car le gouvernement et de nombreuses grandes entreprises font leurs conceptions initiales dans Simulink et appliquent ensuite un type de prouveur de théorème au "code" Simulink.

Alice, est un outil de formation de programmation par glisser-déposer pour les enfants. Il permet aux enfants de s'amuser à construire des histoires en faisant glisser et en déposant des actions et des objets sur une sorte de story-board de programmation.

John Berryman
la source
1

Prograph était un langage cool qui était tout glisser-déposer. De plus, Wikipédia a un article avec une bonne liste de langages visuels .

l'homme d'étain
la source
Pourriez-vous développer un peu plus sur chacune de ces ressources et pourquoi recommandez-vous ces réponses pour répondre à la question posée? Les "réponses en lien uniquement" ne sont pas tout à fait les bienvenues à Stack Exchange
gnat
0

Il existe plusieurs langages de programmation visuels. Un système téléphonique que j'ai géré pour un grand centre d'appels a été programmé à l'aide de modules de glisser-déposer. Mon oncle a développé un système Just-In-Time pour la conception de lignes de fabrication entièrement glisser-déposer, il y a 20 ans.

J'ai même joué à un jeu de combat de robots sur PS1 qui utilisait un langage de programmation glisser-déposer.


la source
Carnage Heart, était un jeu génial.
Ape-inago
C'est celui-là, je ne me souvenais pas du nom. J'ai adoré ce jeu. Design très intelligent.
-1

La programmation textuelle a connu une belle période de 50 ans, mais le génie logiciel doit entrer dans le domaine graphique pour faire face au prochain niveau de complexité. Par exemple, l'émergence de nombreux processeurs de noyau et les défis de la programmation parallèle poussent le modèle de threading à sa limite. Franchement, je pense que la communauté des logiciels est juste arrogante en pensant qu'il y a quelque chose de fondamentalement différent et spécial dans la programmation qui ne se prêterait pas à la visualisation comme tous les autres domaines. Comme les opérateurs téléphoniques et de nombreuses autres professions, la bonne technologie d'automatisation permettra aux experts du domaine de collaborer prochainement dans de riches espaces de simulation de systèmes basés sur la connaissance. L'industrie du logiciel attend depuis longtemps un changement de paradigme.

user9196
la source
2
Je ne suis pas du tout d'accord ici: la complexité de nombreux programmes réels est bien trop élevée pour être pleinement représentée graphiquement. Toutes les personnes que je connais qui (1) ont su programmer et (2) ont utilisé LabView pour un projet plus vaste ont découvert que la représentation graphique est intrinsèquement trop lourde pour travailler de manière productive sur des projets plus importants. Bien sûr, LabView est très pratique lorsque votre programme tient sur un seul écran; mais lorsque votre programme commence à se développer au-delà des limites d'un seul écran, LabView est difficile à utiliser efficacement (pas de simple recherche de texte, réorganiser les blocs est pénible,…).
Eric O Lebigot