9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

一图胜千言?

  • 2007-11-10
  • 本文字数:1337 字

    阅读完需:约 4 分钟

一图总是胜过千言?

Dean Wampler 在新文章《为什么我们要写代码而不只是画图就好》中主张,在软件行业里,前面那句话通常要反过来说才对。

图形表示法的拥护者们已经期盼了很久,希望能达到只需要画图不必写文本代码的境界。多年来,已经有一些图形编程环境来了,又走了。 要是一图真的胜过千言,那为什么它还没有实现呢?

曾被广泛应用的图形编程环境并不多见,但也有独树一帜的。 LabVIEW 可能是其中最著名的一个,不过它主要是被测试者所使用(以及拥有神奇的Lego 玩具的小孩)——而非一般的开发者。

为什么会这样?很可能是因为在软件开发中要照顾太多的细节。因此很难创造出一种图形语言能表达出这种复杂性,而又不致让阅读的人负担过重。如果用图形来表示编程结构,我们需要把图形映射到一种(常常是)抽象的概念方能理解其含义。难的是不要落入一个经典的陷阱。而因为我们需要与其他开发者交流,我们又的确需要能适用于种种情况的充分的词汇。

Dean 写道:

那我们不能用一种表述力充足的图形表示法吗?当然可以,只不过我们会遇到实用的问题——用文字来书写细节总比画出来要快。 几年前我为某著名公司开发面向 Java 开发者的以 UML 为基础的工具时,就遇到了这个现实问题。工具的 UI 可以做得更高效,但绝对没法超过打字的速度。

不过,这取决于你在代码中建立的抽象有多强。如果做得不好,你可能需要一千个词才能表示出一张图就能说明白的内容。而且你及你的同事每次阅读代码的时候都需要“解码”。

目前的领域特定语言运动就明确地专注在这一点:

有些语言相当繁冗也是事实。这是领域特定语言(DSL)将会扮演更重要角色的一个方面。一个设计良好的 DSL 能让你简洁地表述那些高抽象层次的概念。

Dean 所说的是文字的 DSL,但 Metacase 等公司正在设计图形建模语言,而Microsoft 也采取了类似的路径去开发创建图形DSL 的工具,来完成他们对软件工厂(Software Factory)的设计图景。

Arnon Rotem-Gal-Oz 如此描述图形 DSL 的局限:

跟以减少代码为出发点的 DSL 不同,以建模为出发点的软件工厂、MDA 等把目标定得太高,因而提供的价值太少,或者在代码生成的隔阂上受累太多(生成的代码太过一般化,距离方案的实际需要太远)。

Arnon 也明确地评价了一图是否真的胜过千言:

如果你把模型看作是纲领性的框架,那么你可以按自己的意愿提高抽象的层次,进而比较明晰地表达你的观点,那么这句话成立。然而,当你需要把模型建得非常具体,从而得以进行代码生成——在这种情况下,用代码来建模,再搭配自动生成或预先建立的 DSL 和框架,会更加合宜。

讽刺的是,运用图形是掌握一个复杂的代码基的一种好方式。InfoQ 最近发表了与 Erik Doernenburg 进行的一次关于软件视觉化的采访,在其中Erik 解释了从不同角度视觉化一个系统或者一个代码基的各种方式。运用视觉化方法,可以快速地聚焦到其他方法难以发现的反常之处。不过这与图形化地建造软件并不是一回事。

Dean 最后解释说他并不认为图形表示法没有存在的空间,但是:

就一般情况来说,用简洁的语言加上设计良好的 API 和 DSL 来编写的代码,对上图形驱动的方式仍然是必胜的。

可是另一方面, Intentional Software 会对你说,代码和图形都只不过是同一个模型的不同投射罢了。

查看英文原文: Is a picture always worth a thousand words?

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2007-11-10 15:511222
用户头像

发布了 225 篇内容, 共 58.4 次阅读, 收获喜欢 47 次。

关注

评论

发布
暂无评论
发现更多内容

如何基于磁盘 KV 实现 Bitmap

Kvrocks

redis BitMap storage KV存储引擎

财务或类财务系统数值精度设计

路边水果摊

数字 财务 精度 数值

秒懂 Java 的三种代理模式

文档内容结构化在百度文库的技术探索

百度Geek说

百度 大前端

保安小王分享:四面字节跳动,终拿Offer,只有努力,方能成功

还在用Jenkins?试试Gitlab的CI/CD功能吧,贼带劲!

来自网络资源资产管理的灵魂拷问

鲸品堂

网络 资源 运营商

哔哩哔哩B站视频下载器推荐(简单又好用)

资源君

工具 分享 哔哩哔哩 b站视频下载 教程分享

东京奥运会与网络安全背后的速度博弈!

郑州埃文科技

带你认识MindSpore量子机器学习库MindQuantum

华为云开发者联盟

mindspore 量子机器 MindQuantum 量子机器学习库

Abp太重了?轻量化Abp框架

Patronum

学习 程序员 架构 框架 Abp

手把手教你实现Android编译期注解

vivo互联网技术

android 注解 sdk

Unity ML-agents 参数设置解明

行者AI

模块三作业

NewBranSTONE

架构实战营

看完这篇文章,你也可以手写MyBatis部分源码(JDBC)

2021,你还在写“赤裸裸”的API吗?

科技监管能源运作?智慧能源从光热发电技术开始描述

一只数据鲸鱼

数据可视化 智慧能源 光热发电

最壕逆天改命:18名Java程序员凭阿里P8笔记,同时斩获一线大厂offer

Java架构师迁哥

Java虚拟机之CMS垃圾收集器

【云洲智造】直播间下午4:30准时开播!

浪潮云

工业互联网

保洁阿姨分享:腾讯架构师JDK源码笔记,13万字,带你飙向实战

基于 Golang 构建高可扩展的云原生 PaaS(附 PPT 下载)

尔达Erda

开源 云原生 数字化转型 PaaS 数字化

小透明学弟的华为上岸之路

程序员鱼皮

Java c++ Python 大前端 后端

Cypress 自动化测试

admin

自动化测试 Cypress 测试 单元测试 UI测试

Lazada首届技术开放日开麦在即 共享技术创新最佳实践

架构训练营模块三作业

晨晨

架构训练营

以1敌10不是梦,Spring Boot企业级真实应用案例

博文视点Broadview

EMQ X Cloud 正式支持 Microsoft Azure 平台,助力企业出海业务

EMQ映云科技

azure 云端 云上数据 emq

聊一聊在阿里做了 8 年研发后,我对打造大型工程研发团队的再思考

尔达Erda

开源 云原生 研发管理 PaaS 研发

不收藏你就后悔吧!费了三天才从GitHub上扒下的阿里Java优化笔记

电脑里的视频被误删了可以用EasyRecovery恢复吗?

淋雨

EasyRecovery 文件恢复 硬盘数据恢复

  • 扫码添加小助手
    领取最新资料包
一图胜千言?_微软_Niclas Nilsson_InfoQ精选文章