編程很像吃飯。
晚上我餓了。我不在家。我不能到廚房里找點東西吃。我四周看了看,看到只有一家街對面的麥當勞。
于是,我就進入了一個任何時候我離開家、離開我那舒適的小窩后遇到的兩難境地:是吃那些垃圾食品,先填飽肚子呢?還是先餓著肚子,等回到家后去吃更健康的食物?
當我在思考這種困境時,我不禁或多或少會把這個問題跟代碼質(zhì)量作一定的聯(lián)系。當然更多的還是先考慮吃的問題。
我的話只是表達我自己的觀點,我并不認為麥當勞是一個能夠提供我健康食品的餐館。作為一個追求綠色食物的人,甚至只是作為一個注意飲食的人,麥當勞 的食品遠在我的健康食品的標準之下。但是,我相信,跟你們很多人一樣,我們已經(jīng)養(yǎng)成了吃麥當勞里的食物時不再思考這些食物的健康價值了。我餓了,麥當勞里 有食物。
既然我已經(jīng)認識到了麥當勞食物對我身體的短期和長期的影響,我就會全力避免去吃它。對所有預(yù)處理過的食物都要這樣。這對我來說是漫漫長路。決定去改變自己的飲食習慣并不是一蹴而就的事,
健康飲食是一種持續(xù)動作。
很快你就會發(fā)現(xiàn)這一切都跟編程有聯(lián)系。
健康飲食是一種持續(xù)動作?
麥當勞的食品不是一種健康食品。然而吃巨無霸漢堡加水果沙拉會比吃巨無霸漢堡加油炸土豆條要稍微健康一些。吃星巴克的金槍魚會比吃大漢堡要稍微健康些。在本地咖啡連鎖店里喝一碗湯要比吃星巴克的沙丁魚要稍微健康些。在家里吃新鮮蔬菜做的食物要比其它任何地方的食物都健康。
按這樣的方式看食物,我們會得出兩點信息:
- 所有的事情都是相對的。你永遠都可以做到更好,也一直可以做的更差。吃一個巨無霸漢堡并不意味著你會死,而為了能在家里吃飯而忍住一天不進食也未必更健康。
- 每一頓飯都是一個新的開始。人很容易落入這樣一種陷進:“既然我昨天已經(jīng)吃了一個大漢堡,不妨今天就再吃一個了”。這種思考方式是毫無邏輯的,也是有害的。每頓飯要吃什么都是一個新的決定。即使你今天早餐吃了一個大漢堡,午餐時吃家做的食物也是你的健康飲食之旅上前進的一步。
把程序代碼當作食物
很像食物,代碼質(zhì)量的保證也是個持續(xù)的過程。
從簡單層面上我們可以認為,一個沒有測試和文檔就發(fā)布的程序包要比有測試和文檔的相同的程序包質(zhì)量要差。
可是,在這些一眼就能看清楚的問題之外,還有很多說不清楚的東西。沒有人都對什么是”健康”的代碼有自己的標準。有些人非常清楚自己的編程問題,并在不斷的改進自己。有些人數(shù)年來一直寫著相同爛代碼卻從來沒有想過這些代碼是否“健康”。
做出健康的選擇
像對待食物那樣對待程序代碼。
就像你需要吃飯一樣,你最終需要發(fā)布你的程序。那么,如何處理這短期和長期里的影響呢?
如果你按照吃麥當勞食物的態(tài)度,發(fā)布了爛程序出去,那么,短期內(nèi)你的需求是滿足了。但從長期看,你將會一直受到它的影響。你的代碼將會很難維護,需要你投入更多的精力。它對你長期的生活和健康沒有什么好處。
如果你遵循吃家做食物態(tài)度,短時間里你的需求可能不會得到滿足。這短期的影響是你會餓會兒肚子,但這樣做的一個好的理由是:它對你長期的影響是正面 的。你的程序代碼會更容易維護,bug會更容易解決,而且需求變更后修改起來更容易。你的程序代碼會有一個更長更健康的生命期。
本文的作者 Jesse Storimer
抉擇
寫健康的代碼跟你保持健康飲食一樣,需要:認識和承諾。從吃垃圾食品到健康食品需要你認識到有些事情需要改進。對這些認識采取行動需要你對決定作出承諾。
改進你的編程習慣需要同樣的事情:認識到有些地方需要改進,并承諾做出行動。
通常來說,你的抉擇需要符合實際。你必須要吃飯,你的軟件到一定時候必然要發(fā)布。找不到健康的食物,麥當勞必須是你的選擇。我不知道你的軟件項目會有什么樣的限制因素,有時你不得不發(fā)布爛程序。但你要記住, 健康的編程是一個持續(xù)過程。用沙拉換掉你的巨無霸漢堡邊的炸薯條。
世上沒有‘最健康’的食品。你可以花上一整天來烹飪你認為的最健康的食品,但如果它沒有進入你的胃里,就談不上有什么用處。 代碼質(zhì)量很重要,但如果你不發(fā)布它,一切都沒有意義。
最好的獲得更健康的代碼的途徑是持續(xù)的改進。讓你的程序每天都有改進,而不是期望一朝一夕就丟掉你所有的不好的編程習慣、期望以一個全新的更健康的來代替。