Programación de arrastrar y soltar: ¿volaría? [cerrado]

12

Todos los lenguajes de programación que conozco están escritos, es decir, escritos como fragmentos de texto de una forma u otra. Pero me pregunto si hay algún lenguaje de programación en el que pueda arrastrar y soltar todo el programa; para obtener un bucle, seleccione este cuadro aquí y arrástrelo a esa sección del "código" allí, y así sucesivamente. Y si no hay uno como este, ¿volaría si se inventara uno?

Personalmente, no creo que sea una buena idea, pero me gustaría saber lo que piensas.

gablin
fuente
Nunca digas nunca (dijiste: "No creo que sea una buena idea"): puede haber una situación extraña, donde la idea más extraña puede funcionar bien.
ern0
66
"¿Volaría?" Honestamente, si pensara que los sistemas de control de vuelo en el avión en el que viajaba fueron programados por alguien que realiza la programación de arrastrar y soltar, podría no subirme a ese avión. ; D
glenatron
Realmente me gusta esta pregunta, aunque desearía que algunas de las respuestas fueran más largas y profundas.
Nicole
1
¡Ironman lo usará y volará! ¡Pero él no existe en el mundo real!
Manoj R
@glenatron - Entonces viaje en tren ... Los sistemas de control de vuelo son para una parte de autómatas de estado finito que se construyen gráficamente y para otra parte los sistemas de ingeniería de control que se construyen a partir de bloques básicos y se ensamblan en interfaces GUI. El resto es UML.
Mouviciel

Respuestas:

23

Muchos equipos han hecho sistemas de programación de arrastrar y soltar.

National Instruments "Labview" es probablemente el más conocido y el mejor.

El problema fundamental que todos encuentran es que no hay una forma conocida de convertir un Flying Code Monkey en un programador e ingeniero experto. Como UN ejemplo, no hay diferencia en un Flying Code Monkey entre un proceso O (N ^ 2) u O (N ^ 3) y un proceso O (N log N), lo que significa que deben suministrarse con rutinas enlatadas para los algoritmos O (N log N), que pueden ajustarse a la medida en los errores gráficos rápidos que construirán.

El segundo problema que todos encuentran es que, cuando se suministran los bloques de propósito especial requeridos por el primer problema, la sobrecarga impuesta al mover los datos entre los bloques comienza a ser costosa. Trabajé con un sistema muy bueno llamado Rippen. Cuando hice un perfil, para ver dónde estábamos sufriendo en una aplicación de procesamiento de sensores de alto rendimiento requerido, me molestó bastante ver que aproximadamente el 20% de mi tiempo de CPU iba a mover datos. (Como estaba haciendo el procesamiento de imágenes LADAR, haciendo una buena cantidad de procesamiento de punto flotante en cada píxel de una imagen de entrada, el 20% de la CPU era MUCHA sobrecarga de movimiento de datos).

Probablemente podría sortear la parte 2 yendo a un sistema basado en compilador: alimenta su imagen y se compila en un programa ejecutable altamente optimizado, pero no estoy seguro de que eso realmente solucione los problemas y podría doler La naturaleza interactiva de la herramienta.

John R. Strohm
fuente
En teoría, puede tener un modo de depuración y una versión (optimizado).
Trabajo
15

La respuesta simple es no.

Cuando se trata de programación, la entrada de texto supera con creces la información especificada que su contraparte visual.

Noche oscura
fuente
A medida que avanza aún más y más, cada vez hay más posibilidades de articular el problema gráficamente. La programación del flujo de datos es un enfoque de este tipo (vea mi respuesta a esta pregunta): se dan los componentes, son cajas negras, la tarea del "programador" (mejor término: diseñador de aplicaciones) es simplemente organizarlos en una red.
ern0
12

LabVIEW es bastante gráfico.

Desde el sitio web de LabVIEW :

LabVIEW

