拖放编程-它会飞吗?[关闭]


12

我所知道的所有编程语言都是书面的-即以一种或另一种方式将其键入为文本的长度。但是我想知道是否有任何编程语言可以拖放整个程序?要获得一个循环,请在此处选择此框,然后将其拖动到“代码”的那部分,依此类推。如果没有这样的人,如果有人发明了它,它会飞吗?

我个人认为这不是一个好主意,但我想听听您的想法。


永远不要说永远(您说过:“我不相信这会是个好主意”)-可能会有一个奇怪的情况,最奇怪的想法会很好地执行。
ern0

6
“会飞吗?” 老实说,如果我认为正在进行的飞机上的飞行控制系统是由进行拖放式编程的人编程的,那么我可能不会登上该飞机。; D
glenatron 2010年

确实像这个问题,尽管我希望某些答案更长一些,更深入。
妮可,2010年

1
铁人将使用它,然后飞翔!但是他在现实世界中不存在!
Manoj R 2010年

@glenatron-因此乘火车旅行...飞行控制系统的一部分是以图形方式构建的有限状态自动机,而另一部分是由基本模块构建并组装在GUI界面中的控制工程系统。剩下的就是UML。
mouviciel

Answers:


23

许多公司都完成了拖放式编程系统。

National Instruments的“ Labview”可能是最著名的,也是最好的。

他们都遇到的根本问题是,没有已知的方法可以将Flying Code Monkey转换为专家程序员和工程师。举一个例子,在O(N ^ 2)或O(N ^ 3)进程与O(N log N)进程之间,Flying Code Monkey没有区别,这意味着必须为它们提供固定例程以用于O(N log N)算法,可以自定义适合将要构建的快速图形kludge。

他们都遇到的第二个问题是,当您提供第一个问题所需的专用块时,在块之间移动数据所带来的开销开始变得昂贵。我使用了一个非常好的Rippen这样的系统。当我进行概要分析时,要查看我们在需要高性能的高性能传感器处理应用程序中遇到的问题,我很不高兴看到我有20%的CPU时间用于数据移动。(由于我正在进行LADAR图像处理,因此在输入图像的每个像素上都进行了大量的浮点处理,因此20%的CPU占用了大量数据移动开销。)

通过使用基于编译器的系统,您可能可以绕过第2部分:将图片提交,然后将其编译为经过高度优化的可执行程序,但是我不确定这是否能够真正解决问题,并且可能会损害工具的互动性质。


理论上,您可以具有“调试”和“发布(优化)”模式。
工作

15

简单回答是不。

在编程方面,文本输入在指定信息方面远远超过其视觉计数器。


随着您的水平越来越高,以图形方式表达问题的机会越来越多。数据流编程是一种这样的方法(请参阅我对这个问题的回答):给出了组件,它们是黑匣子,“程序员”(更好的称呼:应用程序设计器)的任务是将它们组织成一个网络。
ern0

12

LabVIEW非常漂亮。

LabVIEW网站

LabVIEW


嗯,看起来很整洁。你能用多少钱呢?它是专门用于一种“编程”(例如物理)的,还是可以用于任何用途?
gablin

2
是的,有LabVIEW专业人士:lavag.org。讨论论坛:forums.ni.com。Erlang比较:bit.ly/2yC0Tn。编译器描述:bit.ly/c6quPK。通用编程示例:bit.ly/cSnt5D。在LHC中使用:bit.ly/9Yp4oo。这是该死的地方使用的一种小众语言:ni.com/solutions。它非常昂贵,因为地狱,向左和向右泄漏抽象,安装了大量无法解释的服务以及遭受成千上万的业余爱好者的折磨。它是跨平台的,易于并行化,与现有的任何其他语言一样容易/困难。
Joe Z 2010年

2
它运行乐高机器人。ni.com/academic/mindstorms
rwong 2010年

1
@Zeke:如果VI(相当于LabVIEW的程序或功能)要求您向多个方向滚动,则说明编写不正确。
oosterwal

1
@oosterwal:没错,这很常见。此外,该语言是故意向科学家和工程师推销的,因为它易于学习。保留小程序,这是真的。由于程序需要更高级的功能,因此代码趋向于以惊人的速度失控。(编辑:不是由于这样的语言,而是出于良好的用户。全面披露:我有些时候是科学家:)
Joe Z

