voronoi图编程构造_可视化编程真的有那么糟糕?

2023-10-31

作者 | Anton Livaja

译者 | 弯月

责编 | 屠敏

以下为译文:

我想告诉你,如果使用恰当,可视化编程和是图解推理是一个非常强大的工具集。也就是说,只有当可视化编程扎根于数学和计算机科学并建立坚实的基础,才能发挥良好的作用。为了降低编程的难度,我们已经对我们的代码进行了抽象,而图表等可视化的方法只是实现抽象的另一种方式。

fa553a4207b71e5dbf7de552e4583713.png

通过对低级代码的抽象,生成更容易推理的东西。摘自Bob Coecke的著作《Picturing Qu

当前可视化编程工具的缺点

在你头也不回地离开之前,请听我一言。考虑到大多数现有的工具及其使用方式,人们不喜欢可视化编程,轻易将可视化编程拒之门外都是完全可以理解的。

首先,拖放的工具就是让我个人感到沮丧的主要原因,而且似乎也是给可视化编程招来骂名的原因。例如,在构建网站的时候,我们用拖放的方式代替 Node.js 技术,那么就会严重阻碍程序员的工作流程。而且,他们习以为常的工具也无法正常使用。

此外,可视化编程的方式还大大降低了编程的自由程度和可控性。这是可视化编程失败的典型原因。还有很多例子,比如笨拙的拖放界面,自称可以简化编程,实际上却让编程越来越复杂,并最终失败。发生这种情况是由于复杂度缺乏正确的结构而无法管理。

比较下优缺点就会发现,可视化编程并不乐观,它构造的不良抽象虽然消除了一些低级的复杂性,却让大多数程序员都付出了不愿承担的惨重代价。在某些情况下,对于没有编程经验的人来说,拖放工具可能是一个很好的解决方案,但专业人士的感觉是:“这是什么鬼?”如果你是其中之一,那么我劝你不要看到“可视化编程”的标题就转头离开。

什么是图解推理

图解推理就是对特定的上下文中不必要的细节进行抽象,以便专注于你真正关心的细节,而且常常可以让人们很容易形成直觉。这可以提高某个人以特定方式推理事物的能力。视频的编码就是一个例子。我们不会观看一堆代表视频的0和1——没人会做那种傻事。

a7b1edbdef75d79f0b75070638cf529b.png

视频的二进制编码与视觉表示。摘自Bob Coecke的著作《Picturing Quantum Pr

关键在于你要意识到“可视化编程”并不一定意味着“拖放”。正确的可视化编程应当基于图解推理与正确的数学形式,从而形成一个非常强大的程序员可以利用的工具包。当我说“图解推理”时,我特指的是状态机、Petri网、字符串图和范畴论,尽管还有其他定义良好的数学形式可以使用。有关这些概念的介绍超出了本文的范畴,但是我在最后列举了一些你可以参考的资源。

更多示例

我不打算在这里解释背后的数学原理,但我可以通过几个强有力的例子,来说明如何通过视觉的方法隐藏低级的细节,并揭露一些对观察者而言通常不完全透明的深入了解。我最喜欢的一个例子是Bob Coecke的著作《Picturing Quantum Processes》,他向读者展示了在描述量子过程的时候,如果面对满纸晦涩难懂的字符,我们无法凭直觉理解其中的内容,而且还需要大量的前提知识才能理解;但我们可以通过几张图表用“正式的方式”(数学中正确定义的方式)来描述。看看下面的这张图。

829851314ac3ba599783b7a06430fa48.png

描述量子过程的低级语言与高级语言(视觉)。摘自Bob Coecke的著作《Picturing Qua

这个例子与编程没有直接的联系,所以让我们再来看一个例子。需要注意的是,下述用JavaScript编写的斐波那契数列与其后的图形所表示的内容相同(我们需要理解一些语义图才能看懂)。

function fibonacci(num){  var a = 1, b = 0, temp;  while (num >= 0){  temp = a;  a = a + b;  b = temp;  num--;  }  return b;}
2d92e539bda10d73a95c0e176f0845f2.png

用信号流图表示的斐波那契数列。摘自Pawel Sobocinski的博文《 Graphical Li

下面的示例是用可视化的方法对流程进行建模的实际应用。以ATM为例,因为我是区块链技术的粉丝,所以这里用比特币ATM为例。从技术角度来看,这是一台经过精心设计的机器,必须避免非法状态并完成应有的功能。非法的状态包括货币的双花问题,向用户发送错误数量的加密货币,或者没有向用户发送加密货币,等等。

至于如何利用你现有的知识构建这类的系统,并提供一种图解的方式,这个难题就留给你来解决吧。我们以比特币换普通货币为例。下面是一个经过简化后的版本,但可以很好地演示整个过程。

