本文主要是继续研读了资深架构师王概凯Kevin执笔的《架构漫谈》系列的《架构漫谈(二):认识概念是理解架构的基础》的心得感觉。王概凯Kevin结合本身多年的架构经验,经过不一样的视角,从新审视架构的本质,从而产生一力做《架构漫谈》系列,做者但愿可以抛出本身从实践中得出的一些观点,并引起你们的一些思考,欢迎你们沟通讨论。架构
如须要阅读原文,请关注公众号“聊聊架构”,从历史文章中获取《架构漫谈》系列。工具
本文内容结构图:post
如前一篇文章《架构之缘起》所述,架构其实是解决人的问题,而概念是人认识这个世界的基础,天然概念的认识就很是的重要
。然而,大部分人对于天天都习觉得常的概念,都自觉得明白了,但实际上都是下意识的,并非主动的认识
。学习
举个栗子:翻译
好比说“什么是桌子?”其实每一个人对其的理解描述都是千奇百怪的,这实际上就致使了作架构的时候,不一样角色的沟通会出不少问题
,那么结果也就可想而知了。code
因此,在架构中对概念的认知,实际上是很关键的,本文也将尝试讨论下如何认识概念的过程。get
首先声明一下,本系列的文章,都是以人的认识为主体去讨论的,解决的都是人的问题,任何没有具体申明的部分,都隐含这一背景,以避免你们误解。容器
概念也属于人认识这个世界并用来沟通的手段
,包括“概念”这个概念,也是同样的。在古代,不叫“概念”,称之为“名相”。基础
何为相?im
通常咱们认为:看到一个东西,比方说杯子,“杯子”就是一个名字,指代的看到的东西就是相,就是事物的相状。咱们一听到“杯子”这个词,脑海里就会浮现出一个杯子的形象。而“杯子”这个词,是用来指代的是这个相状的,叫作名。合起来就叫作“名相”。
但是当咱们把杯子打碎了的时候,咱们还会称这个碎了的东西叫杯子吗? 确定不会,通常会叫“碎瓦片”,若是咱们把碎瓦片磨碎了呢,名字又变了,叫作“沙子”。这就奇怪了,一样一个东西,怎么会变出这么多的名字出来?
那究竟什么才是相?
实际上“相“表达的不是一个具体的东西,如上面所提的一个瓷器杯子,并非指这个瓷器,而是这个瓷器所起的一个做用:一手可握,敞口(通常不超过底的大小,太大口就叫碗了),而且内部有一个空间可乘东西的这么一个做用。并非指这个瓷器自己。这也是为何咱们从电视上看到一我的拿杯子的时候,咱们知道这个是杯子。可是实际上咱们看到的都是光影而已。因此说相实际上表明的是这个做用,并非具体的某个东西,而名是用来标识这个做用的,用来交流的。
为什么须要这个做用?
这个做用实际上是为了解决“人须要一个可单手持握,可是但愿避免直接接触所盛物体”这个问题。
因此说,每一个概念实际上所解决的,仍是人遇到的某个特定的问题,咱们把解决问题的解决方案,给定了一个名字,这个名字就是对应的某个特定的概念。对于概念这个词自己,为了统一指代这些名字,咱们称起这类做用的名字称为“概念”。
一样,什么是“建筑”?“建筑”实际上解决的就是“人须要独占的空间,并还可以比较流畅的和外部世界沟通”的问题。
再拿前面的“桌子”来举例,什么叫“桌子”? 不少人回答,四条腿,或者说有腿,有一个平面,等等,柜子不也是这样吗?为何咱们看到柜子,不会认为是桌子呢?即便咱们放在柜子上吃饭,咱们看到仍然会问,为何在柜子上吃饭? 不会叫桌子。若是明白了上面的道理,就很简单了,桌子其实是为了解决人坐在椅子上,手还可以支撑在一个平面上继续开展活动的问题,通常会和椅子配对出现
。
同理,为什么咱们能够在不一样的语言间进行翻译,是由于虽然语言不一样,可是人类所面临的的问题是同样的,所使用的名不一样而已
。对于不一样的动物之间的翻译也是同理。
在讨论桌子这个概念的过程当中,不少人会提出抽象这个概念,认为定义桌子实际上就是抽象的一个过程。这里,有必要要澄清一下抽象这个概念,这个里面有误解。
抽象这个词表明的含义,其实是把不一样的概念的类似的部分合并在一块儿,造成一个新的概念。
这个里面问题不少:首先“类似的部分”在不一样的人看来,并不必定那么类似;其次,抽象以后造成的是一个新的概念,和原来那个概念并不同,所解决的问题也不同。因此咱们不能用抽象来定义一个事物,抽象其实是一个分类的过程,彻底是另外一码事。
再举一个例子,杯子和容器,不少人认为容器是杯子的抽象,可是实际上杯子是杯子,容器是容器,它们所解决的问题是不同的。当咱们须要解决装东西的问题的时候,会说容器;当咱们须要解决单手持握要装东西的时候,会说要一个杯子。
回过头来,根据架构的定义,要作好架构所首先必须具有的能力,就是可以正确的认识概念,可以发现概念背后所表明的问题,进而才可以认识目标领域所须要解决的问题
,这样才可以为作好架构打好基础。
事实上,这一能力,在任何一个领域都是适用的,好比咱们若是想要学习一项新的技术,如Hibernate、Spring、PhotoShop、WWW、Internet等等,若是知道这些概念所要解决的问题,学习这些新的技术或者概念就会如虎添翼,快速的入手
;学习一个新的领域,也会很是的快速有效;使用这些概念来解释问题,甚至发明新的概念都是很容易的事。为何强调这个呢,由于作架构的时候,不少时候都是在一个新的领域解决问题,必需要快速进入并掌握这个领域,而后才可以正确的解决问题
。
总结一下,正如上文所述:
相是一个具体物体的状态和做用,是来解决具体问题的。而为了人之间的交流,便根据相有了名,名其实就是一个标记,或理解为简单的概念。因此概念的背后实际上是表明解决人的问题。
而抽象则是对概念或名类似之处的归类、分类的过程,不一样角度来看会得出不一样的类似之处,从而会有不一样的抽象出来,因此抽象也会产生不一样的新的概念。但抽象出来的概念不可以指具体的事物,而只能作到泛指一类具备类似之处的事物。其实抽象自己也是一个概念,其背后也在解决归类,分类的问题,但抽象并非架构的必然产物。
而在解决问题的工程中,会首先有简单名相(意指解决问题的最原始工具或物体),遇到更高级问题,会有更高级的名相或概念,经过抽象,对名相进行归类、分类,抽象出新的概念,或者再有更高级的抽象,产生更高级的概念,最后由这些概念会组成架构。
做者:猿码道 连接:https://juejin.im/post/5b36e19be51d4558b304325e 来源:掘金 著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。