Programação de arrastar e soltar - voaria? [fechadas]

12

Todas as linguagens de programação que eu conheço são escritas - ou seja, digitadas como comprimentos de texto de uma maneira ou de outra. Mas eu me pergunto se existe alguma linguagem de programação onde você possa simplesmente arrastar e soltar o programa inteiro; para obter um loop, selecione essa caixa aqui e arraste-a para a seção do "código" ali, e assim por diante. E se não houver um como este, ele voaria se fosse inventado?

Pessoalmente, não acredito que seria uma boa ideia, mas gostaria de ouvir o que você pensa.

gablin
fonte
Nunca diga nunca (você disse: "Eu não acredito que seria uma idéia tão boa") - pode haver uma situação estranha, onde a idéia mais estranha pode ter um bom desempenho.
ern0
6
"Voaria?" Honestamente, se eu pensasse que os sistemas de controle de vôo no avião em que eu estava programando fossem programados por alguém que fazia a programação de arrastar e soltar, talvez eu não entrasse naquele avião. ; D
glenatron
Realmente gosto desta pergunta, embora eu desejasse que algumas das respostas fossem mais longas e mais profundas.
Nicole
1
Ironman vai usá-lo e voar! Mas ele não existe no mundo real!
Manoj R
@glenatron - Então, viaje de trem ... Os sistemas de controle de vôo são, por um lado, autômatos de estado finito que são construídos graficamente e, por outro, sistemas de engenharia de controle de parte que são construídos a partir de blocos básicos e montados em interfaces GUI. O restante é UML.
Mouviciel 9/11/11

Respostas:

23

Muitas roupas criaram sistemas de programação de arrastar e soltar.

National Instruments "Labview" é provavelmente o mais conhecido e o melhor.

O problema fundamental que todos eles encontram é que não há maneira conhecida de converter um Flying Code Monkey em um programador e engenheiro especialista. Como UM exemplo, não há diferença para um Flying Code Monkey entre um processo O (N ^ 2) ou O (N ^ 3) e um processo O (N log N), o que significa que eles devem ser fornecidos com rotinas enlatadas para os algoritmos O (N log N), que podem ser ajustados de forma personalizada nos kuds gráficos rápidos que eles criarão.

O segundo problema que todos eles enfrentam é que, quando você fornece os blocos de finalidade especial exigidos pelo primeiro problema, a sobrecarga imposta pela movimentação dos dados entre os blocos começa a ficar cara. Eu trabalhei com um sistema muito bom chamado Rippen. Quando fiz o perfil, para ver onde estávamos prejudicando em um aplicativo de processamento de sensor de alto desempenho necessário, fiquei bastante perturbado ao ver que cerca de 20% do meu tempo de CPU estava indo para a movimentação de dados. (Como eu estava processando a imagem LADAR, realizando uma boa parte do processamento de ponto flutuante em cada pixel de uma imagem de entrada, 20% da CPU era MUITO sobrecarga de movimentação de dados.)

Você provavelmente poderia contornar a parte 2 recorrendo a um sistema baseado em compilador: você alimenta sua imagem e compila para um programa executável altamente otimizado, mas não tenho certeza de que isso realmente resolveria os problemas, e isso pode prejudicar a natureza interativa da ferramenta.

John R. Strohm
fonte
Em teoria, você pode ter os modos Debug e Release (otimizado).
Job
15

A resposta simples é não.

Quando se trata de programação, a entrada de texto excede em termos de informações especificadas muito mais do que sua parte visual contrária.

Noite escura
fonte
À medida que você avança em níveis cada vez mais altos, aumenta a chance de articular graficamente o problema. A programação de fluxo de dados é uma abordagem desse tipo (veja minha resposta para esta pergunta): os componentes são fornecidos, são caixas pretas, a tarefa do "programador" (melhor termo: designer de aplicativos) é apenas organizá-los em uma rede.
ern0
12

O LabVIEW é bastante gráfico.

No site do LabVIEW :

LabVIEW

