主页 > imtoken硬件钱包安全吗 > 可视化编程真的那么糟糕吗?
可视化编程真的那么糟糕吗?
出品 | CSDN(ID:CSDNnews)
以下为译文:
我想告诉你,如果使用得当,可视化编程和图形推理是一个非常强大的工具集。 也就是说,可视化编程只有植根于数学和计算机科学并具有坚实的基础才能发挥出色。 为了降低编程难度,我们对自己的代码进行了抽象比特币生成原理图解,图表等可视化的方式只是实现抽象的另一种方式。
通过抽象低级代码,它产生了更容易推理的东西。 摘自 Bob Coecke 的“描绘量子过程”一书。
当前可视化编程工具的缺点
在你不回头离开之前,请听我说完。 考虑到大多数现有工具及其使用方式,人们不喜欢可视化编程并且很容易远离它是完全可以理解的。
首先,拖放工具是我个人受挫的主要原因,而且似乎是可视化编程名声不好的原因。 比如在建网站的时候,我们使用拖放而不是Node.js技术,这会严重阻碍程序员的工作流程。 此外,他们习惯使用的工具无法正常工作。
另外,可视化编程的方式也大大降低了编程的自由度和可控性。 这是可视化编程失败的典型原因。 还有很多例子,比如笨拙的拖放界面,号称可以简化编程,实际上却让编程越来越复杂,最终以失败告终。 发生这种情况是因为如果没有正确的结构,复杂性将无法控制。
对比优缺点,你会发现可视化编程并不被看好。 它构造的糟糕的抽象虽然消除了一些低级的复杂性,但却让大多数程序员付出了他们不愿承受的沉重代价。 在某些情况下,拖放工具对于没有编程经验的人来说可能是一个很好的解决方案,但专业人士的感觉是:“这到底是什么东西?” 如果你是他们中的一员,那么我劝你不要看到《可视化编程》这个标题就转身。
什么是图解推理
图解推理就是从特定上下文中抽象出不必要的细节,以便专注于您真正关心的细节,并且通常很容易形成直觉。 这可以提高某人以特定方式推理事物的能力。 视频编码就是一个例子。 我们不会看一堆 0 和 1 代表一个视频——没有人会做那种愚蠢的事情。
视频的二进制编码和视觉表示。 摘自 Bob Coecke 的“描绘量子过程”一书。
关键是要认识到“可视化编程”并不一定意味着“拖放”。 正确的可视化编程应该基于图形推理和正确的数学形式,从而产生一个非常强大的工具包,供程序员使用。 当我说“图解推理”时,我指的是状态机、Petri 网、弦图和范畴论,尽管还有其他明确定义的数学形式可以使用。 对这些概念的介绍超出了本文的范围,但我在最后列出了一些您可以参考的资源。
更多例子
我不打算在这里解释它背后的数学原理,但我可以通过几个强有力的例子来说明视觉方法如何隐藏低级细节并揭示通常对观察者不完全透明的洞察力。 我最喜欢的例子之一是 Bob Coecke 的书“Picturing Quantum Processes”,他在书中向读者展示了在描述量子过程时,当我们面对满是晦涩字符的页面时,我们无法直观地理解所写的内容,并且它也需要很多先决知识才能理解; 但是我们可以用一些图表以“正式的方式”(数学中正确定义的方式)来描述它。 看看下面这张图片。
用于描述量子过程的低级语言与高级语言(视觉)。 摘自 Bob Coecke 的“描绘量子过程”一书。
这个例子与编程没有直接关系,所以让我们看另一个例子。 需要注意的是,下面用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()。
以下示例是可视化方法对流程建模的实际应用。 以ATM为例,因为本人是区块链技术爱好者,所以这里以比特币ATM为例。 从技术的角度来看,这是一台设计良好的机器,必须避免非法状态并做它应该做的事情。 非法状态包括货币双花问题、向用户发送错误数量的加密货币或不向用户发送加密货币等。
至于如何利用你已有的知识搭建这样一个系统,并提供图形化的方式,这个问题就交给你自己去解决吧。 让我们以比特币为例。 下面是一个简化版本,但它很好地演示了整个过程。
ATM 将普通货币转换为比特币的过程。
上图是一个简单的Petri网。 那个四处走动的小黑点代表了 Petri 网当前状态的“令牌”。 可以看到,这不仅仅是一个图,它还可以通过“触发转换”(代表转换的小矩形)来捕捉不同的状态。 有趣的是,由于结构良好的 Petri 网,上图可以编译成低级语言,也可以作为与多个微服务或模块交互的程序运行。 这正是我们的 Statebox 可以做的。 现在,以运行比特币 ATM 的软件架构的当前模型为例,让我们比较您设计流程的方式与使用可视化方法对其建模的好处。
使用可视化方法建模的固有优势
考虑不同的“层次”
我们需要记住,可视化编程并不一定要实现底层逻辑,比如与第三方服务、API 等的交互。在 Statebox,我们认为可视化编程的有效使用是在更高层次上对事物进行建模level(这里的higher level可能有点误导,它可以指高层的系统架构,也可以指底层的流程,比如上面的ATM操作流程)。 通过 Petri 网的力量,将可视化编程与类别理论相结合,并对它们的行为施加额外的约束,我们可以构建一种定义明确的语言来定义流程或协议。 我们的工具包(虽然目前正在开发中,但已用于多个真实世界的用例,我们将很快公布)旨在利用这些排序的 Petri 网流进行可视化建模。 此外,它还提供了一个引擎,可以在网络或进程中实现从一种状态到另一种状态的转换。 这本身就是一个强大的工具,但我们正在创建一个完整的开源生态系统,并围绕这种编程方法构建工具。
Statebox系统目前的功能包括Petri网的字符串图编辑工具、基于事件源的数据存储方案、分类数据模式的迁移、权限系统中的公私钥、merkle树等区块链、数据Hashing的区块链为了完整性,相对容易的函子映射(集成)到其他系统(云服务、区块链、语言等)、强类型(我们的 Petri 网样式中的位置和转换有类型)、自动 API 和表单生成、从构建的结构化数据系统中不同参与者的元数据、终止保证和其他通过应用状态空间分析、简化的正式流程验证和开箱即用的正式验证组件获得的见解。 此外,我们正在开发一种基于多项式的类型构造语言,可以在语言之间实现简单的“类型转换”。
以下资源可以帮助您理解 Petri 网、范畴论和弦图。
资源
以下资源来自我们的顾问,他们都是各自领域的世界知名专家。
我建议你从第一部分开始阅读比特币生成原理图解,可以跳过你熟悉的章节。 Pawel 做了出色的工作,能够让没有任何范畴论基础知识的人理解视觉代数和范畴论,以及它们如何通过图表和随着时间建立的语义复杂性以直观的方式关联。
原版的:
本文由CSDN翻译。 如需转载,请注明出处。
热点文章推荐
print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!\n");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"