標籤:

一樣還是不一樣

今天評審一個配置庫方案,大概的意思是要把幾個git庫放到一起,形成一個repo。評審的時候有幾個項目組提出質疑:git用得好好的,現在又讓我學repo,這不是沒事找事嗎?我們那麼多管理制度都是和原來使用git的時候是配合的,現在引入新的東西,Whats the point?

這個情況倒是一個我以前老說的「為學」還是「為道」的一個好例子。從這個東西牛不牛,好不好宣傳,是否比原來更有說服力的方向來說,我們可以說出repo的好多好處,因為「增加」邏輯,正是「考慮周到,邏輯嚴密,牛逼」的一個標誌。

「為道」呢,那是要事成,比如負責產品交付的項目組就不是這樣看這個問題的:寫了那麼多腳本,都是為了可以自動化提交代碼到git庫上,CI平台也是基於代碼是在git庫中來寫的集成,你覺得加個repo是個簡單的事情,尼瑪老子的腳本都要重寫。老子一堆特性要交付呢,搞個repo干哈?吃飽了撐的?

這個例子可以簡單用來理解為學和為道的區別。但現實比這個複雜得多,在這個方案中,其實我是站台repo這個方案的。我評審的時候給了這樣一個意見:我們為什麼要上repo?因為原來我們可能有幾個git庫,比如一個發行版,我們可能有kernel, uefi, grub, fs四個git庫,你重新建一個統一的git庫呢,原來單個庫上的信息就丟了。為了既可以復用原來的git庫信息,也可以統一管理。所以我們才上的repo。但這裡就有一個關鍵了:你為什麼要統一管理?你是否形成了一個有互相關聯的管理結構?你要把什麼東西互相關聯起來?

換句話說,上repo是必要的,但方案的作者沒有設計好。

這時作者就出來辯解說:我有啊,我有啊——你看我這裡列出了所有的git庫了,我這裡確實也給出了他們的關係了……

我靠,這個完全就get不到point。

實際情形是:這個評審最後沒有達成共識,記錄了一堆的「遺留問題」,下次再來。

方案不是怎麼做的。

方案是一種架構設計,既然是架構設計,它就是設計的一部分——很小的一部分。這很小的一部分,決定了整個最終產品的最後的樣子。所以,它的方向比它的內容重要得多。

你要引入一個新的概念(這個例子中的repo),你首先要調查的是,你為什麼要引入這個概念,這群接受這個方案的合作者,他們的目的是什麼,然後用這組目的組合你的設計邏輯,說明:如果不用這樣的方案——你們沒有更好的選擇。

而如果他們不同意這個方向,那這個就是另一個問題的了,「你們可以和需求提出方掰去——這不是我設計者的事」。(這就叫「不爭」)

所以,儘管你也畫了User Case圖,你也列出了模塊,你也設計了流程,但你這個還是沒法滿足產品的要求,沒有辦法讓客戶滿意,為什麼?你只學了樣子,填充了內容,這些內容是沒有結構的,(請注意前面的邏輯:架構設計僅僅是全部設計的很小的一部分),你怎麼可能取得共識?

而我們看到評審會議上的討論很明顯印證了這一點,大部分人都在討論自己的問題,從repo掃盲談到項目間的分工,從項目的分工談到整個產品的前途,從前途討論到追究責任……這個問題怎麼可能有結果?(「為學」不是不好,但一旦我們回到「目標」上,「為學」是沒結果的啊)

所以,很多設計師以為自己「務實」,寫文檔的時候往往忽略大部分設計模板中都有了「Introduction」的部分,不願意定義:

  • 我為什麼要寫這個文檔
  • 這文檔解決什麼問題
  • 這個文檔解決的問題的範圍是什麼
  • 這個文檔在整個解決的問題的所有設計中的地位是什麼(比如,讀者是誰)

沒有這個東西,哪裡有邏輯鏈?沒有這個邏輯鏈,你的設計怎麼會有說服力?——請再次注意這點:架構設計是全部設計的很小一部分,要細摳,你永遠都是摳不贏的。

不考慮清楚Introduction,你以為你「立即進入設計」是省時間,其實都是浪費時間而已。Introduction說的東西似乎都是大路貨,其實那個才真正控制了整個設計的範圍,決定了資源需求,整個事情的成敗,很大程度上也在這裡。你看它不起眼,那不過是因為它的天性就是「無名」的而已。

補充2018.4.16:(由於是公開的內容,事件內容針對隱私進行更改,只是為了說明問題,請不要和任何實際的事情對應起來)

寫完這個文檔後,又看到一個類似的膠片,一樣的毛病,我把本文抄送過去了。對方給我這樣回復:「這個膠片想解決的問題是:想試圖用這個膠片給大家講講XXX怎麼用起來,做個簡單的介紹」。

我對此的答覆是:

  1. 大家是誰?給他們講的目的是什麼?就算是個簡單的介紹,都是有目的的,比如科普艾滋病,是希望「普羅大眾」注意用血安全,不要濫交,要不要過度懷疑,歧視艾滋病人等等。沒有沒有目的「科普」。科普或者「簡單介紹」不是一個描述缺乏目標的理由
  2. 怎麼用XXX,是有範圍的,不定義範圍。我作為一個被「科普」或者「簡單介紹」的對象,都不知道該不該Take你的這個「介紹」。「怎麼用XXX」,誰規定這樣用的?誰「承認這樣用的」?你說的XXX具體是什麼?什麼範圍內的?——隨便一個人跑過來,就跟我說「怎麼用XXX」,這個信息對我來說,跟沒有一樣。

你看,我每次說的東西都很簡單,但其實只是聽著簡單,做起來可一點都不簡單。因為這個世界上,如果真要做事,大部分的工作量都是「無名」的。而很多人,都只願意做「有名」的事,這樣就只能浮於表層了。

推薦閱讀:

面向對象剖析
單元測試的效果問題
軒轅傳奇引擎架構設計
知不知

TAG:軟體架構 |