Saturday, March 7, 2009

英雄程式員

英雄程式員


軟體開發這個領域,就人力資源的角度來看是一個很特殊的領域。因為在這個領域裡,每個人所能扮演的生產之量與質,可能存在著極為懸殊的差距。若是從質來看,頂尖的程式員所寫下的程式碼,或許平庸之輩窮極一生也無法寫出。倘若撇開質不談,單從量來比較,優秀的程式員在單位時間的產量,通常也都是平凡程式員的數倍甚至數十倍之多。對軟體產業來說,雇用一名超級程式員,通常比起雇用多名尋常程式員,其價格效能比好上許多,即使超級程式員要價不菲,但真要精打細算起來,還是十分划算。



這種情況,好像在武俠小說裡時常會看到。武功蓋世的絕世高手,即使遭遇眾人圍攻,通常也都能平安脫困甚至以寡擊眾。好比在金庸著名小說《天龍八部》中,丐幫幫主喬峰在聚賢莊一役與百位武林高手大戰便是一例。



軟體產業,就是一個可以允許個人色彩十分濃厚的產業,也因此成了所謂「英雄文化(hero culture)」相當盛行的產業。在英雄文化底下,擁有超凡技藝的程式員成了所謂的「英雄程式員(hero programmer)」,而英雄程式員也成了軟體開發領域中一種獨特的角色。



為什麼要稱為「英雄程式員」呢?因為這類的程式員通常在開發團隊中都扮演著英雄的角色,因為一個人就能抵的過許多人,甚至能做到其他人都做不到的事情。這樣的程式員在團隊中時常就成了支撐整個團隊的靈魂人物,因為他特有的能力,使得他負擔起更為吃重的工作。



要成為英雄程式員不僅是能力上具有做為英雄的資格,同時在心態上也同樣具備做為一名英雄的特質。英雄程式員有什麼心理特質呢?那就是一種以團隊興亡為己任,置個人死生於度外的精神。英雄程式員通常自己會有一肩挑起開發重擔的責任感,即使自己日以繼夜的超時工作,焚膏繼晷也在於不惜。



每個開發團隊的領導者或許都希望自己的團隊中有英雄程式員,因為英雄程式員不僅能力卓越,而且還富有責任感。但事實上,英雄程式員的管理其難度更高,許多擁有英雄程式員的團隊,時常會發現這其實是災難一場。



怎麼說呢?英雄程式員即使擁有超乎常人的技藝,但終究沒有通天的神力,更不像神話中的英雄那般的所向無敵(不過,即使是特洛依戰爭中被稱為「希臘第一勇士」的阿基里斯,也同樣有著致命的弱點),在軟體開發中的英雄,有時反而是悲劇收場。軟體開發中的英雄程式員,通常對於自己的能力有著過度的期待,總以為自己能扭轉開發專案中所遭遇到的劣勢。軟體開發專案可能遭遇到許多不利的因素所影響,舉凡人力的流動、時程的緊縮、需求掌握失誤、…等等。每當這些事件發生時,悲天憫人的英雄總是會自告奮勇的將各式因此而多出來的工作攬在自己身上,總以為自己再超時工作一些,這些工作一定能在期限內完成。



而這便是英雄程式員對開發專案最常造成的困擾
- 自己對自己的過度期待,造成了自己對專案的過度承諾。其他人,包括專案管理者會因為英雄程式員的不凡實力而相信他對工作的樂觀估計,但時常忽略了英雄程式員本身對時常具有的樂觀特質,以及這些估計乃是建立在英雄程式員以超時工作做為代價的基礎之上。



超時工作是生產力最大的天敵,即使對於英雄程式員來說,通常也不例外,而且超時工作的傷害似乎更大。對時程和工作過度承諾的英雄程式員,就成了專案管理的黑洞,因為英雄程式員時常認為自己的工作「即將」完成了,在每次的專案審查會議中,總是這麼的告訴專案管理者。但不幸的是,他也總是在工作應完成的期限時,告訴專案管理者即使他如何超時的工作,但工作仍然為山九仞,尚缺臨門一腳。這對專案管理當然是很大的傷害。



