关于可视化编程分类的民间智慧 – drossbucket

21-07-02 banq

黑客新闻中有趣的反复出现的主题之一是可视化编程。这是我真正欣赏 Hacker News 的事情之一。大多数领域都存在“鬼知识”的问题,这是来之不易的实践理解,主要是在从业者之间口头传递,而不是在任何地方公开。至少在编程中,其中的一部分会进入论坛帖子。它通常隐藏在大线程的深处,但这总比没有好。
形式逻辑对更普遍的形式和技术语言感到好奇:我们如何在其他数学领域或编程中使用文本的属性?文字擅长什么,不擅长什么?可视化编程的评论线程被证明是探索这个问题的好地方。
如果某件事在文本中很容易,但在特定的可视化编程工具中却很困难,你可以保证有人会抱怨它。其中一些抱怨是相当肤浅的,但有些则涉及到文本的一些相当深的属性:线性、信息密度、离散符号的字母表。相反,对特定视觉特征的热情可以很好地表明文本的不足之处。
文章其余部分的基本结构如下:
  • 对这些线程中评论者通常所说的“可视化编程”的含义进行细分。这是一个相当广泛的术语,人们对它的理解非常不同。
  • 共同主题。这是这篇文章的主要内容,我从中提取了多个线程中出现的主题。
  • 一个简短的讨论类型部分,其中包含在撰写本文时想到的一些初始问题。有很多方向我可以接受,这篇文章已经足够长了,没有详细讨论这些,所以我只是含糊地挥一下手。可能我最终会至少写一篇后续文章,以在我对这些问题进行更多思考时找出其中的一些线索。

 

可视化编程的类型

  • 基于节点的接口

有大量的可视化编程工具大致处于“带有箭头的框”的范式中,我认为这些的技术术语是“基于节点的”,这些工具中的大多数是主要用于特定领域的专用工具。这些领域反复出现:实验室和工业控制。LabVIEW 是该类别中讨论的主要工具。事实上,它可能是最常讨论的工具,吸引了相当多的咆哮,但也吸引了许多捍卫者。
  1. 游戏引擎。虚幻引擎的蓝图可能是第二个最常见的话题。这是一个视觉游戏脚本系统。
  2. 音乐制作。Max/MSP 作为连接和修改音频剪辑的工具出现了很多。
  3. 视觉效果。Houdini、Nuke 和 Blender 都有用于创建效果的基于节点的编辑器。
  4. 数据迁移。SSIS 是这里的主要工具,用于迁移和转换 Microsoft SQL Server 数据。
  5. 其他被提及的工具包括 Simulink(基于 Matlab 的动态系统建模环境)、Grasshopper for Rhino3D(3D 建模)、TouchDesigner(交互式艺术装置)和 Azure Logic Apps(结合云服务)。

  • 基于块的 IDE

这个类别包括像 Scratch 这样的环境,它们将一些普通编程的语法转换成可以插在一起的彩色块。这些通常用作新程序员的教育工具,尤其是在教孩子时。
这可能是人们所说的“可视化编程”的第二个最常见的东西,尽管关于它们是否应该计算存在一些争论,因为它们主要复制了普通的基于文本的编程的约定:

Scratch 是一个用于传统代码的快速组合 UI。仅仅因为编程文本嵌入在可拖动块中并不能使其成为一种视觉语言,它是文本编辑器的不同 UI。当然,它的视觉效果,但它实际上并没有以任何方式改变语言。它可以像文本一样容易地表示,语义是相同的。它基本上是一个更适合初学者的以鼠标为中心的 IDE。

  • 拖放式 UI 构建器

拖放式 UI 构建器出现了一些,虽然没有我最初预期的那么多,并且通常没有命名任何特定工具(Delphi 确实得到了一些提及。)特别是关于新作物的讨论很少无代码/低代码工具,我认为是因为这些线程中的大多数都早于当前的炒作浪潮。
这些工具绝对是可视化的,但不一定非常程序化——它们通常用于制作一个特定的布局,而不是一个动态范围的布局。UI 设计的视觉方面往往会与指定动态行为的能力发生冲突:
这个特定领域的主要挑战是描述当窗口大小发生变化时布局应该发生什么,或者视觉元素之间是否存在依赖关系(例如,某些元素仅在选中复选框时才会出现)。在视觉上布置事物时,您只能设计一个特定的布局实例。如果你的所有元素都是静态的,这很好用。但是,如果布局以任何方式是动态的(调整窗口大小是最常见的情况),您现在必须要么描述当事情发生变化时您希望发生的事情,要么让系统猜测。并且有很多选项:缩放、裁剪、信箱、溢出、“智能”回流……可能性是无穷无尽的,因此描述所有这些复杂性通常需要完整的编程语言。
这些工具还具有较少的离散化、结构化元素,通常与编程相关联——例如,基于节点的工具仍然具有可组合在一起的允许框和箭头状态的离散“语法”。UI 工具相对连续且非结构化,其中 UI 元素可以调整为任意像素大小。
  • 电子表格

电子表格是一种可视化编程范式,这是一个非常成功的范式,这是一个很好的论据:
我认为电子表格也有资格作为可视化编程语言,因为它们是二维和基于网格的,而一维文本编程语言则不然。
网格使他们能够使用相对和绝对 2D 寻址,因此您可以在单元格之间复制和粘贴公式,因此它们是可重用和可重定位的。您可以通过指向、单击和拖动来输入地址和操作数,而不是(或也)输入文本。
  • 基于文本的代码的视觉增强

作为自己的信徒,我认为问题在于可视化编程遇到了与人工智能诅咒相同的问题:
“一旦人工智能中的问题得到解决,它就不再被视为人工智能,因为我们知道它是如何工作的。” 
同样,一旦成功的可视化交互功能(无论是语法高亮、逐步调试的跟踪检查器、“智能感知”代码完成……)被 IDE 采用并成为主流,它就不再被认为是“可视化的”,而变成经典“文本编程”不可或缺的一部分。
有几次关于可视化工具的讨论,通过调试跟踪、依赖关系图、继承层次结构等更好地理解普通的基于文本的程序。同样,这些大多仅限于几个子线程,而不是“可视化编程”的中心示例。
一些人还指出,即使是纯文本文件中的基于文本的编程也有许多视觉元素。人类编写的代码不是线性的字节串,我们使用缩进和空格以及视觉上与众不同的字符:
括号是一个很好的例子——它们向它们所包围的文本弯曲,以视觉方式加强语义。
  • 实验性或推测性接口

在括号和缩进的另一端,我们有全新的实验性视觉界面。Bret Victor 的 Dynamicland 和其他实验经常在这里提出,以及对 VR 带来的可能性的猜测:
只要我们在推测:我有点梦想也许我们会看到利用 VR 的编程环境。
人类真的很擅长记住空间。(“给我描述一下你童年的卧室。”或“你的三年级老师长什么样?”)
已经有“记忆宫殿”的想法表明您可以将空间记忆用于其他目的。
我想知道,通过浏览代码库并环顾四周来学习或搜索代码库会是什么感觉?
这是最令人兴奋的类别,但它是如此开放且未经测试,以至于很难说出任何非常具体的内容。
 

更多:可视化编程

1