Enterprise Engineering Forum

企业工程论坛
Categorized as: 其它基础课题   Tagged as: ,, , ,

模型、程序与代码:一些前提的澄清

Author: 余彤鹰,  Source: 企业工程论坛,  Published: 2011-05-20

Excerpt: 最近在一些博客和MDSN网络上就建模/模型、编程/程序/代码等概念的关系与区别所进行的一些讨论中,涉及到程序与代码哪一个更适合与模型进行对比,以及“程序”与“代码”的区别问题。Ed等对于模型与代码之间进行比较所做的质疑,是中肯的。稍微引申,似乎可以认为,模型与代码是不同类型的概念,不具有上下位逻辑关系,不适合直接加以比较。总体而言,至少这一点是比较明确的,即在讨论这些概念之间的相互关联时,首要问题是“模型”(models)与“程序”(programs)的联系与区别,代码(code)是处于另一个层次上的话题。这是一个更确切和精细的前提,明确它,对进一步的深入讨论有很大的好处和必要性。

讨论建模///代码的关系与区别,涉及到程序与代码哪一个更适合与模型进行对比,以及到“”与“”的区别问题。我最初的理解,也是将这个基本问题放在“模型(建模)与程序(编程)”这个层面上。因而,我最初在MDSN社区论坛提出的讨论题正是“What is the essential difference between MODELING and PROGRAMMING? ”。虽然我感觉“程序”比“代码”更适合与模型对应讨论,但大家在一些讨论中似乎并不那么在意,有时会偏重于用“代码”来比较(毕竟目前实践的热点就是由模型自动生成代码,并且,也许这令人感觉更接近实际操作)。例如,在随后的讨论中,我也针对“代码就是模型”的论断提出相对的命题:“模型不是代码”。后来,Vincent Hanniet以“MDA/MDD: Model is not code!?”一文对这个命题进行了更具体的讨论,这篇博文引来了更多的关注,很快涉及了对“Model vs. Code”这个论题本身的质疑。

首先,mbrambil提出这个命题应该倒过来,即由“Model is not code” 改为“Code is not model”。这个问题,我在提出最初的讨论时曾经推敲过,我当时认为,说“Model is not code”保留着Code is a kind of model的可能;而“Code is not model”则隐含着Model is kind of code的可能。出于对后者的强烈否认,我选择前者。从逻辑上,这里涉及到二者是否存在上下位关系(hyponymy, is-a or type-of relationship)的问题。换言之,“Model is not code”断定二者不同的同时也排除了Code是Model的上位概念,但没有排除模型可以是代码的上位概念的可能性——其实,这里残留着逻辑性的问题。在随后的讨论中,Ed Seidewitz敏锐地指出了这一问题。Ed认为,这里“代码”不是正确的讨论对象,更有意义的问题是“程序是否模型?”换言之,更适合的讨论话题是“模型与程序”,而不是“模型与代码”。这正回到我最初提出的讨论题上,同时对“Code is model”这一命题给予了更加明确、实质性的的否认:不是“is model code” 或“is code model”,而是这两个概念之间不适合这样比较——它们之间不存在上下位逻辑关系。

这是一个有意义的澄清,也许是更好地展开某些重要讨论的必要前提。首先,明确这一点,就解开了我的一个疑惑:英文名词“model”是可数的,而“code”是不可数的(作为计算机领域,与program等相对应的概念),它们本来就不能用“is a”结构中去陈述。这种名词性的差别本身就意味着这两个概念不是同类,不可能有上下位关系。

然而,“模型”与“代码”这两个概念的区别,始终是有意义的话题。一方面,当前模型驱动工程(MDE)领域的主要实践,都集中在二者的转换上,例如:由模型自动生成代码,这似乎很自然地等同或基于“模型-代码转换”的话题,并会提出更深入话题,例如,如何由自动生成的代码重新生成模型,或实现模型与代码间的往返工程(round-trip engineering);按照前面的分析,这个话题,也许应更加明确地改为“如何由程序重新生成模型”,或“模型与程序之间的往返工程”。还有更有意思的引申:也许“模型-代码转换”(或映射)就是不适当的话题,取而代之,应当是“模型-程序转换”。那么,“由模型生成代码”,是否也应当改为“由模型生成程序”呢?这又似乎没有必要,因为这里的“生成”(generation,或“产生”)就可以是一种由一种事物产生另一种事物的过程。也许,对“生成”(generation)与“转换”(transformation),尤其是与“映射”(mapping)之间的区别,是相当重要的。进一步明确这些疑惑,也许对于当前MDE实践所遇到的种种问题会有所帮助。而将“由模型生成代码”与“由程序生成代码”加以比较,似乎就暗示着模型与程序是同类的概念——这正是Ed的观点,他在讨论中,也明确指出“程序就是一种模型”。其实,我们可以看到,这个观点,可以由他2003年的模型定义自然地引申出来,并且与MDA提出的基本观点“将建模语言当做编程语言使用”完全一致。这其中似乎也隐含着对可转换为程序的模型类型的某种假设,并且也几乎是必然地,会引出“可执行模型”的思路——这正是他们(MDA/MDD领域)这些年实际探索的路线。这里仍然隐藏着许多问题,值得进一步讨论。例如,通过对模型与代码两个概念之间逻辑关系的澄清,似乎还可能导致这样的推论:所谓“模型与代码间的相互转换或映射”,在逻辑上可能就是某种错误。又如,在上述讨论中,虽然明确了“模型”与“代码”这一对概念比某些习惯或直觉有更深的区别,但对于这种区别到底是什么,仍然 缺乏充分的答案。例如,既然模型与代码之间不具有上下位(is-a)关系,是否可以有整体-部分(part-of)关系呢?如果按照Ed的观点,程序是一 种模型,那么,存在“程序的代码”是否意味着也存在“模型的代码”?它们二者的区别又是什么?