6

雅虎!管道可能是您所描述类型的图形语言的完美示例;您可以将基元(从您作用的数据源中的所有内容拖放到循环和条件中)以产生通过系统的信息流。

它是高度特定于域的,但这才是重点。管道是以数据为中心的,因此可视化(而不是表达式)至关重要。同样,教程环境如ScratchSprog!强调可视化您正在做的学习辅助工具;在该域中,数据输入效率的优先级低得多。


如果更多的业余Web应用程序开发人员了解Pipes,那么世界将会是一个更好的地方。+1
Sparr

3

时不时有人想出一种拖放式编程语言或设计工具,它将“终止我们所知道的编程”,并使使用它的每个人都成为程序员。

他们还没有真正完成这项工作并使我们全部退出工作的原因是,实际上,无论您创建了多少拖放功能,也不管您如何做到用户友好,简单的事实是编程很难。

编程的真正纪律在于了解如何解决问题,了解如何对流程进行建模以及如何组织可用数据。甚至完全了解计算机的功能。

有证据(如有争议)表明不能教导某些人以这种方式思考,这使我想到了一些有趣且相关的想法。首先,如果您无法以这种方式思考,那么周围就会有很多程序员,因此,如果您有一个想法并且您认为值得花钱,那么您总是可以雇用某人来实现一个想法。如果您能很好地使用编程逻辑,那么您最好还是学习一门真正的语言,而不是在相对简单的拖放环境中摸索。

我在这里考虑通用编程。同一件事不一定适用于更受限的DSL类型场景,在这种场景中,拖放操作可能是真正有用的流程用户,他们是该领域的专家,而不是IT专家。


编程是一个复杂,艰苦而漫长的过程,需要大量的工程师工作。这就是为什么该行业试图使非程序员可以进行应用程序开发的原因:降低开发成本,优化人力资源使用。另外,作为一名程序员,我可以说,有很多任务应该由非程序员来完成,但是他们没有用于执行这些任务的工具,因此必须由那些讨厌做的程序员来完成。这类任务2.昂贵3.并非最适合这样做的人。因此,我热烈欢迎任何指出这一点的想法,例如视觉编程。
ern0

1
我知道行业为什么要这样做。但是我的观点是,如果您可以编程,那么您是一名程序员,不能编程的人将无法做得更好,因为存在可视化工具来执行原本必须编写代码的相同工作对于。工具不是问题,您要做的就是问题。
glenatron 2010年

我的意思是编程更加自由。当您告诉您的洗牙机洗5分钟,干10分钟时,这也是编程过程。有人应该为不同的编程“层”使用不同的名称。数据流编程是编程吗?是否创建电子表格(不包含宏)?是的,它们是一样的,但是也与所谓的程序员不同。无论如何,程序员所做的工作之间存在着巨大的差异,我的意思是,SuperIDE12 ++中的带有拖放式插件VS汇编代码的拖放模块。此外,如果您的平台具有GC,那也只是很大的不同。或者:脚本VS编译器。“编程”是太常见的术语。
ern0 2010年

3

我见过的最好的拖放编程系统是Lego Mindstorms NXT机器人。

这使您可以做一些令人惊奇的事情,控制一些非常复杂的功能。

但是在某些时候它确实崩溃了,您需要恢复到另一个系统。
看到这篇文章:http : //www.wired.com/geekdad/2007/11/the-best-progra/

但是,有可能的是,如果对此进行了改进,并且满足了不同的方案,对此的需求就会越来越少。


确实喜欢Mindstorms(它是从Lego Dacta演变而来的,Lego Dacta具有更传统的编码(一种类似于Logo / Lisp的语言)),于15年前在学校进行了研究。程序员送孩子的绝佳礼物,如果他们有的话。
2010年

1
NXT实际上是LabVIEW。好吧,LV进行了一些微调:ni.com/academic/mindstorms
Joe Z 2010年

我从来不知道,谢谢!我对此印象深刻。
Bravax 2010年

2

数据流编程(又名基于流的编程)可以是一种。总体而言,数据流编程还不完善。

数据流编程是一种创建应用程序的方法,当您将组件实例放在场景上并连接它们的端口时,它们就形成了一个消息处理网络。可以从库中选择组件,它们具有使用者(输入)端口和生产者(输出)端口,可以随时与其他组件的端口连接。

