阅读更多

1顶
0踩

非技术

转载新闻 代码可视化的自动化之路

2014-09-09 16:36 by 见习编辑 u012797015 评论(1) 有8240人浏览

你知道,当你忙于一个复杂算法时,不得不返工一百万次,因为你没有正确地掌握细节?或者在你读某人的代码时,你不能确定它在做什么?此时,我们希望拥有代码可视化(code visualization)工具,因为这会让编程生活如此简化。

 

本文,我将讨论一些现有的用于代码可视化的工具及其缺点,然后尽量总结它们背后的想法。为了创造得体的代码可视化工具、以及如何达到这个程度,接着我会分享必备条件,我将给出应该采取的最初几步。

 

工具

 

有很多不同的、显示代码可视化有用的情况。理解复杂的算法、理解其他人的函数,或在一个总体的不同范围下,理解一个新的代码库、或类、或函数集合。对于某些情况,可视化已经存在了。对于项目或代码级别的范围,有 UML,各种图表。在算法的范围,有些网站企图可视化一部分最通用的算法。这些工具是伟大的,但是它们有一个大问题,使用它们要花费很长时间。在严峻的时间下,我们只有两周来开发下一个 Facebook,你没有时间画复杂的 UML 图。第二个问题,即使通用算法可能有可视化了,而自定义算法可能从来不会有。

 

也有一些工具和编程语言采用了不同的方式,你编程一部分,很快就能看到交互、或至少你正在做的可视化的结果。我在讨论 dat.GUI,你知道的,你在很多 demo 里看到过黑色和彩色控制面板吗?你能够看到我的优雅的文本生成器示例(不要在较慢的设备上打开)。另一个例子是 Gooey,把 Python 命令行程序自动生成 GUI,无需从技术上理解的、用户友好性。我过去在讨论的一种编程语言是 JavaScript,从 JavaScript 刚刚出现的时候,它就与一种名叫 HTML 的接口结合在一起了。

 

允许你可视化代码(非自动地)的第一套工具,允许你把现有代码/配置转化成接口(自动地)的第二套工具。问题在于,我们是否能够自动产生接口,包括输入和输出。可视化只是输出。那么,我们为什么没有尽量可视化代码以使其易于理解的工具?听说过一个对象图表吗?它们是可视化了当前程序或程序子集的状态的图表。具有三种“水果”类型的对象的列表看起来是这样的:


如果能够使用这样的可视化来调试,是不是很好呀?

 

我对接口的定义是,它有输入、输出或二者都有,几乎任何东西都能用一到两种方式定义为接口,石头、键盘、乐器、人类……

 

实际上所有这些工具在做的,都是把一个想法、用代码或图表表达的想法,转化成一个或多个不同种类的接口。编程语言把想法(以文本形式)转化成不同的接口,可以是 HMTL、可以是传统的 GUI、命令行应用程序或 app。UML 把想法转化成优雅的可视化概括。dat.GUI 用 HTML 把配置代码转化成清晰的配置 GUI。Gooey 把命令行程序转化成传统的 GUI。

 

它们都使用一个接口,然后转化成一个或多个不同的接口。我乐于给出更多的例子,只是本文篇幅会过长。如果你对有趣的接口转化的更多例子感兴趣,看看 Slava Akhmechet 关于 lisp 的文章,它讨论了把任何编程语言转化为另一种语言的通用接口。或者 Philip C Monk 的博文,他讨论了树、图像编程(他有 demo)等等。

 

想法

 

好吧,下一步,我们明白了代码可视化的一些工具和方法。代码可视化是把代码或其子集可视化的过程。这可以在高等级(代码库或项目),中等级(函数文件、类、庞大的类)或低等级(函数级别,算法)。每个等级需要不同的分析代码的方法和不同的细节等级。

 

在最低的等级,我们需要的是至少可视化最基本的数据类型的方法,最常见的是布尔值、字符串、数字、list 和对象(或字典、hashmap、任何你调用的东东)。还有,一种获取可视化所需数据的方法。但是如果我们这样做了,我们仍然面临现有工具同样的问题。然而,通用算法可能已经有可视化了,自定义算法可能从来不存在。数据类型同样如此,而 list 的可视化或许容易,当一个 list 包含数千个 item,或你无法使用内置 list,比如双端队列(栈),链表时,很快就变得复杂了。在有对象时,甚至更难,因为它们很快变得比程序的其它任何地方都要复杂。

 

