为什么说可视化编程是糟糕的想法?
可视化编程语言可以让程序员通过操纵图形元素来创建程序,而无需键入文本命令。
众所周知的例子是 Scratch,这是一种麻省理工学院开发的可视化编程语言,用来教孩子们学编程。
该语言的优势在于新手和普通用户可以更容易接触编程。二十世纪九十年代曾经有一种非常流行的运动,即通过所谓的 CASE 工具将这类工具带入企业,这些企业的系统可以通过 UML 进定义和生成,而无需雇佣训练有素的软件开发人员。
这涉及“round tripping”的概念,即通过可视化的手法为系统建模,根据模型生成程序代码,而且任何代码的变更都可以反向反映到模型上。但最终这些工具未能兑现承诺,而且大多数这类尝试现在也已基本放弃了。
因此,除了一些非常有限的领域外,可视化编程都未能成功。其中的原因基本上可以归于以下几种对编程的误解:
文本编程语言混淆了本质上很简单的过程。
抽象和解耦是外围问题,对编程的意义不大。
为支持编程而开发的工具并不重要。
误解一:文本编程语言混淆了编程本质
第一个误解认为软件开发的门槛很高,因为文本编程语言混淆了编程的本质。Scratch 在教育学家中的流行就属于这种误解。
该观点认为编程实际上非常简单,我们只需通过清晰的图形来表现,就可以大大降低创建和阅读软件所需的学习曲线和努力程度。
我认为这种误解是因为有些人未能真正读懂用标准的文本编程语言编写的程序,并想象可以将程序转换成盒子和箭头等图形元素。
如果你这样做,很快就会发现一行代码经常需要映射到多个盒子上,一个简单的程序包含数百行代码的情况是常态,因此这将转化为成百上千个图形元素。在头脑中理解如此复杂的图形往往比阅读同等的文本更加困难。
在这个问题上,大多数可视化编程语言的解决方案是使用“块”来代表更为复杂的操作,从而可以让每个可视化元素都代表一大段文本代码。可视化流程工具是罪魁祸首。
问题是我们需要在某个地方定义这些代码。于是,这就成了“属性对话编程”。可视化元素本身仅代表最高级别的程序流程,而大多数的工作是通过隐藏在盒子中的标准文本代码完成。这种做法酿成了现如今两边皆难堪的局面。一边的文本编程语言没有现代工具支持。
属性对话编程通常是低配版的标准开发环境,而且你必须选择特定的语言,通常是某种脚本语言。而在另一边,可视化元素只能等待有经验的程序员创建,而且只有通过阅读底层的代码才能读懂程序,所以大多数视觉化表现手法的优势都丧失了。
视觉上的“代码”和文本代码之间存在着阻抗失配,而且程序员必须不断在两者之间来回切换,时间都浪费在满足图形编程工具的需求上,而不是解决手头的问题。
误解二:抽象和解耦是外围问题
因此才有了第二个误解,即抽象和解耦是外围问题。可视化编程假设大多数程序都是简单的程序序列,有点像流程图。实际上,这也是大多数新手程序员想象的软件工作原理。
然而,一旦程序的规模超出了简单的示例,新手程序员很快就会被复杂性压垮。他们发现很难推断程序的代码库,而且常常难以大规模地创建稳定又高效的软件。
编程语言中的大多数创新都是为了管理复杂性,最常见的是通过抽象、封装和解耦。面向对象和函数式编程中所有类型的系统和装置实际上都是为了努力控制这种复杂性。大多数专业程序员会持续不断地抽象和解耦代码。
实际上,好代码和差代码之间的本质区别也在于此。可视化编程工具很少拥有有效的机制来执行这些操作,而开发人员也必将陷入二十世纪七十年代 BASIC 的漩涡中。
误解三:为支持编程而开发的工具并不重要
最后一个误解是即使没有现代编程工具的支持,可视化程序员也可以编程。想想代码编辑器和 IDE 漫长的演变过程。
例如,Visual Studio 支持高效的智能感知,可以单独查找基类库中数千个 API。缺乏良好的源代码控制是绝大多数可视化编程工具的另一个主要的缺点。即使这些可视化工具的布局保存为文本的格式,代码的差异也毫无可读性可言,因此毫无意义。
我们很难从大块的 XML 或 JSON 找出每行代码的修改来源。一些对程序的功能执行没有任何影响的因素,比如图形元素的位置和大小,也会导致元数据的变化,这让解析差异变得更加困难。
文本编程语言知道将不同的代码保存到不同的源代码文件中,因此系统某一部分的变更很容易与另一部分的变更合并。
可视化编程工具通常会将每个图表保存在一个文件中,这意味着合并也会成问题,当遇到难以解析差异的语义时,难度会更大。
总之,可视化编程工具提供的优势,即简化程序的创建和理解只是一个海市蜃楼。
只有在非常简单的编程中才可行,在这种不理想的形势下,最好的结果也不过是说:可视化元素是具有混淆副作用的文本代码的容器。
补充说明
可能在第一段中加上 Scratch 的截图并用作主要示例是错误的做法。我不是一名教育工作者,我不知道 Scratch 是否可以作为一种有效的教学工具。
许多人提到,Scratch 在编程教学方面非常有用,特别是对儿童而言。任何可以引导人们进入精彩纷呈的编程世界的东西,我都欢迎。
我并不想通过这篇文章抨击 Scratch,提到它只是因为它是大多数人都听过的最有名的可视化编程系统。
有人在 Reddit 上提到的另一个反面例子是静态结构工具,例如 UI 设计工具、数据库模式设计工具或类设计工具。
我同意这些工具非常有用。任何有助于可视化数据结构、或程序的大规模结构的工具都是好东西。
但这些不足以支撑他们的论点。PowerBuilder 等 90 个试图通过在图形可视化之上构建工具,来开发出一个完全不用写代码的开发环境,可是最终都失败了,这恰恰证明了我的观点。
你如何看待可视化编程?
针对可视化编程并不是理想的想法,评论区的不少网友也发表了不一样的看法:
评论1:
你混淆了图形数据流语言(带有隐藏选项框和连接这些框的箭头)与Scratch。Scratch 是一种文本语言,里面的程序语句和类型是预定义的形状,可以消除语法错误。
你无法在 Scratch 中犯语法错误,因为这些框无法组合在一起。 除了这种语法帮助之外,Scratch 不会隐藏任何内容,并且格式也与纯文本语言没有差别。
也就是说,我同意你说的有关其他教学语言的大部分内容,例如用于 Lego Mindstorms 机器人套件的语言。
该语言源自 LabView,大多数初学者发现很难超越几个块或连接变量之类的东西。我的猜测是,一种能够通过变量赋值来达到复杂性障碍的语言并不能很好地扩展:-)。
评论 2:
我认为你的文章的出发点不正确,因为可视化编程根本不是为程序员准备的。
对此,你怎么看?欢迎下方留言,分享你的看法!
原文:
http://mikehadlow.blogspot.com/2018/10/visual-programming-why-its-bad-idea.html
作者:CODE RANT
译者:弯月,责编:屠敏
公开课预告
◆
今晚8点
◆
主题:精讲NLP的经典应用实践——文本分类
时间:今晚8点
入群福利:添加小助手微信cadnai2,加入课程交流群。课程QA,PPT共享、还有机会获得黄鸿波老师的新书《TensorFlow进阶指南 基础、算法与应用》
推荐阅读
一个程序员父亲的呼吁:不要教你的孩子从小学编程!
谷歌搜索重返中国按下暂停键,CEO皮查伊“对决”美国国会
PingCAP申砾:做一个真正通用的数据库产品
玩过音乐, "推过"嫩模, 以太坊大神人设崩塌, 有钱任性也抵不过区块链寒冬
趣店斗鱼深陷裁员风波,程序员寒冬何去何从?| 畅言
锤子变天?| 畅言
程序员加班很严重吗?看看国外程序员怎么怼老板!
点击“阅读原文”,打开APP 阅读更顺畅。
相关文章:

