90%做維護(hù),10%做開發(fā),這正常嗎?
譯注:這篇譯文來自Stack Exchange上的一個(gè)提問,在許多開發(fā)者中都產(chǎn)生了共鳴。很多時(shí)候,作為程序員的我們,在日常工作中并沒有很多時(shí)間用在編寫代碼上,而是不斷的在維護(hù)某個(gè)年代久遠(yuǎn)的系統(tǒng),不斷的bug fix,維護(hù)的項(xiàng)目會越來越多。如果我們希望能改進(jìn)已有的代碼,對系統(tǒng)做下重構(gòu),有時(shí)候并不能得到公司的支持。提問者聲稱自己的報(bào)酬非常低,但卻在做整個(gè)開發(fā)團(tuán)隊(duì)級別的工作,這到底正常嗎?難道所有的開發(fā)者都是這樣的?以下兩個(gè)回復(fù)獲得了大多數(shù)開發(fā)者的認(rèn)同,想學(xué)習(xí)下如何同公司高層溝通的技巧嗎?
TiredProgrammer 6月12日:
我在一家中等規(guī)模的公司里做Web開發(fā)。剛開始的時(shí)候,我的任務(wù)是對一個(gè)已有的應(yīng)用做擴(kuò)展(這個(gè)項(xiàng)目的代碼很糟糕,是由多個(gè)程序員花了好幾年時(shí)間開發(fā)的,他們用不同的方法處理相同的任務(wù),而且基本上沒什么結(jié)構(gòu)可言)。
當(dāng)我成功的按照需求完成了對應(yīng)用的擴(kuò)展后,公司讓我全職負(fù)責(zé)對這個(gè)應(yīng)用的維護(hù)工作。這當(dāng)然沒問題,或許只有我是這么想的。但是公司卻禁止我去改進(jìn)已有的代碼,只讓我集中精力解決bug——如果有bug報(bào)告的話。
從那時(shí)起,我又陸續(xù)接手了3個(gè)類似這樣的項(xiàng)目,現(xiàn)在我都得一起維護(hù)。之后,我又被委任了4個(gè)項(xiàng)目——這次可以從頭開始創(chuàng)建整個(gè)應(yīng)用,當(dāng)然了,這些新開發(fā)的項(xiàng)目我也得去維護(hù)。
現(xiàn)在,我快被每日不斷的用戶郵件給搞瘋了,我所負(fù)責(zé)維護(hù)的每一個(gè)應(yīng)用都是這樣。公司希望我能直接處理這些郵件中提到的問題,同時(shí)又丟給我2個(gè)新項(xiàng)目(這之后已經(jīng)有5個(gè)項(xiàng)目在排隊(duì)等著了)。杯具的是,對于我自己編寫的代碼,我還沒有收到任何bug報(bào)告,只是偶爾會有那么一些腦殘要求希望徹底顛覆原來的需求。
無論如何,這正常嗎?在我看來,我一個(gè)人做的工作頂?shù)蒙弦徽麄€(gè)開發(fā)團(tuán)隊(duì)了。我最初預(yù)想的可不是這樣的啊,我是白癡嗎?我猜這個(gè)帖子可能會引起網(wǎng)上的大論戰(zhàn),但請告訴我,并不是每一個(gè)開發(fā)者都遇到了我這種情況。P.S. 我的薪水幾乎和超市的收銀員一樣多,如果不比他們低的話。(亮點(diǎn)…)
acattle***編輯于6月13日:
我在實(shí)習(xí)的時(shí)候也發(fā)現(xiàn)有很多時(shí)間都花在解bug上了。你必須意識到作為初級程序員,你沒法獲得更有挑戰(zhàn)性的工作,你得從沒人愿意干的臟活累活干起。這當(dāng)然是不幸的,但這條規(guī)律適用于所有的工作。
另外,你得認(rèn)識到一點(diǎn),對于公司來說,能正常工作的代碼遠(yuǎn)比清晰的代碼更重要。從你所在的公司的角度來看,修改已有的代碼庫是在浪費(fèi)金錢,你不過是在重做已有的東西,而且還可能會帶來更多潛在的錯(cuò)誤。通常這種類型的公司都不是計(jì)算機(jī)/軟件公司,因此高層都缺乏足夠的技術(shù)背景來理解你要做的這種大改動的意義。也就是說,如果你所在的公司是技術(shù)型公司,由懂技術(shù)的人來管理,他們能夠理解好的代碼所帶來的價(jià)值的話,你可能還會有更多的余地,盡管有時(shí)候你還是需要選擇一下戰(zhàn)場(畢竟,生意的主要目的還是為了賺錢)。
那就是說,丟下你現(xiàn)在的工作而期望得到更有意義的工作是不合理的。同樣令人遺憾的是,你不得不同時(shí)處理由各個(gè)不同的項(xiàng)目經(jīng)理針對各個(gè)項(xiàng)目提出的要求。
作為一名程序員,事實(shí)就是比起你自己從頭寫起代碼的時(shí)間,你要花費(fèi)更多的時(shí)間在維護(hù)和修改其他人的代碼上。如果這對你來說難以接受,也許你應(yīng)該只把開發(fā)當(dāng)成一項(xiàng)愛好,然后選擇別的行業(yè)謀生。如果你對維護(hù)代碼沒有什么異議,但感覺工作并沒有使自己發(fā)揮出全部的功效,或者覺得自己快被工作榨干了,那么你需要同你的經(jīng)理好好探討一下你的工作模式。如果你面臨的問題比這個(gè)更嚴(yán)重,或者如果你感覺經(jīng)理并不知道如何有效的根據(jù)你的技能來管理你的工作,那么考慮換個(gè)新公司應(yīng)該是個(gè)好主意。根據(jù)你提到的低工資,跳槽可能是你現(xiàn)在***的選擇。
Péter Török***編輯于6月13日:
看起來似乎是管理層在任務(wù)優(yōu)先級的選擇和工作量的管理上出了問題。你應(yīng)該同你的經(jīng)理談?wù)?,讓他們知道你的工作已?jīng)過載了,如果每個(gè)人都跑過來煩你,讓你完成他們馬上想達(dá)成的要求,這樣你就無法繼續(xù)有效的工作了。那樣會讓你從一個(gè)任務(wù)跳到另一個(gè)任務(wù),浪費(fèi)了大量的時(shí)間在切換思維上。對于高效率的軟件開發(fā)工作來說,你應(yīng)該只全身心投入到一項(xiàng)任務(wù)中去。有越多的中斷和干擾,你就要花越多的時(shí)間在環(huán)境切換上。有研究顯示,大約15分鐘的時(shí)間能讓你進(jìn)入專注的狀態(tài),此時(shí)你的思維是最有效率的。如果你每15分鐘被中斷一次,你永遠(yuǎn)也無法專注下去,這對你和公司都是很大的浪費(fèi)。
因此你應(yīng)該試著和你的經(jīng)理溝通,達(dá)成一個(gè)更加合理的工作模式。這應(yīng)該包括對任務(wù)進(jìn)行優(yōu)先級劃分,并在某種程度上提前進(jìn)行規(guī)劃。所有的用戶需求都應(yīng)該按照優(yōu)先級的順序記錄在列表上。并且,優(yōu)先級不應(yīng)該由需求的發(fā)起者來指定(自然地,大家都會認(rèn)為自己的需求是世界上最重要的),也不能由你自己來定,而應(yīng)該由某個(gè)擁有足夠多的商業(yè)知識以及對你維護(hù)的一系列產(chǎn)品有著全局認(rèn)識的人來指定(產(chǎn)品經(jīng)理)。理想情況下,所有的需求請求都應(yīng)該被錄入到問題追蹤系統(tǒng)如Jira或者M(jìn)antis上,或者至少給產(chǎn)品經(jīng)理發(fā)送郵件,而不是直接發(fā)給你。應(yīng)該由他/她去負(fù)責(zé)處理 “為什么我的需求還沒有完成?”這樣的用戶抱怨,而讓你集中精力在開發(fā)工作上。如果這種情況難以實(shí)現(xiàn)的話,當(dāng)你在處理新的需求時(shí),你至少要和經(jīng)理溝通協(xié)商出一段時(shí)間,這段時(shí)間內(nèi)你不能被打擾,只負(fù)責(zé)開發(fā)工作。
如果上面的做法可行,下一步就應(yīng)該是提前做好規(guī)劃。比如,估計(jì)一下完成***優(yōu)先級的任務(wù)需要多少時(shí)間,然后將你的時(shí)間劃分為各個(gè)“沖刺階段”,每個(gè)階段可能是1周或好幾周時(shí)間,為你的下一個(gè)沖刺階段安排滿足夠多的任務(wù)。你可能還希望保留一段時(shí)間以應(yīng)對緊急的需求,但其余的都可以提前規(guī)劃好。你也可能更希望將不同項(xiàng)目的工作劃分到不同的時(shí)間點(diǎn)上,比如,項(xiàng)目A就安排在周1解決,周2到周3是項(xiàng)目B,周4上午可以做項(xiàng)目C,下午就可以做項(xiàng)目D等等,以此進(jìn)一步的減少任務(wù)間的切換。按照這種方式,你對于未來1周或幾周的工作任務(wù)就有了大致粗略的了解。此外,這也為你的客戶提供了一個(gè)路線圖:他們可以了解到他們的請求何時(shí)可以得到解決。這里你可能不會想對你的經(jīng)理提到“敏捷”這個(gè)詞——這基本上就是敏捷開發(fā),但有些人并不清楚敏捷開發(fā)到底是什么,他們就是一味地反對。
盡管你現(xiàn)在的職位看起來報(bào)酬很低,可是你維護(hù)的項(xiàng)目越多,你就越有資本來溝通協(xié)商。對于公司來說,招一個(gè)新人進(jìn)來給他培訓(xùn),再讓他維護(hù)所有這些項(xiàng)目需要花費(fèi)相當(dāng)長的時(shí)間(時(shí)間就是金錢)。你可以正當(dāng)?shù)闹赋瞿愕拇a比原有的部分要好的多,所以從公司的方面來說,他們沒法輕易的以同樣的價(jià)錢雇到一個(gè)合適的候選者來完成同樣的工作。更不用說如果他們不改善工作條件的話,他們雇到的下一個(gè)家伙很快也會像你一樣受夠了就退出不干了。試著讓公司懂得讓你快樂的留在公司對公司是最有益的。這會給你一些資本來和公司協(xié)商以上的情況,并要求加薪。
你究竟有多少談判的資本——這是個(gè)大問題。管理層可能會也可能不會對你的請求有足夠的尊重。但如果你把握的夠好的話,你就有機(jī)會。如果他們拒絕,你總是可以再去尋找更好的工作。這種情況對于每個(gè)職場菜鳥來說并不相同,雖然(很悲催的)你的經(jīng)歷是相當(dāng)?shù)湫偷?。但是確實(shí)總是有更好的工作地點(diǎn)在那等著。工作場所的好壞同地理位置的關(guān)系聯(lián)系并不大,但給我的感覺是,在歐洲北部你可以獲得的機(jī)會比平均水平要高一些。因此,在你完全受夠之前,如果你無法顯著改善現(xiàn)在的工作條件,你應(yīng)該馬上開始尋找新的工作機(jī)會。騎驢找馬總是很好的,所以你不要因?yàn)樾枰缅X就立即接受***份offer。最終你總會找到一個(gè)更好的去處的。
英文原文:StackExchange