歌頌程序維護人員
原文地址(source):http://visualstudiomagazine.com/articles/2014/12/01/in-praise-of-the-maintenance-programmer.aspx
當然,構建新應用程序的開發(fā)人員是非常優(yōu)秀的人群。但是,編程世界里真正的英雄卻是維護和擴展現(xiàn)有應用程序的開發(fā)人員們。 |
追溯到1984年,我剛剛畢業(yè),準備受聘于開發(fā)人員的職位。我被一家跨國公司雇傭了……很快被安排到了現(xiàn)有應用程序的維護小組。在當時,這個決定貌似合情合理。現(xiàn)在回顧起來,真的很蠢。實際上,一個更好的描述應該是“瘋狂至極”。
維護比新的開發(fā)工作要更加艱難。把我這種剛畢業(yè)的、“乳臭未干”的開發(fā)人員放在維護現(xiàn)有應用程序的工作上,就像讓剛畢業(yè)的醫(yī)學院學生為總統(tǒng)做腦部手 術—有理智的人都不會這樣干的。我當時維護的現(xiàn)有應用程序在支撐著公司;另一方面,在開發(fā)的應用程序與公司運作關系不大(盡管它們對公司的未來有一定影 響)。
開發(fā)中的系統(tǒng)與生產環(huán)境上的系統(tǒng)的區(qū)別,取決于一個關鍵特征:如果開發(fā)中的系統(tǒng)崩潰了,沒人會在意的。另一方面,如果你搞砸了生產環(huán)境上的系統(tǒng),很多人都會來找你,而他們以前都懶得留意到你(我們不想問,我是怎樣知道的)。
我現(xiàn)在明白了把我放在維護位置上的、邏輯上的真實原因了:公司IT部門需要很多“手和腳”。畢竟,IT部門75%的時間花在了維護上,因此推測出,他們在維護上需要的人數(shù)是開發(fā)所需人數(shù)的三倍。但是,把幾乎沒有實際工作經驗的人放在需要工作經驗的應用程序上,是行不通的。
“手和腳”的解釋也解釋不了 為什么新開發(fā)項目中的開發(fā)人員被普遍地視作英雄。退回到那時候,忙于新項目的人們相較于程序維護人員,有著更高的地位……我敢打賭這是真的。根據(jù)“提供的 價值”,程序維護人員比開發(fā)程序員有著更多的價值。程序維護人員基于現(xiàn)有代碼庫開發(fā),結果,與任何新開發(fā)小組可能管理的功能相比,程序維護人員用較少成本 交付了更多功能。
程序維護人員的技能
當我***轉向新的開發(fā)工作后,實際上我丟掉了一些技能,而這些技能對于程序維護人員的工作是必備的。做維護工作,我差不多是個程序員,我還是歷史學家和偵探。
例如,當我做維護時,收到了被分配的問題,去追蹤一個bug,它偶爾引起我們的程序崩潰,隨之留下一些臟數(shù)據(jù)。這個bug***出現(xiàn)在4年前(比我加入公司還要早得多)。這個bug潛伏了一段時間,但是上周它再次出現(xiàn)了。
因為我是程序員,我掃了一眼代碼,但是,由于我是第三或第四個被分配到這個問題(我還缺乏經驗)的人,貌似我不太可能發(fā)現(xiàn) 前任開發(fā)人員都沒有發(fā)現(xiàn)的問題。如果它不是代碼,我推測它一定是數(shù)據(jù)……這讓我根據(jù)bug報告的時間進行了劃分。最終的曲線比較有意思:剛開始bug出現(xiàn)得相當頻繁(3-4次/天),到了如今,頻率逐漸減少,這個bug每個月只出現(xiàn)幾次。
根據(jù)這些證據(jù),我得出了結論,在bug***出現(xiàn)之前,一定發(fā)生了什么,而該bug導致數(shù)據(jù)庫埋下了臟數(shù)據(jù)。當應用程序處理到臟數(shù)據(jù)時,程序就崩潰 了,然后有人介入并修復數(shù)據(jù)。當我向組內其他人員(他們比我在公司的時間要長得多)演示這個分析時,他們立即定位到了問題:在bug***出現(xiàn)之前、已經被 運行的一個數(shù)據(jù)轉換程序。有了這個信息,我們能夠找到其余的臟數(shù)據(jù),并修復該bug。
程序維護人員一直是這樣做的:局部偵探、局部歷史學家,偶爾地扮演成開發(fā)人員。他們也是軟件考古學家(深挖打了拙劣補丁的代碼層)和精神病專家(搞清楚比你先來的開發(fā)人員的動機)。
當我最終做新開發(fā)工作時,我很開心得到“提拔”,因為在維護小組待過之后,目前這份工作是如此地輕松。或許這是你調入開發(fā)的真正理由:隨著年齡的增長,你開始失去優(yōu)勢,你沒有被下放;相反,你被調到了不能做任何有害事情的工作上——新的開發(fā)工作。
原文鏈接:http://www.labazhou.net/