2009年1月12日 星期一

程式員職場話題

From http://www.javaworld.com.tw/roller/qing/entry/程式員職場話題

程式員是一個很奇特的行業,在這行之外的人們多半認為它是一門還不錯的職業,既有科技新貴的光環罩頂,又有外界視為還不錯的收入水平。有趣的是,我們卻又時常聽到這行裡頭的人們抱怨自己所從事的工作。例如,認為自己只是廉價的苦力勞工,或者像是長期的熬夜爆肝也換不回優沃的金錢回報之類的怨言,也時常在我們身邊流傳。而在本回,就讓我們來談談和程式員職場生涯有關的幾個話題吧。

時常在一些以程式員為主的網路論壇上,看到許多程式員發問關於薪資的問題,問題不外乎是詢問程式員的薪資水平。不過,程式員這一行,就和其他的行業一樣,同樣是撰寫程式的工作,待遇也有可能天差地遠。這是因為程式員之間的能力高下有時往往有著天壤之別,一流的程式員生產力能以一抵十。尤其充滿技術難度的程式設計工作,人海戰術很難奏效,因為它充滿著高度的技術不可替代性,某個程式員能完成的工作,換成其他人,不論有多少人也都無法達到。

大抵上,程式設計工作也和其他的工作一樣,你能取得多少金錢的報酬,取決於你有多高的不可替代性,如果你只是人類程式碼產生器,終日撰寫著重覆性質的程式碼,卻又無法藉此累積經驗,將自己昇華到另一個境界,那麼自然處在容易被取代的位置上,也就難以獲得較高的薪酬。如果說,最好的投資是投資在自己的知識及技能上,那麼程式設計工作絕對是這句話的最好印證之一。與其斤斤計較些微的薪資差異,不如花心力鍛練自己,才是提昇薪酬的最重要關鍵。

談到了薪資,不免要談到為什麼要踏入程式設計、軟體開發這一行。有些人之所以成為程式員,是因為這一行最起碼有著尚可的薪資水準,甚至還會被外界誤以為是所謂的「科技新貴」。但是,倘若只是為了這個原因而選擇踏上這條路,那麼我認為這條路將會走的十分的辛苦。

程式設計工作需要以對程式設計的喜愛為支撐,這有兩個原因。第一個原因是,當你喜歡撰寫程式時,寫程式本身就是樂趣的一部份,有時候,你甚至不會認為自己是在工作,而會認為自己是在玩樂。對天生的程式員來說,玩樂與工作是程式設計的一體之兩面。撰寫程式的同時,既在玩樂,也在工作。但是,相反的,倘若你並不是真心的喜歡程式設計,只是單純的為了獲得金錢的回報而進到這一行,那麼這份工作很有可能為你帶來許多痛苦。或許說,即使你很喜歡程式設計工作,也能樂在其中,但它有時也仍然不免會為你帶來痛苦的感覺(例如,急迫的時程、頻繁的需求變更、),但是,你對程式設計工作的喜愛,以及完成程式時的成就感及滿足感,卻能疏緩此類痛苦的感覺。

第二個原因是,程式設計能力的精進和投入的時間有很大的正相關關係。我之前曾經提過,程式設計有時就像練功夫一樣,在平凡無奇、日積月累的蹲馬步中,方能領會進一步出力使力的法門。倘若你並不喜歡程式設計,那麼你就比較不可能投入較多的時間,那麼自然很難於其中獲得持續成長的動力。無法持續鍛練自己的能力,再連接到金錢回報的問題上,自然又更難取得更為優沃的薪資,變成了雞生蛋、蛋生雞的問題。

現在坊間有許多關於程式設計證照的課程,許多人會著眼證照在職場上所能帶來的加分,而去報名相關的課程並且參加證照考試。的確,對用人主管來說,證照是對於你的能力的一個簡單的評斷標準。但是,只要是考試,就很容易流於紙上談兵的情況。因為,在準備證照考試的課程學習中,你可能會將重心放在考題的出題方向,而不是放在真正學好某項程式語言或技術的核心本質之上。這麼一來,即使你通過了證照考試,也因為證照的關係,取得了程式設計工作領域的入場券,但是,程式設計工作是一門完全講究實戰的工作,要面對的是實際的各種考驗,如果你只有紙上談兵的能力、只能對付證照考試的題庫,是很難在實際的工作中有所發揮的。證照,變成了一種倒果為因的產物。任何程式設計技術的學習,都應該把焦點擺在它的核心本質上。正確的觀念應該是,「我要學會這樣的技術,來幫我解決真正的開發問題」、「證照只是一個敲門磚,證明我原本就擁有的實力」,而不是「我要學會這些題目的解答,以便幫我通過證照考試,讓人相信以為我有實力」。現今,許多擁有證照的程式員反而無法解決實際的開發問題,也使人對證照的可信度在心裡預先打了折扣。

許多人會談程式設計需要什麼樣的思維能力,但除了思維能力外,我覺得程式設計者在性格上最好具有一顆喜歡變化的心。有些人的個性就是喜歡穩定,不喜歡工作有太多的變化,最好每天處理的工作都是日復一日,年復一年的相同模式。但是,從事軟體設計工作很難如此。你所面對的,會是不斷推陳出新、持續變化的技術世界,以及不易掌握又善變的使用者需求。我們可以說,軟體開發就是一門掌握變化、面對變化的領域。倘若你是一個喜歡變化,不喜歡每天面對高度規律性的工作,那麼就很適合進到這一個領域。對一個喜歡變化的人來說,從事程式設計工作形同如魚得水。有些人厭惡苦苦追趕新技術,但有人卻認為鑽研新技術能帶來無比的樂趣。相較而言,後者的性格更適合做為程式設計者。程式員不能對陌生的事物感到恐懼,因而抗拒面對。應當要把持續發生的新事物當做挑戰,並且加以駕御。新事物不是痛苦的來源,而是玩樂的對象。

最後,我要談一個主題。許多人有一個刻版的印象,認為寫程式是廉價的勞工,所以他們會盡可能的希望轉換到管理的職類上。雖然我也認為由程式員出身的管理者,在管理技術團隊上,存在更多的優勢,但這不意謂著我認為,所有的程式員都應該朝向管理職務發展。程式設計應當是可以做為一生的志業,而這樣的例子在國外是很常見的,只不過在台灣,程式設計似乎是門只適合年輕力壯的小伙子來幹的「青春飯」,程式員們得在年華老去前,提前想好程式員以外出路。

很重要的關鍵之一是因為我們沒有形成一個階層性的程式員體系,讓高階的程式員處理重要、關鍵的程式碼,讓低階、剛入門的程式員處理比較平凡無奇、重覆性高的程式碼(事實上,這也是蹲馬步的功夫)。在我們的軟體開發產業中,程式員大多沒有層級的差異,時常被簡稱為PG(意指programmer),做的工作都一樣,就是產出程式碼。這樣的體系,便較難讓高階程式員的經驗與技術有妥善的發揮。建立起程式員的階層體系,不僅讓程式員在工作上有明確的晉昇路徑,不會一味的尋求轉換至管理職務,也能讓高階程式員能將力量發揮在最關鍵的地方。

寫程式是快樂的一件事,當做終生的志業更棒。即便你已經是位居架構師的角色,偶而轉換角色,扮演一下程式員的角色,寫寫程式、試試新的技術,不至於與新技術脫節,可以真正深入了解的新技術的細節,自然也有助於建立、設計出更好的架構。




沒有留言:

張貼留言