英雄程式員的存在,通常也會弱化團隊中其他成員的份量。這並不是一件好事,因為團隊下的軟體開發是一項群體的活動,我們之所以需要透過分工的方式來開發軟體,不單只是為了集眾人之力,而且也為了分散專案可能會遭遇的風險。而英雄程式員的存在,時常讓工作的分配失去平衡。一旦英雄程式員成了專案時程的資源瓶頸(相信我,英雄程式員那種義無反顧的俠義心腸,總是會讓他們成為單一專案甚至是多個專案下的資源瓶頸),那麼當英雄程式員出了狀況,整個專案(或是多個專案),馬上就會陷入極大的危機。



除此之外,責任過度吃重的英雄程式員,也會淡化團隊其他成員在團隊中的存在感。倘若其他成員覺得自己對於團隊只是可有可無的角色,那麼勢必對於團隊以及專案本身的目標會缺乏向心力以及認同感,而這���團隊管理來說,也是極為不利的一件事情。



長期的來看,英雄程式員過度擴張自己的責任範圍,也同時阻礙了其他人成長的機會。每個人都是同時在工作中透過工作的歷練來吸取經驗並且從中成長。但是,英雄程式員佔據大多數重要的工作,也讓其他成員只能負責一些食之無味,棄之可惜的工作,無形中喪失了許多從工作中獲得技能成長能力的機會。或許英雄程式員能解專案一時燃眉之急,但是愈是倚重英雄程式員,天平就愈向他傾斜,最後團隊成員都成了跑龍套的角色。一旦演變成這樣的局面,這些成員多半就會紛紛掛冠求去了。



最糟的情況是,專案管理者本身就是該專案的英雄程式員。這在技術職與管理職分際不甚清楚的台灣時常發生。英雄程式員技術能力出眾,往往會被拔擢成為團隊的領導者或專案管理者。而身兼專案管理者的英雄程式員最常犯的毛病便是讓自己一人扛起整個專案的成敗,將大多數工作或關鍵的工作都指派給了自己。這不僅會引發上述英雄程式員種種的負面效應,更糟的是,管理者身陷在技術開發工作中,將使自己見樹而不見林,只看到自己眼見待解的技術工作,而忽略了更需要全面關注的管理工作。身為專案管理者,其實有著更重要的工作,便是站在更巨觀的位置上觀察整個專案進行的狀態,並且從中進行控制及管理。但埋首於開發工作的管理者,又豈有餘暇對此多加施力呢?



本文簡短的描述了軟體開發中的英雄程式員現象,也試圖點出此種現象所引發的負面效應。高超技藝的程式員,其實是開發團隊的寶貴資產。但是,恰如雙面刃一般,此種程式員既可載舟也可覆舟。開發團隊必須妥善的加以運用,才能讓他們發揮最大的戰力,而不是反而對開發團隊帶來無形的傷害。



如果你是英雄程式員,請不要過度發揮自己的英雄感,更不要過度承諾,避開超時工作的陷阱,才能讓你自己貢獻最大的戰力。與其讓自己埋頭苦幹,不如利用多餘的時間騰出手來,傳授其他成員你獨到的技藝,也能促進他們和你一同成長的機會,也能讓團隊整體的戰力更為增強。如果你正管理著擁有英雄程式員的開發團隊,那麼請不要過度倚賴英雄程式員,更別讓他成為專案中的資源瓶頸。盡可能的將他的工作分散到其他人身上,讓他發揮真正關鍵的效用。若有可能,盡量讓英雄程式員輔助其他人的工作,這麼一來,便能增加技術知識在團隊中流動的可能性。



如果,你是英雄程式員身兼團隊管理者,那麼,請不要寫程式,專注在專案的管理工作吧!

No comments: