你知道今天是什么日子嗎?

jopen 12年前發布 | 5K 次閱讀 程序員

你是否曾經參加過這樣的會議:

發言人1:客戶希望頁面的背景是綠顏色的。

發言人2: 我們能確定他們會一直使用綠色嗎?也許我們需要增加一個配置背景顏色的選項。

沒有人反對,經理從來不參加這種無聊的設計會議,會議室里沉默了下來….

發言人3:只提供一個設置背景顏色的配置項會顯得功能很弱,我們最好能提供全套的顏色配置方案。

發言人4:你是指提供多個成套配色方案,還是指讓用戶可以自己去配色?

發言人2(麻煩的始作俑者):當然要提供成套方案,但用戶可以自主修改,這樣我們就能把所有可能性都考慮進去。

討論一直持續下去,直到他們決定開發一個擁有無數個顏色選擇器和其它功能的換膚系統,而會議的收場是這樣一句:

發言人6:這個系統聽起來很棒,但我們應該用什么顏色作為系統的缺省背景顏色呢?

…沒有人還記得:

客戶指定要求的是綠色,只要綠色,沒有其它顏色。

是不是有點夸張?也許吧,但我是參加過跟此類似的會議的。就我來看,我參加過的會議有的比這更糟糕,我并不想中傷任何人,因為我自己也不是個無可挑剔的人,對于這些人我就不說了。

總之,在這樣的會議討論中,很多事情都走入迷途,對于系統設計,我們應該明白一個簡單的規律——遺憾的是沒有人意識的這個簡單規律——系統設計的頭一個規律——一個我們應該銘記在心,在任何系統或架構設計會議上都該反復默念的規律:


今天的常量是明天的變量。

這并不是一個能夠人一眼看穿的規律,但如果你能認識到幾乎在所有的系統設計方面這都是一個事實的話,這能成為一個指導性的規律,它能夠讓你在做決定時更有信心,做出更符合實際的決定。

可問題就在于,搞技術的人大部分都不知道今天是什么日子。他們通常會犯兩種錯誤,要么:

  1. 當所有需要做的事只是處理今天的常量這樣的簡單案例時,他們卻在孜孜不倦為明天的變量做計劃,評估,設計和編程。
  2. 要么,他們不明白,當“客戶變更需求”時,客戶的做法和任何人無異——從昨天拿來簡單的東西,在今天把它變的復雜一些。

所以,你可以把這句話反過來說,“今天我做的所有事情明天都會變。會變的更復雜。任何我認為是固定或恒量的東西,將來都會變化和變成變量。”

這是什么意思?

我們都知道(希望如此),我們不應該在代碼里直接嵌入常量,這會使代碼很難維護。我們在頭文件里定義常量,或獲取外部被當作參數傳進來的資源。這樣能使代碼更靈活,這是好事。這樣的代碼更健壯,它能在不需要改動的情況下處理更多的場景。

要理解“今天的常量是明天的變量”,你首先要認識到,在我們的系統中隱藏著各種形式的“常量”,藏在我們很難發現的地方,這使得當明天來臨、它們不再是恒定和常量時,你很難去修改它們。

另外一個對于這個規律要理解的事情是,時刻記著今天是什么日子。大部分我們今天在做的東西、實現到的功能也許永遠都不會再改變。人們特別容易去設想它們可能會改變,但究竟會怎樣,無從得知。所以,今天常量不要把它改成明天的變量。

重回到會議上

讓我們重回到最初提到的會議。下面是當人們知道“今天的常量是明天的變量”的規律后會議的進行方式。

發言人1:客戶希望頁面的背景是綠顏色的。

發言人2:我們能確定他們會一直使用綠色嗎?也許我們需要增加一個配置背景顏色的選項。

我們的英雄:我們不知道客戶是否會一直使用綠顏色,我們永遠都不可能知道客戶在何時會改變他們的想法,我們知道的是,今天的常量是明天的變量。然而,我們應該把這種顏色放在CSS樣式表里,而不是直接嵌入到網頁里,當日后如果需要改變時,我們就很容易的做到,怎么樣?

有人含含糊糊的說是的,應該放到樣式表里,會議繼續。

這個例子很牽強嗎?

這確實是一個非常牽強的例子,會有人不使用樣式表嗎?會有人在代碼里嵌入常數嗎?

天真的孩子們,事實證明,我們并不總是使用CSS樣式表。當網頁開發剛流行時,CCS是一個可有可無的選項(相信我!),那時我們就是直接把樣式信息直接放在網頁標記里,這就是在代碼里嵌入常數,只是在不久前人們才意識到這樣不正確,CSS才被人們發現。

這種事情一遍一遍的在我們身邊反復發生,你想起來會感到驚奇,請找出你認為應該常量卻被“埋沒在代碼里”的東西,請把它們定義成常量。

今天的文章是明天的承諾

關于這個話題我還會發表很多的文章,不管未來會發生什么變化,但今天我會嚴格按照我的計劃發表。
祝好運。

[本文英文原文鏈接:Do You Know What Day It Is? ]

載自: 外刊IT評論 http://www.aqee.net/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!