今天在看一系列关于并发的文章时,在一篇文章中有一个知识点我没有接触过,于是我将这个知识点作为关键字来搜索,搜索到了另一篇文章来学习这个知识点,然后在这篇包含那个知识点的文章中又出现了另一个新的我不了解的知识点,于是又搜索到了一篇文章来了解这个知识点,等最后没有特别需要了解的知识点了,就一步步倒推回到了开始的那篇文章。这时我突然意识到,之所以出现了刚才那个递归学习的过程,是因为这几个知识是之间是相互依赖的。
这让我想到了平常经常用到的maven和gradle,以及lib依赖的概念:一个lib依赖项会依赖另一个,另一个lib可能又会依赖另另一个。。。再往上层逻辑想,其实maven和gradle在某种程度上也是在处理知识之间的依赖(因为一个lib可以看作是一个解决特定问题的知识点),再继续往上层想,其实就一个软件系统(或者泛化为任何一种系统,不一定局限于软件系统)而言,是由一个个相互依赖的知识所构成的,或者说是由一个个相互依赖的智力结果所构成的,从某个方面来说,软件系统是人类的一部分思维在现实世界中的一种映射;还可以继续向上思考,整个人类社会的文明也是建立在一个又一个相互依赖的知识体系上的,这些知识体系有些是从上古时代一代一代更新演化的,有的是新的发现,他们之间或多或少也是有关联的,是一个个相互关联的智力结果所构成的;在这个层面上看软件系统体系和人类的文明体系是很像的;从这里我们还可以继续发散思维:当在一个层面或者说系统中遇到解决不了的问题时,可以跳到更大的上下文环境(context)里去想办法,也就是向上层逻辑思考然后将上层逻辑的思考进行向下的抽象然后解决下层的问题。其实想想面向对象这种编程模型的出现,不也是尝试将现实世界进行抽象,从而试图解决计算机系统中某个方面的问题吗。这样的例子应该还有很多。这让我想到了小时候经常听的单田芳评书,总会有这么样的一句话:“(某人)虚晃一招,跳出圈外。”也许当我们遇到某个解决不了的问题时,也应该“跳出圈外”,而不是仅仅着眼于问题本身,跳出圈外去更广阔的context中寻找解决问题的方案,然后将解决问题的办法抽象到下层的逻辑context中。
发散的比较远。。。算是一点点思考总结吧。