我們可以用很多種特質來區分程式設計者,像是,寫程式快的和寫程式不快的、寫程式bug少的和bug多的、所寫程式可讀性高的和可讀性不同的、……等等。而在這一回,想要探討一個程式設計者的特質,就是工作產出的穩定性。當然,我們有可能會用工作產出穩定或不穩定,來區分程式設計者。

工作產出穩定與否的影響
在過去的經驗中,我有很多和程式設計能力高強的伙伴一起共事的機會。其中絕大多數寫程式的速度都很快、品質不賴,而且都有能力解決困難的技術問題。聽起來當然很棒,不過,其中有一些的工作產出並不穩定。這其實滿讓人感到困擾的,無論你是管理專案的人或是和他一起合作的程式設計者,即使他能力真的很強大,也會因為他的工作產出不穩定而頗受其擾。

工作產出的不穩定,指的就是有時候完成工作的速度快,但有時候工作完成的速度慢,甚至遲遲無法完成。這樣的程式設計者雖然技術高招,在他身心狀態皆為上乘時,可以在很短的時間內寫出品質很好的程式碼,但是,一旦掉入了低潮,可能好長一段時間沒有辦法真正的寫些可用的程式碼。

我們可以說,這樣子的程式設計者高低潮的反差很大,所以導致了他的工作產出不穩定。雖然他有時候可以提高很高的生產力,卻不能保證時常如此,有時候生產力還可能很糟。工作產出的不穩定會構成管理上的問題,因為不穩定就很難預測,而難以預測自然就不好做任何量化的評估,也就無法管理。

很多時候,我們只會看到程式設計者本身在技術面上的實力,但有可能忽略了他在工作產出上是否穩定。技術實力不佳、工作產出又不穩定的程式設計者,就不用說了,對於那種技術實力好,但工作產出不穩定的程式設計者,我們很容易因為他在技術領域上的實力,而忘了考量他的工作產出其實是不穩定,有可能在開發的過程中為團隊帶來一些意外。相反的,也有一些程式設計者,其技術實力並不算十分高超,但是足夠解決開發上的問題,而且,更重要的是,他的工作產出相當的穩定,高低潮之間的落差並沒有很明顯。這一類的程式設計者,有時候雖然沒有顯赫的來歷,在實際的開發中卻能忠實的扮演好其角色,準時的完成具有一定品質的工作。

由此可見,工作產出的穩定與否對一名程式設計者而言,其實是相當重要的特質。即使你有很好的程式設計能力,但倘若工作的產出容易因為身心狀態的變化,而有很大的高低起伏,那麼在開發專案上就會衍生出一些問題,尤其是專案管理上,很難評估你的工作完成時間。有時候當你的手感好的時候,工作完成的速度快,雖然可能不在預期中,但是終究不是壞事,還多出一些時間可以來執行其他的工作。但是,一旦陷化低潮的泥淖,往往不能在預計的完成日完成工作,而且甚至可能逾期甚久,對於專案其餘的相關工作或是後續排程的安排,都會有莫大的影響。

在管理上我們甚至還會有一種迷思,就是我們時常只記得這類程式設計者最佳狀態下的表現,因而在工作排程上皆以此為基礎來做估算。一旦遇到了亂流,就會產生較大的偏差。

工作產出的不穩定,關鍵往往在於個人的情緒或心態

程式設計工作做為一種專業,在產出上有這麼大的波動差異,其實當然是有失專業。但是,程式設計工作也是個以人為中心的工作,人畢竟不是機器,都難免會有身體狀態或情緒的高低起伏。不論如何,對程式設計者而言,都應該思考自己的工作產出是否會有不穩定的情況,倘若有,又應當如何因應。

工作產出之所以不穩定,其原因當然不會是因為在技巧能力上變差了,有一些可能是因為身體的狀態,例如健康因素,但是,我想其中有很高的比例是因為心理狀態的關係。程式設計者會因為自身的情緒或是心態,而造成他的工作產出有時高,卻也有時低。倘若高低落差大,或是落到低潮的時間比例多時,就會為自己和團隊帶來麻煩。

既然這樣的低潮並不是來自於在技術面上的退化,那麼又怎麼會遲遲無法完成工作呢?其中有一種在心態上的障礙是,明明就知道完成工作的方法,但是就是沒有辦法靜下心來把工作完成。在這種情況下,即使知道完成工作的方法和程序,但是,其中有許多的細節,得有耐心把一個個的細節處理掉,才能將工作完成。

雖然不難,但是因為繁瑣,對於只對新鮮事物、困難技術感興趣的程式設計者來說,處理細節反而是很無趣的一段過程。一旦遇上了情緒或心理的低潮後,會變得更不想處理這些細節。

有時候,一項工作裡有難也有簡單,有些程式設計者把主要的、困難的技術工作搞定之後,只剩那些簡單的但瑣碎的工作而不想執行。照道理說,簡單的工作好做,但對這樣的設計者來說,反而因為缺乏挑戰和樂趣,他們反而興趣缺缺了。

當然,做為專案的管理者,你或許也明白每個程式設計者的習性不同,有些能力好,但不喜歡做簡單的工作。有些能力並不那麼出眾,卻能忠實完成他有能力完成的每個工作。所以,你可以在工作分排上,將工作中難與易的部份拆開,分別交由不同的人來執行,最終也可以使得此項工作完成。

但是,如果你自己就是這種挑工作做的程式設計者,或許可以想想,是否自己就只能一直在這種受限的模式下工作?

要靜心與耐煩

在程式設計工作這條道路上,我們花了很多時間學習好的設計技巧和觀念,為的是在技術面上有所增進。但是我們或許很少花時間思考,怎麼克服自己在程式設計工作上所遭遇到的心理障礙,而「靜不下心」、「耐不住煩」來處理那些看似簡單卻繁瑣的諸多細節,就是一個人人都可能會遭遇到的心理障礙。

大多數實際可運作的程式碼都要處理眾多的細節,舉例來說,程式會有很多的異常情境要處理,即使主要的執行流程都完成了,少了這些異常情境的處理,程式還是不能夠被實際的使用,因為在實際應用中,終究是會遭遇到這些異常的情境。處理它們有時候不難,但需要靜下心來花時間,好好地一一面對。

當你的技術面能力持續進步之後,你能解的問題愈來愈難,但你也有可能同步對簡單的問題,愈來愈不感興趣。這使得你愈來愈不想碰觸這些簡單卻瑣碎的工作,而這些簡單卻瑣碎的工作,就有可能成為你遲遲無法完成工作的絆腳石。

因此,克服自己的心理障礙,訓練自己「靜心」來面對工作中後段各種的細項,對某些程式設計者而言,就成了一門必修的功課。真正的「專業」,應該是讓自己的身心狀態──尤其是心理狀態影響工作的程度到最小,使得自己可以提供均勻、可預測的產出。

我們有些時候會遇到讓自己難以靜下心來的情況,例如,太多工作在手上,使得必須在多項工作之間做切換,而每項工作都需要花點時間才能進入狀況,尤其當要處理的是細節工作時,更會需要更多的時間來讓自己靜下心來,進入處理工作的狀態。當你在「靜心」這門功課上練習得更好,就更有能力減少自己的低潮時期。

 

專欄作者

熱門新聞

Advertisement