軟件開發(fā)人員如何提高個(gè)人和團(tuán)隊(duì)工作效率
一個(gè)程序員如何提高 其 生產(chǎn)力,從而成為一個(gè)卓越的程序員。關(guān)于這個(gè)主 題可以寫(而且已經(jīng)寫了)一整本書。
0 1 合理選擇選件開發(fā)工具
作為一個(gè)軟件開發(fā)人員,你將大部分時(shí)間花費(fèi)在使用軟件開發(fā)工具上,并且工具的質(zhì)量對(duì)生產(chǎn)力有巨大的影響。遺憾的是,選擇開發(fā)工具的主要標(biāo)準(zhǔn)似乎是對(duì)工具的熟悉程度,而不是工具對(duì)當(dāng)前項(xiàng)目的適用程度。
請(qǐng)記住,當(dāng)你在項(xiàng)目開始時(shí)選擇工具的時(shí)候,你可能需要在整個(gè)項(xiàng)目期間(甚至更長(zhǎng)時(shí)間)都必須使用這些工具。例如,一旦你開始使用缺陷跟蹤系統(tǒng),由于數(shù)據(jù)庫(kù)文件格式不兼容,你可能就很難切換到其他系統(tǒng),源代碼控制系統(tǒng)也是如此。幸運(yùn)的是,軟件開發(fā)工具(尤其是IDE)現(xiàn)在已經(jīng)相對(duì)成熟,而且許多工具之間都是可互操作的,因此你不太會(huì)做出錯(cuò)誤的選擇。盡管如此,但是 在項(xiàng)目開始時(shí)仔細(xì)考慮如何選擇工具,可以為你省去很多后續(xù)的煩惱。
對(duì)于一個(gè)軟件開發(fā)項(xiàng)目來說, 最重要的工具是選擇使用哪種編程語言,以及使用哪種編譯器/解釋器/轉(zhuǎn)換器。 選擇最佳的語言是一個(gè)很難解決的問題。你很容易證明一些編程語言是正確的,因?yàn)槟闶煜に鼈?,你不需要再去學(xué)習(xí)它們;然而,未來新的工程師在學(xué)習(xí)編程語言的同時(shí)還要維護(hù)代碼,他們的工作效率可能會(huì)低得多。此外,選擇某些語言可以簡(jiǎn)化開發(fā)過程,充分提高生產(chǎn)力,以彌補(bǔ)學(xué)習(xí)語言所損失的時(shí)間。正如前面所提到的,選擇一種糟糕的語言可能會(huì)浪費(fèi)很多開發(fā)時(shí)間,直到你發(fā)現(xiàn)它不適合這個(gè)項(xiàng)目,于是不得不重新開始。
編譯器性能 (每秒可以處理一個(gè)普通源文件的多少行代碼)會(huì)對(duì)你的生產(chǎn)效率產(chǎn)生巨大的影響。如果編譯器平均編譯一個(gè)源文件只需要2秒鐘而不是2分鐘,那么使用更快的編譯器可能會(huì)提高效率(盡管更快的編譯器可能會(huì)缺少一些特性,從而在其他方面降低了效率)。工具處理代碼的時(shí)間越少,留給設(shè)計(jì)、測(cè)試、調(diào)試和優(yōu)化代碼的時(shí)間就越多。
使用一系列能夠很好地 協(xié)同工作的工具 也很重要。今天,我們認(rèn)為使用集成開發(fā)環(huán)境(IDE)是理所當(dāng)然的,它將編輯器、編譯器、調(diào)試器、源代碼瀏覽器和其他工具集成到一個(gè)單獨(dú)的程序中。這使得我們可以在屏幕的同一個(gè)窗口內(nèi),快速地在編輯器中進(jìn)行更改,重新編譯源代碼模塊,并在調(diào)試器中運(yùn)行結(jié)果,極大地提高了工作效率。
然而,你經(jīng)常不得不在IDE之外處理項(xiàng)目的某些工作。例如,有些IDE不支持源代碼控制或者缺陷跟蹤(盡管許多IDE都支持)。大多數(shù)IDE沒有提供用于編寫文檔的文字處理程序,也沒有提供簡(jiǎn)單的數(shù)據(jù)庫(kù)或者電子表格功能來維護(hù)需求列表、設(shè)計(jì)文檔或者用戶文檔。最有可能的是,你不得不使用一些IDE之外的程序,例如文字處理、電子表格、繪圖/圖形工具、Web設(shè)計(jì)工具和數(shù)據(jù)庫(kù)程序等,來完成項(xiàng)目所需的所有工作。
在IDE之外運(yùn)行程序不是問題,只要確保你選擇的應(yīng)用程序,與你的開發(fā)過程和IDE生成的文件是兼容的即可(反之亦然)。如果在IDE和外部應(yīng)用程序之間移動(dòng)文件,你必須不斷運(yùn)行一個(gè)轉(zhuǎn)換程序,那么你的生產(chǎn)效率將會(huì)降低。
我能為你推薦一些工具嗎?不能。因?yàn)轫?xiàng)目的需求多種多樣,所以我在這里無法給出這種建議。我的建議是 在項(xiàng)目開始時(shí)就注意到這些問題。
但是我可以給出一個(gè)建議,就是在選擇開發(fā)工具時(shí) 避免有“為什么我們不嘗試這種新技術(shù)”的想法。 在使用了一個(gè)開發(fā)工具6個(gè)月之后(并基于它來編寫源代碼),如果你發(fā)現(xiàn)它不能夠完成工作,那么后果可能是災(zāi)難性的。除了考慮產(chǎn)品開發(fā),你還要認(rèn)真評(píng)估這些工具,只有在確信新工具確實(shí)有用之后,才能選擇使用它們。蘋果公司的Swift編程語言就是一個(gè)典型的例子。在Swift v5.0發(fā)布之前(大約在Swift首次發(fā)布的4年之后),使用Swift語言一直是令人沮喪的。每年蘋果公司都會(huì)發(fā)布一個(gè)與之前版本代碼不兼容的新版本,迫使你不得不修改舊的程序。此外,該語言的早期版本中缺少許多功能,并且一些功能并不完善。直到5.0版本(在編寫本書時(shí)發(fā)布)以后,Swift語言才變得相對(duì)穩(wěn)定。然而,那些早期迎合這一潮流的可憐的人,為該語言的不成熟發(fā)展付出了代價(jià)。
遺憾的是,在許多項(xiàng)目中,你自己無法選擇開發(fā)工具。這個(gè)決定來自上級(jí)的命令,或者你沿用產(chǎn)品以前的工具。抱怨它不僅會(huì)浪費(fèi)時(shí)間和精力,還會(huì)降低你的工作效率。相反,你應(yīng)當(dāng)充分利用你所擁有的工具集,并成為使用它的專家。
0 2 管理開銷
對(duì)于任何項(xiàng)目,我們都可以將工作分為兩種類型: 與項(xiàng)目直接相關(guān)的工作(例如,為項(xiàng)目編寫代碼或者文檔)和與項(xiàng)目間接相關(guān)的工作。 間接的活動(dòng)包括會(huì)議、閱讀和回復(fù)電子郵件、填寫考勤卡和更新日程安排。這些都是日常開銷活動(dòng),它們?cè)黾恿隧?xiàng)目的時(shí)間和成本,但是并不直接有助于完成工作。
通過遵循Watts S. Humphrey在Personal Software Engineering(《個(gè)人軟件工程》)中介紹的方法,你可以跟蹤在項(xiàng)目期間將時(shí)間都花費(fèi)在了何處,并且很容易地看到直接花費(fèi)在項(xiàng)目上的時(shí)間,以及花費(fèi)在間接的開銷活動(dòng)上的時(shí)間。 如果你的開銷活動(dòng)時(shí)間超過總時(shí)間的10%,那么你應(yīng)當(dāng)重新考慮日?;顒?dòng)。 你應(yīng)當(dāng)試著減少或者整合這些活動(dòng),來降低它們對(duì)你的工作效率的影響。如果你沒有跟蹤項(xiàng)目之外花費(fèi)的時(shí)間,那么就會(huì)錯(cuò)過通過減少管理開銷來提高生產(chǎn)力的機(jī)會(huì)。
0 3 設(shè)置明確的目標(biāo)和里程碑
如果不是最后期限迫在眉睫,人們往往會(huì)放慢工作節(jié)奏,當(dāng)最后期限臨近時(shí),他們又會(huì)進(jìn)入“超級(jí)模式”,這是人類的天性。如果沒有目標(biāo),那么人們就很難高效地完成工作。如果沒有最后期限,那么人們就很難有動(dòng)力及時(shí)去實(shí)現(xiàn)這些目標(biāo)。
因此,為了提高你的工作效率,一定要有明確的目標(biāo)和子目標(biāo),并將其附加到里程碑上。
從項(xiàng)目管理的觀點(diǎn)來看,里程碑是項(xiàng)目中的一個(gè)標(biāo)記點(diǎn),它代表了工作的進(jìn)展程度。一個(gè)好的管理者總是會(huì)在項(xiàng)目進(jìn)度中設(shè)定目標(biāo)和里程碑。然而,很少有時(shí)間進(jìn)度計(jì)劃會(huì)為單個(gè)程序員提供有用的目標(biāo)。這就是個(gè)人軟件工程需要發(fā)揮作用的地方。 要想成為一個(gè)超級(jí)高效的程序員,你需要對(duì)自己項(xiàng)目中的目標(biāo)和里程碑進(jìn)行微管理。 一些簡(jiǎn)單的目標(biāo),例如,“我要在吃午飯之前完成這個(gè)功能”或者“我要在今天回家之前找到這個(gè)錯(cuò)誤的根源”,可以讓你集中注意力。而另一些更大的目標(biāo),例如,“下周二我將完成這個(gè)模塊的測(cè)試”或者“今天我將運(yùn)行至少20個(gè)測(cè)試程序”,可以幫助你評(píng)估生產(chǎn)力,并確定你是否實(shí)現(xiàn)了自己的目標(biāo)。
0 4 練習(xí)自我激勵(lì)
能否提高工作效率取決于你的態(tài)度。雖然別人可以幫助你更好地管理時(shí)間,或者在你陷入困境時(shí)幫助你,但是最重要的是你必須主動(dòng)改善自己。 你需要時(shí)刻注意自己的節(jié)奏,不斷努力提高自己的表現(xiàn)。 通過跟蹤自己的目標(biāo)、努力和進(jìn)步,你會(huì)知道什么時(shí)候需要“讓自己振作起來”,通過更努力地工作來提高工作效率。
缺乏動(dòng)力可能是提高工作效率的最大障礙之一。 如果你的態(tài)度是“啊,我今天還要做這件事”,那么你完成這個(gè)任務(wù)所花費(fèi)的時(shí)間可能比你的態(tài)度是“哇!這是最棒的部分!這將會(huì)很有趣!”更多。
當(dāng)然,你做的每一個(gè)任務(wù)并不都是有趣的。這是個(gè)人軟件工程需要介入的一個(gè)領(lǐng)域。如果你想要保持高于平均水平的生產(chǎn)力,那么當(dāng)一個(gè)項(xiàng)目讓你感到“缺乏動(dòng)力”時(shí),你需要有足夠的自我激勵(lì)。試著創(chuàng)造一些理由讓這份工作更有吸引力。例如, 為自己創(chuàng)造一些小挑戰(zhàn),并在完成后獎(jiǎng)勵(lì)自己。 一個(gè)高效的軟件工程師會(huì)經(jīng)常練習(xí)自我激勵(lì):你對(duì)一個(gè)項(xiàng)目保持動(dòng)力的時(shí)間越長(zhǎng),你的工作效率就越高。
0 5 集中注意力,消除干擾
專注于一個(gè)任務(wù)并消除干擾,是另一種能夠顯著提高生產(chǎn)力的方法。 你應(yīng)當(dāng)能夠“進(jìn)入狀態(tài)”。通過這種方式工作的軟件工程師比那些一心多用的人更有效率。為了提高工作效率,你應(yīng)盡可能長(zhǎng)時(shí)間地專注于某一個(gè)任務(wù)。
在沒有任何視覺刺激(除了顯示屏)的安靜環(huán)境中,專注于一個(gè)任務(wù)是最容易的。有時(shí)候,工作環(huán)境并不利于讓你專注。在這種情況下,戴上耳機(jī),播放背景音樂可能有助于消除干擾。如果音樂太讓人分心,則可以試著聽聽白噪聲,網(wǎng)絡(luò)上有一些白噪聲的應(yīng)用程序。
無論什么時(shí)候你在工作中被打斷了,你都需要時(shí)間恢復(fù)狀態(tài)。事實(shí)上,你可能需要半個(gè)小時(shí)才能完全集中精力工作。當(dāng)你需要集中精力完成一個(gè)任務(wù)時(shí),可以貼一個(gè)告示說只有緊急的事情才能打斷你,或者在你的工作臺(tái)附近貼上“辦公時(shí)間”,即你可以被打斷的時(shí)間,例如,你可以允許別人打斷你5分鐘?;卮鹜聜冏约耗芟朊靼椎膯栴},可以節(jié)省其10分鐘的時(shí)間,但是這可能會(huì)浪費(fèi)你半個(gè)小時(shí)。你必須作為團(tuán)隊(duì)的一部分工作,成為一個(gè)好隊(duì)友,然而,同樣重要的是, 需要確保過度的團(tuán)隊(duì)互動(dòng)不會(huì)降低你(和其他人)的生產(chǎn)力。
在一個(gè)典型的工作日中,會(huì)有許多已經(jīng)預(yù)定的工作中斷時(shí)間,例如用餐時(shí)間、休息時(shí)間、會(huì)議、行政管理(如處理電子郵件和時(shí)間核算)等。如果可能的話,你可以試著在這些事件周圍安排其他活動(dòng)。例如,關(guān)閉任何郵件提醒,因?yàn)樵趲酌腌妰?nèi)回復(fù)郵件很少是必需的,而且如果有緊急情況,別人會(huì)親自找到你或者打電話給你。如果別人確實(shí)希望你能快速回復(fù),那么你可以設(shè)置一個(gè)鬧鐘,提醒自己在固定時(shí)間查收郵件(對(duì)待短信和其他干擾也是如此)。當(dāng)你接到很多非緊急電話時(shí),你可以考慮把手機(jī)調(diào)成靜音,在休息時(shí)每隔1小時(shí)左右查看一下短信。如何做取決于你的個(gè)人和職業(yè)生活,但是 你受到的干擾越少,你的工作效率就越高。
0 6 如果你覺得無聊,那就做點(diǎn)別的事兒
有時(shí)候,無論你多么有動(dòng)力,你都會(huì)對(duì)自己的工作感到無聊,也很難集中注意力,你的工作效率會(huì)大幅下降。如果你不能進(jìn)入狀態(tài),無法將注意力集中在任務(wù)上,那么就休息一下,做一些其他事情。不要以無聊為借口,在一個(gè)又一個(gè)任務(wù)之間來回奔波,卻又完成不了多少工作。但是,當(dāng)你真的遇到障礙,無法前進(jìn)時(shí),不妨試著換一些你可以做得更有成效的事情。
0 7 盡可能自立
你應(yīng)該盡力嘗試處理所有分配給你的任務(wù)。 雖然這不會(huì)提高你的工作效率,但是如果你不斷地向其他工程師尋求幫助,則可能會(huì)降低他們的生產(chǎn)力(記住,他們也需要保持專注,避免干擾)。
如果你正在做一個(gè)需要更多知識(shí)的任務(wù),而你又不想經(jīng)常打斷其他工程師,那么你可以有以下幾種選擇:
花點(diǎn)時(shí)間自學(xué),這樣你就能完成任務(wù)了。雖然這可能會(huì)影響到你短期的工作效率,但是你所獲得的知識(shí)將幫助你完成未來類似的任務(wù)。
去見你的經(jīng)理,解釋你遇到的問題。討論一下是否可能把任務(wù)重新分配給更有經(jīng)驗(yàn)的人,然后給你分配一個(gè)你能夠更好地處理的任務(wù)。
與你的經(jīng)理安排一次會(huì)議,在不太影響其他工程師工作效率的時(shí)間(例如,在工作日的早上)尋求幫助。
0 8 識(shí)別何時(shí)需要幫助
有時(shí)候,你的自立態(tài)度可能會(huì)有點(diǎn)過頭。你可能在一個(gè)問題上花費(fèi)了太多的時(shí)間,而你的隊(duì)友只需要幾分鐘就能解決這個(gè)問題。成為一個(gè)卓越程序員的一個(gè)方面是,認(rèn)識(shí)到自己陷入困境,需要幫助才能繼續(xù)前進(jìn)。當(dāng)你被困住的時(shí)候,最好的方法是設(shè)置一個(gè)定時(shí)鬧鐘——在被困在這個(gè)問題上幾分鐘、幾小時(shí)甚至幾天之后,尋求幫助。 如果你知道該向誰尋求幫助,那么就直接尋求幫助。如果你不確定,那么就和你的經(jīng)理談?wù)劇?最有可能的情況是,你的經(jīng)理會(huì)指引你找到合適的人,這樣你就不會(huì)打擾到那些無論如何也幫不了你的人。
團(tuán)隊(duì)會(huì)議(每天或每周)是向團(tuán)隊(duì)成員尋求幫助的好地方。 如果你手頭上有好幾個(gè)任務(wù)要做,而你又被困在一個(gè)特定的任務(wù)上,那么可以把它放在一邊,做其他任務(wù)(如果可能的話),然后把你的問題留到團(tuán)隊(duì)會(huì)議上來問。如果你在會(huì)議之前把工作做完了,則可以讓你的經(jīng)理分配一些其他工作,這樣你就不必打擾別人了。此外,在處理其他任務(wù)時(shí),你可能也會(huì)找到解決方案。
0 9 克服士氣低落
沒有什么比團(tuán)隊(duì)成員士氣低落能更快地扼殺一個(gè)項(xiàng)目了。這里有一些建議可以幫助你克服士氣低落:
了解項(xiàng)目的商業(yè)價(jià)值。 通過了解或提醒自己項(xiàng)目的實(shí)際用途,你將對(duì)項(xiàng)目投入更多的熱情,也更感興趣。
對(duì)項(xiàng)目(你的部分)負(fù)責(zé)。 當(dāng)你對(duì)這個(gè)項(xiàng)目負(fù)責(zé)時(shí),你的驕傲和榮譽(yù)就與它綁在一起了。不管發(fā)生什么事情,請(qǐng)確保你總是可以談?wù)撟约簩?duì)項(xiàng)目所做的貢獻(xiàn)。
避免在你無法控制的項(xiàng)目問題上投入精力。 例如,如果管理層做出了一些影響項(xiàng)目進(jìn)度或者設(shè)計(jì)的糟糕決定,那么就在這些限制范圍內(nèi)盡最大努力工作。當(dāng)你可以努力去解決問題時(shí),不要只是坐在那里抱怨那些管理決定。
如果你的個(gè)性給你的士氣帶來了問題,請(qǐng)與你的經(jīng)理和其他受影響的人員討論一下。 溝通是關(guān)鍵。 任由問題繼續(xù)下去,只會(huì)導(dǎo)致更大的士氣問題。
時(shí)刻警惕可能會(huì)降低士氣的情況和態(tài)度。 一旦項(xiàng)目團(tuán)隊(duì)的士氣開始下降,通常就很難恢復(fù)。你越早處理士氣問題,就越容易解決它們。
有時(shí)候,財(cái)務(wù)、資源或者個(gè)人問題都會(huì)降低項(xiàng)目參與者的士氣。 作為一個(gè)卓越的程序員,你的工作就是躬身入局,戰(zhàn)勝挑戰(zhàn),繼續(xù)編寫卓越的代碼,并且鼓勵(lì)項(xiàng)目中的其他人也這么做。 這樣做并不總是容易的,但是沒有人說過成為一個(gè)卓越的程序員是容易的。
本文節(jié)選自 《編程卓越之道(卷3):軟件工程化》 一書!