Zeke
fonte
Huh, isso parece arrumado. Quanto você pode fazer com isso? É especializado para apenas um tipo de "programação", como a física, ou você pode usá-lo para qualquer coisa?
gablin
2
Sim, existem profissionais do LabVIEW: lavag.org . Fóruns de discussão: forums.ni.com . Comparação de Erlang: bit.ly/2yC0Tn . Descrição do compilador: bit.ly/c6quPK . Exemplo de programação geral: bit.ly/cSnt5D . Use no LHC: bit.ly/9Yp4oo . É uma linguagem de nicho usada em todo o lugar: ni.com/solutions . É caro como o inferno, vaza abstrações para a esquerda e para a direita, instala uma tonelada de serviços inexplicáveis ​​e sofre de toneladas de amadoras. É multiplataforma, simples de paralelizar e tão fácil / difícil quanto qualquer outro idioma existente.
Joe Z
2
Ele roda robôs LEGO. ni.com/academic/mindstorms
rwong
1
@ Zeke: Se um VI (equivalente ao LabVIEW de um programa ou função) requer que você role em mais de uma direção, ele não foi escrito corretamente.
Oosterwal
1
@osteroster: Você está certo, é comum. Além disso, o idioma é intencionalmente comercializado para cientistas e engenheiros tão fáceis de aprender. Mantido em pequenos programas, isso é verdade. À medida que os programas exigem mais sofisticação, o código tende a ficar espetacularmente fora de controle. . (Edit: Não, devido à linguagem como tal, mas para os usuários bem intencionados Full divulgação: Eu sou um cientista alguns dias :)
Joe Z
6

Yahoo! Pipes é provavelmente um exemplo perfeito de uma linguagem gráfica do tipo que você está descrevendo; você arrasta e solta primitivas (tudo, desde fontes de dados em que atua, até loops e condicionais) para produzir um fluxo de informações através do sistema.

É altamente específico do domínio, mas esse é principalmente o ponto; O Pipes é centrado em dados, tornando a visualização (e não a expressão) primordial. Da mesma forma, ambientes tutoriais como Scratch ou Sprog! enfatize a visualização do que você está trabalhando como um auxiliar de aprendizado; a eficiência na entrada de dados é uma prioridade muito menor nesse domínio.

esm
fonte
Se mais desenvolvedores amadores de aplicativos da Web soubessem sobre o Pipes, o mundo seria um lugar melhor. 1
Sparr
3

De vez em quando alguém cria uma linguagem de programação de arrastar e soltar ou ferramenta de design que "põe um fim à programação como a conhecemos" e transforma todos os que a usam em programadores.

A razão pela qual nenhum deles realmente fez o trabalho até agora e nos colocou fora do trabalho é que, na verdade, não importa quanta funcionalidade de arrastar e soltar você criar e não importa o quão amigável você o faça, o simples fato é que a programação é difícil.

As disciplinas reais de programação são tanto sobre como resolver problemas, como modelar processos e organizar dados para serem utilizáveis. Mesmo entendendo o que é possível com um computador.

Há evidências (se controversas) que sugerem que algumas pessoas não podem ser ensinadas a pensar dessa maneira, o que me leva a alguns pensamentos interessantes e relevantes. Para começar, se você não consegue pensar dessa maneira, há muitos programadores por perto, então você sempre pode contratar alguém para implementar uma idéia, se você tiver uma e achar que vale a pena pagar. Se você puder trabalhar com a lógica de programação o suficiente, poderá aprender uma linguagem real, em vez de mexer com um ambiente relativamente simples de arrastar e soltar.

Estou pensando em programação geral aqui. O mesmo não se aplica necessariamente a um cenário de tipo DSL mais limitado, em que o recurso arrastar e soltar pode ser um usuário de processo realmente útil, especialista nesse domínio e não em TI.