然而不是不可能,弄清楚程序员在用哪种数据类型会是极端困难的(特别是没有自定义类型的 JavaScript 之类的语言)。这就是为什么我们需要在两个地方交互的工具。第一个是在程序运行(程序配置)之前,比如定义你在使用的数据类型,第二种就是在程序运行的时候,缩放、padding、隐藏列表 items 中的 10000 个等等。

 

限于篇幅,方便交流起见,我忽略了中等级和高等级的细节。

 

偏题

 

本文原本是关于代码可视化的,现在变成了随笔,是关于:每样事物都是一些事物的接口、电子信号是大脑和手之间的接口、键盘是手和电脑之间的接口、文本编辑器是键盘和编程语言之间的接口、编程语言是想法和其它更多想法之间的抽象接口!我喜爱探索接口的想法,更普遍地推广,因此我们可以用不同的方式使用它们。

 

为什么我认为它是有用的,因为它不仅仅是有用的思想,而是一种不同的方法,产生了不同的解决方案、思路等等,而且它可以被用在优化以及概念或现有想法的产生上。

 

我希望本文能有一点点意义,激发人们随后用不同的方式思考这个世界,我也打算写更多的关于接口、不同种类的接口、接口之间的交互方面的文章。

 

  • 注1:双端队列(deque,全名 double-ended queue)是一种具有队列和栈性质的数据结构。双端队列中的元素可以从两端弹出,插入和删除操作限定在队列的两边进行(见维基百科)。

 

  • 大小: 16 KB
来自: 腊八粥
1
0
评论 共 1 条 请登录后发表评论
1 楼 ziguopu 2014-09-09 16:58
一切为生产力服务,生产力为需求服务

从原来的二进制,到现在的界面拖拽. 这本来就是一个可视化的过程

我想用可视化吗? 我想,所以我用eclipse和许多插件
我为什么想用可视化,就是为了生产力

客户为什么想要做这个系统,为了生产力.他有这个需求. 这个系统就是客户的可视化
因为这个系统的事情他完全可以用纸加算盘去搞定

道理就很简单了

客户要系统可视化
程序员需要编程可视化
可视化设计者需要语言可视化
语言设计者想要汇编可视化

归根究底.这就是一个层级关系, 关键是你在这个可视化层级的那一层

