關于架構的一句話,還有一個實例

0 評論 5758 瀏覽 0 收藏 10 分鐘

昨天有幸邀請到周愛民先生在懶懶交流會上分享《架構,框架和庫》,很精彩睿智的講演,受益頗多。其中提到對架構的一個描述:

架構是把握問題的關鍵,平衡設計。

很認可。下面是我的理解:

  1. 什么是把握?在武術屆有一種器械訓練方式是“抖大桿”:一條白蠟木做的大桿,桿長超過兩米,訓練者一手把桿,一手握住桿的底部,全身配合雙手,將桿抖出各種樣式。把和握是兩個不同的動作,把的是方向,握的是基底。把握是一種掌控,武林高手能讓大桿隨心而動,隨意而行,這就是把握。把握可以以把為主,以握為輔,隨心所欲,花樣百出。把握亦可以握為主,以把為輔,以氣馭劍,天馬行空。
  2. 什么是問題?物理學家狄拉克有一個典故。有一天他到一個學校去演講,講完以后,主持人說:“大家有什么問題?可以問狄拉克教授。” 這時,有一個學生站起來說:“剛才你在黑板上寫的那個方程式我不懂。” 狄拉克沒有回答,好長時間都沒有回答。于是主持人就問:“狄拉克教授,您可不可以回答這個問題呢?” 狄拉克說:“那不是一個問題。” 狄拉克為何拒絕回答?因為提問者看不懂方程式只是現象,而不是問題。什么是問題這個問題,推薦閱讀杰拉爾德·溫伯格的經典著作《你的燈還亮著嗎 — 發現問題的真正所在》。
  3. 什么是關鍵?關鍵的原始釋義是門閂。關是關閉,把門合上,鍵指機械零件。放到現代,關鍵就是門上的鎖。如何找出未知問題的關鍵所在?資深的盜墓者,遭遇一個前所未有的機關時,首先是觀察,盡可能的獲取信息。其次是分析,盡可能推斷機關背后的機理。緊接著可能會聯想和嘗試,用已有的破解技巧,去嘗試解決當前問題。反復以上步驟,不懈努力,等機關破解的那一剎那,盜墓者也就明白了該機關的關鍵所在。
  4. 什么是平衡?Douglas 說,萬事皆權衡。架構的好壞,是一個適不適合場景的問題。無論是類庫的設計,還是某一行代碼的書寫方式,好壞與否,都要看這個類庫或這行代碼,使用在什么場景下。Google 首頁可以省去 html 結束符,但并不意味著你的博客這么干也是妥當的。在前端界,table 布局也不是萬惡不赦的。如果你的用戶群里還有不少用戶在使用非常舊式的瀏覽器,table 布局就是最合適的方式。

為了進一步闡釋,下面舉一個實例。

很喜歡看書,好幾年前開始,喜歡從網絡上收集各種書籍:
(幾年前的詳細分類已丟失,上面僅是模擬能想起來的幾個類別)

按照上面的書籍整理方式,很快發現一個問題:有些書籍,會同時屬于多個類別。比如《紅樓夢》,放在“古典文學”里好呢,還是放在“精品小說”里好?很明顯,這涉及圖書管理學的經典問題:如果做一個合理有效的分類?

于是開始嘗試從各種維度來重新分類,甚至跑到大型圖書館里去借鑒圖書館的分類方式。但很快我就崩潰了:中國文學 – 古典文學 – 小說 – 清朝 – 紅樓夢。我不是圖書管理員,我就是想收集點自己喜歡看的書而已。這種完美主義者的“科學”分類法立刻被我拋棄。

后來很長一段時間,我的書籍分類一直很混沌。經常隔上幾個月,就要大動干戈全部調整一次,讓自己追求“完美”的心靈臨時安頓。

很漫長的一段時間,很糾結的一段折騰。

一直到大約一年前,忘了當時是什么觸因,突然就找到了一個讓自己非常滿意的分類。在給出這個分類前,我們先“馬后炮”一把,嘗試從架構角度來進行分析:

這個例子中,什么是問題?表面上看,是如何找到一個合理的圖書分類方式。但這真的是問題嗎?顯然不是。大型圖書館的書目,絕對是合理的。那問題在什么地方?稍一分析不難發現,問題不在于書目分類是否合理,而在于是否適合我的習慣,是否能滿足我的需求。(初始的分類問題被轉換成了需求問題,有關問題轉換方面的話題,推薦閱讀溫伯格的書籍)

那么,什么是我的需求?我為何要對書籍進行分類?仔細思考,我將需求整理為:

  1. 新下載的書籍有個固定的目錄存放。能讓自己想看時,快速找到。
  2. 正在看的書籍能立馬找到。
  3. 已看完的書籍要歸檔,以后能比較方便的查閱。

從上面的描述中,可看出我的需求有時間線。我的需求是根據閱讀書籍的時間來組織的!“時間”就是我尋找了很久的書目分類的維度!因此時間維度就是該信息架構問題的關鍵!這樣,立刻就有了看似簡單但能很好解決問題的分類方式:
現在的書籍分類方式
一切就這么簡單!按照這個方式重新整理書目后,立刻心曠神怡。

當然,這里也涉及到權衡:

  1. 新下載的書籍太多怎么辦?需要分類嗎?
  2. 已看完的書籍,歸檔時需要分類嗎?

上面兩個問題,不同的人有不同的方案。我的選擇是:

  1. 新下載的書籍不再分類,全部混雜放在一起。好處是能杜絕自己盲目收集書籍的“惡習”,并規定新下載的書籍不能超過 10 本。第 11 本入庫時,必須刪掉前 10 本中的一本。
  2. 已看完的書籍會分類,但只做一級大分類,比如:小說/詩歌/攝影。并規定從“正在讀”移動到“已閱讀”時,要非常謹慎,必須有理由說服自己有保存價值時才歸檔,否則刪無赦。這樣,一年下來,真正有價值歸檔的書籍并不多。

這就是權衡!

最后再給一個案例,我的 Google Reader 訂閱項分類:
Google Reader 訂閱項分類方式

必讀 — 符合自己脾胃的精品訂閱源
閑讀 — 可看可不看的訂閱源
待通讀 — 新發現的一些相見恨晚的博客,想翻閱其所有文章
更新 — 軟件更新提示等訂閱源

自從采用這個分類后,信息篩選的時間大大減少,有效閱讀的時間增加了很多。注意:這個分類適合我,但未必適合你。適合你的分類,可以從自己的真正需求出發,仔細的思考和分析,通過探索和實踐去獲得。

上面說的雖然是很小的生活中的分類問題,但往大里說就是信息架構,再類推開去,就是軟件架構。道理是相通的。架構是個過程,是思考、實踐,再次思考、再次實踐的過程。在這過程中,下面三個問題經常遇到:

  1. 問題是什么?
  2. 什么是問題的關鍵?
  3. 在當前應用場景下,如何設計,如何權衡?

架構就是在特定應用場景下,不斷追問和尋求以上問題的過程。在這過程中,你的所有決策的集合,就是架構。

來源:http://lifesinger.org/blog/2010/03/thinking-of-architecture/

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發揮!