9bdf291f6366bb5b363bf7c2b22f4944.gif

ATM将普通货币转换为比特币的过程。

上图是一个简单的Petri网。那个走来走去的小黑点代表Petri网当前状态的“令牌”。如你所见,这不仅仅是一个图表,它还可以通过“触发转换”(小矩形代表转换)捕获不同的状态。有趣的是,由于Petri网具有良好的结构,因此可以将上图编译成低级语言,而且还可以像与多个微服务或模块交互的程序一样运行。这正是我们的Statebox所能完成的功能。现在,就以当前这个为运行比特币ATM的软件体系结构而建立的模型为例,我们来对比一下你设计流程时采用的方法,与利用可视化的方法来建模的好处。

使用可视化方法建模与生俱来的优势

  • 非技术人员可以更轻松地通过有意义的方式为流程建模做出贡献。
  • 可以减少流程上的错误。
  • 人们可以访问应用于Petri网的数学工具,例如检测死锁与防止非法状态的状态空间分析。
  • 更容易确定所有边界情况,并指出错误,因为图解推理有助于我们对低级信息进行抽象(例如,如果用英语的平铺直叙或条件语句表达与上图等价的内容,那么恐怕远不如视觉表现形式容易理解)。
  • 可以根据流程的不同状态构建用户界面,如此一来便更加易于管理系统的状态与用户界面显示内容一致的复杂性,而且与响应式编程有良好的协同效应。
  • 虽然Petri网之类的结构不一定是视觉建模事物的专有特性,但有了Petri这种结构,就很容易管理复杂性,因为这样的结构内部嵌入了大量信息(例如合法的“下一个”状态集合)。因此,这些工作都无需留到代码中解决了,而且通常都可以简化API和中间件。

考虑不同的“级别”

我们需要记住可视化编程不一定要实现低级逻辑,例如与第三方服务,API的交互等。在Statebox,我们认为有效的使用可视化编程的方法是,在更高层次上对事物进行建模(更高层次在这里可能有点误导,因为它可以指代高级系统架构或低级的流程,例如上述ATM的运行流程)。通过Petri网的强大功能,将可视化编程与范畴论结合起来,对其行为施加额外的限制,我们就可以构建一个定义良好的语言来定义流程或协议。我们的工具包(虽然目前正在开发中,但已经在现实世界的几个用例中得到了使用,很快我们就会公布)的设计旨在利用这些经过分类的Petri网的流程进行可视化建模。此外,它还提供了一个引擎,可以实现在网络或流程中从一个状态转换到另一个状态。这本身就是一个强大的工具,但我们正在创建一个完整的开源生态系统,并围绕这种编程方法创建工具。

到目前为止Statebox系统的功能包括用于Petri网的字符串图编辑工具,基于事件源的数据存储方案,分类数据模式迁移,权限系统中的公私密钥,merkle树等区块链和用于数据完整性的散列,相对简单的函子映射(集成)到其他系统云服务,区块链,语言等),强类型(我们Petri网风格中的位置和转换都有类型),自动API和表单生成,根据系统中不同角色的元数据构建的结构化数据,终止担保以及通过应用状态空间分析获得的其他见解,经过简化的正式流程验证以及开箱即用的正式验证组件。此外,我们正在开发一种基于多项式的类型构造语言,实现在不同语言之间进行简单的“类型转换”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

