找到道法自然的「度」

這裡初步挖了一下「道法自然」這個詞的語義:

in nek:道法自然zhuanlan.zhihu.com圖標

本文進一步挖掘一下它的外延。

在上面這個討論中,我們可以看到,「道法自然」這個概念被提出來,是因為「事實」的發生,是一個綜合因素作用的共同結果,而我們只知道,或者只能考察部分要素,所以,一方面我們不能把我們預設的邏輯鏈定義得太精細。依賴太多,我們就更容易失道。我們守穩我們真的關心的東西就好了。「我要吃飯填飽肚子」,肯定比「我要吃魚翅打底,錦州農場的雞蛋,李勝記的蝦仁,泰國香米的做料的揚州炒飯來填飽肚子」要容易「合道」得多。

另一方面,它也說明了,我們要找到自然的度,目光看大一點,比看著事情本身,要容易合道得多。

爸爸和兒子一起清潔衛生,爸爸負責搬沉重的傢具,兒子負責擦洗,爸爸負責貼春聯這種精細的兒子弄不好的活,兒子負責鑽到閣樓上整理雜物……這樣就容易合道。反過來,兒子負責搬傢具,爸爸負責擦洗,兒子貼春聯,爸爸鑽閣樓,這個事情就做不成。或者更容易陷入的誤區是,兒子求禮:「爸爸,請你坐好了,好好享受生活,今天的事情兒子全包了」。然後兒子摔斷腿,擦傷了手……晚上爸爸在醫院和別人聊天,老淚縱橫:我兒子多麼孝順……

又或者是,爸爸求仁:「兒子,你去打遊戲,爸爸自己就可以完成清潔」,這事情也能成,但如果對比效率,明顯這個不如我們最前面的模型更合道。

所以,哪個比哪個更合道,是從「事」的效率上知道的,是從一個整體在各種方案上的可能性比較出來的。只考慮個體怎麼做,看不到「道」在哪裡。所以,合道的表現是「萬物芸芸,各歸其根」,每個個體在它最合適的位置上,才能展現真正的美,僅僅強化一個個體,無法展現這個個體的美。

就好像我經常給女兒做比喻的:我愛你就像我愛我的大拇指,大拇指要長在它現在的位置上,所以才比其他手指顯得更有用的,如果因為它這麼「好」,讓它從手心上向上長出來,它就不再有用了,也不再美了。所以,愛,是無法過度的。

好了,簡單的比喻說完,我們還是回到設計的問題上。最近在評審一個硬體對軟體的介面,軟體提交數據的時候,給的是一個基於頁的Scatter-Gather List。它的定義是這樣的:

我一看這個介面,就猜到這肯定是存儲背景的人定義出來的——只有做存儲的人才會想著要把Metadata和rawdata一樣處理的。因為最終這些數據最終都會變成冷存儲的數據,無論是metadata還是rawdata,他們的地位是一樣的。

問題是,這種行為對軟體毫無意義。因為你在存儲中用的指針,和你載入到內存中的內存指針,不可能是一樣的,那麼,額外加入頁大小造成對metadata的限制的意義在哪裡呢?

如果我有一組rawdata大小的頁面需要處理,我只要根據頁面的數量,分配一個連續的metadata管理結構,連續放置頁指針,這個問題就解決了。為什麼要分成多個metadata頁?為了處理這個metadatae頁的分段結構,軟體要多處理多少種情況?(特別是考慮到你要優化處理性能的時候)

所以,我問硬體設計師:為什麼需要這樣設計這個東西。

答曰:這是軟體的需求。

所以我去問軟體:為什麼要做成這樣。

答曰:這是參考最新的NVME的數據結構設計的

……

剩下的東西我就不解釋了。這個設計明顯就不合道。硬體設計師的目光沒有越過硬體的邊界,看到軟硬結合的性能要求是什麼,軟體是引入了多餘的名,引入的名沒有成為整體競爭力(沒有靠近目標,進寸而退尺)。而架構師的功能是同這裡的塵,解這裡的紛,不讓方案「繞了多餘的路」,讓事情最終合道。

從這裡我們可以看到,度,其實就是你是不是把更多的實體放到整體去考慮所有可以提供的方案,然後再做出決定。每個實體的「根」在哪裡,取決於什麼方案對整體是最有利的。這決定了所有根的位置,也決定的最後「道」的「度」在什麼地方。

邏輯鏈不能被自己的位置所左右,你不能認為「我是做硬體的,我為軟體服務,所以他們提的需求我必須滿足」,因為這個系統是變化的,當整個方案不是最優的時候,所謂的「客戶」自然會收到他那個方面的壓力,最終還是要走回到另一條道路上,但對你來說,浪費的資源還是浪費了。

所以,做事要做好自己的位置,但思考邏輯鏈要越過自己的位置,你才有可能找到自然的度,對自然的度有正確的認識,你才有可能建出可以合道的邏輯鏈,並最終真正合道。


推薦閱讀:

自然,守弱和Plan B
Specification的寫法問題

TAG:軟體架構 | 軟體架構師 |