组合思维与继承思维的不同

15-03-17 banq
                   

2015-03-15 16:05 "@jdon007"的内容
两种比较常用的思考方法(或解决方法),用哪一种,还是取决于问题域 ...

讲得很好。

我这几天思考发现组合和继承实际可能代表两种完全不同的思维方式。这两种思维体现在Unix和Windows的不同上。

Unix是典型的组合思维,包括Go语言,我们使用Unix命令行,比如“ps -ax | grep java”,这种管道式过滤能力非常强大和灵活,缺点是初学者不容易掌握,不形象。

而Windows是典型的继承思维,大窗口里有小窗口,不断打开小窗口,就进行树结构的深入层次,这种方式非常形象,适合初学者,但是问题也是显然,不够灵活强大,以至于我们经常借助于DOS的bat来完成各种特定的要求,以至于需要编程,使用编程语言组合成我们希望得到的功能。

Windows这种窗口方式非常对象化,也是微软长期对操作系统这个业务掌握后的抽象,它是一种形象化的树形结构,带领初学者进入深处。

Unix的命令组合是一种动态的树形结构,类似函数编程,通过通过函数碎块组合成使用者想达到的强大功能。

很多人思维如果局限在Windows这种继承思维中,会觉得Unix好像不人性化,对程序员不够尊重,这其实是身在庐山中不识庐山真面貌。

什么是人性化?让程序员想做他想做的任何事,给予程序员最大的自由如同Unix风格才是对程序员最大尊重,将自由选择权交给了程序员自己,而Windows是对初学者最大尊重,限制一定自由,但是能够循循善诱。所以,是否对程序员尊重是分层次的,不同层次程序员的需求不同,就像人的层次不同,需求不同一样,没有吃饱饭认为吃饱饭是最大幸福,而吃饱饭的认为精神自由才是人生最高境界。

总结,两种比较常用的思考方法(或解决方法),用哪一种,还是取决于问题域 ,我们千万不能厚此薄彼。对于复杂问题域,使用组合无疑强大,对于熟悉的简单的问题域,使用继承比较形象,一目了然。

对于人来说:组合思维总是暗示自己“我们总是目光短浅,组合的风险比继承少”, 依靠范畴论的科学工具步步为营前行,而继承思维需要牛人,“如果有人能够综观某个事物(行业)几十年的发展,也就是常说的吃透了业务,在这种假定之下来用继承来设计业务,那一定会成为经典”,一旦成为经典,牛人会认为自己是天才。这就是经验与科学的区别。

[该贴被banq于2015-03-17 16:54修改过]

                   

liangshan
2015-03-17 20:28


继承和组合关系是可以形象化的。在一个系统中,在根节点下是一片森林,是好多棵树。树是个二维的图形,而组合关系最终也是由(a, b)这样的基本二元组开始的构建的。最终构建出来的复杂的组合其实是跟一片森林描述的事物完全一样的。

比如数据库表中的一条记录,这一条记录可以看作是由field1、field2、field3三个字段在一个有限的空间中的聚合(组合,而不是交差,树形是不会交差的,而是在有限的空间中紧挨在了一起却并不是交差),而field1、field2、field3可以看作分别来自于系统下的三棵树。这种对问题的处理方法可以一直使用下去,一直到每一个字段的每一个取值都可以看作是来自于森林中的树上的节点。系统下的每一个实体都是来自于多棵树上的节点在有限的空间中的聚合体,这个体上如果有n个来自于n棵树的字段的话就有n个变化的维度(n个变量,需要确信是来自于真正的正交n棵树,n个字段间没有别的关系,不能从一个推导出另一个,n个字段的唯一关系是它们聚合在了同一个有限的空间单元中。比如无法从“张三(人)”的来自于颜色树的“黑色”肤色取值推导出他的来自于尺寸树的“身高”取值)。虽然是一片森林,虽然是n个维度,但是最终会成为空间和时间两个维度,而由于时空是一体的,结果最终会是只有一个维度——连续。我们听说过,人们在研究世界的时候发现世界有11个维度,人们可能错了,那只是11棵树,只是用来管理时空的11棵人造的树。

这些来自于森林中的节点在空间单元的聚合组成的元组如果被平铺到一个平面中就成了矩阵。

[该贴被anycmd于2015-03-17 20:46修改过]

banq
2015-03-18 07:45

2015-03-17 20:28 "@anycmd"的内容
继承和组合关系是可以形象化的 ...

你的形象化画得很好,非常棒。

不过我之前想表达的是,继承是形象化,组合则不是,我们可以用形象化表达它们,但是它们真的不属于同一个世界。

用时空来说,继承是用空间上的成本换得时间的不变,继承的树形结构一般保存在内存中;而组合是用时间的成本换得空间不变,组合的树形结构组装每次都得通过CPU花时间计算。

后者有时很难想象,因为我们的思维是对空间变化敏感,对时间变化不敏感,因为我们自己也处于随着时间动态适应环境之中。

组合其实体现了宇宙本质是计算这个一观点。

liangshan
2015-03-18 10:41

2015-03-18 07:45 "@banq"的内容
用时空来说,继承是用空间上的成本换得时间的不变,继承的树形结构一般保存在内存中;而组合是用时间的成本换得空间不变,组合的树形结构组装每次都得通过CPU花时间计算。 ...

同意。这段话让我对时空一体的场,对时空的相互转化有了更形象的认识。

人们的认知很难凭空出现,会有一个连续的慢慢积累的过程。记得有道友在道场发帖问人们是怎么深入思考的?其实只是内在和内在,内在和外在的普通相互作用,相互作用起来,运动起来就可能有新认知。

liangshan
2015-03-19 13:34

如果我们从“时间 + 空间”这样的角度去看问题,整个计算机世界就清晰了。主体是个时空一体的体,客体也是个时空一体的体。计算机世界的本质是去构建时空,然后由主客体在那个时空中去相互作用。主体和客体也是相互的,A是B的客体,B也是A的客体。所谓体:一个时空单元,来自于目录森林上的节点聚合在一个有限的空间单元中,它们紧挨着而不是交叉着,它们彼此相互作用着存在一个有限的时间,它们的存在到了某个度后系统将它们解散,它们本是目录森林中的节点的投影(投影是值,而非实体,值是可以随意复制的,而那个森林中的节点是实体,我们的世界有多大完全在于我们识别(标识)了多少世界,完全在于我们造的目录树上有多少节点,而目录树是上不封顶下不封底的,自然数就属于目录森林中的一棵树,实数也是一棵树,它们都是无顶无底的东西),它们的使命达成,它们的生命结束,它们化作一个无序的数据集合消失地无影无踪(但它们影响了目录森林,它们在森林中留下了微小的变化,它们变换了整个时空)。

系统作用一批资源(时间和空间,系统的资源包括外部的主体在系统内的分神(投影)),系统将这些资源聚合在到一个有限的空间中去,将它们挂接在系统树上,让它们存在一个有限的时间,让它们之间相互作用,它们是一个有限的时空节点。这个有限的时空的输入来自于它被挂接在的父节点,它的输出通过父节点返回系统,它们的使命结束后,它们被父节点解散。我们也是这个时空承载的一小簇内聚的信息,不知道是谁把这簇信息承载到这个有限的时空上的,不知道什么时候这个有限的时空会被父节点解散,但我们影响了整个时空,这种影响无法用定量来衡量了,因为森林没有顶也没有底。

这里面肯定有数学,可是我上学的时候没有好好学,结果那些数学知识已经不在了,我现在只能研究性质了。

2Go 1 2 下一页