Zeke
fuente
Huh, eso se ve bien. ¿Cuánto puedes hacer con él? ¿Está especializado para un solo tipo de "programación", como la física, o puedes usarlo para algo?
gablin
2
Sí, hay profesionales de LabVIEW: lavag.org . Foros de discusión: forums.ni.com . Comparación de Erlang: bit.ly/2yC0Tn . Descripción del compilador: bit.ly/c6quPK . Ejemplo de programación general: bit.ly/cSnt5D . Usar en el LHC: bit.ly/9Yp4oo . Es un lenguaje de nicho utilizado en todo el maldito lugar: ni.com/solutions . Es caro como el infierno, filtra abstracciones de izquierda a derecha, instala una tonelada de servicios inexplicables y sufre de toneladas de aficionados. Es multiplataforma, fácil de paralelizar y tan fácil / difícil como cualquier otro idioma.
Joe Z
2
Funciona con robots LEGO. ni.com/academic/mindstorms
rwong
1
@Zeke: Si un VI (equivalente de LabVIEW de un programa o función) requiere que se desplace en más de una dirección, entonces no se ha escrito correctamente.
oosterwal
1
@oosterwal: Tienes razón, es común. Además, el lenguaje se comercializa de manera bastante intencional para científicos e ingenieros como fácil de aprender. Mantenido a pequeños programas, esto es cierto. Como los programas requieren más sofisticación, el código tiende a deslizarse de manera espectacular fuera de control. (Editar: no debido al lenguaje como tal, sino a los usuarios bien intencionados. Revelación completa: soy científico algunos días :)
Joe Z
6

Yahoo! Pipes es probablemente un ejemplo perfecto de un lenguaje gráfico del tipo que está describiendo; puede arrastrar y soltar primitivas (todo, desde fuentes de datos sobre las que actúa, hasta bucles y condicionales) para producir un flujo de información a través del sistema.

Es altamente específico de dominio, pero ese es principalmente el punto; Pipes está centrado en los datos, por lo que la visualización (en lugar de la expresión) es primordial. Del mismo modo, entornos de tutoriales como Scratch o Sprog! enfatice la visualización de lo que está trabajando como ayuda para el aprendizaje; la eficiencia de entrada de datos es una prioridad mucho menor en ese dominio.

esm
fuente
Si más desarrolladores aficionados de aplicaciones web conocieran Pipes, el mundo sería un lugar mejor. +1
Sparr
3

De vez en cuando, a alguien se le ocurre un lenguaje de programación de arrastrar y soltar o una herramienta de diseño que "pondrá fin a la programación tal como la conocemos" y convertirá a todos los que la usan en programadores.

La razón por la que ninguno de ellos ha hecho el trabajo todavía y nos ha dejado a todos sin trabajo es que en realidad, no importa cuánta funcionalidad de arrastrar y soltar cree y no importa cuán fácil de usar sea, el simple hecho es que la programación es difícil.

Las disciplinas reales de la programación tienen que ver tanto con saber cómo resolver problemas, comprender cómo modelar procesos y organizar datos para ser utilizables. Incluso entender lo que es posible con una computadora.

Hay evidencia (si es controvertida) que sugiere que a algunas personas no se les puede enseñar a pensar de esta manera, lo que me lleva a un par de pensamientos interesantes y relevantes. Para empezar, si no puede pensar de esta manera, hay muchos programadores, por lo que siempre puede contratar a alguien para implementar una idea si tiene una y cree que vale la pena pagarla. Si puede trabajar con la lógica de programación lo suficientemente bien, también podría aprender un lenguaje real en lugar de perder el tiempo con un entorno de arrastrar y soltar relativamente simple.

Estoy pensando en la programación general aquí. Lo mismo no se aplica necesariamente en un escenario de tipo DSL más limitado en el que arrastrar y soltar podría ser un proceso realmente útil para los usuarios que son especialistas dentro de ese dominio en lugar de especialistas de TI.

