在上一篇《Code是寫給誰看的?-2/4關於「課程安排」》中,我說的是容易看見的東西「軟體專案的開發方式」,但這篇說的「團隊合作」,就應該就是不可見、或大家根本沒有發現的東西。
雖然不可見,卻不表示不重要。
如果你同時去問資深的專業軟體開發Programmer和資訊系所剛畢業的學生「你認為『團隊合作』重要嗎?」我想,這兩個人的答案一定差異很大。
因為,你可以不使用「軟體工程」內各種嚴謹、複雜的流程,作為評量系統開發是否到位的依據,但你無法跳脫系統開發需要藉由「團隊合作」的本質。
「團隊合作」要如何學習?
不過,「團隊合作」應該由資訊系所的教授教嗎?其實,好像也不能這麼要求他們。
因為在外國,學生就「應該」要在早在進大學前,學習如何和其他人「團隊合作」。但我們的高中生為了學測,將所有的同學視為兢爭對手,這樣的心態能否學會「團隊合作」?我是很懷疑的。
此外,從我接觸過的社會新鮮人來說,他們並非沒有「團隊合作」的意願,而是不懂如何「團隊合作」。以我前面舉的例子來說,他們不是不願學「團隊合作」,但老師能不能教「團隊合作」卻是一個實際上無法控制的因素。
所以,在他們進入職場後,就必須遵從不同企業的分工與流程安排,再重頭學習如何和其他人合作開發系統。
以我曾服務的某間公司軟體開發部為例:
- 有大約1/10是在外國念完書、在其他公司工作後,又再回國服務;
- 有大約1/4是台大、清大、交大畢業;
- 有大約1/2是由其他的國立大學至少研究所畢業。
但也許是該公司沒有嚴謹的軟體開發流程制度、或是其他的因素,這些同事中僅有少部份俱有軟體工程的概念,並能落實到工作當中,並有能力和其他同事co-work。
其他的同事,就只會和自己合作以完成主管分派給他們的工作。
所以,他們:
- 不是不知道應該先分析需求、再作設計的好處;
- 就是不願先分析需求、再作設計,自然會在沒有設計文件的情況下Coding;
- 當然也不會認為這麼作有什麼問題;
因為自己沒有設計文件,所以不知道要如何告訴其他同事關於Code的介面,如何和自己的程式搭配;
- 因為沒有別人的設計文件,所以他們即使作出自己負責的東西,好像可以動,但一和其他同事的程式搭配,就動不了。
但倘若學校有教這些人「團隊合作」,其結還會是這樣嗎?未可知也。
對界業而言,團隊合作才是軟體開發的王道。因為只有透過團隊合作,個人才有機會接觸更大的專案、嘗試擔任不同的角色、提高開發的速度、提昇軟體的品質。
所以,我曾經服務過的幾間公司者會實施Review制度。Review的對象可以從文件、到Code。如果別人看不懂你寫的Code,別人如何幫你Review呢?
如果別人看不懂你寫的Code
也許就會發生幾種可能:
- 我們所實施的代理人制度,就會因為代理人看不懂Programmer的Code,讓代理人無法接續工作,那代理人制度就不會落實;
- 我們所實施的職務分工制度,就會因為開發組寫出維護組看不懂的Code,使維護組無法接續maintain code的工作;
- 我們所實施的工作輪調制度,就會因為別人看不懂你寫的Code,讓流調者無法接手你的工作。
更何況有些公司根本也沒有「團隊合作」,當這些學生工作個幾年,開始變資深後,他們能處理更大的專案嗎?我想不行!
小結
我自己曾想過造成這個情況的原因,我發現這些教授中真的具有開發大型專案經驗的人區指可數。
既然他們沒有這些經驗,就不知道在實務中是如何透過團隊合作模式來開發專案,更不知道團隊合作的重要性了,自然也不會在課堂中教學生了。
這也許是台灣的軟體業和外國相比落後的一個潛在因素,只是一直沒有人重視!
沒有留言:
張貼留言