7年增长16倍,清华AI+ML课程学生数暴增 | AI Index 2018
整理 | 非主流出品 | AI科技大本营用数据解读 AI。昨日,来自斯坦福大学、MIT、哈佛、OpenAI 等高校与企业的多位专家正式发布了 2018 年度 AI Index 报告,用一系列数据全面回顾了过去几年里 AI 领域的全球发展。营长挑了一些重点内容,为大家解…

RunTime的使用-Category改变整个项目全部字体
在项目比较成熟的基础上,遇到了这样一个需求,应用中需要引入新的字体,需要更换所有Label的默认字体,但是同时,对于一些特殊设置了字体的label又不需要更换。乍看起来,这个问题确实十分棘手,首先…

android 耳机红外线,红外线耳机制作方法
本文介绍的语音红外转发器具有结构简单、易于制作、无干扰、低噪声的特点。工作原理:转发器由发射和接收两部分组成。见附图1。鉴频后的伴音(音频)信号经三极管V放大后推动红外发射管。由于发射管的发光强度与通过的电流成正比,所以D1、D2所发出的红外光…

解决load cycle count的一个偏方,告别硬盘卡卡响
load cycle count猛增,笔记本电脑硬盘喀嚓喀嚓响,我倒不担心硬盘寿命,但是实在烦人那声音,系统也时常被卡一下。我曾使用了hdparm -B 254 /dev/sda 的方法,但是硬盘升温太明显,右掌托烫得忍无可忍。苦寻方法…

