Programmazione Drag-n-drop - volerebbe? [chiuso]


12

Tutti i linguaggi di programmazione che conosco sono scritti, cioè digitati come lunghezze di testo in un modo o nell'altro. Ma mi chiedo se c'è qualche linguaggio di programmazione in cui puoi semplicemente trascinare e rilasciare l'intero programma; per ottenere un ciclo, seleziona questa casella qui e trascinala in quella sezione del "codice" laggiù, e così via. E se non ce n'è uno come questo, volerebbe se ne venisse inventato uno?

Personalmente non credo che sarebbe una buona idea, ma mi piacerebbe sentire cosa ne pensi.


Mai dire mai (hai detto: "Non credo che sarebbe una buona idea") - ci può essere una strana situazione, in cui l'idea più strana può funzionare bene.
ern0

6
"Volerebbe?" Onestamente, se pensassi che i sistemi di controllo di volo sull'aereo che stavo percorrendo fossero programmati da qualcuno che stava programmando Drag-n-drop, potrei non salire su quell'aereo. ; D
glenatron,

Mi piace davvero questa domanda, anche se vorrei che alcune delle risposte fossero più lunghe e profonde.
Nicole,

1
Ironman lo userà e volerà! Ma non esiste nel mondo reale!
Manoj R,

@glenatron - Quindi viaggia in treno ... I sistemi di controllo di volo sono per una parte automi a stati finiti che sono costruiti graficamente e per un'altra parte sistemi di ingegneria di controllo che sono costruiti da blocchi di base e assemblati in interfacce GUI. Il rimanente è UML.
mouviciel,

Risposte:


23

Molti abiti hanno realizzato sistemi di programmazione drag-and-drop.

"Labview" di National Instruments è probabilmente il più noto e il migliore.

Il problema fondamentale che tutti incontrano è che non esiste un modo noto per convertire una scimmia Flying Code in un programmatore e ingegnere esperto. Come UN esempio, non vi è alcuna differenza tra una scimmia volante e un codice tra un processo O (N ^ 2) o O (N ^ 3) e un processo O (N log N), il che significa che devono essere forniti con routine fisse per gli algoritmi O (N log N), che possono essere adattati in modo personalizzato ai kludge grafici rapidi che costruiranno.

Il secondo problema che tutti incontrano è che, quando si forniscono i blocchi per scopi speciali richiesti dal primo problema, i costi generali imposti spostando i dati tra i blocchi iniziano a diventare costosi. Ho lavorato con un sistema molto carino chiamato Rippen. Quando ho profilato, per vedere dove stavamo danneggiando un'applicazione di elaborazione del sensore ad alte prestazioni richieste!, Ero piuttosto disturbato nel vedere che circa il 20% del mio tempo della CPU andava in movimento dei dati. (Dato che stavo eseguendo l'elaborazione delle immagini LADAR, eseguendo una buona parte dell'elaborazione in virgola mobile su ogni pixel di un'immagine di input, il 20% della CPU era MOLTO sovraccarico di spostamento dei dati.)

Probabilmente potresti aggirare la parte 2 andando a un sistema basato su compilatore: gli dai da mangiare la tua foto e si compila in un programma eseguibile fortemente ottimizzato, ma non sono sicuro che risolverà davvero i problemi e potrebbe ferire la natura interattiva dello strumento.


In teoria puoi avere una modalità Debug e una versione (ottimizzata).
Giobbe

15

La semplice risposta è no.

Quando si tratta di programmazione, l'input testuale supera di gran lunga in termini di informazioni specifiche rispetto alla sua controparte visiva.


Man mano che vai sempre più in alto, hai sempre più possibilità di articolare graficamente il problema. La programmazione del flusso di dati è un tale approccio (vedi la mia risposta a questa domanda): i componenti sono dati, sono scatole nere, il compito del "programmatore" (termine migliore: progettista di app) è semplicemente organizzarli in una rete.
ern0

12

LabVIEW è piuttosto grafico.

Dal sito Web LabVIEW :

LabVIEW


Huh, sembra pulito. Quanto puoi farci? È specializzato solo per un tipo di "programmazione", come la fisica, o puoi usarlo per qualsiasi cosa?
gablin

