再談軟件開發的合作


差不多4年前,我在我的博客上發表了一篇文章——《五年多一線開發經歷告訴我:軟件開發——幾乎不可能cooperate的工作》,地址:http://www.cppblog.com/guogangj/archive/2009/05/14/82909.html

我的觀點是:軟件開發工作是高度依賴腦力運動的工作,而高智商的程序員卻“一山難容二虎”,無法合作。當然了,斷章取義地把這話單獨寫在這里必定會遭到很多人的反對意見,但如果誰仔細閱讀了我這篇文章之后,估計持反對意見的概率就小很多。直到去年(2012)我讀了《軟件隨想錄》之后,在里面發現了一個觀點,正是我想表達的意思:

世界上只有一件事比你自己設計軟件更苦難,那就是一個團隊一起設計軟件。

這正是我想說的!

這幾年來我的遭遇正好也印證了這個觀點,大約就是三年前,我還在以前公司的時候,有一個新項目,要設計一種新的產品,涉及面很廣,並且沒有明確具體的產品定義,只有大概的,大老板給出了很緊迫的時間,要求馬上弄出一種方案出來,開會我們也開了若干次,可進展極慢,尤其是我,我感覺我在這個項目中就是一個外人,根本融入不進去,因為在那個團隊中,我最年輕,在公司的資歷也最淺,自我認為“哪里輪得到自己發言”?於是我有些怠工,而其他人也積極不去哪里,可能大家都有這種感覺,反正一個人拍不了板,自己設計出來的東西也許最后也不被采納,於是積極性很低,直到我離開那公司,那個項目究竟用什么方案,都沒有最后拍板,這是一個典型的用團隊去做設計的失敗案例。

在之后的日子里,我有單干過一些項目,也有團隊的合作,我漸漸總結出了一些規律,也漸漸明白如何去運作一個軟件開發團隊。

我不得不說,一個人的戰斗還是頗有成效的,如果項目不大,一個人能應付得來,那讓一個人做,那樣效率還是最高的,因為不需要那么多的溝通,相當於節省了溝通成本。

這個人從一開始就負責方案的設計,這個設計出來的方案由他一個人拍板即可,而領導只需要確認功能點即可,不能干預設計,因為如果干預,就會降低這個負責人的積極性,使他產生一定的“挫折感”,漸漸覺得這個項目不是他的項目,於是開始怠工。

也許你會說:要是這個負責人能力不足,寫出來的東西完全不符合要求怎么辦?必須還是得領導大量的參與才行啊。——我說不行,項目成功的最關鍵,還是先選對人,如果選了一個能力不足的人,后面領導再怎么給他“指點江山”,都無濟於事,只會越指越亂,領導就是要學會放開,讓能力勝任的人去負責一個項目,這個負責人應該要負責整個項目的設計工作,在這一點上,一個人單干和團隊並沒有什么分別,那就是:設計工作始終一個人來做,這個人,就是項目的負責人。

軟件開發更類似於“藝術創作”類的工作,而不是科研,軟件行業從業多年的人一定清楚這點,程序員是“藝術家”,而不是“科學家”,我個人的職業能力偏向測試也正好是藝術型+工程型(職業能力偏向有6大類,藝術、科研、工程、社交、企業和事務),而且還是藝術型為主要能力偏向。如果把一個軟件項目看作是拍一部電影,那這個項目的負責人就是電影的導演,至今我沒見過由一個團隊充當一部電影導演的例子,而領導則是電影的投資人,投資人找導演,准備要拍一部怎樣怎樣的電影,然后由導演去執行,具體電影怎么拍,如何編劇,如何設計場景和人物刻畫,這些都是導演的工作,你認為投資人應該干預嗎?投資人要做的事情,就是選對導演,然后就就把腳翹到辦公桌上,再一手拿張報紙,一手端起茶杯,等着這部影片帶來的收益。

正如一部電影光憑導演一人之力,是無法完成的,很多稍微大一點的軟件項目,也沒辦法一個人單干,這就涉及到了合作,我幾年前的博客所說的“無法合作”,其實指的是設計工作無法合作,其它方面則是很需要合作的。

項目負責人,首先要做的事情,就是將一個項目的框架描繪出來,這是總體設計,(或稱“概要設計”),如確定使用什么平台,什么數據庫,什么技術框架,划分為多少模塊……

根據項目的規模以及團隊的成熟度,接下來的工作可能就有些不太一樣,如果這是一個新的團隊,且只有兩三個人,那么這位負責人恐怕就要做更多更細的工作,他得編寫項目的基礎代碼,規范編碼,可能還要負責給項目成員培訓業務及技術,培訓看起來是低效的事情,可如果真正把團隊建設好了,你會發覺培訓的開銷是值得的,當然我並不是說一定要到培訓教室,打開投影儀,播放ppt這種方式,培訓可以發生在任何時候,在工作中一對一的指導,可能更為有效,這就需要這位“導演”有着扎實的基本功,精通技術,掌握業務,上能應付領導,下能建設團隊,還能根據實際情況適當調整項目開展的策略,隨時解決項目中所遇到的各種問題,這樣的人確實比較難找,但這是一個項目成功的關鍵。

那是不是說,需要一個“超人”來負責項目?這個“超人”凡事親躬,大大小小事情都要處處到位?當然不是,就如一個導演再怎么厲害,也不可能掌握電影制作的全部細節,即使掌握,也不可能有那么多的時間,導演必須清楚他是這部電影是設計者,他需要把一些工作交給更專業的人士去做,所以有了服飾設計、燈光效果、音響配樂、演員化妝、武術指導、電腦特效……等等專業人士的參與,導演對這些領域應該都有所了解,不可能完全陌生,否則就無法安排工作去實現自己的設計,但他一定需要這些專業人員的協助,這就是合作。

項目大到一定程度,就需要細分,把一個大的項目划分為若干個小的項目,不變的是:同一個設計,只能交給一個人來做。

隨着團隊的發展,其中的一些組員可能也漸漸地顯露出了自己在“設計”上的才能,這個時候項目負責人就可以拆分出一些小的項目交給他去設計,一來可以減少自己的工作量,讓自己有更多的時間去思考大局,另一方面也很能激發組員的積極性,使得項目朝着良性的方向發展。

這就是軟件開發的合作方式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM