作者 | Anton Livaja

译者 | 弯月

责编 | 屠敏

以下为译文:

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

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

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

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

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

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

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

什么是图解推理

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

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

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

更多示例

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

描述量子过程的低级语言与高级语言(视觉)。摘自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;}

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

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

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

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

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

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

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

考虑不同的“级别”

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

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

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

  1. ironbot智能编程机器人_智能编程机器人-IronBot!_硬件测评心得_ZNDS

    本帖最后由 qyhgy 于 2017-5-7 20:41 编辑 很清楚地记得自己在读小学一年级时,中午放学铃声一响就与约好的同学马上飞奔回家.12点正放学,12:03分就回到家打开电视观看粤语版< ...

  2. python积木编程软件_积木编程下载-积木编程app下载v1.0.0-西西软件下载

    积木编程是一款专业的编程学习软件,平台为用户提供多种编程模板使用,还收纳了丰富的编程知识方便用户随时在线学习,更快掌握编程相关技能和知识,专业题库.优质课程.模拟实战都能帮助用户快速提升编程水平. 积 ...

  3. python积木编程软件_积木编程软件手机版下载

    积木编程软件是可以在线可以学习编程的软件,平台给用户提供了大量的编程学习教程,软件还支持在线编程,学习内容丰富,让用户学习起来不会枯燥乏味,就算你是零基础的小白,也可以体验到编程的乐趣. 积木编程官方 ...

  4. c++手机编程软件_积木编程软件手机版下载-积木编程软件下载v1.0.1 安卓版

    积木编程软件是可以在线可以学习编程的软件,平台给用户提供了大量的编程学习教程,软件还支持在线编程,学习内容丰富,让用户学习起来不会枯燥乏味,就算你是零基础的小白,也可以体验到编程的乐趣. 积木编程官方 ...

  5. 风变编程第18关 编程思维_动态编程变得容易

    风变编程第18关 编程思维 Imagine you have a bag of coins where each coin is of value 5 dollars and you have to ...

  6. 扇贝python编程课_扇贝编程app下载-扇贝编程手机版python「附如何设置自由职业」 - 超好玩...

    扇贝编程app是一款学程序的初学者们都爱用的编程学习软件,软件汇集从入门到应用一应俱全.扇贝编程手机版python「附如何设置自由职业」常见的编程语言及技术教程,学习查询两不误!更有专业的编程导师手把 ...

  7. 积木履带机器人编程手册_学会编程,寓教于乐!ONEBOT 反履机甲图赏

    爱其科技旗下自主品牌 ONEBOT 发布了一款可控制行动.可编程的机器人- ONEBOT 反履机甲. 该产品包含了800+零件,即使是积木界的老司机,最少也得有3小时时间来搭建.如果是10岁+的小朋友 ...

  8. python的函数式编程实例_函数式编程例子

    函数式编程例子 [篇一:函数式编程例子] 在 08 年的时候 ( 这经历记忆犹新 ) 我也跟 lz 一样,翻了好多文章, google 了好几个星期,最后我知道它 是这么个东西: ul li 它是函数 ...

  9. python函数式编程模式_函数式编程指引

    概述¶ 本章介绍函数式编程的基本概念.如您仅想学习 Python 语言的特性,可跳过本章直接查看 迭代器. 编程语言支持通过以下几种方式来解构具体问题: 大多数的编程语言都是 过程式 的,所谓程序就是 ...

最新文章

  1. 微软宣布将于08年发布Centro服务器软件
  2. Mysql使用Data Modeler
  3. bilateral filter双边滤波器的通俗理解
  4. Android内存管理机制
  5. 使用Java从地图中删除元素
  6. unityios开发--Scorll View控件 .
  7. VC++窗口创建过程,图形绘制,时钟程序
  8. Join的实现步骤 以及连接的概念
  9. php调用go微服务,基于go搭建微服务实践教程 (一)
  10. cocostudio的TextField空件实现光标。
  11. 博客园2013年5月份第2周源码发布详情
  12. java 发 腾讯企业邮_JAVA使用腾讯企业邮箱发送邮件时报错Could not connect to SMTP host...
  13. Power Apps 应用实战|轻松用 Power Apps 开发员工休假考勤管理小程序
  14. [M1]Daily Scum 9.29
  15. numpy.argsort()函数
  16. 抖音小店还能做吗?如何解决拍单问题?
  17. 设计模式之命令模式(行为型)
  18. 保姆级高通AEC9调试指南(看完可解决80%AE相关问题)
  19. B树、B+树—插入,删除,查询
  20. 【微信】Java 微信扫码支付(模式二)

热门文章

  1. Mac上Jupyter notebook代码补全
  2. Android查看CPU和GPU使用率
  3. Android启动的init进程
  4. C++之MFC之Unicode转char*
  5. Vue中如何正常使用锚点定位?
  6. Java 数组转字符串
  7. 3种方法实现Android按钮的点击事件,建议收藏!
  8. python的主要内容_请教,python基础班主要学哪些内容?
  9. 安卓开发 底部导航图标切换时动画效果_体验安卓 10:好用百倍都不止!
  10. 项目解析jsx文件_React系列二十二 云音乐项目实战