此外,众所周知,软件开发经历了由手工编制二进制机器指令代码到写汇编程序(源代码),再到写高级语言程序(源代码)的抽象层次提升过程,这几个处于不同层次的工作的结果,都是要得到可以被计算机执行的“程序”,只是在完成人工作业后,衔接着不同的“自动化”过程(例如,将源代码编译为二进制的机器代码),在这个进化过程中,原来需要手工完成的一些工作,在新的方式下由计算机自动完成。但对应软件开发方式改进的这几个重大进步,人工完成的工作始终可以被称为“代码”(例如,高级语言书写的程序语句,被称为“源代码”),或者也笼统地成为“程序”。因此,在一般的叙述中,“编程/程序”与“编码/代码”,或“源程序”与“源代码”这几组概念的使用,似乎是有所交叠的,在某些场合,似乎是可以替换使用的。这是程序与代码在概念的产生和自然发展的过程造成的,许多相似/相关的概念发展都是这样的,以至于当人们想要更深入地认识时,需要对自然形成的概念作出澄清——针对模型与建模的引入,也许现在更有必要、也是时候对它们作出明确的区别。

 

结语:在软件领域引入或强调模型与建模概念后,要想更清楚地认识它们的必要性和不可替代性,一个重要的逻辑基础是对于模型、程序、代码等概念及其相互关系的澄清。对此,最重要的,或许是明确它们的不同之处而不是相同之处——如果仅仅是相同,我们就没有必要引进新的概念。

在上述讨论中,涉及了程序与代码的区别,以及“程序”才是更合适与“模型”相提并论(或加以比较)的概念。由此,似乎可以引申出这样一些论点:

  • 模型与代码是不同类型的概念,不具有上下位逻辑关系,不适合直接加以比较。
  • 按照Ed等观点,与“代码”相比,更合适的比较对象是“程序”,这是很中肯的意见,由此可以引发一些更精细、深入的讨论。例如
  • 通过对模型与代码两个概念之间逻辑关系的澄清,似乎还可能导致这样的推论:所谓“模型与代码间的相互转换或映射”,在逻辑上可能就是某种错误。
  • 再进一步,也许有必要明确“模型的代码”和“程序的代码”是两个不同的概念。

总体而言,通过上述讨论,我认为至少这一点是比较明确的,即在讨论这些概念之间的相互关联时,首要问题是“模型”(models)与“程序”(programs)的联系与区别,代码(code)是处于另一个层次上的话题。这是一个更确切和精细的前提,明确它,对进一步的深入讨论有很大的好处和必要性。

这也许并不排斥由模型生成代码——换言之,对于“生成”(generation)与“转换”(transformation),尤其是与“映射”(mapping)之间的区别,也许是相当重要的。

Copyright

  本发布物版权归原作者所有,经原作者许可在企业工程论坛(EE-Forum.org)公开发布,并允许个人及公益性机构非牟利性使用及传播。传播中需保持从标题、署名到各项内容及此声明包括链接地址等完整内容不变。引用或摘编文中内容或观点应符合公认准则。其它机构,或牟利性使用,请预先取得作者许可。保留一切未说明的权利。
  详细说明见: http://www.ee-forum.org/about/copyright ,管理者电子邮箱:admin(at)ee-forum(.)org

Cite Style

GB7714 style: 余彤鹰. 模型、程序与代码:一些前提的澄清[EB/OL]. 企业工程论坛, http://www.ee-forum.org/wp/pub/ty/2011-05-p2749.html, 2011-05-20[2017-06-29 10:06]

Chicago style: 余彤鹰, "模型、程序与代码:一些前提的澄清", 企业工程论坛, http://www.ee-forum.org/wp/pub/ty/2011-05-p2749.html(accessed 2017-06-29 10:06)

Posted by   2011-05-20(Original)   Hits 6144   Modified 2011-08-20
Prev Post: 
Next Post: 

Related Entries:

在企业应用系统及开发中运用黑盒/白盒模型概念
开放的世界与有限的模型
模型概念背后的哲学
模型用法论
穆勒论模型定义及其对用法论模型观的评价

Leave a Response

You must be logged in to post a comment.