这是一个很好的示例,其中甚至没有鼠标用来构建合成器应用程序,而是裸手和小立方体:http : //www.youtube.com/watch?v= 0h- RhyopUmc

Wikipedia文章是一个很好的起点:http : //en.wikipedia.org/wiki/Flow-based_programming http://en.wikipedia.org/wiki/Dataflow_programming

声音生成是数据流编程的典型领域。有一些开源合成系统:http : //www.synthedit.com/ http://alsamodular.sourceforge.net/

如果您使用Mac,则可能已经在工厂预装了Quartz Composer:http : //developer.apple.com/graphicsimaging/quartz/quartzcomposer.html

我还做了一个DF系统,我的一个朋友,但我们没有可视化编辑器还没有,只有剧本可视化。


3
为什么您认为数据流编程没有完成Turing?
oosterwal

盒式连接的摆弄还不完善。编写组件是图灵完备的(通常没有任何限制,只有DF框架必须用于与其他组件进行通信)。
ern0 2011年

1
任何CPU的底层硬件基本上都是数据流。这种非图灵完整的构造如何导致图灵完整的系统?
mouviciel

@mouviciel我的第一个反应是“不,CPU不是数据流”,但确实如此。无论如何,这对于数据流系统来说是一个不好的例子。设计不良。只有一个源组件(外部/内部时钟),它触发CPU组件处理下一条指令。即使我们将其他部分(例如音频,视频卡,DMA系统等)视为组件,但它的设计也很糟糕:这些组件太大且太专业。但是这个想法很好,也许这是一种提高性能/多功能性,用更小的单元构建计算机并连接数据流组件等部件的方法吗?闻起来像专利:)
ern0 2011年

2

麻省理工学院的Scratch编程系统几乎完全是拖放式的。

Google的App Inventor似乎与此相似(并归功于Scratch)。

我不想自己编写任何大型代码,但是对于教授“程序员思维”,Scratch很棒。这是真正的编程,但是具有即时的视觉满足感和紧密结合的块避免了很多使新手望而却步的“语法错误”的挫败感(我在本文中看到了这种观点)。如今,尝试用python命令行吸引年轻孩子并不能解决问题。


1

这已经存在,尽管可能不是您正在考虑的形式。Simulink和Alice是两个示例。

Simulink是组装动态系统仿真的图形方式。尽管大多数构造都比您通常认为的编程要复杂得多,但是诸如for和if语句之类的事情仍然可以通过图形方式构造。Simulink在航空航天应用中相当重要,因为政府和许多大公司都在Simulink中进行了最初的设计,然后将某种类型的定理证明者应用于Simulink的“代码”。

爱丽丝(Alice),是一款面向孩子的拖放式编程培训工具。通过将动作和对象拖放到某种编程故事板上,它使孩子们可以玩有趣的故事。



0

有很多可视化编程语言。我为大型呼叫中心管理的电话系统是使用拖放模块编程的。我叔叔开发了一套准时生产系统来设计生产线,该系统完全是拖放式的,距今已有20年了。

我什至在PS1上玩过机器人战斗游戏,都使用了拖放式编程语言。


《屠杀之心》是一款很棒的游戏。
Ape-in​​ago 2010年

那就是那个,我不记得这个名字了。我喜欢那个游戏。非常聪明的设计。

-1

文本编程已经运行了50年,但是软件工程必须进入图形领域,以应对更高级别的复杂性。例如,许多核心处理器的出现和并行编程的挑战正在将线程模型推向极限。坦白地说,我认为软件界只是在妄自尊大,认为编程存在一些根本性的差异和特殊之处,使其无法像其他任何领域一样适用于可视化。像电话接线员和许多其他专业一样,正确的自动化技术将使领域专家迅速在基于知识的系统的丰富模拟空间中进行协作。早就应该进行范式转换的软件行业了。


2
在这里,我将非常不同意:许多现实生活程序的复杂性太高,无法完全以图形方式表示。我认识的所有人(1)知道如何编程,(2)在较大的项目中使用LabView的人都发现,图形表示本质上太繁琐,无法在较大的项目上高效地工作。当然,当您的程序适合单个屏幕时,LabView非常方便。但是,当您的程序开始超出单个屏幕的限制时,LabView便难以有效使用(没有简单的文本搜索,重新排列块很麻烦……)。
Eric O Lebigot 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.