glenatron
fuente
La programación es un proceso complejo, duro y largo, requiere toneladas de trabajo de ingeniero. Es por eso que la industria está tratando de hacer que el desarrollo de aplicaciones esté disponible para los no programadores: reduzca el costo de desarrollo, optimice el uso de recursos humanos. Además, como programador, puedo decir que hay muchas tareas que deben realizar los que no son programadores, pero no tienen herramientas para esas tareas, por lo que deben hacerlo los programadores, que 1. odian hacer ese tipo de tareas 2. son caras 3. no son las mejores personas para hacer eso. Por lo tanto, agradezco cualquier idea que señale de esa manera, por ejemplo, programación visual.
ern0
1
Sé por qué la industria está tratando de hacerlo. Pero mi punto es que si puedes programar, eres un programador y las personas que no pueden programar no podrán hacerlo mejor porque hay herramientas visuales para hacer los mismos trabajos que de lo contrario habrían tenido que escribir código para. Las herramientas no son el problema, lo que tienes que hacer con ellas es el problema.
glenatron
Me refiero a la programación más liberal. También está programando, cuando le dice a su máquina de lavado que ejecute el lavado durante 5 minutos, que se seque durante 10 minutos. Alguien debería dar un nombre diferente para diferentes "capas" de programación. ¿La programación de flujo de datos es programación? ¿Es la creación de hojas de cálculo (sin macros)? Sí, lo son, pero también de un tipo diferente que los llamados programadores. De todos modos, hay grandes diferencias en lo que hacen los programadores, quiero decir, módulos de arrastrar y soltar en SuperIDE12 ++ con complementos VS codificación de ensamblaje. Además, es una gran diferencia, si su plataforma tiene GC. O: script VS compilador. "Programación" es un término demasiado común.
ern0
3

El mejor sistema de programación de arrastrar y soltar que he visto es para los robots Lego Mindstorms NXT.

Esto le permite hacer cosas bastante sorprendentes, controlando algunas funciones bastante complejas.

Sin embargo, en algún momento se descompone y debe volver a otro sistema.
Ver este artículo: http://www.wired.com/geekdad/2007/11/the-best-progra/

Sin embargo, es posible que si esto mejorara y se atendieran diferentes escenarios, la necesidad de esto sería cada vez menor.

Bravax
fuente
Do love Mindstorms (que surgió de Lego Dacta, que tenía una codificación más tradicional [un lenguaje similar al Logo / Lisp]), lo estudió en la escuela hace 15 años. Excelente regalo para que un programador obtenga a sus hijos, en caso de que tengan algunos.
Orbling
1
NXT es, en realidad, LabVIEW. Bueno, LV que se ha recortado un poco: ni.com/academic/mindstorms
Joe Z
Nunca supe eso, gracias! Estoy muy impresionado con eso.
Bravax
2

La programación de flujo de datos (también conocida como programación basada en flujo) puede ser algo así. Aunque, la programación del flujo de datos no está completa en Turing.

La programación de flujo de datos es el método de creación de aplicaciones, cuando coloca instancias de componentes en la escena y conecta sus puertos, para que formen una red de procesamiento de mensajes. Los componentes se pueden elegir desde una biblioteca, tienen puertos de consumidor (entrada) y productor (salida), que están listos para conectarse con los puertos de otros componentes.

Aquí hay un buen ejemplo, donde ni siquiera un mouse solía construir una aplicación de sintetizador, sino manos descubiertas y cubitos: http://www.youtube.com/watch?v=0h-RhyopUmc

Los artículos de Wikipedia son un buen punto de partida: http://en.wikipedia.org/wiki/Flow-based_programming http://en.wikipedia.org/wiki/Dataflow_programming

La generación de sonido es un área típica de la programación del flujo de datos. Existen algunos sistemas de sintetizador de código abierto: http://www.synthedit.com/ http://alsamodular.sourceforge.net/

Si tiene Mac, puede tener un Quartz Composer preinstalado de fábrica: http://developer.apple.com/graphicsimaging/quartz/quartzcomposer.html

También he hecho un sistema DF con un amigo mío, pero no tenemos editor visual sin embargo , sólo el visualizador guión.

ern0
fuente
3
¿Por qué considera que la programación del flujo de datos no está completa?
oosterwal
Jugar con las conexiones de la caja no es Turing completo. Escribir componentes es completo de Turing (por lo general, no hay restricciones, solo el marco DF, que debe usarse para comunicarse con otros componentes).
ern0
1
El hardware subyacente de cualquier CPU es básicamente el flujo de datos. ¿Cómo esta construcción completa que no es de Turing puede conducir a un sistema completo de Turing?
Mouviciel
@mouviciel Mi primera reacción fue "no, la CPU no es flujo de datos", pero lo es. De todos modos, este es un mal ejemplo para los sistemas de flujo de datos; mal diseño Solo hay un componente fuente (el reloj externo / interno), que activa el componente de la CPU para procesar la siguiente instrucción. Incluso si consideramos otras partes, por ejemplo, audio, tarjeta de video, sistema DMA, etc. como componentes, todavía es un mal diseño: los componentes son demasiado grandes y demasiado especializados. Pero la idea es buena, ¿tal vez sea una forma de aumentar el rendimiento / versatilidad, construir computadoras con unidades más pequeñas y conectar partes como componentes de flujo de datos? Huele a patente :)
ern0
2