层级决定了使用者的视野和收获

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • oracle是gbk程序是utf8的,oracle数据库gbk转utf8

    如何更改Oracle字符集避免乱码转一位大神的笔记。...UTF8字符集是多字节存储,1个汉字(简体、繁体)有时采用3个字符长度存储。Oracle支持字符集的更改,但是UTF...文章技术小美2017-11-12972浏览量通过convert函数...

  • UTF8编码中文字符存入Oracle字符集ZHS16GBK后取出展示的问题

    Oracle字符集为ZHS16GBK。 字段中存入的字符串是UTF8编码(也是够了)。 直接选出查看是乱码...

  • oracle jdbc url gbk,JDBC URL格式及其参数说明 oracle mysql

    oracle jdbc urljdbc:oracle:driver_type:[username/password]@database_specifierdrive_type有thin和oci如:jdbc:oracle:thin:@localhost:1521:my_dbmysql JDBC URL格式及其参数说明mysql JDBC URL格式如下:jdbc:...

  • mysql可以utf-8_MySQL支持UTF-8编码全攻略

    最近看到好多关于MySql支持utf-8编码的问题,刚好自己也要用,去找了一下,没有写的很全面的。整理了一下,供大家参考。在一下服务器设置测试通过服务器配置:window2000Tomcat 4.1,5.19Mysql 4.1, 5.0Java语言,JDK...

  • oracle数据库字符6,oracle 数据库字符编码

    理解ORACLE 字符集【转】一、引言ORACLE数据库字符集,即Oracle全球化支持(Globalization Support),或即国家语言支持(NLS)其作用是用本国语言和格式来存储、处理和检索数据。利用全球化支持,ORACLE为用户提供自己...

  • AL32UTF8/UTF8(Unicode)数据库字符集含义 (文档 ID 1946289.1)

    AL32UTF8/UTF8(Unicode)数据库字符集含义 (文档 ID 1946289.1) 适用于: Oracle Database Cloud Schema Service - 版本 N/A 和更高版本 Oracle Database Exadata Cloud Machine - 版本 N/A 和更高版本 Oracle ...

  • 利用ODI将Oracle US7ASCII编码的数据库迁移至UTF8编码数据库

    在数据使用中会存在一个特殊的问题,就是US7ASCII字符集.我们知道US7ASCII是早期的英文字符集,是不支持中文的。但是,有的用户使用是Oracle6,Oracle7.0,Oracle7.1,这几版本不支持中文字符集,存储中文也会使用US...

  • java mysql utf-8_[转载]MySQL支持UTF-8编码全攻略

    最近看到好多关于MySql支持utf-8编码的问题,刚好自己也要用,去找了一下,没有写的很全面的。整理了一下,供大家参考。在一下服务器设置测试通过服务器配置:window2000Tomcat 4.1,5.19Mysql 4.1, 5.0Java语言,JDK...

  • oracle数据库编码gbk,oracle 数据库编码 gbk

    Oracle字符乱码、数据越界访问典型Bug分析前言作为乙方,在甲方客户那里验收阶段发现两个诡异Bug。以下就问题来源、问题根因、解决方案、如何避免做详细描述。一、Bug1:Oracle读写字符乱码。1、问题来源Oracle...

  • ORACLE11g数据库字符集从ZHS16GBK转为UTF8

    ORACLE11g数据库字符集从ZHS16GBK...写了一个sql脚本,该脚本在一个web项目里,整个web项目编码格式都为UTF8,初始化数据库想使用java调用oracle命令来执行该脚本,但是用oralcle的命令执行该脚本时,存到数据库中...

  • 使用JDBC连接Oracle数据库和使用连接池连接Oracle数据库的代码解析

    这里连接的是oracle数据库。 JDBC是什么:JDBC是java数据库连接技术的简称,提供连接各种常用数据库的能力。 客户端发送请求给应用服务器,应用服务器通过JDBC连接到数据库服务器,查询数据库中的数据,返回一个结果...

  • oracle mysql us7acsii_JDBC读取Oracle的US7ASCII编码中文乱码及不同编码下汉字占用字节的问题...

    数据库版本号:Oracle 10g字符集:SIMPLIFIED CHINESE_CHINA.US7ASCIIJDK:1.6.0_45Oracle驱动:ojdbc14.jar使用JDBC操作数据库,获取连接、运行SQL没有问题。可是,查询出来的结果中,全部汉字,均显示为乱码。...

  • java连接oracle数据库查询乱码(oracle编码格式为WE8DEC)

    我是用的平台是eclipse,平时想到简单的方式就是使用jdcb,但是发现查询后,中文乱码,很是头疼,在网上差了很多资料,但他们大oracle数据库的编码格式都不是WE8DEC,但幸运的是,也能找到几个关于WE8DEC的解码,使用后...

  • java orcale连接数据库时jdbc设置编码

    mysql可直接在url后面加上字符集设置: String url = "jdbc:mysql://...characterEncoding=UTF-8"; String username = "root"; String password = "root"; 但是oracle连接的话就不行,他会提示找不到SID。 ...

  • JDBC连接数据库,设置编码(防止乱码)以及忽略警告的方法

    JDBC连接数据库,设置编码(防止乱码)以及忽略警告的方法: 数据库版本是5.x的版本的设置的方式: 注意:代码中的test表示的是一个数据库,可以修改 //注意,区分大小写 jdbc:mysql://localhost:3306/test?useSSL=...

  • 关于数据库中文乱码问题解决步骤,编码问题:UTF-8,GBK,ISO-8859-1

    存入数据库的中文可能往往会出现乱码问题,大都是由于编码问题。 乱码两种情况:字符乱码,中文显示为问号。 出现这两种情况的原因: 1.字符乱码,服务端UTF-8,项目为GBK,但是字符是ISO-8859-1存入。 2.中文...

  • JDBC连接数据库插入中文数据乱码的几种情况和解决方式

    大家通常用的编码格式都是utf8。我这里就用它举例子 1、IDEA自身编码格式不是utf8 解决方式: 在IDEA中根据这个目录 File | Settings | Editor | File Encodings 找到File Enconding 检查这几个地方的字符集编码...

  • java oracle 指定编码格式,Java连接数据库oracle中文乱码解决方案

    今天写了一个java项目...出现这种情况一般都是数据库编码与项目编码不一致导致的,首先查看项目与数据库的编码格式:查看项目编码:项目的编码是gbk格式查看数据库编码格式:数据库编码格式是ISO-8859-1以上查看编...

  • Java实战项目——基于ssh实现的博客系统(毕业设计)(前后端源码+论文+数据库+说明文档)25.zip

    ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现

  • 基于React的后台开发框架(javascript)

    【作品名称】:基于React的后台开发框架(javascript) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:运行Demo cd tui/example npm install node app.js open localhost:3003/be 说明 simditor文件夹为TUI依赖的编辑器插件,如果用到编辑器,页面引入simditor.all.min.js和simditor.css即可。

Global site tag (gtag.js) - Google Analytics