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