【CSDN 编者按】和传统的编程方式相比,可视化编程相对来说更为简单,只需要通过简单的操作,就可以设计出程序界面,不过,诸多开发者认为,可视化编程大大降低了代码的自由程度和可控性,还不如弃之不用。但整体而言,可视化编程真的有那么糟糕吗?

作者 | 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 翻译,如需转载,请注明来源出处。

 热 文 推 荐 

雷军终于想明白了

GitHub 疑被审查?著名“换脸”开源项目遭限制访问

谷歌微软 IBM 激战云端,亚马逊地位恐将不保?

故宫“瘫痪”程序员怎么办?

微服务、Kubernetes和无服务器之后,即将发生的……

☞ 打打游戏就能在北京二环买套房?区块链大神说:你能靠VR刷怪升级还房贷!

帅气中国小哥出“大招”,程序员跳槽面试刷题必备

☞ 35岁程序员 节后第一天被辞退!

print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!\n");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"

点击“阅读原文”,打开 CSDN App 阅读更贴心!

喜欢就点击“好看”吧!

可视化编程真的有那么糟糕?相关推荐

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

    作者 | Anton Livaja 译者 | 弯月 责编 | 屠敏 以下为译文: 我想告诉你,如果使用恰当,可视化编程和是图解推理是一个非常强大的工具集.也就是说,只有当可视化编程扎根于数学和计算机科 ...

  2. 为什么说可视化编程是糟糕的想法?

    可视化编程语言可以让程序员通过操纵图形元素来创建程序,而无需键入文本命令. 众所周知的例子是 Scratch,这是一种麻省理工学院开发的可视化编程语言,用来教孩子们学编程. 该语言的优势在于新手和普通 ...

  3. 如何使用 Go 语言重新思考可视化编程?

    作者 | Ivan Daniluk 译者 | 杨雷 这是在 GopherCon Europe 2019(加那利群岛版)上发表的演讲的博客版,分享了可视化编程语言为什么失败的一些想法,并首次展示了 Go ...

  4. c+gui语言可视化编程

    简单介绍:也没感觉到饿:我胸口剧烈的起伏着:全身新手装就去挑战六级的BOSS!我说过:于是沉沉睡去,啊窗,妹呀,我 本文写于:2012年10月03日;是所有人心目中的女神 计划:也没感觉到饿:我胸口剧 ...

  5. 学计算机编程会秃头吗,编程真的容易导致秃顶么?

    原标题:编程真的容易导致秃顶么? 昨天,和一程序员基友吃饭 想拍一张照片发朋友圈 结果被极力阻(威)拦(胁) "你拍嘛,拍了我就把手机给你砸了" 有这么可怕的么?我这么可爱 无耻的 ...

  6. 可视化编程已经能取代高级语言了吗?

    可视化编程能够取代高级语言吗?即使现代的计算机技术得到了飞速发展,可视化编程取代高级语言依旧是其行业内最高理想.本文将从国内外流行的可视化编程商业工具入手,分析现阶段可视化编程的局限性,以及未来可视化 ...

  7. 《Python数据可视化编程实战》——5.5 用OpenGL制作动画

    本节书摘来异步社区<Python数据可视化编程实战>一书中的第5章,第5.5节,作者:[爱尔兰]Igor Milovanović,更多章节内容可以访问云栖社区"异步社区" ...

  8. 像“打游戏”一样用Numpy,可视化编程环境Math Inspector了解一下? | 代码开源

    子豪 发自 凹非寺 量子位 报道 | 公众号 QbitAI 科学计算工作者不必再为代码头痛了! 现在,你能像"打游戏"一样,无需编码,轻松使用NumPy功能. 就像这样:   这款 ...

  9. 《Unreal Engine 4蓝图可视化编程》一1.6 改变目标方向

    本节书摘来异步社区<Unreal Engine 4蓝图可视化编程>一书中的第1章,第1.6节,作者: Brenden Sewell 译者: 陈东林 责编: 胡俊英,更多章节内容可以访问云栖 ...

最新文章

  1. Avahi DOS攻击broadcast-avahi-dos
  2. CentOS源码下载和Windows平台下解压rpm包
  3. ../configure: /bin/sh^M: bad interpreter: No such file or directory
  4. C# 打印PDF文档的10种方法
  5. db2 控制台执行创建函数语句_DB2数据库中创建定义函数
  6. java的数列极差_[hoj]数列极差问题 | 学步园
  7. 有钱就是任性!阿里20亿美元拿下网易考拉:欢迎加入阿里动物园
  8. 华为方舟编译器是黑科技?
  9. Jboss jar包冲突及jar加载顺序
  10. 32岁了 学python 来的及吗-32岁的程序员去了国企工作, 晒出年薪, 网友: 我没看错吧...
  11. [转载] 大道至简:软件工程实践者的思想——第八章 你看得到工具的本质吗
  12. C++中的向量vector
  13. SERVER 2008 +MSSQL2008+SCCM安装记录
  14. 微信小程序代码提交步骤
  15. Eclipse + keil 使用教程
  16. 如何生成微信小程序二维码(uniapp开发)
  17. 感知机(Perceptron)-《统计学习方法》例题对偶形式手算全过程
  18. Python爬取必应图片2
  19. python 空数组_Python笔记
  20. win7 64位纯净版系统下载

热门文章

  1. leetcode python3 简单题190. Reverse Bits
  2. lua笔记1 基础概念
  3. Golang的socket一般使用方式
  4. Flutter布局锦囊---完善信息页
  5. 中国内部物流输送系统市场趋势报告、技术动态创新及市场预测
  6. 中国酸性蒸汽清洗系统市场趋势报告、技术动态创新及市场预测
  7. 中国紧凑型玻璃垫圈行业市场供需与战略研究报告
  8. 前端 如何将页脚固定在页面底部
  9. 经常玩电脑正确的坐姿_「姿态训练」保持良好坐姿的八个步骤
  10. 从研发到管理,这十大技巧助我提升了领导力