程序員修煉之道(1-7)
如何被推薦?
1 我的源碼讓貓給吃了
注重實效的程序員的特征是什么?我們覺得是他們處理問題、尋求解決方案時的態度、風格、哲學。他們能夠越出直接的問題去思考,總是設法把問題放在更大的語境中,總是設法注意更大的圖景。畢竟,沒有這樣的更大的語境,你又怎能注重實效?你又怎能做出明智的妥協和有見識的決策?
他們成功的另一關鍵是他們對他們所做的每件事情負責,關于這一點,我們將在“我的源碼讓貓給吃了”中加以討論。因為負責,注重實效的程序員不會坐視他們的項目土崩瓦解。在“軟件的熵”中,我們將告訴你怎樣使你的項目保持整潔。
大多數人發現自己很難接受變化,有時是出于好的理由,有時只是因為固有的惰性。在“石頭湯與煮青蛙”中,我們將考察一種促成變化的策略,并(出于對平衡的興趣)講述一個忽視漸變危險的兩棲動物的警世傳說。
理解你的工作的語境的好處之一是,了解你的軟件必須有多好變得更容易了。有時接近完美是惟一的選擇,但常常會涉及各種權衡。我們將在“足夠好的軟件”中探究這一問題。
當然,你需要擁有廣泛的知識和經驗基礎才能贏得這一切。學習是一個持續不斷的過程。在“你的知識資產”中,我們將討論一些策略,讓你“開足馬力”。
最后,我們沒有人生活在真空中。我們都要花大量時間與他人打交道。在“交流!”中列出了能讓我們更好地做到這一點的幾種途徑。
注重實效的編程源于注重實效的思考的哲學。本章將為這種哲學設立基礎。
1 我的源碼讓貓給吃了
在所有弱點中,最大的弱點就是害怕暴露弱點。
——J. B. Bossuet, Politics from Holy Writ, 1709
依據你的職業發展、你的項目和你每天的工作,為你自己和你的行為負責這樣一種觀念,是注重實效的哲學的一塊基石。注重實效的程序員對他或她自己的職業生涯負責,并且不害怕承認無知或錯誤。這肯定并非是編程最令人愉悅的方面,但它肯定會發生——即使是在最好的項目中。盡管有徹底的測試、良好的文檔以及足夠的自動化,事情還是會出錯。交付晚了,出現了未曾預見到的技術問題。
發生這樣的事情,我們要設法盡可能職業地處理它們。這意味著誠實和坦率。我們可以為我們的能力自豪,但對于我們的缺點——還有我們的無知和我們的錯誤——我們必須誠實。
負責
責任是你主動擔負的東西。你承諾確保某件事情正確完成,但你不一定能直接控制事情的每一個方面。除了盡你所能以外,你必須分析風險是否超出了你的控制。對于不可能做到的事情或是風險太大的事情,你有權不去為之負責。你必須基于你自己的道德準則和判斷來做出決定。
如果你確實同意要為某個結果負責,你就應切實負起責任。當你犯錯誤(就如同我們所有人都會犯錯誤一樣)、或是判斷失誤時,誠實地承認它,并設法給出各種選擇。不要責備別人或別的東西,或是拼湊借口。不要把所有問題都歸咎于供應商、編程語言、管理部門、或是你的同事。也許他(它)們全體或是某幾方在其中扮演了某種角色,但你可以選擇提供解決方案,而非尋找借口。
如果存在供應商不能按時供貨的風險,你應該預先制定一份應急計劃。如果磁盤垮了——帶走了你的所有源碼——而你沒有做備份,那是你的錯。告訴你的老板“我的源碼讓貓給吃了”也無法改變這一點。
提示3
Provide Options, Don’t Make Lame Excuses
提供各種選擇,不要找蹩腳的借口
在你走向任何人、告訴他們為何某事做不到、為何耽擱、為何出問題之前,先停下來,聽一聽你心里的聲音。與你的顯示器上的橡皮鴨交談,或是與貓交談。你的辯解聽起來合理,還是愚蠢?在你老板聽來又是怎樣?
在你的頭腦里把談話預演一遍。其他人可能會說什么?他們是否會問:“你試了這個嗎……”,或是“你沒有考慮那個嗎?”你將怎樣回答?在你去告訴他們壞消息之前,是否還有其他你可以再試一試的辦法?有時,你其實知道他們會說什么,所以還是不要給他們添麻煩吧。
要提供各種選擇,而不是找借口。不要說事情做不到;要說明能夠做什么來挽回局面。必須把代碼扔掉?給他們講授重構的價值(參見重構,184頁)。你要花時間建立原型(prototyping),以確定最好的繼續前進的方式(參見原型與便箋,53頁)?你要引入更好的測試(參見易于測試的代碼,189頁;以及無情的測試,237頁)或自動化(參見無處不在的自動化,230頁),以防止問題再度發生?又或許你需要額外的資源。不要害怕提出要求,也不要害怕承認你需要幫助。
在你大聲說出它們之前,先設法把蹩腳的借口清除出去。如果你必須說,就先對你的貓說。反正,如果小蒂德爾絲(Tiddles,BBC在1969~1974年播出的喜劇節目“Monty Python's Flying Circus”中的著名小母貓——譯注)要承受指責……
相關內容:
l 原型與便箋,53頁
l 重構,184頁
l 易于測試的代碼,189頁
l 無處不在的自動化,230頁
l 無情的測試,237頁
挑戰
l 如果有人——比如銀行柜臺職員、汽車修理工或是店員——對你說蹩腳的借口,你會怎樣反應?結果你會怎樣想他們和他們的公司?
2 軟件的熵
盡管軟件開發幾乎不受任何物理定律的約束,熵(entropy)對我們的影響卻很大。熵是一個來自物理學的概念,指的是某個系統中的“無序”的總量。遺憾的是,熱力學定律保證了宇宙中的熵傾向于最大化。當軟件中的無序增長時,程序員們稱之為“軟件腐爛”(
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/Mac_cm/archive/2009/10/28/4738102.aspx