glenatron
fonte
A programação é um processo complexo, difícil e longo, requer toneladas de trabalho do engenheiro. É por isso que o setor está tentando disponibilizar o desenvolvimento de aplicativos para não programadores: reduzir o custo de desenvolvimento, otimizar o uso de recursos humanos. Além disso, como programador, posso dizer, há muitas tarefas, que devem ser realizadas por não programadores, mas elas não têm ferramentas para essas tarefas; portanto, devem ser feitas por programadores que 1. odeiam fazer esse tipo de tarefa 2. é caro 3. não são as melhores pessoas para fazer isso. Por isso, saúdo calorosamente qualquer ideia que aponte dessa maneira, por exemplo, programação visual.
ern0
1
Eu sei por que a indústria está tentando fazer isso. Mas o que quero dizer é que, se você pode programar, é um programador e as pessoas que não podem programar não serão capazes de fazê-lo melhor, porque existem ferramentas visuais para realizar os mesmos trabalhos que, caso contrário, eles teriam que escrever código para. As ferramentas não são o problema, o que você precisa fazer com elas é o problema.
glenatron
Quero dizer programação mais liberal. Também é programação, quando você diz à sua máquina de lavar para lavar por 5 minutos e secar por 10 minutos. Alguém deve dar um nome diferente para diferentes "camadas" de programação. A programação de programação de fluxo de dados é? A criação de planilhas (sem macros)? Sim, eles são, mas também do tipo diferente dos chamados programadores. De qualquer forma, existem diferenças nítidas no que os programadores fazem, quero dizer, módulos de arrastar e soltar no SuperIDE12 ++ com plugins VS codificação de montagem. Além disso, é apenas uma grande diferença, se sua plataforma tiver GC. Ou: script VS compilador. "Programação" é um termo muito comum.
ern0
3

O melhor sistema de programação de arrastar e soltar que eu já vi é para os robôs Lego Mindstorms NXT.

Isso permite que você faça coisas incríveis, controlando algumas funcionalidades bastante complexas.

No entanto, em algum momento, ele quebra e é necessário reverter para outro sistema.
Consulte este artigo: http://www.wired.com/geekdad/2007/11/the-best-progra/

É possível, porém, que, se isso fosse melhorado e se fossem atendidos diferentes cenários, a necessidade disso se tornaria cada vez menor.

Bravax
fonte
Do love Mindstorms (que evoluiu do Lego Dacta, que tinha códigos mais tradicionais [uma linguagem semelhante ao Logo / Lisp]), estudou-o na escola há 15 anos. Presente excelente para um programador conseguir seus filhos, se eles tiverem algum.
Orbling 5/12/10
1
O NXT é, na verdade, o LabVIEW. Bem, LV que foi cortado um pouco: ni.com/academic/mindstorms
Joe Z
Eu nunca soube disso, obrigado! Estou muito impressionado com isso.
Bravax
2

A programação de fluxo de dados (também conhecida como programação baseada em fluxo) pode ser uma espécie de. Embora a programação do fluxo de dados não seja completa para Turing.

A programação de fluxo de dados é o método de criação de aplicativos, quando você coloca instâncias de componentes em cena e conecta suas portas, para que elas formem uma rede de processamento de mensagens. Os componentes podem ser escolhidos em uma biblioteca, possuem portas de consumidor (entrada) e produtora (saída), prontas para conexão com as portas de outros componentes.

Aqui está um bom exemplo, onde nem mesmo um mouse costumava criar um aplicativo de sintetizador, mas mãos e pequenos cubos: http://www.youtube.com/watch?v=0h-RhyopUmc

Os artigos da Wikipedia são um bom ponto de partida: http://en.wikipedia.org/wiki/Flow-based_programming http://en.wikipedia.org/wiki/Dataflow_programming

A geração de som é uma área típica da programação de fluxo de dados. Existem alguns sistemas de sintetização de código aberto: http://www.synthedit.com/ http://alsamodular.sourceforge.net/

Se você possui Mac, pode ter um Quartz Composer pré-instalado de fábrica: http://developer.apple.com/graphicsimaging/quartz/quartzcomposer.html

Eu também fez um sistema DF com um amigo meu, mas ainda não temos editor visual ainda , única roteiro visualizador.

ern0
fonte
3
Por que você considera que a programação de fluxo de dados não é Turing completa?
oosterwal
Brincar com as conexões da caixa não é Turing completo. A gravação de componentes é completa em Turing (geralmente não há restrições, apenas a estrutura DF, que deve ser usada para a comunicação com outros componentes).
ern0 26/02
1
O hardware subjacente de qualquer CPU é basicamente o fluxo de dados. Como essa construção completa não-Turing pode levar a um sistema completo de Turing?
Mouviciel 9/11/11
@mouviciel Minha primeira reação foi "não, CPU não é fluxo de dados", mas é. De qualquer forma, este é um mau exemplo para sistemas de fluxo de dados; design ruim. Existe apenas um componente de origem (o relógio externo / interno), que aciona o componente da CPU para processar a próxima instrução. Mesmo se contarmos outras partes, como áudio, placa de vídeo, sistema DMA etc. como componentes, o design ainda é ruim: os componentes são grandes e especializados demais. Mas a ideia é boa, talvez seja uma maneira de aumentar o desempenho / versatilidade, construir computadores com unidades menores e conectar peças como componentes de fluxo de dados?
Chega
2

