QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

MDE 为何错失良机?

  • 2011-11-06
  • 本文字数:1985 字

    阅读完需:约 7 分钟

每个月都会有更多关于编程语言的活动,也会有更多人对编程语言感兴趣。不管是 JavaScript 和 Python 的兴起、 Dart 的发布,还是 Objective-C 的重生,以及“可执行UML ”说明书的发布,看起来业界已经为新编程语言的到来做好了准备。甚至还有人在为创建新语言 Grace 而努力,它会让人们更易于讲授如何编程。InfoQ 上周参加了 COOMP 研讨会,那是 SPLASH 2011 大会的一部分。

研讨会的目的是要了解为什么“针对建模和编程的语言正分道扬镳”。研讨会的组织者在介绍中提到:

  • 一方面,有些开发者想要应用面向对象的设计来获得合适的模型,最终需要面临同时维护模型和程序的挑战。并且,由于很多建模语言和编程语言抽象的层次都是相同的,所以使用单独的建模语言不会带来太多好处。
  • 另一方面,我们看到很多面向对象的代码都是由不称职的开发者编写的,他们对面向对象的设计和开发规则都不是很理解,这导致编写出来的代码非常复杂,而且难以理解和维护,因为在代码中并没有很好地反映出应用程序领域的概念和现象。

研讨会上,Jean Bezivin 在演讲“为什么 MDE 错失良机”中表达了自己的观点。他认为,如果我们根据业界采用的程度以及开始进行大型的建模项目多少来评估 MDE(Model Driven Engineering,模型驱动工程)是否成功,那么就会发现 MDE 已经停滞不前了。他并不认为 MDE 已经到了穷途末路:他向我们展示出,尽管面向对象可以追溯到在上世纪六十年代末就发明出来的SIMULA,但是直到1986 年,第一届OOPSLA 会议的召开,面向对象才成为主流并被广泛采用,三年后Tom Love 才创建出第一个面向对象的杀手级应用程序,当时他用220 行面向对象的代码取代了原来的10,000 行代码。

Jean 提到了 MDE 错失良机的几个原因:

  • 一直没有一个杀手级的应用程序,能够产生可度量和可再现的证据,来证明 MDE 相比以前的解决方案,至少提供了一种显著的提升。
  • 有太多的定义和阵营(MDD、MDSD、MDA、MDE、MDSE、MBD……)
  • 对于 MDE 到底是什么大家始终还有疑惑,例如,大家不了解模拟(Simulation)和 MDE 这两种软件工程截然不同的分支之间的区别。
  • 我们常会使用 UML 作为建模的基础,它是一种松散定义的语言,基于业界的共识创建,不具备很好的模块化原则,而且太大、太复杂、变化过于频繁……
  • 我们对下面这个问题缺少关注:如果 MDE 是解决方案,那么问题是什么呢?
  • 执行 vs 精确度:精确度并不一定需要通过执行才能够获得,而 MDE 的目标不总是要创建可执行的模型。
  • 在编程和建模之间有混淆,二者在 90 年代可视化编程语言出现的时候开始被混为一谈。
  • 人们经常会认为 MDE 增加了复杂度:元模型经常会太大,而且有太多元模型,它们之间的关系和组合都很难于理解。
  • MDE 缺少模块性,即便在 UML 中引入了包和属性(profile)也没有解决这个问题
  • MDE 缺少可移植性:关于模型在时间和空间上的可移植性没有正式的定论(十年前创建的模型,可能在今天已经不可用了)
  • XMI 是失败的产品,最终会消亡,它只是导致了 UML 的维护问题
  • 人们始终没有把平台模型的想法当回事儿,而 CIM/PIM/PSM 都只在表面上是好主意,实质并非如此
  • MDE 过多关注于代码的模型,而对数据的模型关注不够
  • MDE 过多关注于解决方案模型,而对问题模型关注不够
  • MDE 过多关注于信息系统模型,而对业务模型关注不够
  • MDE 过多关注于小型系统的建模,而对大型系统关注不够

Jean 总结说:

MDE 暂时的失败主要是因为:

  • UML,这是主要问题
  • 混淆了建模和编程语言
  • 没有对可执行建模的定义和评估
  • 太多阵营

Jean 还认为,我们在过去的 20 年间学到了很多:

  • 我们从“统一方法”转到了“统一语言”。
  • MDA 清晰地表述了概念,以及模型的重要性。
  • 在模型图的帮助下,MDE 成为了分离和整合各种信息系统概念的最佳解决方案。
  • DLS 已经普遍存在
  • MDE 除了应用在软件工程中之外,还应用在很多其它 IT 领域:数据工程、系统工程、业务工程等。