El sistema de programación Scratch del MIT es casi completamente de arrastrar y soltar.

App Inventor de Google parece ser similar (y da crédito a Scratch).

Yo tampoco quisiera codificar nada grande, pero para enseñar "pensamiento de programador", Scratch es excelente. Es una programación real, pero con una gratificación visual instantánea y los bloques de unión evitan gran parte de la frustración del "error de sintaxis" que desalienta a los recién llegados (una vista que veo reflejada en este artículo ). Intentar entusiasmar a los niños pequeños con una línea de comandos de Python no es suficiente en estos días.

Timday
fuente
1

Esto ya existe, aunque posiblemente no en la forma en que está pensando. Dos ejemplos son Simulink y Alice.

Simulink es un medio gráfico para ensamblar simulaciones de sistemas dinámicos. Si bien la mayoría de las construcciones son más complejas de lo que normalmente se pensaría como programación, cosas como para y si las declaraciones aún se pueden construir gráficamente. Simulink es un gran problema en las aplicaciones aeroespaciales ya que el gobierno y muchas de las grandes empresas hacen sus diseños iniciales en Simulink y luego aplican algún tipo de prueba de teoremas al "código" de Simulink.

Alice, es una herramienta de entrenamiento de programación de arrastrar y soltar para niños. Permite que los niños se diviertan construyendo historias arrastrando y soltando acciones y objetos en una especie de guión gráfico de programación.

John Berryman
fuente
1

Prograph era un lenguaje genial que era todo arrastrar y soltar. Además, Wikipedia tiene un artículo con una buena lista de lenguajes visuales .

el hombre de hojalata
fuente
¿Le importaría ampliar un poco lo que tiene cada uno de estos recursos y por qué los recomienda como respuesta a la pregunta que se hace? Las "respuestas de solo enlace" no son bienvenidas en Stack Exchange
mosto
0

Hay bastantes lenguajes de programación visual. Un sistema telefónico que manejé para un gran centro de llamadas fue programado usando módulos de arrastrar y soltar. Mi tío desarrolló un sistema Just-In-Time para diseñar líneas de fabricación que fue completamente arrastrar y soltar y que fue hace 20 años.

Incluso he jugado un juego de combate de robots en la PS1 que usaba un lenguaje de programación de arrastrar y soltar.


fuente
Carnage Heart, fue un juego increíble.
Ape-inago
Ese es, no podía recordar el nombre. Me encantó ese juego. Diseño muy inteligente.
-1

La programación textual ha tenido una buena ejecución de 50 años, pero la ingeniería de software debe pasar al ámbito gráfico para lidiar con el siguiente nivel de complejidad. Por ejemplo, la aparición de muchos procesadores de núcleo y los desafíos de la programación paralela están llevando el modelo de subprocesos a su límite. Francamente, creo que la comunidad de software es arrogante al pensar que hay algo fundamentalmente diferente y especial sobre la programación que no sería susceptible de visualización como cualquier otro dominio. Al igual que los operadores telefónicos y muchas otras profesiones, la tecnología de automatización adecuada permitirá a los expertos en dominios colaborar pronto en ricos espacios de simulación de sistemas basados ​​en el conocimiento. La industria del software está muy atrasada para un cambio de paradigma.

usuario9196
fuente
2
No estoy de acuerdo, aquí: la complejidad de muchos programas de la vida real es demasiado alta como para estar totalmente representada gráficamente. Todas las personas que conozco que (1) sabían programar y (2) usaron LabView para un proyecto más grande descubrieron que la representación gráfica es inherentemente demasiado pesada para trabajar productivamente en proyectos más grandes. Claro, LabView es muy conveniente cuando su programa cabe en una sola pantalla; pero cuando su programa comienza a crecer más allá de los límites de una sola pantalla, LabView es difícil de usar de manera eficiente (no es simple la búsqueda de texto, reorganizar los bloques es doloroso, ...).
Eric O Lebigot