2008/09/09

Code是寫給誰看的?-3/4關於「團隊合作」

這篇文章是要回應網友MaoYang的文章《讓程式碼像閱讀故事一樣容易》。

在上一篇《Code是寫給誰看的?-2/4關於「課程安排」》中,我說的是容易看見的東西「軟體專案的開發方式」,但這篇說的「團隊合作」,就應該就是不可見、或大家根本沒有發現的東西。

雖然不可見,卻不表示不重要。

如果你同時去問資深的專業軟體開發Programmer和資訊系所剛畢業的學生「你認為『團隊合作』重要嗎?」我想,這兩個人的答案一定差異很大。

因為,你可以不使用「軟體工程」內各種嚴謹、複雜的流程,作為評量系統開發是否到位的依據,但你無法跳脫系統開發需要藉由「團隊合作」的本質。

「團隊合作」要如何學習?


不過,「團隊合作」應該由資訊系所的教授教嗎?其實,好像也不能這麼要求他們。

因為在外國,學生就「應該」要在早在進大學前,學習如何和其他人「團隊合作」。但我們的高中生為了學測,將所有的同學視為兢爭對手,這樣的心態能否學會「團隊合作」?我是很懷疑的。

此外,從我接觸過的社會新鮮人來說,他們並非沒有「團隊合作」的意願,而是不懂如何「團隊合作」。以我前面舉的例子來說,他們不是不願學「團隊合作」,但老師能不能教「團隊合作」卻是一個實際上無法控制的因素。

所以,在他們進入職場後,就必須遵從不同企業的分工與流程安排,再重頭學習如何和其他人合作開發系統。

以我曾服務的某間公司軟體開發部為例:
  • 有大約1/10是在外國念完書、在其他公司工作後,又再回國服務;
  • 有大約1/4是台大、清大、交大畢業;
  • 有大約1/2是由其他的國立大學至少研究所畢業。

但也許是該公司沒有嚴謹的軟體開發流程制度、或是其他的因素,這些同事中僅有少部份俱有軟體工程的概念,並能落實到工作當中,並有能力和其他同事co-work。

其他的同事,就只會和自己合作以完成主管分派給他們的工作。

所以,他們:
  • 不是不知道應該先分析需求、再作設計的好處;
  • 就是不願先分析需求、再作設計,自然會在沒有設計文件的情況下Coding;
  • 當然也不會認為這麼作有什麼問題;
    因為自己沒有設計文件,所以不知道要如何告訴其他同事關於Code的介面,如何和自己的程式搭配;
  • 因為沒有別人的設計文件,所以他們即使作出自己負責的東西,好像可以動,但一和其他同事的程式搭配,就動不了。
我曾說明過那間公司軟體開發的制度(見《品質系統與企業管理》一文)、主管的管理模式(見《CTO的高度》一文)的確都有問題。

但倘若學校有教這些人「團隊合作」,其結還會是這樣嗎?未可知也。

對界業而言,團隊合作才是軟體開發的王道。因為只有透過團隊合作,個人才有機會接觸更大的專案、嘗試擔任不同的角色、提高開發的速度、提昇軟體的品質。

所以,我曾經服務過的幾間公司者會實施Review制度。Review的對象可以從文件、到Code。如果別人看不懂你寫的Code,別人如何幫你Review呢?

如果別人看不懂你寫的Code


也許就會發生幾種可能:
  • 我們所實施的代理人制度,就會因為代理人看不懂Programmer的Code,讓代理人無法接續工作,那代理人制度就不會落實;
  • 我們所實施的職務分工制度,就會因為開發組寫出維護組看不懂的Code,使維護組無法接續maintain code的工作;
  • 我們所實施的工作輪調制度,就會因為別人看不懂你寫的Code,讓流調者無法接手你的工作。
很可惜的是,教我們Coding的教授並不了解這個因素,也不重視這個軟體開發的特性。以致於學生即便是進入業界擔任Programmer,也都必須在工作中重新學習「團隊合作」。

更何況有些公司根本也沒有「團隊合作」,當這些學生工作個幾年,開始變資深後,他們能處理更大的專案嗎?我想不行!

小結


我自己曾想過造成這個情況的原因,我發現這些教授中真的具有開發大型專案經驗的人區指可數。

既然他們沒有這些經驗,就不知道在實務中是如何透過團隊合作模式來開發專案,更不知道團隊合作的重要性了,自然也不會在課堂中教學生了。

這也許是台灣的軟體業和外國相比落後的一個潛在因素,只是一直沒有人重視!

沒有留言:

張貼留言