注意:本文轉載過程中,為了避免大家對項目進行猜想,使用了XX項目代替了具體項目名稱,用A模組、B模組代替了實際的模組名稱,其餘沒有任何修訂,特此向作者以及讀者說明。
這個產品已經賣了4年了。可最初的開發人員,連專案經理都跑了。他來了,任務就是維護這套軟體,而且就他這一個人維護這套代碼,有BUG改BUG,有需求就改需求。
雖說這套軟體賣了4年,但真不知道是怎麼堅持了4年。他接手的時候仍然是BUG百出。代碼沒有文檔,沒有注釋,連表結構說明都沒有。代碼莫名其妙,經常橫插一句代碼,顯然是客戶報告了某個錯誤,為了臨時解決這個錯誤而做的針對性處理,但到底是為了修補什麼錯誤,代碼也沒有說明。所以他也不敢亂動,但還要修改需求,只能硬著頭皮來。他也不知道自己修改的代碼是否還會引起其他的問題,只能憑空企求千萬不要出問題。老闆還在到處吹產品很成熟,而他每天都在心驚膽戰,害怕這套代碼不知道哪天突然崩潰,出了錯誤自己都收拾不了,那隻能自己被K掉。他能想像的出老闆發怒的情景:這麼穩定的產品你都搞不定。
這段內容是我這個周末在看《走出軟體作坊》中看到的,由於身在XX項目,總感覺有很多問題,但由於自身也就這點寫代碼的本事,總不知是為個啥,所以就找了很多牛人寫東東來看看(牛人怎麼來的,就是經常和牛呆在一起,就成牛人,也希望自己也能和網上的這些牛人接近點),覺得這個寫的不錯,和我們這段時間工作很近,所以Copy出來讓大家Look Look。
我們XX項目最近大部分精力是放在Bug修改和示範需求變更上,但由於項目內任務和人員的變化,使得我們更像在做一個系統的維護,因為很多Bug或需求之前都不是自己親手處理的。於是就有了N多問題。我自己也是在做這塊,深有感觸。像A,B模組。我現在就是有BUG改BUG,有需求就改需求。
其實我們剛開始機會開發這個新XX項目是很幸運的,因為沒有曆史包袱,白紙畫畫(現在還不明白咋就畫成這個樣子啦,哎,我在此面壁思過3分鐘)。而實際工作中更多是拿有型的代碼到處修改客戶化做新項目或者舊系統的維護。
曆史已經存在啦,我們現在是要破罐子破摔,還是漸漸從惡性迴圈走向良性迴圈呢,其實優秀的代碼不是一次性寫出來的,而是不斷重構出來的。
——現在我們寫的代碼有注釋嗎?
——沒有。自己修改的自己都記得,即使忘了,看看自己寫的代碼也能回憶起來。所以也沒有寫。
——反正也是一個爛東西,其他人怎麼辦,就管不了了,就應該讓這套爛代碼儘快死亡,省得禍害別人。
只有大家不是這種心態,那麼我們不斷理解業務需求,不斷整理設計思路,不斷改進代碼,那麼XX項目也可以做的很優秀的。
以下是牛人總結出來的幾個建議:
NO1、重點把控輸入資料的校正,把所有校正的代碼寫成函數,不要大流水。
其實大家覺得Js,Java資料的校正並不是重點,因為我們當前臭蟲(Bug)需要消滅,但這個確實一個石塊,希望這個石塊不處理好,於輸入的漏洞或匯入的資料出錯,那麼以後以後引發的問題會讓我們更頭疼(如報表資料平不了,客戶就要找大麻煩)。所以我們一定要截源頭,在最後爆發的地方堵漏洞是堵不住的。
NO2、以後再加功能,盡量不要做成聯動觸發的。
也就是說:儲存,最好是單表儲存。即使是主從結構的單據,如果客戶不強烈反對,也做成先儲存主表後再讓錄入明細表。而且錄入明細表要單獨的視窗,這樣功能和代碼都簡化了。如查詢一張單據,也不要上邊是主摘要,下面就是明細聯動。這樣影響效能。更因為速度可能慢,使用者會連續點擊多次,觸發事件就會亂,莫名其妙的錯誤就都產生了。最好是雙擊主摘要,彈出獨立的視窗顯示明細。
NO3、寫代碼,把特殊處理業務和正常處理業務的功能代碼分離。
就好像你走路,老有人給你下絆子,你就感覺不爽。我就看到過這樣的方法
Public Object getObjectById(Long id){
//select * from table for update
}
媽的,你不進入Java,Ibatis語句,你壓根就不知道為個啥。
NO4、還有很多代碼覺得程很爛,是由於以前程式員的代碼排版可能和你不一樣。於是總是抱怨變數都是M、N、S、Button1之類,所以我們以後希望自己不被抱怨,就命名的清晰點(其實我還記得我剛進入公司的時候,又一次我寫的方法名特長,可能有一二十個字母吧,然後在代碼Review時,還被笑過,但我現在都還是堅持,因為我知道,getEmployeeByEmployeeNameAndOrgId,比一個Get方法更容易理解點。我一次命名長點,多敲了幾次鍵盤,但後面的維護人員會感謝我的)。
命名,排版重要,不,這不是我要說的重點,^_^,其實我們閱讀理解這些代碼時,這些並不會使你理解有歧義或讀不懂,只不過是可讀性差點,浪費點時間,自己不爽點而已。就因為這點不爽,所以我們總是覺得無從下手,總是能拖就拖,其實想想自己寫的代碼的樣子呢(自己都做不好,評啥的要求別人呢),消除這些不爽,不和舊有代碼生氣,我們的工作還是能做的更好的。(現在我還沒有不生氣的心胸,每次都阿Q般,在心裡K他九次,再踩他九次,完了就心平氣和地改Bug)
最後用前中國國家隊教練米盧說過一句名言:“態度決定一切。”(想念他老人家啊,雖然在日韓,我們輸的很慘,讓我們小組出線的希望,讓我們得一分的希望,讓我們進一個球的希望都破滅啦,但至少有郝海東實現了射中一次門框的希望,至少還和牛人交過手啦,而現在卻在家門口被伊拉克人騎著,也許這也是牛人啦把)
If(You believe you can do well){
AnyThing is possible
}Else{
NoThing is impossible
}