我所知道的所有编程语言都是书面的-即以一种或另一种方式将其键入为文本的长度。但是我想知道是否有任何编程语言可以拖放整个程序?要获得一个循环,请在此处选择此框,然后将其拖动到“代码”的那部分,依此类推。如果没有这样的人,如果有人发明了它,它会飞吗?
我个人认为这不是一个好主意,但我想听听您的想法。
我所知道的所有编程语言都是书面的-即以一种或另一种方式将其键入为文本的长度。但是我想知道是否有任何编程语言可以拖放整个程序?要获得一个循环,请在此处选择此框,然后将其拖动到“代码”的那部分,依此类推。如果没有这样的人,如果有人发明了它,它会飞吗?
我个人认为这不是一个好主意,但我想听听您的想法。
Answers:
许多公司都完成了拖放式编程系统。
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部分:将图片提交,然后将其编译为经过高度优化的可执行程序,但是我不确定这是否能够真正解决问题,并且可能会损害工具的互动性质。
时不时有人想出一种拖放式编程语言或设计工具,它将“终止我们所知道的编程”,并使使用它的每个人都成为程序员。
他们还没有真正完成这项工作并使我们全部退出工作的原因是,实际上,无论您创建了多少拖放功能,也不管您如何做到用户友好,简单的事实是编程很难。
编程的真正纪律在于了解如何解决问题,了解如何对流程进行建模以及如何组织可用数据。甚至完全了解计算机的功能。
有证据(如有争议)表明不能教导某些人以这种方式思考,这使我想到了一些有趣且相关的想法。首先,如果您无法以这种方式思考,那么周围就会有很多程序员,因此,如果您有一个想法并且您认为值得花钱,那么您总是可以雇用某人来实现一个想法。如果您能很好地使用编程逻辑,那么您最好还是学习一门真正的语言,而不是在相对简单的拖放环境中摸索。
我在这里考虑通用编程。同一件事不一定适用于更受限的DSL类型场景,在这种场景中,拖放操作可能是真正有用的流程用户,他们是该领域的专家,而不是IT专家。
我见过的最好的拖放编程系统是Lego Mindstorms NXT机器人。
这使您可以做一些令人惊奇的事情,控制一些非常复杂的功能。
但是在某些时候它确实崩溃了,您需要恢复到另一个系统。
看到这篇文章:http : //www.wired.com/geekdad/2007/11/the-best-progra/
但是,有可能的是,如果对此进行了改进,并且满足了不同的方案,对此的需求就会越来越少。
数据流编程(又名基于流的编程)可以是一种。总体而言,数据流编程还不完善。
数据流编程是一种创建应用程序的方法,当您将组件实例放在场景上并连接它们的端口时,它们就形成了一个消息处理网络。可以从库中选择组件,它们具有使用者(输入)端口和生产者(输出)端口,可以随时与其他组件的端口连接。
这是一个很好的示例,其中甚至没有鼠标用来构建合成器应用程序,而是裸手和小立方体: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系统,我的一个朋友,但我们没有可视化编辑器还没有,只有剧本可视化。
有很多可视化编程语言。我为大型呼叫中心管理的电话系统是使用拖放模块编程的。我叔叔开发了一套准时生产系统来设计生产线,该系统完全是拖放式的,距今已有20年了。
我什至在PS1上玩过机器人战斗游戏,都使用了拖放式编程语言。
文本编程已经运行了50年,但是软件工程必须进入图形领域,以应对更高级别的复杂性。例如,许多核心处理器的出现和并行编程的挑战正在将线程模型推向极限。坦白地说,我认为软件界只是在妄自尊大,认为编程存在一些根本性的差异和特殊之处,使其无法像其他任何领域一样适用于可视化。像电话接线员和许多其他专业一样,正确的自动化技术将使领域专家迅速在基于知识的系统的丰富模拟空间中进行协作。早就应该进行范式转换的软件行业了。