程序員職場小技巧:每天工作那麼多事,如何安排事務的優先級?

最新互聯網大廠面試真題、Java程序員面試策略(面試前的準備、面試中的技巧)請移步GitHub


我們在日常工作中,總會這樣感慨:事情,是幹不完的。既然幹不完,那我們就要分清輕重緩急,哪個重要,哪個不重要,給它們劃分一個優先級,這樣不至於讓自己手忙腳亂。

能給手頭的事情排上正確的優先級,是一項很重要的工作能力。

當然,我們在生活和學習中,事情也可能不少。但是和工作中的優先級相比,生活和學習裏的事情是我們自己的事情,只要安排得讓我們自己滿意就可以了。在工作中,事情的優先級的標準,是要讓公司受益,讓老闆滿意,讓同事認可。

首先呢,我們先談談優先級爲什麼重要。

一、優先級的重要性

我工作中有一段時間,就經常被工作的優先級所困擾,經理也時不時地批評我:“這個事情這麼重要,你怎麼到現在還沒開始弄?”我心裏也有點憋屈:“我又沒閒着,我做的事情還不都是經理安排的麼?”

這裏有一個很重要的字眼——重要。

優先級有很多的考量,並不是簡單的先來後到的線性時間順序,我們需要根據事情的要緊程度安排優先級。

還有一個需要考慮的因素就是程序員的工作性質。對於軟件工程師來說,一個事情可以用一天的時間做完,也可以用一個星期的時間精心打磨。如何在時間有限的情況下安排自己的時間,讓時間用在最值得做的事情上,就是排優先級需要考慮的內容。

給不同的工作安排優先級,不僅會讓我們的工作效率更好,也可以讓我們和同事之間達成良好的合作關係,爲什麼這麼說呢?且往下看。

二、如何給工作排優先級

首先,我們可以從兩個維度去給工作劃分類型,一個維度是工作本身的性質,另一個維度從合作角度出發,然後根據這些工作的重要與否安排優先級。

三、基於工作性質安排優先級

基於工作本身的性質,我把工作劃分爲公司發展計劃、安全相關的事情和生產上的事情。

每個公司都有自己的發展計劃,並給這些計劃劃定不同的權重,以指導協調公司內有限的資源。

拿我所在的公司來說,每年公司高層都會制定當年的發展目標,然後以此爲依據,制定不同的發展項目,再根據項目,一層層地將項目分解爲各個部門的子項目等等。每個部門,以頂級項目的優先級爲參考,安排自己的資源,以達到公司的發展目標。

我們程序員作爲公司人員組織的基層員工(我習慣稱爲葉子結點),自然不需要操這麼大的心。但是我們需要了解公司的發展方向和重點項目。一般來說,公司的發展目標和與之相關的各個項目的優先級都會對內公開,公司也鼓勵所有員工都熟悉這些內容。當和這個項目相關的工作安排到自己手裏的時候,一定要給予這種工作足夠的優先級。

同時,這種重要的事情,最好多花點時間在上面,力爭做到最好。因爲這種重要的事情是拖不起的,如果因爲沒做好拖累整個項目的進度,可能會影響自己甚至整個組的表現(performance)。

我們再來看看安全相關的事情。

“安全無小事”這個口號在所有工程類的工作中都適用。軟件開發裏的安全問題雖然不會直接影響生命安全,但是它會帶來很大的經濟損失和商譽損失,現實中各種數據泄漏的例子不勝枚舉。

我隨便舉個 Java 的例子。在 JDK 的早期版本中,有一個執行任意代碼漏洞。Java 可以啓動新的進程,執行任何命令,方式是使用 Runtime 的 exec 方法,傳遞一個命令的 String數組。這個漏洞在於,它先檢查了 String 數組裏的命令是否允許被執行,然後再遍歷數組,依次執行每條命令。而在多線程環境下,完全可能在檢查完畢後,數組裏的內容又被別的線程惡意更改了,改爲不應該通過檢查的命令。這樣的話,一條本不應該通過檢查的命令,就這樣被執行了。

作爲承擔着軟件開發和運維工作的現代程序員,我們首先要遵守安全部門的安全規範和檢查,這就好像進入工地要戴安全帽,是沒得商量的。

安全部門有時候還會發布緊急安全升級等要求。比如升級有安全隱患的 jar 包 / 組件等,這時候,我們一定要把這個當作優先級最高的任務,不要有任何的猶豫或輕視。

站在我們程序員的角度想一下,一旦出了安全問題,如果是因爲自己執行不到位,這個責任肯定是要自己承擔的,即使後期再怎麼彌補,也無濟於事。

試想一下,如果你沒有配合安全部門的任務,導致一個有漏洞的 jar 包被利用,造成了數據泄漏。即使接到任務的時候你沒有閒着,甚至爲了完成業務開發挑燈夜戰,但你覺得業務的人會爲你說話,替你擋箭背鍋嗎?