AI工程的实践者:普元积极将场景落地,为企业提供智能化解决方案
作者 | Jane出品 | AI科技大本营11 月 8-9 日,CSDN 和 AICamp 联合举办的 AI 开发者大会在北京顺利举行。普元移动产品线总经理郝振明发表了《基于机器学习的工程实践》的主题演讲,并接受了 AI科技大本营的专访。以下内容为郝振明的演讲与采访总结&#…

android用户界面设计:基本按钮,Android用戶界面設計:基本按鈕
本文向你展示了在你的android應用程序中創建一個簡單的Button或ImageButton控件的步驟。首先,你會學到如何向你的布局文件中添加按鈕控件。然後你會學習如何用兩種方法處理用戶對按鈕的點擊。最後,我們討論android中按鈕控件一些其它的可用特性。第1步&a…

快速浏览Silverlight3 Beta:当HLSL遇上Silverlight
HLSL高级着色器语言(High Level Shader Language,简称HLSL),由微软拥 有及开发的一种语言,只能供微软的Direct3D使用。 HLSL是微软抗衡GLSL的产品,同时不能与OpenGL标准兼容。他跟Nvidia的Cg非常相似。 看…

“80后”财富新贵创业秘诀
"80后"财富新贵创业秘诀:具有冒险和创新精神 不论是文化市场,还是经济市场,当许多人还认为还是“60后”或“70后”的天下时,“80后”财富新贵已在不知不觉中浮出水面,并试图用自己的实力证明新一代的崛起。李想、戴志康…

小插件 打开Android程序动画,android-单击小部件后如何启动活动?
这就是对我有用的…onUpdate方法代码应为:Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {for (int i 0; i < appWidgetIds.length; i) {int appWidgetId appWidgetIds[i];try {Intent intent new …

“深度学习之父”大谈AI:寒冬不会出现,论文评审机制有损创新
整理 | 琥珀出品 | AI科技大本营【AI 科技大本营导读】近日《连线》杂志发表了一篇文章,记录了与“深度学习之父” Geoffrey Hinton 围绕人工智能伦理、技术、学术等领域的采访实录。当被问到如今人工智能是否将走进寒冬时,Hinton 的回答非常坚决&#x…

金山词霸2009牛津版
http://download.iciba.com/Pw2009_oxf/Powerword2009Oxf.25269.4011.exe新版本的词霸2009牛津版的 需要的朋友下载看看 转载于:https://blog.51cto.com/zmdzhangzhe/112418

面向对象之数值的悲剧(8月28日会议有感)
枚举的悲剧 枚举基本用法大家应该都很熟悉,在我们去避免硬编码,增强代码可读性,可维护性方面很好用。不过话说枚举底层还是比较复杂的,以前看过一些关于枚举的说明。至少C#里边的枚举是很复杂的,本身是结构类型&#x…

C++虚函数探索!
C中的虚函数实现了C中的多态。昨天C老师着重讲了讲虚函数。这个很重要,也有点玄机在里面。 下面阐述一下理论: C的类机制中有支持多态的技术来解决抽象编程。使用的是滞后捆绑技术。即预先设定其成员函数虚函数性质,使得任何捆绑该成员函数的…

htc820+android+l,首款高通64位八核 HTC Desire 820评测
9月初的IFA2014展会期间,多款搭载64位处理器的新品智能手机扎堆发布,也算是拉开了64位处理器安卓手机的时代序幕。其中,最引人注目的新品之一莫过于HTC Desire 820,它于北京时间9月4日在德国柏林发布,拔得了全球首款64…

关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的/g是什么意思?”...
为了解答“正则表达式(/[^0-9]/g,)中的"/g"是什么意思?”这个问题,也为了能够便于大家对正则表达式有一个更为综合和深刻的认识,我将一些关键点和容易犯糊涂的地方再系统总结一下。 总结1:附件参数g的用法 表达式加上参…

那位13岁就当上老板的开发者是如何炼成的?
当我们听到有关年轻有为的企业家的故事时,大多会想到 25 到 30 岁左右的年轻人。毕竟,Google、亚马逊、Facebook、Twitter、LinkedIn、Pinterest、Instagram、Snapchat 以及其它很多公司的创始人都是在他们 20 多岁时创办的这些企业。随着人们与科技的联…

phonegap android,Phonegap 3不适用于Android Studio
对我来说,这似乎很简单,但我根本做不到.我已经成功安装了npm install -g phonegap并安装了phonegap.C:\var\www\sexdiaries.co.uk>phonegap create sexdiaries -n SexDiaries -i co.uk.sexdiaries.app然后,我被告知Here尝试运行andriod但出现以下错误C:\var\www\sexdiaries.…

安装VCenter提示数据库排序规则有问题
安装VCenter提示数据库排序规则有问题 有时候在安装sql server 数据库时你如果修改了排序规则,那么在安装VCenter时它会提示你的数据库排序规则有问题,不让你安装。这个时候你去修改一下数据库规则就可以继续安装了。 解决方法: 1.把安装光盘…

点滴印象中的周其凤校长
原文:[url]http://blog.sina.com.cn/s/blog_4908ded80100bbui.html?tj1[/url]2003年9月,我进入吉林大学读书,第二年周其凤成为吉林大学新任校长。此后的三年,我见过校长两次,这两次,校长的风格给我留下了深…

开源50万行代码,百亿广告分成,百度智能小程序能成吗?
作者 | 非主流出品 | AI科技大本营终于,BAT 在小程序的赛道上展开了激战,而这一场战争得到了百度前所未有的重视。9 月 4 日,百度总裁张亚勤称拉动百度业务的“新四小龙”——智能小程序、信息流、短视频/小视频以及百度云。紧接着࿰…

接近WinHEC 2008
第一次听说windows硬件工程大会还以为微软要讲她出的硬件的一个技术交流大会,后来才了解到是微软公司面向个人电脑终端、服务器、硬件设备以及驱动程序的最具前瞻性的全球硬件技术信息盛会。而不是讲硬件本身,是与硬件相关的软件产品。今年是第17届WinHE…

加深C# 中字符串前加@符号理解以及使用~~
先看代码(以下代码使用在C#,环境ASP.NET): protectedvoidPage_Load(objectsender, EventArgs e) { test1("\a"); test1("\a"); test2("\a"); test2("\a"); test…

鸿蒙系统首批更新机器,鸿蒙系统升级名单
【鸿蒙系统升级名单】华为的鸿蒙系统算是早早放出消息的重量级产品,国产OS的名号也吸引了不少小伙伴的注意。很多朋友都想体验传闻已久的鸿蒙操作系统,但也担心自己的手机无法支持。那么,鸿蒙操作系统的升级名单到底有哪些呢机器呢?下面就让…

公开课报名 | 基于自定义模板的OCR结果的结构化处理技术
随着行业的发展和技术的成熟,文字识别(OCR)目前已经应用到了多个行业中,比如物流行业快递包裹的分拣,金融行业的支票单据识别输入,交通领域中的车牌识别,以及日常生活中的卡证、票据识别等等。O…

产生所有排列---旋转法------2013年1月22日
我觉得这是一个很巧秒的算法。思路非常直接,从代码里可以很容易看出来,再单步调试查看set数组的值就可以很清楚地明白算法的过程。代码如下:1 #include <stdio.h>2 #define MAX 10003 4 int n3; //the number of set element5 int set[MAX]{1,2,3…

VS Code 正在统治代码编辑器领地!
出品:CSDN(ID:CSDNnews)【CSDN编者按】代码编辑器之于程序员的重要性不言而喻。长久以来,Vim、Emacs等老牌编辑器一直占据着举足轻重的地位,但是近年来情况似乎发生了变化。根据软件工程师招聘网站Tripleby…

Linux主辅DNS数据不同步故障排除
Linux主辅dns数据不同步故障排除欢迎使用微信关注“云运维联盟”公众号,第一时间了解本博客动态!在互联网中,我们知道任何一台提供应用服务的主机(例如:HTTP、FTP等)都有它一个便于记忆Domain Name…

c语言贝叶斯分类,基于朴素贝叶斯分类器的文本分类算法(C语言)
基于朴素贝叶斯分类器的文本分类算法(C语言)基于朴素贝叶斯分类器的文本分类算法(C语言).txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了。他只是比对方更珍惜这份感情。#include #include #include //_getcwd(), _chdir()#include…

开源项目哪家强?Github年终各大排行榜超级盘点(内附开源项目学习资源)
整理 | Jane出品 | AI科技大本营【导语】提到开源项目,2018 年注定是不平凡的一年。据 Octoverse 报告数据,仅在 2018 年,Github 上的新用户就比过去六年的用户总数还要多 ,存储库数量近一亿,这些增长都要归功于开源社…

给现有MVC项目增加Web API支持
在MVC4中自带了Web API不再需要从Nuget中下载。 Step1:增加System.Web.Http,System.Web.Http.WebHost,System.Net.Http三个程序集的引用,都是4.0版本; Step2:增加路由,默认的路由代码如下 route…