關于架構的一句話,還有一個實例
昨天有幸邀請到周愛民先生在懶懶交流會上分享《架構,框架和庫》,很精彩睿智的講演,受益頗多。其中提到對架構的一個描述:
架構是把握問題的關鍵,平衡設計。
很認可。下面是我的理解:
- 什么是把握?在武術屆有一種器械訓練方式是“抖大桿”:一條白蠟木做的大桿,桿長超過兩米,訓練者一手把桿,一手握住桿的底部,全身配合雙手,將桿抖出各種樣式。把和握是兩個不同的動作,把的是方向,握的是基底。把握是一種掌控,武林高手能讓大桿隨心而動,隨意而行,這就是把握。把握可以以把為主,以握為輔,隨心所欲,花樣百出。把握亦可以握為主,以把為輔,以氣馭劍,天馬行空。
- 什么是問題?物理學家狄拉克有一個典故。有一天他到一個學校去演講,講完以后,主持人說:“大家有什么問題?可以問狄拉克教授。” 這時,有一個學生站起來說:“剛才你在黑板上寫的那個方程式我不懂。” 狄拉克沒有回答,好長時間都沒有回答。于是主持人就問:“狄拉克教授,您可不可以回答這個問題呢?” 狄拉克說:“那不是一個問題。” 狄拉克為何拒絕回答?因為提問者看不懂方程式只是現象,而不是問題。什么是問題這個問題,推薦閱讀杰拉爾德·溫伯格的經典著作《你的燈還亮著嗎 — 發現問題的真正所在》。
- 什么是關鍵?關鍵的原始釋義是門閂。關是關閉,把門合上,鍵指機械零件。放到現代,關鍵就是門上的鎖。如何找出未知問題的關鍵所在?資深的盜墓者,遭遇一個前所未有的機關時,首先是觀察,盡可能的獲取信息。其次是分析,盡可能推斷機關背后的機理。緊接著可能會聯想和嘗試,用已有的破解技巧,去嘗試解決當前問題。反復以上步驟,不懈努力,等機關破解的那一剎那,盜墓者也就明白了該機關的關鍵所在。
- 什么是平衡?Douglas 說,萬事皆權衡。架構的好壞,是一個適不適合場景的問題。無論是類庫的設計,還是某一行代碼的書寫方式,好壞與否,都要看這個類庫或這行代碼,使用在什么場景下。Google 首頁可以省去 html 結束符,但并不意味著你的博客這么干也是妥當的。在前端界,table 布局也不是萬惡不赦的。如果你的用戶群里還有不少用戶在使用非常舊式的瀏覽器,table 布局就是最合適的方式。
為了進一步闡釋,下面舉一個實例。
很喜歡看書,好幾年前開始,喜歡從網絡上收集各種書籍:
(幾年前的詳細分類已丟失,上面僅是模擬能想起來的幾個類別)
按照上面的書籍整理方式,很快發現一個問題:有些書籍,會同時屬于多個類別。比如《紅樓夢》,放在“古典文學”里好呢,還是放在“精品小說”里好?很明顯,這涉及圖書管理學的經典問題:如果做一個合理有效的分類?
于是開始嘗試從各種維度來重新分類,甚至跑到大型圖書館里去借鑒圖書館的分類方式。但很快我就崩潰了:中國文學 – 古典文學 – 小說 – 清朝 – 紅樓夢。我不是圖書管理員,我就是想收集點自己喜歡看的書而已。這種完美主義者的“科學”分類法立刻被我拋棄。
后來很長一段時間,我的書籍分類一直很混沌。經常隔上幾個月,就要大動干戈全部調整一次,讓自己追求“完美”的心靈臨時安頓。
很漫長的一段時間,很糾結的一段折騰。
一直到大約一年前,忘了當時是什么觸因,突然就找到了一個讓自己非常滿意的分類。在給出這個分類前,我們先“馬后炮”一把,嘗試從架構角度來進行分析:
這個例子中,什么是問題?表面上看,是如何找到一個合理的圖書分類方式。但這真的是問題嗎?顯然不是。大型圖書館的書目,絕對是合理的。那問題在什么地方?稍一分析不難發現,問題不在于書目分類是否合理,而在于是否適合我的習慣,是否能滿足我的需求。(初始的分類問題被轉換成了需求問題,有關問題轉換方面的話題,推薦閱讀溫伯格的書籍)
那么,什么是我的需求?我為何要對書籍進行分類?仔細思考,我將需求整理為:
- 新下載的書籍有個固定的目錄存放。能讓自己想看時,快速找到。
- 正在看的書籍能立馬找到。
- 已看完的書籍要歸檔,以后能比較方便的查閱。
從上面的描述中,可看出我的需求有時間線。我的需求是根據閱讀書籍的時間來組織的!“時間”就是我尋找了很久的書目分類的維度!因此時間維度就是該信息架構問題的關鍵!這樣,立刻就有了看似簡單但能很好解決問題的分類方式:
一切就這么簡單!按照這個方式重新整理書目后,立刻心曠神怡。
當然,這里也涉及到權衡:
- 新下載的書籍太多怎么辦?需要分類嗎?
- 已看完的書籍,歸檔時需要分類嗎?
上面兩個問題,不同的人有不同的方案。我的選擇是:
- 新下載的書籍不再分類,全部混雜放在一起。好處是能杜絕自己盲目收集書籍的“惡習”,并規定新下載的書籍不能超過 10 本。第 11 本入庫時,必須刪掉前 10 本中的一本。
- 已看完的書籍會分類,但只做一級大分類,比如:小說/詩歌/攝影。并規定從“正在讀”移動到“已閱讀”時,要非常謹慎,必須有理由說服自己有保存價值時才歸檔,否則刪無赦。這樣,一年下來,真正有價值歸檔的書籍并不多。
這就是權衡!
最后再給一個案例,我的 Google Reader 訂閱項分類:
必讀 — 符合自己脾胃的精品訂閱源
閑讀 — 可看可不看的訂閱源
待通讀 — 新發現的一些相見恨晚的博客,想翻閱其所有文章
更新 — 軟件更新提示等訂閱源
自從采用這個分類后,信息篩選的時間大大減少,有效閱讀的時間增加了很多。注意:這個分類適合我,但未必適合你。適合你的分類,可以從自己的真正需求出發,仔細的思考和分析,通過探索和實踐去獲得。
上面說的雖然是很小的生活中的分類問題,但往大里說就是信息架構,再類推開去,就是軟件架構。道理是相通的。架構是個過程,是思考、實踐,再次思考、再次實踐的過程。在這過程中,下面三個問題經常遇到:
- 問題是什么?
- 什么是問題的關鍵?
- 在當前應用場景下,如何設計,如何權衡?
架構就是在特定應用場景下,不斷追問和尋求以上問題的過程。在這過程中,你的所有決策的集合,就是架構。
來源:http://lifesinger.org/blog/2010/03/thinking-of-architecture/
- 目前還沒評論,等你發揮!