我所認識的軟件開發原則:權衡

[size=medium] 當年還在學校時,有段時間校園內到處張貼着李開復的演講通告,題目是《選擇的藝術》。我還算比較糾結了,選擇就選擇,有什麼藝術性可言。正所謂站的高度不一樣,看待問題的角度也就不一樣。當某天對生活有所感悟時,回頭想想光這個演講的題目就是至理之道呀。網上流傳着一句話,人生好似一道永遠做不完的選擇題,每時每刻都在上演。每天敲代碼的我們當然逃脫不了選擇的命運。

儘管至今都不清楚李的演講內容,但我猜測關於選擇他也可能會提到兩點:分析和權衡。在系統開發中基本沒有單選題,我們能做的就是分析需求,不斷權衡來選擇最合適的技術,最合適的人,最合適的實現。分析是基礎,基於分析的權衡之策纔是選擇的真正內涵。分析方法有很多,好似眼花繚亂的武功架式,權衡就是那最基礎最高深的內功。

系統或模塊的設計,是在可選擇的實現中找到適當的一種方式。說起來簡單,但往往事與願違,從我的杯具經歷中找條例子來說說吧。一個維護了近兩年的系統中有個很重要的模塊,用來確定銷售可看到的最大可銷售數據。我是中途加入,最初怎樣設計我不清楚,但對於這種數據可變的預測模型來說,不專業的我一個人搞不定呀,老是週末救火,自己都快燒着了。有次被當時主導這個設計方案的經理追問的火大,就反問他當初爲什麼這樣設計。他想了半天說好像是覺着給銷售顯示每天一模一樣的數據看起來不專業。我勒個去,給數據加個隨機數都可以解決的問題用得着兩年多來以數據挖掘的眼光去維護麼,我是隔三差五的被這個破模塊給調教着。當然這裏的問題源於設計的決策,歷史問題呀。在這裏可以總結出一點,系統設計中民主決策至關重要!

系統在不斷變更的需求中逐漸複雜起來,直到某天收攏不住的時候再慢慢地簡化迴歸,循環往復。理想狀態下,在設計之初對這些細節的實現做分析權衡,就不會有我和其它很多人的杯具發生,那應當是一個適度、有效的系統。但這也只是存在於理想狀態中,爲什麼追求一個相對簡單系統這麼難呢?來試着分析下。一是與系統屬性有關,本來就需求複雜的系統想簡單太不容易。二是與系統設計的決策者有關,對系統的理解、自身知識和視野的限制等等都會有影響實現方式的選擇。江湖傳言道:好的架構師會讓實現輕鬆很多。第三就不太好說,如果有個人覺着不復雜就不足以顯示出系統和設計者的重要性,那麼……。

能把複雜事情做簡單是能力的體現,在決策上也適用。從系統設計到具體實現中遇到的每步選擇,能根據基礎性的分析做合適的決策(當然合適的未必是最簡單的)。這就牽涉到自身的知識,對目標的理解,可用的技術選擇、可預見性問題等等方面的考慮。如果未來的每天數據是建立在對過去數據的趨勢分析上,那麼用數據挖掘來解決就很必要,如果僅僅是讓數據看起來正常些,那還得考慮我能不能扛起這把牛刀呀。

構想中這篇文章的名字應該是中庸之道,但仔細想來權衡這個詞可能更容易被大家接受。中庸是主旨,運於不斷權衡之中。Tradeoff – Tradeoff。[/size]


[color=blue]後記:本系列到此爲至,連篇累牘以我的小經歷和淺顯的經驗來總結下我所認識的幾個原則,未及深層,可能讓諸位失望。其實只需把這個系列各篇文章的題目挑出來,然後想想,就不用再往下看了,經驗之談,呵呵。[/color]

[img]http://t3.gstatic.com/images?q=tbn:ANd9GcSphimyUyoBPLd52wXtLolfwk8lJAS9t2HMU914Ah2qMGkucg8&t=1&usg=__zOjo058gfrt1aVMRpyDviJ_S5L4=[/img]


[size=medium][url=http://langyu.iteye.com/blog/744455] 我所認識的軟件開發原則:封裝[/url]
[url=http://langyu.iteye.com/blog/745053] 我所認識的軟件開發原則:簡單表述[/url]
[url=http://langyu.iteye.com/blog/744442] 我所認識的軟件開發原則:二八原則[/url]
[url=http://langyu.iteye.com/blog/745296] 我所認識的軟件開發原則:減少等待時間[/url][/size]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章