開發人員最難于打理的九項工作
譯文軟件開發人員經常需要啃下任務當中的硬骨頭——而其中大部分都跟編寫代碼毫無關系
大多數非程序員朋友都會認為軟件開發工作難度很高——雖然實際情況確實如此,但與普通群眾的印象仍然存在出入。最近Quora網站發起了一份調查,統計了開發人員在工作當中遇到的最令人頭痛的艱巨任務。通過對此次調查的反饋及評分結果進行匯總,再加上Ubuntu論壇曾經整理出的相關意見,我們統計出這份程序員眼中最難于打理的九項工作清單。正如各位所見,事實證明編寫代碼并不是編程工作中最大的難關。如果大家本身正是軟件開發專業人員,那么這份清單上的許多任務肯定會勾起您不少“美好”回憶。
9. 設計解決方案
任務:根據一系列要求設計出技術解決方案并為其選擇合適架構。這項工作當中可能包含設計數據及代碼結構、功能算法以及能夠囊括業務邏輯及理想用例的應用程序流。
挑戰:確保我們所設計的解決方案能夠滿足客戶需要,即起到預期作用又能在規定的時間框架內完成。
群眾觀點:“考慮如何從A開始、到Z結束,這是工作中最困難的部分。”
“如果項目設計太臃腫,最終就會被自身的龐大規模所壓垮;如果項目設計太單薄,又會缺乏實用性。”
“在真正著手工作之前,很難準確預計事情的實際走向……”
8. 編寫測試
任務:編寫單元測試,也就是把對小型代碼單元進行宏觀測試以確保它能正常工作。這些測試能幫助我們在開發流程早期發現并剔除bug,同時在代碼被修改或者更新之后進行回歸測試。某些開發方法鼓勵我們在著手開放代碼之前制定測試規劃,但其它一些則傾向于在擁有代碼成果后再考慮測試事宜。
挑戰:選擇測試機制并著手編寫相當繁瑣、因而令人十分頭痛,開發人員會明顯感受到這是一種額外任務、與應用開發本身嚴重脫節。
群眾觀點:“編寫測試(這倒并不難,但我很討厭做這類工作)。”
#p#
7. 撰寫文檔
任務:創建一份文檔來解釋自己的代碼有何作用或者應用程序如何工作。這項工作當中可能包含創建多個獨立文檔以及代碼注釋。任務的目標受眾范圍非常廣泛,從終端用戶到其他開發人員都可能涉入。
挑戰:這很可能是一項費時費力的任務,甚至有些浪費青春——畢竟愿意認真閱讀說明文檔的用戶實在沒多少。程序員通常更樂于通過編寫代碼來直接生成說明文檔。
群眾觀點:“撰寫這種根本沒人會看或者會用的垃圾文檔,只是因為這是‘流程’的一部分。”
“不能處理代碼,反而需要撰寫一份能清晰解釋當前工作的文檔。”
“撰寫文檔時,需要同時滿足良好、解釋清晰以及簡潔三大要求!”
6.被迫實現那些自己無法認同的功能
任務:有時候我們認為某些特性或者功能根本不應包含在應用當中,但客戶或者某些職級更高的家伙卻堅持要這么干。
挑戰:拋開我們的個人感受或者意見,花費時間和精力來實現(并支持)那些尚存疑問的功能。
群眾觀點:“……我們只有兩種選擇——要么忍氣吞聲、要么趁早滾蛋。”
5. 處理別人的代碼
任務:不得不為由其他開發人員編寫的應用程序或者代碼片段進行維護、調試或者強化。
挑戰:嘗試理解某些遺留代碼片段的工作方式并揣測原始開發者的真實意圖本身已經很不容易,如果無法跟那家伙取得聯系或者其人的編程水平、注釋說明或者歷史記錄特別糟糕,這項工作就會變得更難。
群眾觀點:“嘗試處理那些語焉不詳的代碼。”
“有些人根本沒資格編寫代碼,可有時候我卻得處理他們拋出來的東西……”
“嘗試破譯成千上萬行未加注釋的代碼。”
4. 和其他人打交道
任務:收集來自客戶的需求信息、向管理層提交狀態報告、與測試人員們共事以及向其他工程師交代項目內容等。
挑戰:向非技術人員解釋技術內容,工作主動權落在他人手中,與品質保證人員或者其他開發人員發生分歧。
群眾觀點: “與某些人比起來,我更喜歡跟處理器交流——這樣更方便。”
“來自非技術人員的阻礙……還有那些來自其他技術人員的代碼編寫指導……”
“……對于技術行業一無所知的家伙實在很難溝通。”
“其他團隊的成員進度滯后,而我們只能坐著干等……”
#p#
3. 估算任務的預計完成時間
任務:在項目起步階段估算出完成全部工作所需要的時間。
挑戰:在尚未著手之前猜測某件可能發生的事情將耗時多久,根據含糊的要求做出估算并為這些說不清楚的問題分配處理時間。
群眾觀點:“我發現在真正進入實踐階段之前,要對編程工作中可能出現的意外狀況做出預判真的很難……”
“我發現估算是最難的工作,因為大部分人都把估算當成承諾。”
“……任務的實際執行時間根本不可能被準確預測……”
2. 解釋我是做什么的(或者不做什么)
任務:向非程序員(包括家庭成員、朋友、非技術同事等)解釋自己的崗位職責是做什么的以及不能做什么。
挑戰:某些全身心愛著我們的人確實弄不明白我們到底靠什么謀生。再有,有些家伙不斷要求我們幫著解決任何與計算機有關的問題。
群眾觀點: “嘗試向任何人做出解釋——我不知道怎樣修復他們的計算機。”
“向我的家人解釋我是干什么的。”
“我已經無數次向外行們解釋,程序員并不代表沒日沒夜地編程!!”
“我需要向人們解釋,我不是電子城里那些每天給人裝盜版操作系統和其它盜版軟件的家伙。”
1. 命名難題
任務:為變量、程序、函數、類、對象以及數據庫組件等起名字。
挑戰:即使是在一個小型程序或者應用當中,我們也必須要想出很多個相關名稱。選擇名稱的目的是為了表達某種事物的內容或者作用,這項工作貫穿于應用程序始終且必須足夠簡潔。
群眾觀點:“想出有意義的變量名稱。”
“為數據和函數起一大堆有意義的名稱。”
“在計算機科學領域只有兩個大難題:緩存失效與事物命名。”
“……如果你在去除重復和改正糟糕名稱方面表現突出,我可以負責任地講——你已經是一位面向對象設計的高手了。”