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