架構漫談(二):認識概念是理解架構的基礎

作者: 王概凱  來源: InfoQ  發布時間: 2016-04-17 10:25  閱讀: 30992 次  推薦: 32   原文鏈接   [收藏]  

  上篇:架構漫談(一):什么是架構?

  在前一篇文章中,我們討論了什么是架構。事實上,這些基礎概念對于做架構是非常重要的,大部分人對于每天都習以為常的概念,都自以為明白了,但實際上都是下意識的,并不是主動的認識。比如說“什么是桌子?”,做培訓的時候,我經常拿這個例子來問大家,回答千奇百怪。這實際上就導致了做架構的時候,不同角色的溝通會出很多問題,那么結果也就可想而知了。

  如前一篇所說,架構實際上解決的是人的問題,而概念是人認識這個世界的基礎,自然概念的認識就非常的重要。這篇文章嘗試討論一下,如何去認識概念。當然這篇不是語言學的文章,我這里所討論的,和語言學可能不太一樣,如果大家對語言學感興趣,也可以去參考一下。

  首先我要先聲明一下,這一系列的文章,都是以人的認識為主體去討論的,解決的都是人的問題,任何沒有具體申明的部分,都隱含這一背景,以免大家誤解。

  概念也屬于人認識這個世界并用來溝通的手段,包括“概念”這個概念,也是一樣的。在古代,不叫“概念”,稱之為“名相”。

  何為相?

  一般我們認為:看到一個東西,比方說杯子,“杯子”就是一個名字,指代的看到的東西就是相,就是事物的相狀。我們一聽到“杯子”這個詞,腦海里就會浮現出一個杯子的形象。而“杯子”這個詞,是用來指代的是這個相狀的,叫做名。合起來就叫做“名相”。

  可是當我們把杯子打碎了的時候,我們還會稱這個碎了的東西叫杯子嗎? 肯定不會,一般會叫“碎瓦片”,如果我們把碎瓦片磨碎了呢,名字又變了,叫做“沙子”。這就奇怪了,同樣一個東西,怎么會變出這么多的名字出來?

  那究竟什么才是相?

  實際上“相“表達的不是一個具體的東西,如上面所提的一個瓷器杯子,并不是指這個瓷器,而是這個瓷器所起的一個作用:一手可握,敞口(一般不超過底的大小,太大口就叫碗了),并且內部有一個空間可乘東西的這么一個作用。并不是指這個瓷器本身。這也是為什么我們從電視上看到一個人拿杯子的時候,我們知道這個是杯子。但是實際上我們看到的都是光影而已。所以說相實際上代表的是這個作用,并不是具體的某個東西,而名是用來標識這個作用的,用來交流的。

  為何需要這個作用?

  這個作用其實是為了解決“人需要一個可單手持握,但是希望避免直接接觸所盛物體”這個問題。

  所以說,每個概念實際上所解決的,還是人遇到的某個特定的問題,我們把解決問題的解決方案,給定了一個名字,這個名字就是對應的某個特定的概念。對于概念這個詞本身,為了統一指代這些名字,我們稱起這類作用的名字稱為“概念”。我們上次討論的“架構”也是是同樣的一個特定概念,這里不再詳述。同樣,什么是“建筑”? “建筑”實際上解決的就是“人需要獨占的空間,并還能夠比較流暢的和外部世界溝通”的問題。

  再拿前面的“桌子”來舉例,什么叫“桌子”? 很多人回答,四條腿,或者說有腿,有一個平面,等等,柜子不也是這樣嗎?為什么我們看到柜子,不會認為是桌子呢?即使我們放在柜子上吃飯,我們看到仍然會問,為什么在柜子上吃飯? 不會叫桌子。如果明白了上面的道理,就很簡單了,桌子實際上是為了解決人坐在椅子上,手還能夠支撐在一個平面上繼續開展活動的問題,一般會和椅子配對出現。坐在椅子上工作,對著柜子有一個很嚴重的問題——不知道大家試過沒有——就是腿無法展開的問題。當這么坐著超過半小時就知道是什么痛苦了。所以桌子的平面下方一定會有一個足夠容納膝部和小腿的空間,來解決這個問題。解決了這些問題的裝置,才能稱之為桌子。

  類似也可以定義出來椅子,由此可見,桌子和椅子的高度也是有限定的,都是是解決人的問題,要符合人的身高:椅子的高度和深度,必須符合小腿和大腿的長度;椅背的高度要配合脊柱的高度;桌子的高度要配合小腿和脊柱的高度之和;成人和小孩的自然也就有區別了。這又變成生理學了,事實上要做好桌子和椅子,必須要理解人的生理結構,才能正確的理解桌子和椅子的概念。

  同理,為何我們可以在不同的語言間進行翻譯,是因為雖然語言不同,但是人類所面臨的的問題是一樣的,所使用的名不同而已。對于不同的動物之間的翻譯也是同理。

  關于抽象

  在討論桌子這個概念的過程中,很多人會提出抽象這個概念,認為定義桌子實際上就是抽象的一個過程。這里,我覺得有必要要澄清一下抽象這個概念,我認為這個里面有誤解。我注意到,在做架構師的群體中,不談抽象好像就不是一個合格的架構師。

  抽象這個詞代表的含義,實際上是把不同的概念的相似的部分合并在一起,形成一個新的概念。這個里面問題很多:首先“相似的部分”在不同的人看來,并不一定那么相似;其次,抽象之后形成的是一個新的概念,和原來那個概念并不一樣,所解決的問題也不一樣。所以我們不能用抽象來定義一個事物,抽象實際上是一個分類的過程,完全是另一碼事。再舉一個例子,杯子和容器,很多人認為容器是杯子的抽象,但是實際上杯子是杯子,容器是容器,它們所解決的問題是不一樣的。當我們需要解決裝東西的問題的時候,會說容器;當我們需要解決單手持握要裝東西的時候,會說要一個杯子。

  回過頭來,根據架構的定義,要做好架構所首先必須具備的能力,就是能夠正確的認識概念,能夠發現概念背后所代表的問題,進而才能夠認識目標領域所需要解決的問題,這樣才能夠為做好架構打好基礎。事實上,這一能力,在任何一個領域都是適用的,比如我們如果想要學習一項新的技術,如Hibernate、Spring、PhotoShop、WWW、Internet等等,如果知道這些概念所要解決的問題,學習這些新的技術或者概念就會如虎添翼,快速的入手;學習一個新的領域,也會非常的快速有效;使用這些概念來解釋問題,甚至發明新的概念都是很容易的事。為什么強調這個呢,因為做架構的時候,很多時候都是在一個新的領域解決問題,必須要快速進入并掌握這個領域,然后才能夠正確的解決問題。

  以上通過幾個例子,討論了一下認識概念的誤區,如何有效的去認識概念,明白概念背后的含義,以及如何利用對概念的理解,快速的進行學習。掌握了這些原則,會有利于幫助我們在架構階段,快速的識別和定位問題。

  下一篇我們會來討論一下,如何快速的定位和識別問題,這是架構的起始。

32
0
 
標簽:架構
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()