O sistema de programação Scratch do MIT é quase inteiramente de arrastar e soltar.

O App Inventor do Google parece ser semelhante (e credita o Scratch).

Eu não gostaria de codificar nada grande em mim, mas para ensinar "pensamento de programador", o Scratch é excelente. É Programação Real, mas com gratificação visual instantânea e os blocos de encaixe evitam grande parte da frustração do "erro de sintaxe" que afasta os recém-chegados (uma visão que vejo ecoada neste artigo ). Tentar entusiasmar crianças pequenas com uma linha de comando em python não funciona nos dias de hoje.

timday
fonte
1

Isso já existe, embora possivelmente não da forma em que você está pensando. Dois exemplos são Simulink e Alice.

O Simulink é um meio gráfico de montar simulações dinâmicas de sistemas. Embora a maioria das construções seja mais complexa do que aquilo que você normalmente considera programação, coisas como instruções for e if ainda podem ser construídas graficamente. O Simulink é um grande negócio nas aplicações aeroespaciais, já que o governo e muitas das grandes empresas fazem seus projetos iniciais no Simulink e depois aplicam algum tipo de comprovador de teoremas ao "código" do Simulink.

Alice, é uma ferramenta de treinamento de programação para crianças. Ele permite que as crianças se divirtam construindo histórias, arrastando e soltando ações e objetos em uma espécie de quadro de programação.

John Berryman
fonte
1

Prograph era uma linguagem legal que era tudo arrastar e soltar. Além disso, a Wikipedia possui um artigo com uma lista de bom tamanho de linguagens visuais .

o homem de lata
fonte
você se importaria em expandir um pouco o que cada um desses recursos possui e por que os recomenda como resposta à pergunta? "Link-só responde" não são muito bem-vindos no Stack Câmbio
mosquito
0

Existem algumas linguagens de programação visual. Um sistema telefônico que eu gerenciei para um grande call center foi programado usando os módulos de arrastar e soltar. Meu tio desenvolveu um sistema Just-In-Time para projetar linhas de fabricação que eram completamente arrastadas e soltas e isso ocorreu há 20 anos.

Até joguei um jogo de combate robô no PS1 que usava uma linguagem de programação de arrastar e soltar.


fonte
Carnage Heart, foi um jogo incrível.
Ape-inago
É esse, eu não conseguia lembrar o nome. Eu amei esse jogo. Design muito inteligente.
-1

A programação textual teve uma boa execução de 50 anos, mas a engenharia de software deve passar para o domínio gráfico para lidar com o próximo nível de complexidade. Por exemplo, o surgimento de muitos processadores principais e os desafios da programação paralela estão levando o modelo de segmentação ao seu limite. Francamente, acho que a comunidade de software é apenas arrogante, pensando que há algo fundamentalmente diferente e especial na programação que não seria passível de visualização como todos os outros domínios. Como as operadoras de telefonia e muitas outras profissões, a tecnologia de automação certa permitirá que especialistas em domínio colaborem em breve em ricos espaços de simulação de sistemas baseados em conhecimento. A indústria de software está muito atrasada para uma mudança de paradigma.

user9196
fonte
2
Eu discordo totalmente aqui: a complexidade de muitos programas da vida real é muito alta para ser totalmente representada graficamente. Todas as pessoas que eu conheço que (1) sabem como programar e (2) usaram o LabView para um projeto maior descobriram que a representação gráfica é inerentemente pesada demais para trabalhar produtivamente em projetos maiores. Claro, o LabView é muito conveniente quando o seu programa cabe em uma única tela; mas quando seu programa começa a crescer além dos limites de uma única tela, o LabView é difícil de usar com eficiência (nenhuma pesquisa de texto simples, reorganizar os blocos é dolorosa ...).
Eric O Lebigot