你是否曾經(jīng)參加過這樣的會議:
發(fā)言人1:客戶希望頁面的背景是綠顏色的,
項目管理之道:你知道今天是什么日子嗎?
。發(fā)言人2: 我們能確定他們會一直使用綠色嗎?也許我們需要增加一個配置背景顏色的選項。
沒有人反對,經(jīng)理從來不參加這種無聊的設(shè)計會議,會議室里沉默了下來….
發(fā)言人3:只提供一個設(shè)置背景顏色的配置項會顯得功能很弱,我們最好能提供全套的顏色配置方案。
發(fā)言人4:你是指提供多個成套配色方案,還是指讓用戶可以自己去配色?
發(fā)言人2(麻煩的始作俑者):當(dāng)然要提供成套方案,但用戶可以自主修改,這樣我們就能把所有可能性都考慮進(jìn)去。
討論一直持續(xù)下去,直到他們決定開發(fā)一個擁有無數(shù)個顏色選擇器和其它功能的換膚系統(tǒng),而會議的收場是這樣一句:
發(fā)言人6:這個系統(tǒng)聽起來很棒,但我們應(yīng)該用什么顏色作為系統(tǒng)的缺省背景顏色呢?
…沒有人還記得:
客戶指定要求的是綠色,只要綠色,沒有其它顏色。
是不是有點夸張?也許吧,但我是參加過跟此類似的會議的。就我來看,我參加過的會議有的比這更糟糕,我并不想中傷任何人,因為我自己也不是個無可挑剔的人,對于這些人我就不說了。
總之,在這樣的會議討論中,很多事情都走入迷途,對于系統(tǒng)設(shè)計,我們應(yīng)該明白一個簡單的規(guī)律——遺憾的是沒有人意識的這個簡單規(guī)律——系統(tǒng)設(shè)計的頭一個規(guī)律——一個我們應(yīng)該銘記在心,在任何系統(tǒng)或架構(gòu)設(shè)計會議上都該反復(fù)默念的規(guī)律:
今天的常量是明天的變量。
這并不是一個能夠人一眼看穿的規(guī)律,但如果你能認(rèn)識到幾乎在所有的系統(tǒng)設(shè)計方面這都是一個事實的話,這能成為一個指導(dǎo)性的規(guī)律,它能夠讓你在做決定時更有信心,做出更符合實際的決定。
可問題就在于,搞技術(shù)的人大部分都不知道今天是什么日子。他們通常會犯兩種錯誤,要么:
當(dāng)所有需要做的事只是處理今天的常量這樣的簡單案例時,他們卻在孜孜不倦為明天的變量做計劃,評估,設(shè)計和編程。
要么,他們不明白,當(dāng)“客戶變更需求”時,客戶的做法和任何人無異——從昨天拿來簡單的東西,在今天把它變的復(fù)雜一些,
管理資料
《項目管理之道:你知道今天是什么日子嗎?》(http://salifelink.com)。所以,你可以把這句話反過來說,“今天我做的所有事情明天都會變。會變的更復(fù)雜。任何我認(rèn)為是固定或恒量的東西,將來都會變化和變成變量。”
這是什么意思?
我們都知道(希望如此),我們不應(yīng)該在代碼里直接嵌入常量,這會使代碼很難維護(hù)。我們在頭文件里定義常量,或獲取外部被當(dāng)作參數(shù)傳進(jìn)來的資源。這樣能使代碼更靈活,這是好事。這樣的代碼更健壯,它能在不需要改動的情況下處理更多的場景。
要理解“今天的常量是明天的變量”,你首先要認(rèn)識到,在我們的系統(tǒng)中隱藏著各種形式的“常量”,藏在我們很難發(fā)現(xiàn)的地方,這使得當(dāng)明天來臨、它們不再是恒定和常量時,你很難去修改它們。
另外一個對于這個規(guī)律要理解的事情是,時刻記著今天是什么日子。大部分我們今天在做的東西、實現(xiàn)到的功能也許永遠(yuǎn)都不會再改變。人們特別容易去設(shè)想它們可能會改變,但究竟會怎樣,無從得知。所以,今天常量不要把它改成明天的變量。
重回到會議上
讓我們重回到最初提到的會議。下面是當(dāng)人們知道“今天的常量是明天的變量”的規(guī)律后會議的進(jìn)行方式。
發(fā)言人1:客戶希望頁面的背景是綠顏色的。
發(fā)言人2:我們能確定他們會一直使用綠色嗎?也許我們需要增加一個配置背景顏色的選項。
我們的英雄:我們不知道客戶是否會一直使用綠顏色,我們永遠(yuǎn)都不可能知道客戶在何時會改變他們的想法,我們知道的是,今天的常量是明天的變量。然而,我們應(yīng)該把這種顏色放在CSS樣式表里,而不是直接嵌入到網(wǎng)頁里,當(dāng)日后如果需要改變時,我們就很容易的做到,怎么樣?
有人含含糊糊的說是的,應(yīng)該放到樣式表里,會議繼續(xù)。
這個例子很牽強嗎?
這確實是一個非常牽強的例子,會有人不使用樣式表嗎?會有人在代碼里嵌入常數(shù)嗎?
天真的孩子們,事實證明,我們并不總是使用CSS樣式表。當(dāng)網(wǎng)頁開發(fā)剛流行時,CCS是一個可有可無的選項(相信我!),那時我們就是直接把樣式信息直接放在網(wǎng)頁標(biāo)記里,這就是在代碼里嵌入常數(shù),只是在不久前人們才意識到這樣不正確,CSS才被人們發(fā)現(xiàn)。
這種事情一遍一遍的在我們身邊反復(fù)發(fā)生,你想起來會感到驚奇,請找出你認(rèn)為應(yīng)該常量卻被“埋沒在代碼里”的東西,請把它們定義成常量。
今天的文章是明天的承諾
關(guān)于這個話題我還會發(fā)表很多的文章,不管未來會發(fā)生什么變化,但今天我會嚴(yán)格按照我的計劃發(fā)表。
祝好運。