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