你的代碼可以是優(yōu)雅的,但是還有更重要的
在開(kāi)發(fā)過(guò)程中,我的口頭禪是: Your code may be elegant, by mine works。我為此而常常受到質(zhì)疑,也有人反駁我“你不會(huì)使用***方法!”“你在逃避測(cè)試!” 為了避免一次又一次地重復(fù)解釋,我決定闡述下我的觀點(diǎn),仁者見(jiàn)仁,智者見(jiàn)智。
首先,我認(rèn)為“項(xiàng)目可能會(huì)延期,但是代碼會(huì)更好或更容易維護(hù)或更簡(jiǎn)潔”這句話是有問(wèn)題的。項(xiàng)目延期,就是未完成,不應(yīng)該用代碼質(zhì)量會(huì)更高作為借口。如果客戶要在圣誕節(jié)進(jìn)行推廣活動(dòng),但你在12月29號(hào)才完成項(xiàng)目,即使提供了史上***的產(chǎn)品,也是毫無(wú)價(jià)值的。
其次,我們來(lái)談?wù)?ldquo;***方法”這個(gè)問(wèn)題,“***”是否意味著要寫(xiě)出更易于維護(hù)的代碼需要更長(zhǎng)的時(shí)間呢?其實(shí)除了大家都知道的《101個(gè)***方 法》以外,“***”的標(biāo)準(zhǔn)是各種各樣的。無(wú)論你對(duì)其進(jìn)行怎樣的定義,“***方法”對(duì)所有程序員來(lái)說(shuō),應(yīng)該是一種自然的編程標(biāo)準(zhǔn)。舉個(gè)最簡(jiǎn)單的例子,經(jīng)驗(yàn)豐 富的程序員會(huì)自然地將變量命名為:$a、$b、 $c等,也能正確地縮進(jìn)代碼行。說(shuō)得再深入一點(diǎn),有經(jīng)驗(yàn)的開(kāi)發(fā)者知道在什么時(shí)候、如何提高效率以使得項(xiàng)目能如期完成。雖然 “***方法”的標(biāo)準(zhǔn)有很多,但這些標(biāo)準(zhǔn)不會(huì)令你因此而延長(zhǎng)項(xiàng)目時(shí)間。這引出我將談到的下一點(diǎn)——Over-engineering(過(guò)度設(shè)計(jì),指設(shè)計(jì)出來(lái) 的系統(tǒng)比恰到好處要復(fù)雜臃腫的多,過(guò)度的封裝、一堆繼承、接口和無(wú)用的方法,以及超復(fù)雜的 xml 配置文件)。
像任何經(jīng)驗(yàn)豐富的程序員一樣,我了解那種想為每個(gè)項(xiàng)目搭建***、最靈活、最耐用的系統(tǒng)的心態(tài)。但我也了解每個(gè)項(xiàng)目都有的商業(yè)限制:時(shí)間和資金。 大多數(shù)項(xiàng)目都有明確的截止日期和項(xiàng)目預(yù)算,開(kāi)發(fā)者要有意識(shí)地去控制項(xiàng)目規(guī)模以按時(shí)達(dá)到目標(biāo)。你沒(méi)有任何理由花一周時(shí)間,來(lái)為一個(gè) 20 行的 table 表上的數(shù)據(jù)庫(kù)查詢?cè)O(shè)置“恰當(dāng)?shù)?rdquo;緩存層。多了解實(shí)用案例,如果只是為了實(shí)現(xiàn)一個(gè)頁(yè)面訪客計(jì)數(shù)器的功能而構(gòu)建支持多種同時(shí)響應(yīng)請(qǐng)求的 XHR 框架,是不現(xiàn)實(shí)的。要有眼界,這是我***調(diào)的一點(diǎn),***的程序員不是精通如何構(gòu)建最棒的系統(tǒng)的人,而是了解系統(tǒng)不需要的是哪些功能的人。
另外,在軟件開(kāi)發(fā)領(lǐng)域,上市時(shí)間是商業(yè)驅(qū)動(dòng)力,在 web 應(yīng)用開(kāi)發(fā)領(lǐng)域,由于其動(dòng)態(tài)性,這點(diǎn)更為明顯。當(dāng)時(shí)間成為關(guān)鍵,“***方法”就是最簡(jiǎn)單的解決方案。
***,我們來(lái)討論一下技術(shù)債務(wù)(指為了匆忙實(shí)現(xiàn)一個(gè)功能,破壞了現(xiàn)有的程序庫(kù),在實(shí)現(xiàn)的過(guò)程中污染了代碼庫(kù)的設(shè)計(jì))。如果在開(kāi)發(fā)過(guò)程中,你在某 個(gè)地方偷工減料了,那么就會(huì)產(chǎn)生無(wú)法解決的長(zhǎng)期存在的技術(shù)債務(wù),而且在之后的開(kāi)發(fā)中,任何一個(gè)決定,都會(huì)受該債務(wù)的影響。事實(shí)上,在接手商業(yè)項(xiàng)目時(shí),明白 何時(shí)、如何對(duì)代碼進(jìn)行簡(jiǎn)化的能力是很關(guān)鍵的,這也是區(qū)分老手和菜鳥(niǎo)的標(biāo)準(zhǔn)。解決技術(shù)債務(wù)的辦法有很多,但應(yīng)盡量做到不產(chǎn)生技術(shù)債務(wù)。同樣地,過(guò)度設(shè)計(jì)也不 可避免地會(huì)產(chǎn)生技術(shù)債務(wù)。
通常人們?cè)谡劦郊夹g(shù)債務(wù)的危險(xiǎn)時(shí),并沒(méi)有包含商業(yè)影響。但其實(shí)技術(shù)債務(wù)與實(shí)際投資回報(bào)率是相對(duì)的,因?yàn)樵谠S多情況下,早日上市更具成本效益。也 有種情況是技術(shù)債務(wù)與收益同時(shí)存在,那么你可以慢慢償還債務(wù),但這會(huì)延長(zhǎng)你的項(xiàng)目時(shí)間,很可能當(dāng)你解決完技術(shù)債務(wù)時(shí),你也失去了市場(chǎng)機(jī)會(huì)。
作為軟件開(kāi)發(fā)者,我們常常認(rèn)為自己的工作就是開(kāi)發(fā)軟件,但其實(shí)這只是一種手段,我們的目的是令開(kāi)發(fā)商達(dá)到他們的商業(yè)目標(biāo),你的代碼也許很優(yōu)雅很簡(jiǎn)潔,但如果不能達(dá)到目的,就絲毫沒(méi)有意義。
原文:http://www.iteye.com/news/24566
【編輯推薦】