作者 | Anton Livaja
译者 | 弯月
责编 | 屠敏
出品 | CSDN(ID:CSDNnews)
以下为译文:
我想见告你,如果利用恰当,可视化编程和是图解推理是一个非常强大的工具集。也便是说,只有当可视化编程扎根于数学和打算机科学并建立坚实的根本,才能发挥良好的浸染。为了降落编程的难度,我们已经对我们的代码进行了抽象,而图表等可视化的方法只是实现抽象的另一种办法。
通过对低级代码的抽象,天生更随意马虎推理的东西。摘自Bob Coecke的著作《Picturing Quantum Processes》。
当前可视化编程工具的缺陷
在你头也不回地离开之前,请听我一言。考虑到大多数现有的工具及其利用办法,人们不喜好可视化编程,轻易将可视化编程拒之门外都是完备可以理解的。
首先,拖放的工具便是让我个人感到沮丧的紧张缘故原由,而且彷佛也是给可视化编程招来骂名的缘故原由。例如,在构建网站的时候,我们用拖放的办法代替 Node.js 技能,那么就会严重阻碍程序员的事情流程。而且,他们习以为常的工具也无法正常利用。
此外,可视化编程的办法还大大降落了编程的自由程度和可控性。这是可视化编程失落败的范例缘故原由。还有很多例子,比如笨拙的拖放界面,自称可以简化编程,实际上却让编程越来越繁芜,并终极失落败。发生这种情形是由于繁芜度缺少精确的构造而无法管理。
比较下优缺陷就会创造,可视化编程并不乐不雅观,它布局的不良抽象虽然肃清了一些低级的繁芜性,却让大多数程序员都付出了不愿承担的惨重代价。在某些情形下,对付没有编程履历的人来说,拖放工具可能是一个很好的办理方案,但专业人士的觉得是:“这是什么鬼?”如果你是个中之一,那么我劝你不要看到“可视化编程”的标题就转头离开。
什么是图解推理
图解推理便是对特定的高下文中不必要的细节进行抽象,以便专注于你真正关心的细节,而且常常可以让人们很随意马虎形成直觉。这可以提高某个人以特定办法推理事物的能力。***的编码便是一个例子。我们不会不雅观看一堆代表***的0和1——没人会做那种傻事。
***的二进制编码与视觉表示。摘自Bob Coecke的著作《Picturing Quantum Processes》。
关键在于你要意识到“可视化编程”并不一定意味着“拖放”。精确的可视化编程应该基于图解推理与精确的数学形式,从而形成一个非常强大的程序员可以利用的工具包。当我说“图解推理”时,我特指的是状态机、Petri网、字符串图和范畴论,只管还有其他定义良好的数学形式可以利用。有关这些观点的先容超出了本文的范畴,但是我在末了列举了一些你可以参考的资源。
更多示例
我不打算在这里阐明背后的数学事理,但我可以通过几个强有力的例子,来解释如何通过视觉的方法隐蔽低级的细节,并戳穿一些对不雅观察者而言常日不完备透明的深入理解。我最喜好的一个例子是Bob Coecke的著作《Picturing Quantum Processes》,他向读者展示了在描述量子过程的时候,如果面对满纸晦涩难懂的字符,我们无法凭直觉理解个中的内容,而且还须要大量的条件知识才能理解;但我们可以通过几张图表用“正式的办法”(数学中精确定义的办法)来描述。看看下面的这张图。
描述量子过程的低级措辞与高等措辞(视觉)。摘自Bob Coecke的著作《Picturing Quantum Processes》。
这个例子与编程没有直接的联系,以是让我们再来看一个例子。须要把稳的是,下述用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 Linear Algebra》(https://graphicallinearalgebra.net/2016/09/07/31-fibonacci-and-sustainable-rabbit-farming/)。
下面的示例是用可视化的方法对流程进行建模的实际运用。以ATM为例,由于我是区块链技能的粉丝,以是这里用比特币ATM为例。从技能角度来看,这是一台经由精心设计的机器,必须避免造孽状态并完成应有的功能。造孽的状态包括货币的双花问题,向用户发送缺点数量的加密货币,或者没有向用户发送加密货币,等等。
至于如何利用你现有的知识构建这类的系统,并供应一种图解的办法,这个难题就留给你来办理吧。我们以比特币换普通货币为例。下面是一个经由简化后的版本,但可以很好地演示全体过程。
ATM将普通货币转换为比特币的过程。
上图是一个大略的Petri网。那个走来走去的小黑点代表Petri网当前状态的“令牌”。如你所见,这不仅仅是一个图表,它还可以通过“触发转换”(小矩形代表转换)捕获不同的状态。有趣的是,由于Petri网具有良好的构造,因此可以将上图编译成低级措辞,而且还可以像与多个微做事或模块交互的程序一样运行。这正是我们的Statebox所能完成的功能。现在,就以当前这个为运行比特币ATM的软件体系构造而建立的模型为例,我们来比拟一下你设计流程时采取的方法,与利用可视化的方法来建模的好处。
利用可视化方法建模与生俱来的上风
非技能职员可以更轻松地通过故意义的办法为流程建模做出贡献。可以减少流程上的缺点。人们可以访问运用于Petri网的数学工具,例如检测去世锁与防止造孽状态的状态空间剖析。更随意马虎确定所有边界情形,并指出错误,由于图解推理有助于我们对低级信息进行抽象(例如,如果用英语的平铺直叙或条件语句表达与上图等价的内容,那么恐怕远不如视觉表现形式随意马虎理解)。可以根据流程的不同状态构建用户界面,如此一来便更加易于管理系统的状态与用户界面显示内容同等的繁芜性,而且与相应式编程有良好的协同效应。虽然Petri网之类的构造不一定是视觉建模事物的专有特性,但有了Petri这种构造,就很随意马虎管理繁芜性,由于这样的构造内部嵌入了大量信息(例如合法的“下一个”状态凑集)。因此,这些事情都无需留到代码中办理了,而且常日都可以简化API和中间件。考虑不同的“级别”
我们须要记住可视化编程不一定要实现低级逻辑,例如与第三方做事,API的交互等。在Statebox,我们认为有效的利用可视化编程的方法是,在更高层次上对事物进行建模(更高层次在这里可能有点误导,由于它可以指代高等系统架构或低级的流程,例如上述ATM的运行流程)。通过Petri网的强大功能,将可视化编程与范畴论结合起来,对其行为施加额外的限定,我们就可以构建一个定义良好的措辞来定义流程或协议。我们的工具包(虽然目前正在开拓中,但已经在现实天下的几个用例中得到了利用,很快我们就会公布)的设计旨在利用这些经由分类的Petri网的流程进行可视化建模。此外,它还供应了一个引擎,可以实现在网络或流程中从一个状态转换到另一个状态。这本身便是一个强大的工具,但我们正在创建一个完全的开源生态系统,并环绕这种编程方法创建工具。
到目前为止Statebox系统的功能包括用于Petri网的字符串图编辑工具,基于事宜源的数据存储方案,分类数据模式迁移,权限系统中的公私密钥,merkle树等区块链和用于数据完全性的散列,相对大略的函子映射(集成)到其他系统云做事,区块链,措辞等),强类型(我们Petri网风格中的位置和转换都有类型),自动API和表单天生,根据系统中不同角色的元数据构建的构造化数据,终止包管以及通过运用状态空间剖析得到的其他见地,经由简化的正式流程验证以及开箱即用的正式验证组件。此外,我们正在开拓一种基于多项式的类型布局措辞,实现在不同措辞之间进行大略的“类型转换”。
以下资源可以帮助你理解Petri网,范畴论和字符串图表。
资源
以下资源出自我们的各位顾问,他们都是各自领域的天下有名专家。
Pawel Sobocinski的博文《graphical linear algebra 》(https://graphicallinearalgebra.net/):我建议你从第一部分开始阅读,可以跳过你熟习的章节。Pawel的事情非常出色,他能够让一个没有任何视觉代数与种别理论的根本知识的人理解这两者,并通过图表与一段韶光内建立的语义繁芜性让人明白两者在直不雅观办法上的关系。
Bob Coecke的著作《Picturing Quantum Processes 》:这是一本关于利用视觉方法来理解量子理论的伟大之作。原文:https://blog.statebox.org/why-visual-programming-doesnt-suck-2c1ece2a414e
本文为 CSDN 翻译,如需转载,请注明来源出处。