歡迎光臨
每天分享高質量文章

維護程式的那些樂趣

(點選上方藍字,快速關註我們)


來源:伯樂線上 – cchris

好文投稿, 請點選 → 這裡瞭解詳情


很久以前,在我剛開始編寫程式,新手程式員透過編寫維護程式,以提高技能和累積經驗。只有老手們才寫新程式碼。新手們從事除錯和修正仍被公司所用的老程式碼。我一直參與新專案的開發,但是現在的我會專門地編寫維護程式。我參與過許多曾失敗的從零開始的“綠色”專案,我更傾向於軟體產品的除錯、修正和增強工作。我喜歡和真正的使用者一起工作,而不是假設使用者樣例。我認為,建立自信心,使使用者滿意我的工作,好過於去與人爭論軟體特性、規則說明書、預算和進度表等問題。針對已有程式碼,定義良好的任務優先串列,好過於去想一些天馬行空的軟體規則說明書。我喜歡按小時收費,而不是按照專案來收費,這樣使用者不會迴避我的效率問題。


我現在主要從事Web應用領域,專門針對帶背後資料庫的網站。我很少去著手全新的專案開發,但別人常常讓我去“搶救”被整壞的專案。客戶和開發人員的決裂,常常使得產品程式碼被棄絕了。開發人員對新產品投入了精力,對程式的bug和老客戶的擴充套件要求置之不理。我是按小時付費的,我拿到工作,因為我沒有告訴客戶們他們需要拋棄所有的東西,從頭開始 — 而這點正是其他的顧問所建議的。


通常,軟體使用的時間比我們當初寫程式碼時所想的時間要長。直到最近,我為一個律師事務所的賬單系統做維護工作,該系統採用OMNIS 3,寫於1986年,不能在新於SE/30的Mac上執行。依賴這些遺留系統客戶們會支付很多開銷,保持這些系統的執行,因為他們不能冒著風險採用新軟體產品,也無法支付新產品開發、資料遷移和人員培訓等任務帶來的費用。相對少許的維護費用對於客戶們是可以接受的,但很多程式員們卻對維護工作嗤之以鼻,不管客戶是否適用,他們更喜歡開發全新的專案。


以下列舉了維護程式設計的一些好處:


學會除錯


比起除錯自己程式碼,除錯他人程式碼要更認真努力。必須一步一步追溯問題;不能假定自己知道哪裡錯了,跳著去修改錯誤。閱讀和除錯他人程式碼,會自己思考,程式碼如何可行,如果不可行,而不是你知道程式碼應該可行。


學會編更好的程


除錯和擴充套件好程式碼比壞程式碼更容易,這樣你會學會區分好程式碼和壞程式碼。學會解釋程式碼,推理原作者的意圖。有經驗的程式員可以意識到好程式碼為之好,壞程式碼為之壞的原因。透過除錯很多程式碼後,方能這樣的分辨經驗。自己便會得出竅門,找到不熟悉程式碼的根基,搜查到壞程式碼的味道。


學會最佳化


原程式員作者已經做了早期最佳化,因此你必須找到並處理真正影響效率和效能的瓶頸。全新開發專案的團隊常常花費很多時間和精力,擔心不切實際的效能問題。已經在執行的系統具有真實存在的效能問題。找到這些問題,並解決他們,這個過程是十分有趣的,也是一項偉大的技能。客戶常常註意到,而且也感激,程式員對應用效率的提高。


學會新技能和新工具


你可能不會處理現行使用的語言,但你將會學習,原本並不會去學習的,語言、函式庫、工具、以及產品環境等。也會更多參與到常用主流商業工具的工作中。全新考分專案常常因為選擇語言和使用工具的決定而停滯不前。你不必要做這些決定,銷售給客戶,或因其受責備。你需要花時間學習晦澀的專業工具或語言,但這些也是值得的。大公司自有的IT部分會做自身的維護工作,但常常也會租用具有專門知識和技能的承包商。


學習估值資料和資料庫


應用系統仍採用,古老的資料處理教科書中,輸入->處理過程->輸出模型。在讀懂程式碼之前,你必須理解資料,知道資料透過系統的流程。幾乎所有的應用都採用某種資料庫,常常是關係資料庫管理系統(如MySQL, PostgreSQL, Oracle, SQL Server等)。有經驗的程式員知道關係的概念,並知道操縱產品資料庫。不明白資料庫的殘廢程式員常常寫出很多壞程式碼,去做MBMS本來該做的事情。我經重構很多頁緩慢且很多錯誤的程式碼,只需要用SQL來替換它們。


客戶會肯定你所做的


你修複的每個bug,以及對人們常用應用的提高,真正的使用者會註意到這些變化,並給與即時的反饋。當對全新的軟體開發時,每個細則的改變,延遲,額外的花費都會引起和客戶的衝突。當你交付所存在的實際問題,每件事會讓你的客戶高興。


具有更好的說明書細則和清晰的限制


比起從頭開發,程式碼修複和增強是更細緻,且定義更好的任務。現有的程式碼和環境限制了你的選擇。你必須記住解決實際問題。你和客戶一直認同所處理的任務,導致誤解的機會比較少。面對新客戶,我常常要求他們列出他們軟體的前五大痛處,然後我去修複這些問題,並應許他們如果我沒有解決,就不需要付錢。


更容易擺脫壞客戶


我們也需要面對我們不想合作的客戶。你和這樣的客戶有大開發專案的合同,很難從這個關係中出來,因為時間和金錢的投入,客戶對新系統有很大的期待。而維護專案更短期,任務更細緻,你可以有很多機會終止這樣的關係,不需要破壞合同,或者損失金錢。


天生快捷


修複bug和增強程式碼讓你能快捷的工作,不需要銷售給客戶你的方法學。他們只想很快修複問題,你能給出增量開發的版本,與新使用者協作得出即時反饋,處理具體細節任務。


學會業務


產品軟體反映了一些真實的業務需求。學習什麼時候軟體可以服務於業業,什麼時候不能。和熟悉軟體的真正的股東一起工作,這迫使你學習業務。比起編寫新的程式語言,知道業務應用將有助於提高你的職業生涯。


學習人際技巧


全新專案開發的程式員們主要是彼此協作。新系統不存在真正的使用者,你得到是使用者案例和股東管理。維護型程式員和真正的使用者大交道。這些人直接與軟體的應用、體驗、bug打交道,知道軟體那些方面不滿足實際使用需要。學會傾聽和交談,這些人沒有跟你一樣的假設和程式設計文化,但可以擴充套件你的視角,使你走出程式員的外殼。


會得到隨後的業務和推薦


你認為誰會得到更多業務和推薦:偉大的汽車銷售人員,偉大的技工?比起開發系統,人們更需要修複和增強自己的軟體。對你滿意的客戶會推薦你,因為他們的朋友或同事手裡也有“破”軟體系統。


你的工作不會被外包


但可能最終你會維護你客戶的外包實驗的結果。

看完本文有收穫?請轉發分享給更多人

關註「程式員的那些事」,提升程式設計技能

贊(0)

分享創造快樂