[轉(zhuǎn)]不要輕言升級(jí)
大致想了一下,從進(jìn)入此行業(yè)開始到今天,聽(tīng)得最多的也許就是“升級(jí)”這兩個(gè)字了。也參與或經(jīng)歷了一些稀里糊涂的升級(jí)、明明白白的升級(jí)、有頭無(wú)尾的升級(jí)...... 在不斷的升級(jí)磨練中知道了一些事情,明白了一些道理。
小小的總結(jié)了一下:
1、若非必要,不要輕言升級(jí)
很多時(shí)候,我們是用一種復(fù)雜的心態(tài)去看待前任遺留的代碼的,有人自私的一面。我剛參加工作的時(shí)候,總以為別人的代碼是垃圾,自己寫出來(lái)的才算優(yōu)美,通常是拿到代碼就重構(gòu),然后一通大改,然后用勤奮來(lái)應(yīng)付流言,為此吃了不少的苦頭。當(dāng)然得承認(rèn),經(jīng)歷了這些之后,對(duì)別人的、自己的代碼都會(huì)有很深的認(rèn)識(shí),尤其是架構(gòu)方面的。但極具諷刺意味的是,若干月或若干年之后,我重新對(duì)比閱讀當(dāng)時(shí)的代碼,會(huì)發(fā)現(xiàn)自己的還不如別人的,尤其是涉及到業(yè)務(wù)方面的代碼。其實(shí)原因很簡(jiǎn)單:其一是前任的代碼基本上都經(jīng)過(guò)了運(yùn)行檢驗(yàn)的,出錯(cuò)也只是BUG而已,不會(huì)涉及到業(yè)務(wù)邏輯方面的問(wèn)題;其二是大部分重構(gòu)的時(shí)間相對(duì)會(huì)比較緊,由不得你去列計(jì)劃,忙中出錯(cuò)而導(dǎo)致業(yè)務(wù)邏輯重構(gòu)不好的話,后果是嚴(yán)重的。而這對(duì)每個(gè)程序員來(lái)說(shuō)都是一個(gè)必須經(jīng)歷的過(guò)程,時(shí)間長(zhǎng)短因人而異。我也在極力盡一個(gè)厚道人的本份,對(duì)新來(lái)的人講述自己的痛苦經(jīng)歷,灌輸一個(gè)道理:不管前任的代碼如何垃圾--事實(shí)上的垃圾也好,假想中的垃圾也罷,若非必要,不要輕言升級(jí)。通俗點(diǎn)講,只要湊合能用,就不要去招惹它。
2、升級(jí)?你準(zhǔn)備好了嗎?
各種編譯器是為新軟件構(gòu)架準(zhǔn)備的,而不是為升級(jí)準(zhǔn)備的。這是我的觀點(diǎn)。盡管這個(gè)觀點(diǎn)遭到很多人的反駁,我依然堅(jiān)信。
為什么?很多人這么問(wèn)過(guò)我,而且列出了一大堆的理由,最有力的就是:編譯器生產(chǎn)商就號(hào)稱向下兼容的哦。坦率的講,我也說(shuō)不出所以然。的確他們是這樣說(shuō)的,而且看起來(lái)確實(shí)也是這么做的。我們給客戶做項(xiàng)目,也動(dòng)不動(dòng)就說(shuō)免費(fèi)升級(jí),而且作為必不可少的一條寫到了方案書、標(biāo)書中去了,但實(shí)際上~~,好像我還沒(méi)有為此而給客戶升級(jí)過(guò):-)
來(lái)回顧一下硬件歷史,從386到現(xiàn)在的超線程,每次我們“升級(jí)”電腦,有幾個(gè)能夠真正做到升級(jí)?到頭來(lái)還不是一換了事?
軟件系統(tǒng)也差不多,至少我經(jīng)歷過(guò)的是差不多的。也許有朋友成功過(guò)--徹底的成功過(guò)。可惜我很不幸,從來(lái)就沒(méi)有這個(gè)感覺(jué)~
當(dāng)我把代碼從EVC3.0向4.0向.NET 遷移的時(shí)候,是多么的躊躇滿志,多么的意氣風(fēng)發(fā)。全然不把前任的話當(dāng)一回事:“你準(zhǔn)備好了嗎?” 終于,在經(jīng)歷了一次又一次的類型、地址錯(cuò)誤之后,我發(fā)現(xiàn),前任比我聰明;我發(fā)現(xiàn),重寫比修改來(lái)得更簡(jiǎn)單;我又發(fā)現(xiàn),老板根本就沒(méi)有給我重寫的時(shí)間;我還發(fā)現(xiàn),離我被趕出公司的時(shí)間不遠(yuǎn)了;于是我開始恨微軟、恨比爾蓋茨、恨老板、恨客戶、恨我自己當(dāng)初為什么選擇這一行......出來(lái)混的,哪能不挨刀,鍵盤鼠標(biāo)一扔,睡覺(jué)去。第二天開始有人出來(lái)說(shuō),某某某整個(gè)一混子,做不出來(lái)東東,拉到,難道你說(shuō)我行我就行,你說(shuō)我不行我就不行啊,我自己清楚得很。工資是不指望漲了,留也好,走也罷,項(xiàng)目組有的是人,接手的人兒啊,“你準(zhǔn)備好了嗎?”
后來(lái)接觸了其他公司的編譯器,同樣如此。
現(xiàn)在別人問(wèn)我:VC6的工程升級(jí)到2003、2005怎么升?我會(huì)說(shuō):別升級(jí),把VC6的改成動(dòng)態(tài)庫(kù),或者啥也不改,就是個(gè)EXE,直接調(diào)。需要新的功能模塊,再用新的編譯器去寫。去它的風(fēng)格不統(tǒng)一、去它的邏輯不嚴(yán)謹(jǐn),省時(shí)間省力氣的活不干,誰(shuí)愛(ài)升級(jí)誰(shuí)升去,我寧愿出去曬太陽(yáng)。
3、寫代碼為升級(jí)作準(zhǔn)備
難道不升級(jí)、難道就躲避?當(dāng)然不行。客戶新需求、市場(chǎng)新動(dòng)向,逼著我們必須正視這個(gè)問(wèn)題。動(dòng)態(tài)庫(kù)是一個(gè)好辦法,但有時(shí)候不夠用。所以才有程序架構(gòu)考慮、才有代碼重用考慮。設(shè)計(jì)的時(shí)候,要盡量考慮擴(kuò)充、升級(jí)的問(wèn)題,有的人喜歡用組件,有的人喜歡用接口。不管怎樣,代碼重用是離程序員最近的,也是最現(xiàn)實(shí)的,什么封裝、繼承、耦合......這些專業(yè)名詞俺看不懂,我只是極力建議寫導(dǎo)出函數(shù)、公用函數(shù)、基礎(chǔ)類的,都應(yīng)該遵循一個(gè)潛規(guī)則:系統(tǒng)參數(shù),盡量采用局部獨(dú)立的原則,把你的函數(shù)整塊拷貝出去,換個(gè)類名;或者把你的類整個(gè)拷貝出去,改動(dòng)的地方不超過(guò)5處就能用的,你YES,否則就NO。曾經(jīng)見(jiàn)過(guò)一個(gè)牛人的框架,換了三個(gè)不同的系統(tǒng)改幾個(gè)定義都能套上去跑得很歡,真正的流水式產(chǎn)品,實(shí)在是高,受益匪淺啊。
其實(shí)我們平時(shí)稍微注意一下也可以做到的,只是沒(méi)有養(yǎng)成這樣的習(xí)慣而已。至于整體構(gòu)架則是仁者見(jiàn)仁、智者見(jiàn)智了,這個(gè)需要不斷的學(xué)習(xí)和經(jīng)驗(yàn)積累,而且好壞也沒(méi)有統(tǒng)一的評(píng)判。就拿看得見(jiàn)的來(lái)說(shuō)吧,我一直不喜歡代碼寫得N長(zhǎng)的程序員,這是心病,一句就能搞定的,干嗎寫三句?說(shuō)到這里,順便BS一下不寫注釋的,你以為人家都有時(shí)間去琢磨你的代碼和意圖啊。
4、升級(jí)項(xiàng)目就是新項(xiàng)目
別不同意。建議你按新項(xiàng)目來(lái),風(fēng)險(xiǎn)、資源、進(jìn)度、成本、文檔都理一理,做好規(guī)劃,該調(diào)配的調(diào)配,該安排的安排,該溝通的溝通,別到時(shí)候手忙腳亂的,又不是你一個(gè)人的項(xiàng)目,犯不著你一個(gè)人著急,要急也要大家一起急。做事情就不要這樣了,自己累點(diǎn),把事情都考慮好,列出可能的風(fēng)險(xiǎn)和規(guī)避對(duì)策、把你手下的人員編號(hào)再對(duì)一遍,哪個(gè)最近在泡MM、那個(gè)最近比較躁、那個(gè)在鬧工資、哪個(gè)準(zhǔn)備開溜...... 這些都直接關(guān)系到項(xiàng)目是否成功,還有老板的爸爸最近怎么樣,二奶秘書是不是精神旺盛......這些間接關(guān)系到項(xiàng)目是否成功,然后的然后,就再問(wèn)一下自己:必須升級(jí)嗎?準(zhǔn)備好了嗎?如果你發(fā)現(xiàn)原來(lái)的代碼50%都移植不成,奉勸你另外設(shè)計(jì)開發(fā)一個(gè)替代項(xiàng)目,別跟前任過(guò)不去,把他的東西改得亂七八糟的,好好保存就行了。重新開發(fā)一個(gè),新項(xiàng)目哦,完成了,找老板,看看,前面的老系統(tǒng)也可以賣,新的你還可以賣得更貴一點(diǎn),產(chǎn)品線也豐富了,用戶群也多了,這樣多好,給我加薪吧。
posted on 2006-07-15 05:25
Jerry Cat 閱讀(336)
評(píng)論(0) 編輯 收藏 引用