Jean 提到,移动设备出现之后,应用程序最终用户的数量正在快速增长,而在未来的几年间开发者的数量可能无法满足构建应用程序的需要。

他在结论中认为,在语义网络(Semantic Web)和更新的编译技术之间,已经不存在 MDE。而只是保留了轨迹:用于记录设计图和文档的 DSL(基于能够识别语法和 XML 的技术)和 UML。

他在演讲的过程中提出了很重要的问题:有了 JavaScript、Dart 和 GWT 之类的工具,我们是否已经开始在构建这样的编程语言,你不需要使用它编程,而是要用来生成一种语言?

你是否同意 Jean 的观点? 你认为软件工程的前景如何?让新人们继续深陷在编程语言中呢?还是即将出现新一代的模型驱动的工程,从而改变我们现在所认知的软件工程?

译者注:MDE 即 Model Driven Engineering 的缩写,模型驱动工程,它是一种软件开发的方法学,专注于创建领域模型(domain model)。这种方法的目的是,通过最大化系统之间的兼容性、简化设计过程、改善开发系统的个人和团队之间的沟通来提高生产力。

查看英文原文: Why did MDE Miss the Boat?

2011-11-06 03:132034
用户头像

发布了 340 篇内容, 共 131.6 次阅读, 收获喜欢 13 次。

关注

评论

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

LeetCode题解:225. 用队列实现栈,两个队列,压入 -O(1), 弹出 -O(n),JavaScript,详细注释

Lee Chen

大前端 LeetCode

Polkadot初识,不止于跨链

QTech

polkadot 跨链

教师节特别活动:第四范式多项自研技术及其应用实践分享

天枢数智运营

人工智能 推荐系统 第四范式 个性化推荐

协同新机遇:让研发敏捷起来

人称T客

XSKY ClickHouse如何实现存算分离

XSKY星辰天合

[翻译]The Go scheduler[Go调度]

卓丁

Go scheduler Go 语言

[翻译]Go Concurrency Patterns[Go 并发模式]

卓丁

Rob Pike Go Concurrency Patterns Concurrency Go 语言

云图说 | GPU共享型AI容器,让AI开发更普及

华为云开发者联盟

AI 容器

使用开源软件构建工业互联网的平台

刘旭东

工业互联网 Odoo thingsboard

边缘计算,如何啃下集群管理这块硬骨头?

BoCloud博云

云计算 容器 边缘计算 PaaS 博云

去中心化交易所搭建,虚拟币去中心化交易系统

交易所开发

大厂运维必备技能:PB级数据仓库性能调优

华为云开发者联盟

架构 数据

物联网通信技术最全科普!你一定要了解的NB-IoT

华为云开发者联盟

物联网

一步搞定任意圆角背景

mengxn

android xml 圆角

indexOf原理,Java,javascript,python实现

叫练

算法

The Go Blog-Article index

卓丁

传统产业数字化转型的思考与建议

CECBC

经济转型 企业经济

CSS常用样式——绘制单(双)箭头的多种方法(2)

程序员学院

CSS html 程序员

未读消息(小红点),前端与 RabbitMQ实时消息推送实践,贼简单~

程序员小富

Java RabbitMQ mqtt

深度解析!--阿里开源分布式事务框架Seata

攀岩飞鱼

分布式 分布式事务 微服务 分布式锁 Seate

Docker 容器编排利器 Docker Compose

哈喽沃德先生

Docker 容器 微服务 Docker-compose

【万字长文】探讨可信构架之道

华为云开发者联盟

架构 服务端

新基建夯实粤港澳大湾区高质量发展基础

CECBC

区块链 人工智能 大数据

合约跟单app,永续合约交易所带单交易软件

呕心沥血,整理200+最新面试题,面试之前看一下,事半功倍

小Q

Java 学习 程序员 架构 面试

20张图,大学四年都没整明白的操作系统就这么学会了

小Q

Java 程序员 架构 操作系统

模板方法模式——看看 JDK 和 Spring 是如何优雅复用代码的

Java架构师迁哥

MySQL高性能架构设计原则

洛神灬殇

Redis 哨兵模式

是老郭啊

redis redis哨兵模式 redis哨兵 redis哨兵集群

当心这些“坑”!阿里云服务器部署前后端分离项目

麦洛

nginx 前后端分离 跨域

未来经济 数字优先 | 大数据专场

腾讯云大数据

大数据

MDE为何错失良机?_架构_Jean-Jacques Dubray_InfoQ精选文章