我看JavaScript(六)——工程构造与中间构件

接前一文,我们为推进程序构造理论,尝试分析一种可能的工程构造理论,作为程序构造理论的基础。但是,有关工程的理论,学界业界已经有一些认识,但似乎也不成熟(我特指工程构造的通用理论),在尝试总结一种通用的工程构造的理论(能基本解释程序构造原理即可)前,有必要了解下这方面的前沿情况。

学界有工程学的相关的学科或引导性课程,但就我查到的资料来看,似乎只有各种具体工程专业,例如土木程,电子工程,化工工程,生物工程等,并没有一门通用的工程学基础理论学科,研究有关【工程构造活动特性】的理论。

Engineering ?工程哲学?

工程的英文是Engineering ,我们还是先看看维基的定义:

Engineering is the application of knowledge in the form of science, mathematics, andempirical evidence, to the innovation, design,construction, operation and maintenance ofstructures, machines, materials, devices,systems, processes, and organizations. The discipline of engineering encompasses a broad range of more specialized fields of engineering, each with a more specific emphasis on particular areas of applied mathematics, applied science, and types of application. 工程是指应用各种科学知识和经验去创造、设计、建造和维护各种复杂事物、机器、材料、系统和组织。

再看看美国某专业的工业委员会的定义:

The creative application of scientific principles to design or develop structures, machines, apparatus, or manufacturing processes, or works utilizing them singly or in combination; or to construct or operate the same with full cognizance of their design; all as respects an intended function, economics of operation and safety to life and property. 创造性地应用各种科学原理去设计和开发新结构物、机器、设备,或者研发新的工艺,可使用一种或同时混合多种原理。

这种专业的定义或许能够反映出这个领域的状况。这两种定义在我看来是非常实用的,也是非常美国式的。但是就发展通用的工程构造理论而言,没有说出重点,说什么创造性,什么科学原理,再罗列各种复杂工程产出,都是次要的。倒是国内文献有一些创造,例如:

随着人类文明的发展,人们可以建造出比单一产品更大、更复杂的产品,这些产品不再是结构或功能单一的东西,而是各种各样的所谓“人造系统”(比如建筑物、轮船、铁路工程、海上工程、地下工程、飞机等等),于是工程的概念就产生了。

工程学或工学,是通过研究与实践应用数学、自然科学等基础学科的知识,来达到改良各行业中现有建筑、机械、仪器、系统、材料和加工步骤的设计和应用方式一门学科。实践与研究工程学的人叫做工程师。

在现代社会中,“工程”一词有广义和狭义之分。就狭义而言,工程定义为“以某组设想的目标为依据,应用有关的科学知识和技术手段,通过有组织的一群人将某个(或某些)现有实体(自然的或人造的)转化为具有预期使用价值的人造产品过程”。

人造系统、结构不单一、一群人、工程师,这些概念都是工程或工程构造活动特有的。

从各种现象表明,业界的专家们认为工程学应该是一门应用科学,更基础的通用工程构造原理应该属于一门叫工程哲学的学科。但我没有查到有价值的相关研究。

工程及其重要特性——规模和协作

既然没有现成的,那么我们可以安心的,就已经掌握的经验和知识,尝试总结一些工程构造原理。

相对自然产物,所有人类活动都属于人造范畴,所以相对于人造,我以为工程的第一个特性就是任务大,大到超出一个人(一个专业)所能承受,像农夫在野外搭一间茅厕不是工程,农夫不能叫工程师;其次是多人协作,就是因任务大需要分割分配给多个人(相同甚至不同专业的)协作完成;

【协作完成大任务】是工程主要特征,由于要协作共造一样人造物,这种建造必须遵循自然规律,所以需要科学原理,空中花园也是工程,但是违反自然的;再又,具体多人是如何协作的,具体过程【有哪些通用原则】,这是工程构造理论重要内容。

工程协作通用原则

一般存在于特殊之中,即通用原则或理论存在具体的实例当中,我们回到前文的程序构造和建筑构造的实例:

程序工程(具体)

建筑工程

任何一项工程都有一个最终的工程目标,和最原始的原料(和工具)。像建筑工程的房子和砖头,程序工程的程序A和指令语句。而从例子可推知,从原料到工程目标可能存一层以上的中间性构件。这些中间件划分的原因,原理是什么呢?

中间性构件

中间件划分的原因还是比较好解释,大任务分而治之嘛,层次划分是最常一种分解复杂性的方式,重点分析的是【中间件是什么,划分如何可能,和如何实现】。

我们从程序工程和建筑工程构造概念图只能了解到,大工程从两个维度(横向和纵向)的分割出构件,对于构件具体是什么,构件性质没有任何信息。由于我本人有计算机背景,而软件工程化发展已经有一些成熟度,故尝试集中以软件构造理论为例子,去除软件程序相关的内容,并以建筑工程作简要参考,猜想一下有关工程构件的通用性质,和处理原则。

成品、构件、原料

认识构件在工程构造中的理论地位,主要认识构件的形式、内部组成和意义。在开始之前,有几个认识的前提:

  • 第一,要从两端来理解中间构件的形式,一端是不可能分割内部的【原料】,像水泥或语言语句;一端工程目标的【成品】,像房子和程序。
  • 第二,成品具有某种可用的【功能】,成品是功能完全的“构件”,构件是功能不完全的“半成品”,原料提供最原始的功能;
  • 第三,构件与完成构件的任务不同,工程成品是一种人造物,构件是构造物的部分,构件间的关系是指【构件存在形式上和结合上】的关系,不是工程任务或者工程师协作关系;

构件形式属性及处理原则

  • 局部不完整

构件的第一大形式属性就是局部性或不完整性,是成品功能的部分承载者,例如睡房完成部分生活空间的功能,模块A负责一部分计算的功能;中间构件可被看成半成品,也可看成非原始质料,例如模块A是多个函数的成品,也是程序A的原料之一。

  • 复杂度

第二,构件具有功能抽象度/复杂度;从一堆砖头沙石看不到摩天大楼,工程成品的【功能】可以是非常“高级的”,形式复杂,可以从中分割多层不同抽象复杂度的中间构件,例如房子可分为生活空间、功能空间和空间隔断多种不同抽象度的构件种类;

  • 可抽象分解

第三个,由于构件具有复杂度,构件就具有可分解性,只有原始原料是不可分解,其他中间构件,包括成品都具有分解性。这是分解复杂性的重要技术,构件就是设计用来分解复杂性的。例如睡房(空间)分解为墙(隔断),类对象分解为函数。

  • 复杂粒度

第四,构件(分解成品)的抽象度是任意的,但是存有一种比较合适的度;例如房子可分解为墙面,甚至是砖头,但分解为房间空间是最合适的。构件抽象度的选择标准应该满足易于开发制作,协作分工。例如构件专业性,复杂度,开发灵活性等。

以上构件的特性相互有一定的相关性,具体不同的工程成品,它的不完整性、功能复合和分解的方式受具体物理自然性质决定。例如建筑构件物理分解是一种重力桥接,程序构件的执行分解是一种符号(函数或方法)调用。

参考

https://en.wikipedia.org/wiki/Abstraction\_(computer\_science)

裸男
Nakeman.cn 2023 Build by Gatsby and Tailwind, Deploy on Netlify.