voronoi图编程构造_可视化编程真的有那么糟糕? 的相关文章

  • 简单卸载硬盘安装的ubuntu

    我们多数要卸载ubuntu的都是双系统 简简单单 两步搞定ubuntu的卸载前提拥有一张windows的光盘 上面带有PE系统即可 用优盘启动盘估计也可以第一步 先去除grub 进入PE 多数PE里面有一个分区表医生或者类似的软件 我用的F
  • ubuntu解压zip文件命令_Ubuntu压缩及解压文件简介

    使用Ubuntu的过程中 无论用来干什么 都会有文件上的交流 必不可免的就是压缩文件 Ubuntu系统中自带了部分格式的压缩软件 但是win系统习惯的rar格式文件解压需要下载相关软件 现整理如下 1 文件格式及解压工具 tar 用 tar
  • ARM中MMU之地址转换

    第一次发帖略微有点激动 有不足的地方还请各位大神指教 最近看了看mmu 找了好多资料 看了好多博文终于稍微清楚了一点 现在我把自己理解的内容总结一下 首先我来说一下MMU的作用 MMU就是负责虚拟地址 virtual address 转化成
  • response.getWriter().write()和 response.getWriter().print()的区别 以及 PrintWriter对象 和 out对象 的区别

    一 response getWriter write 和 response getWriter print 的区别 response getWriter 返回的是PrintWriter 这是一个打印输出流 response getWrite
  • Pytorch之经典神经网络Generative Model(三) —— GAN (MNIST)

    2014年由GAN之父Ian Goodfellow提出 加拿大蒙特利尔大学 GAN 生成式对抗网络 前面我们讲了自动编码器和变分自动编码器 不管是哪一个 都是通过计算生成图像和输入图像在每个像素点的误差来生成 loss 这一点是特别不好的
  • 一篇文章,让你彻底搞懂单例设计模式

    今天在一群小哥哥的带领下 本程序媛终于学会了所有单例模式 非常感谢大哥哥 小哥哥 下文是我总结的单例模式的八种实现方式 如下所示 单例模式的简介 我们将一个类在当前进程中只有一个实例的这种模式 称之为 单例模式 那么Java代码如何实现一个
  • Postman —— 配置环境变量

    PostMan是一套比较方便的接口测试工具 但我们在使用过程中 可能会出现创建了API请求 但API的URL会随着服务器IP地址的变化而改变 这样的情况下 如果每一个API都重新修改URL的话那将是非常的麻烦 所以PostMan中也提供环境
  • 【ViT 微调时关于position embedding如何插值(interpolate)的详解】

    目录 1 问题描述 2 positional embedding如何interpolate 3 输入的sequence length改变了ViT还能正常前向推断 本文适合对Vision Transformer有一定了解 知道内部结构和一些实
  • 项目6—利用中断实现单位数码管0~9显示

    项目5中有介绍中断问题 中断函数命名格式 函数值类型 函数名 形式参数列表 interrupt x interrupt为中断函数关键字 表中第二行T0中断 使能T0中断 就要将ET0置1 当它的中断标志位TF0变为1时 就会触发T0中断 这
  • UVA1613 K-GraphOddity

    UVA1613 K GraphOddity 题目传送门 刚看第一眼一点思路都没有 后面看了大佬的题解发现这道题其实是一道水题 用到的方法就是DFS遍历图 我是废物 题目意思很简单 就不分析了 下面直接说方法 首先求出k 然后dfs遍历一遍图
  • 出现这个问题 -bash: /etc/profile.d/env.sh: Permission denied

    记录一下搞了一个上午都没有解决的问题 如下图 出现的问题很奇怪 从root用户切换到普通用户是出现了 bash etc profile d env sh Permission denied 然后用root 把这个env sh文件 内容是PS
  • IP核之FIFO实验

    FIFO 的英文全称是 First In First Out 即先进先出 FPGA 使用的 FIFO 一般指的是对数据的存储具有先进先出特性的一个缓存器 常被用于数据的缓存 或者高速异步数据的交互也即所谓的跨时钟域信号传递 它与 FPGA
  • Python配置清华镜像源

    Python配置清华镜像源 1 前言 使用pip 安装服务器在国外的python 库时 下载需要很长时间 在配置文件中设置国内镜像可以提高速度 清华镜像源就是其中之一 2 pypi 镜像使用帮助 网址 https mirrors tuna
  • 将cookie字符串转化为json对象

    先看一下cookie长啥样 在控制台输入查看document cookie 如下图 分析可以看出cookie是以 key value key2 value2 的结构 好 接下来我们就将其转为json对象 function cookieToJ
  • base64 加密解密

    1 str lt gt bytes str bytes bytes s encoding utf8 bytes str str b encoding utf 8 此外还可通过编码解码的形式对二者进行转换 str 编码成 bytes 格式 s
  • Spring cloud+Zuul+JWT实现无状态统一身份认证和分布式限流

    本文主旨搭建一个无状态统一身份认证的系统 基于Spring cloud微服务架构 Eureka 实现服务的注册与发现 Zuul网关实现服务路由 请求过滤和限流功能 使用JWT规范实现客户登陆信息的服务端无状态话 相关文章参考 Spring
  • localStorage sessionStorage cookie的区别

    文章转载自 http blog csdn net cwzhsi article details 49557879 一 基本概念 Cookie cookie比较小 大小限制在4kb左右 是网景公司的前雇员 LouMontulli 在1993年
  • tilemap 菱形_【cocos3.x+tilemap】制作rpg小游戏(二)遮挡与碰撞

    前面制作了地图 现在就可以在工程中使用了 现在只实现了遮挡与碰撞 后续再实现点击屏幕移动 寻路算法 npc交互等 实现遮挡与碰撞 都需要解决一个核心问题 当前角色到底在哪一块瓦片上 也就是cocos坐标如何转化为TileMap瓦片坐标 这个
  • python函数中将变量名转换成字符串

    考虑到在日常中 常常需要对模型指标输出 但涉及多个模型的时候 需要对其有标示输出 故需要将模型变量名转换成字符串 看到的基本方法有两种 一 方法层面 方法1 函数内推荐 def namestr obj namespace return na