2
Sì, ci sono professionisti di LabVIEW: lavag.org . Forum di discussione: forums.ni.com . Confronto Erlang: bit.ly/2yC0Tn . Descrizione del compilatore: bit.ly/c6quPK . Esempio di programmazione generale: bit.ly/cSnt5D . Utilizzare in LHC: bit.ly/9Yp4oo . È un linguaggio di nicchia usato in tutto quel maledetto posto: ni.com/solutions . È costoso come l'inferno, perde astrazioni a destra e sinistra, installa un sacco di servizi inspiegabili e soffre di tonnellate di amatuers. È multipiattaforma, semplice da parallelizzare e facile / difficile come qualsiasi altra lingua là fuori.
Joe Z,

2
Funziona con robot LEGO. ni.com/academic/mindstorms
rwong

1
@Zeke: se un VI (equivalente di LabVIEW di un programma o di una funzione) richiede di scorrere in più di una direzione, non è stato scritto correttamente.
oosterwal,

1
@oosterwal: hai ragione, è comune. Inoltre, il linguaggio è abbastanza intenzionalmente commercializzato per scienziati e ingegneri come facile da imparare. Mantenuto da piccoli programmi, questo è vero. Poiché i programmi richiedono una maggiore raffinatezza, il codice tende a strisciare in modo piuttosto spettacolare fuori controllo. (Modifica: non per la lingua in quanto tale, ma per gli utenti ben intenzionati. Divulgazione completa: sono uno scienziato alcuni giorni :)
Joe Z,

6

Yahoo! Pipes è probabilmente un perfetto esempio di un linguaggio grafico del tipo che stai descrivendo; trascini le primitive (tutto, dalle origini dati su cui agisci, ai loop e ai condizionali) per produrre un flusso di informazioni attraverso il sistema.