如果你不確定,那麼就換位思考一下吧。如果你是業務方,給開發提好了需求,進度也排好了,結果忽然開發組跟你說,因爲做你的項目,導致我們沒時間做安全升級,造成了公司損失,你要背鍋。你是不是覺得這鍋來得匪夷所思?

安全部門的要求就是最高的要求,是一切需求的“擋箭牌”。當一個安全部門給的任務到了你手上,告訴經理你要放下手中的工作,立刻開始執行安全任務吧。這既是爲了公司,也是爲了自己。

除了安全問題需要注意外,我們還要注意生產上的問題。

如果生產出了問題,那麼作爲 DevOps 的程序員,要第一時間放下手頭的事情,衝上去搞。理清問題之後,馬上開始行動。生產上的問題都是火燒眉毛。火燒眉毛的時候,你會等着別人給你送水,還是自己想盡一切辦法找水呢?當然是自己找水了。如果需要別人配合,
馬上聯繫相關的人或者其經理。

四、基於合作安排優先級

講完工作本身的性質,我們再來看看那些需要跟別人合作的事情,畢竟有人的地方就有溝通,如果優先級沒有排好,那就很容易導致溝通不到位,出了紕漏,就很麻煩了。

在日常工作中,我們有很多任務都是經理下達的。經理往往掌握着更多的信息,也更能判斷一件事情的優先級。現在一般都是敏捷開發,經理會給每個 story 排優先級。在給任務排優先級的事情上,程序員可以提建議,也可以和經理討論,但是一定要以經理的決定爲準。

還有一些經理臨時安排的事情,這種事情有時候更急一些,可能也不用耗費很長時間。所以這種事情也要先做。

如果一個事情需要別的部門配合,那麼優先做。比如申請資源,和自己的上游討論需求等等。這樣一方面可以讓別人儘早開始工作,另一方面也可以儘早交換信息,避免日後翻車。

舉個簡單的例子,如果有一個需求依賴上游服務。那麼在自己這邊需求明確的情況下,你要儘早和上游的組通氣,看自己的需求能不能做,排期是怎樣的。如果自己覺得沒問題,先開展自己的工作,結果上游那邊無法做或者無法排期,那工作就徹底翻車了。

如果事情沒有太明顯的輕重緩急,那麼換位思考,與人爲善,優先做那些阻塞了別人工作的事情。有些事情是來自組內的,有些來自組間合作。良好的合作關係就是這樣一點點打磨出來的。

五、做事情本身的優先級

給工作排好優先級之後,我們還要注意工作內部各項事情的優先級。工作需要拆成不同的步驟來實施,這些步驟也有優先級,其實基本道理和我們上面講的都一樣。

我舉一個開發新功能的例子。開發新功能可能要申請機器,要找上游談依賴,要開發代碼,要找下游談需求,要和上下游聯調接口等等。

你看,這裏有“申請機器”“找上游談依賴”“找下游談需求”,那麼這個時候,申請機器和找上游就是應該儘早開始的。同時,接口和聯調也應該儘早開始,接口具體實現的代碼不需要寫得那麼完善,甚至 mock 一些過程也是可以的。這樣一方面可以和上下游儘早落實集成的細節,另一方面也可以儘早將階段性的成果展示給需求方,隨時 review,避免最後來個大“驚喜”。

我們做事情的時候,如果能把其中的每一步都想清楚,理清依賴關係,安排得井井有條,這就已經事半功倍了。

六、總結

我們的工作繁雜而瑣碎,今天我也僅僅是給出了一些通用的建議。在不同的工作內容,工作崗位上,可能有不同的維度。但是需要牢記的是,當你覺得自己工作手忙腳亂的時候,不妨停下來,先理理自己手頭工作的優先級。怎麼整理優先級呢?這裏我給出一個簡單的方法。首先把所有的事情列出來,然後對每件事情問自己兩個問題:不做這個會怎麼樣?做了這個能怎麼樣?剩下的事情,就是順着這個思路走下去了。

其實,給工作排優先級,不僅僅是一個提升工作效率的方法,也是提升自我和磨合團隊的重要方式。

程序員的工作不只是低着頭寫代碼,也不只是別人讓幹什麼就幹什麼。給事情排優先級,是一種能夠幫助把事情做對,做成,做好的重要能力。它不僅需要你對事情本身有準確的認識和判斷,還需要你有清醒的思維,能夠將事情分解,按照最優的順序執行。給工作安排優先級的過程,也是鍛鍊自己能力的過程。

進一步說,這種能力更是一名經理的必備能力。經理的很大一部分任務就是理清事情,排列優先級,讓自己的手下去做事情。程序員能控制的就是如何安排和使用自己的時間,而經理要對手下所有人的時間負責。所以經理眼前的事情更多,關係更復雜,需要做的判斷也更重要,對這個能力的要求也更高出好幾個層次。所以如果你有轉做管理的計劃,不妨在這件事情上多花點心思吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章