随机推荐

  • webpack.config.js基础配置(五大核心属性)

    在上一节webpack零基础入门中我们在安装完webpack 和 webpack cli依赖之后 直接通过npx webpack src main js mode development的方式对src下的js文件进行了打包 其中的 src
  • threejs 拖拽事件会触发点击事件

    记录three中拖拽场景会触发click事件 解决方法 dragNoClick gt const lock e gt 获取相机位置 this lockStart this map controls target clone const un
  • 深度学习框架以及过程----通俗解释

    这些框架是实现卷积神经网络的 深度学习框架就是帮助你深度学习的工具 就像铲子和锅一样 也有不同品牌 有caffe出品的 有facebook出品 有google出品 换言之这些就是一些库 一套深度学习框架 就是这个品牌的一套积木 各个组件就是
  • 组件(component)技术介绍

    转自 http blog csdn net touzani article details 1619472 组件 component 技术是各种软件重用方法中最重要的一种方法 也是分布式计算和Web服务的基础 网络应用中的软件组件 又被称为
  • vue+vant商品列表批量倒计时

    最近因为一个项目需要用到商品批量倒计时 当时使用vant封装好的组件CountDown编写 起初不知道 timeData 这个对象只需要传time的时间戳就可以自动生成 走了一大波弯路 现在想想也是醉了 最开始写这个倒计时的时候没有考虑到使
  • How to throw an error in MySql procedure?

    http stackoverflow com questions 4862911 how to throw an error in mysql procedure 9down votefavorite What is the mechani
  • vue中使用不同版本的Swiper

    因为随着swiper的版本更新 各种版本出现的写法有所不同 swiper3 npm install swiper 3 save dev 因为版本的更新 swiper3逐渐使用的越来越少 但是还是有很多不必要的坑 我们下载完之后只需要在全局m
  • Python 统计一个纯英文文件中的单词总个数

    import sys import string if len sys argv 1 or sys argv 1 in h help print usage countWord py filename 1 filename 2 finena
  • C++实现链式栈

    pragma once template
  • python可视化石头剪刀布界面

    python是一个简单高效的编程语言 其易于扩展和丰富的库深受人们的欢迎 它让编程变得更简单 易懂 现在它也可以用来写一个一个简单的小游戏 无需网络能玩一天 代码如下 import random import tkinter from tk
  • abb 机械手臂 示例程序

    教学设备的示例程序 如有侵权 立删 MODULE SX815Q1 CONST robtarget pHomeQ1 396 50 0 00 630 00 0 499991 0 500009 0 499998 0 500002 1 1 3 0
  • 算法实践1_线性回归

    参数解释 sklearn linear model LinearRegression fit intercept True normalize False copy X True n jobs None 超参 解释 类型 默认值 fit i
  • 生产API版本及SIMNOW环境说明

  • Java 读取某文件下的所有文件名称以及大小,并输出在xls表格里

    方法一 package com test demo test import lombok Data import java io import java util ArrayList import java util List Title
  • np.clip的使用方法

    np clip的使用方法 参数数量及其作用 示例 参数数量及其作用 np clip是一个截取函数 用于截取数组中小于或者大于某值的部分 并使得被截取部分等于固定值 函数如下 np clip a a min a max out None 该函
  • WSL2中使用GPU

    在WSL2上安装CUDA和NVIDIA HPC SDK 1 WSL2和Ubuntu的安装 2 安装显卡驱动 3 在WSL2中安装CUDA 4 安装 NVIDIA HPC SDK Windows10内部预览版20145及之后的版本的WSL2支
  • 软件设计模式详解 #CSDN博文精选# #IT技术# #软件模式# #设计模式#

    大家好 小C将继续与你们见面 带来精选的CSDN博文 又到周一啦 上周的系统化学习专栏已经结束 我们总共一起学习了20篇文章 这周将开启全新专栏 放假不停学 全栈工程师养成记 在这里 你将收获 将系统化学习理论运用于实践 系统学习IT技术
  • 五、IDEA中创建Web项目

    文章目录 5 1 创建Web项目 5 1 1 创建项目 5 1 2 编写Servlet类 5 2 手动部署项目 5 3 自动部署项目 5 3 1 IDEA集成Tomcat 5 3 2 IDEA部署JavaWeb项目 5 4 war包部署 5
  • css被点击后改变样式,Js 通过点击改变css样式

    通过js 点击按钮去改变目标原始的背景颜色Change html function test4 event if event value 11 取div1 var div1 document getElementById div1 div1
  • voronoi图编程构造_可视化编程真的有那么糟糕?

    作者 Anton Livaja 译者 弯月 责编 屠敏 以下为译文 我想告诉你 如果使用恰当 可视化编程和是图解推理是一个非常强大的工具集 也就是说 只有当可视化编程扎根于数学和计算机科学并建立坚实的基础 才能发挥良好的作用 为了降低编程的