È altamente specifico del dominio, ma questo è principalmente il punto; Pipes è incentrato sui dati, il che rende la visualizzazione (anziché l'espressione) fondamentale. Allo stesso modo, ambienti tutorial come Scratch o Sprog! enfatizzare la visualizzazione di ciò su cui stai lavorando come supporto per l'apprendimento; l'efficienza di immissione dei dati è una priorità molto più bassa in quel dominio.


Se più sviluppatori di app Web amatoriali conoscessero Pipes, il mondo sarebbe un posto migliore. +1
Sparr il

3

Ogni tanto qualcuno trova un linguaggio di programmazione drag and drop o uno strumento di progettazione che "metterà fine alla programmazione come la conosciamo" e trasformerà tutti coloro che lo usano in un programmatore.

Il motivo per cui nessuno di loro ha ancora svolto il lavoro e ci ha messo tutti senza lavoro è che in realtà, indipendentemente dalla funzionalità di trascinamento della selezione creata e indipendentemente dalla facilità d'uso, il semplice fatto è che la programmazione è difficile.

Le vere discipline della programmazione riguardano tanto il saper risolvere i problemi, capire come modellare i processi e organizzare i dati per essere utilizzabili. Anche capire cosa è possibile con un computer.

Ci sono prove (se controverse) che suggeriscono che ad alcune persone non può essere insegnato a pensare in questo modo, il che mi porta a un paio di pensieri interessanti e pertinenti. Per cominciare, se non riesci a pensare in questo modo, ci sono molti programmatori in giro, quindi puoi sempre assumere qualcuno per implementare un'idea se ne hai una e pensi che valga la pena pagare. Se riesci a lavorare con la logica di programmazione abbastanza bene, potresti anche imparare un linguaggio reale piuttosto che giocare con un ambiente di trascinamento della selezione relativamente semplice.

Sto pensando alla programmazione generale qui. La stessa cosa non si applica necessariamente in uno scenario di tipo DSL più limitato in cui il trascinamento della selezione potrebbe essere un processo davvero utile per gli utenti che sono specialisti in quel dominio piuttosto che specialisti IT.


La programmazione è un processo complesso, difficile e lungo, richiede tonnellate di lavoro da ingegnere. Ecco perché l'industria sta cercando di rendere disponibile lo sviluppo di app per i non programmatori: ridurre i costi di sviluppo, ottimizzare l'utilizzo delle risorse umane. Inoltre, come programmatore, posso dire che ci sono molti compiti, che dovrebbero essere svolti da non programmatori, ma non hanno strumenti per tali compiti, quindi deve essere fatto dai programmatori, che 1. odiano fare quel tipo di compiti 2. sono costosi 3. non sono le persone migliori per farlo. Quindi, accolgo con grande favore qualsiasi idea che punti in questo modo, ad esempio la programmazione visiva.
ern0

1
So perché l'industria sta cercando di farlo. Ma il mio punto è che se puoi programmare, sei un programmatore e le persone che non possono programmare non saranno in grado di farlo meglio perché ci sono strumenti visivi per fare gli stessi lavori che altrimenti avrebbero dovuto scrivere codice per. Gli strumenti non sono il problema, la cosa che devi fare con loro è il problema.
glenatron,

Intendo una programmazione più liberale. Sta anche programmando, quando si dice alla macchina di lavaggio di eseguire il lavaggio per 5 minuti, asciugare per 10 minuti. Qualcuno dovrebbe dare un nome diverso per i diversi "livelli" di programmazione. La programmazione del flusso di dati è programmata? La creazione di fogli di calcolo (senza macro)? Sì, lo sono, ma anche tipi diversi rispetto ai cosiddetti programmatori. Ad ogni modo, ci sono forti differenze in ciò che fanno i programmatori, intendo dire, trascinare e rilasciare i moduli in SuperIDE12 ++ con plug-in VS codifica assembly. Inoltre, è solo una grande differenza, se la tua piattaforma ha GC. Oppure: compilatore VS script. "Programmazione" è un termine troppo comune.
ern0

3

Il miglior sistema di programmazione drag and drop che ho visto è per i robot Lego Mindstorms NXT.

Ciò ti consente di fare alcune cose piuttosto sorprendenti, controllando alcune funzionalità piuttosto intricate.

Tuttavia ad un certo punto si guasta e devi tornare a un altro sistema.
Vedi questo articolo: http://www.wired.com/geekdad/2007/11/the-best-progra/

È possibile, tuttavia, che se questo fosse migliorato e diversi scenari fossero soddisfatti, la necessità di questo sarebbe sempre meno.


Adoro i Mindstorms (che si sono evoluti da Lego Dacta, che aveva una codifica più tradizionale [una lingua simile a Logo / Lisp]), l'hanno studiata a scuola 15 anni fa. Ottimo regalo per un programmatore per ottenere i propri figli, se ne avessero.
Orbling

1
NXT è, in realtà, LabVIEW. Bene, LV è stato tagliato un po ': ni.com/academic/mindstorms
Joe Z

Non l'ho mai saputo, grazie! Sono molto colpito da questo.
Bravax,

2

La programmazione del flusso di dati (nota anche come programmazione basata sul flusso) può essere una specie di. Tuttavia, la programmazione del flusso di dati non è completa.

La programmazione del flusso di dati è il metodo per creare applicazioni, quando si inseriscono istanze di componenti sulla scena e si collegano le loro porte, in modo da formare una rete di elaborazione dei messaggi. I componenti possono essere scelti da una libreria, hanno porte consumer (input) e producer (output), che sono pronte per la connessione con le porte di altri componenti.

Ecco un bell'esempio, in cui nemmeno un mouse ha usato per creare un'app synth, ma mani nude e cubetti: http://www.youtube.com/watch?v=0h-RhyopUmc

Gli articoli di Wikipedia sono un buon punto di partenza: http://en.wikipedia.org/wiki/Flow-based_programming http://en.wikipedia.org/wiki/Dataflow_programming

La generazione del suono è un'area tipica della programmazione del flusso di dati. Esistono alcuni sistemi di synth open source: http://www.synthedit.com/ http://alsamodular.sourceforge.net/

Se hai un Mac, potresti avere un Quartz Composer preinstallato in fabbrica: http://developer.apple.com/graphicsimaging/quartz/quartzcomposer.html

Ho anche creato un sistema DF con un mio amico, ma non abbiamo ancora un editor visivo, ma solo un visualizzatore di script.


3
Perché ritieni che la programmazione del flusso di dati non sia Turing completa?
oosterwal,

Fare il giro con i collegamenti della scatola non è Turing completo. La scrittura dei componenti è Turing completa (di solito non ci sono restrizioni, solo il framework DF, che deve essere utilizzato per comunicare con altri componenti).
ern0,

1
L'hardware sottostante di qualsiasi CPU è sostanzialmente il flusso di dati. In che modo questa costruzione completa non Turing può portare a un sistema completo Turing?
mouviciel,

@mouviciel La mia prima reazione è stata "no, la CPU non è flusso di dati", ma lo è. Comunque, questo è un cattivo esempio per i sistemi di flusso di dati; cattivo design. Esiste un solo componente sorgente (l'orologio esterno / interno) che attiva il componente CPU per elaborare l'istruzione successiva. Anche se contiamo altre parti, ad esempio audio, scheda video, sistema DMA ecc. Come componenti, la progettazione è ancora sbagliata: i componenti sono troppo grandi e troppo specializzati. Ma l'idea è buona, forse è un modo per aumentare le prestazioni / versatilità, per costruire computer con unità più piccole e collegare parti come i componenti del flusso di dati?
Odora di

2

Il sistema di programmazione Scratch del MIT è quasi interamente drag-and-drop.

Google Inventor App sembra essere simile (e crediti Scratch).

Non vorrei codificare nulla di grosso in me stesso, ma per insegnare il "pensiero del programmatore", Scratch è eccezionale. È una vera programmazione, ma con gratificazione visiva istantanea e blocchi a scatto evitano gran parte della frustrazione dell '"errore di sintassi" che scoraggia i nuovi arrivati ​​(una visione che vedo risuonata in questo articolo ). Cercare di entusiasmare i ragazzini con una riga di comando in pitone non lo taglia in questi giorni.


1

Questo esiste già, anche se forse non nella forma a cui stai pensando. Due esempi sono Simulink e Alice.

Simulink è un mezzo grafico per assemblare simulazioni di sistemi dinamici. Mentre la maggior parte dei costrutti è più complessa di quella che si potrebbe pensare di solito come programmazione, cose come e se le istruzioni possono ancora essere costruite graficamente. Simulink è un grosso problema nelle applicazioni aerospaziali in quanto il governo e molte delle grandi aziende fanno i loro progetti iniziali in Simulink e quindi applicano un qualche tipo di teorema proverente al "codice" di Simulink.

Alice, è un drag and drop, uno strumento di programmazione per bambini. Permette ai bambini di divertirsi costruendo storie trascinando e rilasciando azioni e oggetti su una sorta di storyboard di programmazione.



0

Esistono diversi linguaggi di programmazione visiva. Un sistema telefonico gestito per un grande call center è stato programmato utilizzando i moduli di trascinamento della selezione. Mio zio ha sviluppato un sistema Just-In-Time per la progettazione di linee di produzione che era completamente drag and drop e che era 20 anni fa.

Ho persino giocato a un gioco di combattimento robotico su PS1 che utilizzava un linguaggio di programmazione drag and drop.


Carnage Heart, è stato un gioco fantastico.
Ape-inago,

Questo è quello, non riuscivo a ricordare il nome. Ho adorato quel gioco. Design molto intelligente.

-1

La programmazione testuale è durata 50 anni, ma l'ingegneria del software deve passare al regno grafico per affrontare il livello successivo di complessità. Ad esempio, l'emergere di molti processori core e le sfide della programmazione parallela stanno spingendo il modello di threading al limite. Francamente, penso che la comunità del software sia solo arrogante pensando che ci sia qualcosa di fondamentalmente diverso e speciale nella programmazione che non sarebbe suscettibile alla visualizzazione come ogni altro dominio. Come gli operatori telefonici e molte altre professioni, la giusta tecnologia di automazione consentirà agli esperti di dominio di collaborare presto in ricchi spazi di simulazione di sistemi basati sulla conoscenza. L'industria del software è attesa da tempo per un cambio di paradigma.


2
Non sarei molto d'accordo, qui: la complessità di molti programmi nella vita reale è troppo elevata per essere rappresentata pienamente graficamente. Tutte le persone che conosco che (1) hanno saputo programmare e (2) hanno utilizzato LabView per un progetto più ampio hanno scoperto che la rappresentazione grafica è intrinsecamente troppo pesante per lavorare in modo produttivo su progetti più grandi. Certo, LabView è molto comodo quando il tuo programma si adatta a una singola schermata; ma quando il tuo programma inizia a crescere oltre i limiti di una singola schermata, LabView è difficile da usare in modo efficiente (nessuna semplice ricerca di testo, riorganizzare i blocchi è doloroso, ...).
Eric O Lebigot,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.