程式設計工作中最常見到的莫過於時程的壓力。軟體開發專案所需的時程,有時候在估計上並不容易,但即使問題可能出在預估失準,最後為了要符合時程的壓力,幾乎都會落在程式設計者的身上。

除了時程的壓力外,程式設計者時常還會面對另一種壓力──做不出來的壓力。所謂做不出來的壓力,就是你已經覺得自己被交付的工作,無論給再多的時間,都無法完成。

給予程式設計者適度的壓力有助於專案的進行,但過多的壓力往往只會帶來負面的效果。對專案經理而言,必須考量究竟要施加予程式設計者多少壓力。而對程式設計者而言,也必須懂得在承受過多壓力時,適時溝通、尋求協助。

有些工作,花再多時間仍無法完成
在軟體開發的工作中,有一些工作的進展,是可以預期只要有足夠的時間,就能完成。因為這樣子的工作,其進度是只要投入時間去努力執行,就會持續往前推進的。

但也有一些工作,是存在一些很難跨越的障礙,只要遭遇到這類的障礙,即使投入相當多的時間,進度有時仍然還是停滯不前。

例如,當你撰寫完成某個程式模組時,發現這個程式模組的效能表現不合預期,而且更重要的是,也不符合專案規格中對效能的要求。因此,你必須想辦法提升它的執行效能,否則所完成的程式模組形同沒有完成。

你知道的,效能最佳化,並不是那種只要投入時間工作,進度就能與日俱進的。找出效能的瓶頸或許不難,難的或許是,你必須能夠消除所找出來的瓶頸。程式中的某個部分之所以成為效能瓶頸,有可能是因為專案所選用的特定技術所造成的,也有可能是因為所設計的軟體架構先天不良,導致效能格外地低落。

你或許得在一些先天的限制之下,尋求提升效能的可能性,但很有可能反覆的苦思及嘗試,仍然得不到答案。甚至,所設定的效能目標,根本是達不到的。例如,希望在手機上可以進行即時的視訊檔案的格式壓縮,由於手機的計算能力不足,因此,即使你所寫下的程式碼,就功能上來說是正確無誤的,但是因為手機先天的計算能力限制,幾乎是不可能達成即時的壓縮,無論你在專案中投入再多的時間、做再多的努力,這個目標幾乎可以斷定為無法達成。

也有可能你被要求完成某個程式功能,但這個功能本身充滿了高度的技術不確定性,在這個工作中,大多數的時間並不是花在撰寫程式碼,而是耗費在反覆推敲技術層面的議題,甚至需要不斷地進行錯誤嘗試,完全無法預估何時能夠完成。這樣子的工作,研究的成份十分濃厚,沒有辦法如預期完成程式功能,往往不是因為沒有投入時間及心力,而是此種工作的本質,本來就難以預估。目標有機會達成,但也有可能根本無法達成,即便有可能達成,所需的時間也完全估計不出來。

當然,這種做不出來的壓力最常見到的,便是那種無法解決的臭蟲。你的程式功能完成了、速度也符合要求,但是,就是在某些已知或未知的情境下會出錯,你花了相當漫長的時間,但還是找不出導致出錯的根本原因,更別提要修正問題了。甚至,即使找出了導致出錯的根本原因,反覆加以修正,但仍舊無法徹底根除問題。如果專案經理想知道,究竟你還需要多久時間才能修正這個問題,我想你也不知如何回答起,即使硬押上一個時間,也很有可能在這時間到了之後,仍舊跳票。

不同於緊迫的時程所造成的壓力,這種做不出來的壓力,並不會讓人覺得,只要再多一點時間,就可以解除壓力,而是會讓你自己覺得,即使給你再多的時間,你都懷疑自己是否能夠完成被交付的工作。

這樣的感覺其實還挺絕望的,因為時程緊迫的工作,只要爭取多一點時間就可以降低壓力,但是,在面對做不出來的壓力時,你不知道究竟應該要爭取什麼資源,才能夠降低你所面對的壓力。再加上,這類型的工作,往往隨著時間一天一天的過去,進度看起來仍像是原地踏步,專案經理在一旁心急如焚,而你卻無法取得任何的進展,所以你的壓力一天比一天大。
確定找不出解法後,勇敢地說出「無法完成目標」
當程式設計者遭遇到做不出來的壓力時,常常會演變成為駝鳥心態。因為在心中,已經對被交付的這個工作感到絕望,於是便有意無意逃避,不想面對這樣的難題。倘若程式設計者尚有其他的工作,常常會選擇略過這種做不出來的工作,先執行其他的任務,而這樣的工作,就會一直被放在程式設計者工作佇列的最底部,最後被完成的機會可以說是更低了。

其實程式設計者面臨這種做不出來的壓力時,更應該要沉著以對,並且適當地和專案經理溝通。如果是確定做不出來的工作(例如上述手機上即時的視訊編碼),一旦有了確切的證據表示無法完成,便應該及早回報專案經理,讓他有機會採取別的應對措施。

很多程式設計者都有努力不懈、絕不放棄的美德。對於被交付的任務,總是希望能夠盡力使其達成。但是,其實軟體開發專案中,有很多事情都是很有彈性的,也都存在其他的替代方案。在專案經理的心中都有一把衡量的尺,或許也都隨時準備拿出雨天備案。做為程式設計者,遭遇到自己覺得無解或十分難解的問題時,必須適時反應,並且和專案經理討論,以便找出其他的替代方案。否則,只是讓自己陷入一個僵局,專案也不會獲得任何的進展。遇到難解的困難就要說出口,對自己和整個專案都好。

避免專案受到不確定因素的拖累
程式設計者會面臨的許多做不出來的壓力,其實是專案管理的問題。對專案管理而言,倘若希望專案的進度能夠更受控制,便應該盡量避免不確定性因素太高的工作。一個程式模組可能會有效能的問題,在專案啟始之前,便應該透過先期的研究或測試,預先對效能表現有基本的認識,那麼就不致於在專案執行到一半時,才發現程式模組的效能不如預期。

同樣的,技術不確定性高的工作,也不應該被放在時程必須被嚴格控管的專案裡。因為技術不確定性高的工作,都帶有研究的性質,不容易有確切的完成程序,應該將它們與時程必須被嚴格控管的專案脫勾處理。

要放在此種專案中的工作,最好是技術不確定性低的工作,以致於這些工作的進度,都是可以合理地隨著時間過去而持續往前進的。

程式設計者面對做不出來的壓力,最好的方式是溝通和面對。如果問題必須被解決,那麼就耐心的持續努力,千萬別採取逃避的作法,否則問題永遠沒有解決的一天。

對專案經理而言,有些程式設計者做不出來的壓力,往往都是專案管理方法所造成的,但它們都是可以避免的。就和時程壓力一樣,倘若不確定或預估不易準確的事物愈少,那麼不論是程式設計者或專案經理,必須面對的壓力就會愈小。軟體開發工作很有趣,但往往讓各種壓力抵消了其中的趣味,甚至讓它變得討厭。想要維持軟體開發工作的趣味,最好還是避免不必要的壓力吧。

專欄作者

熱門新聞

Advertisement