周末去聽(tīng)Hadoop大會(huì),看見(jiàn)的都是玩兒開(kāi)源項(xiàng)目的好手,突然就想起敏捷了。敏捷強(qiáng)調(diào)溝通,尤其是面對(duì)面的溝通,并且有每日例(立)會(huì),iteration plan meeting, 還有retrospect meeting。突然就在想,開(kāi)源項(xiàng)目常常聚集來(lái)自不同國(guó)家的人,他們很多時(shí)候根本互相不認(rèn)識(shí),兩個(gè)不同公司不同時(shí)區(qū)不同國(guó)家的人咋面對(duì)面溝通啊?咋聚齊開(kāi)會(huì)啊?人家平時(shí)溝通全靠mail, 但是他們做大項(xiàng)目也能成功,人家是怎么做到的?我們搞敏捷,這么神奇的武器,開(kāi)發(fā)過(guò)程仍然捉襟見(jiàn)肘,還不如開(kāi)源項(xiàng)目有序,為什么?
猜想世界范圍的開(kāi)源項(xiàng)目溝通成本高,所以他們必須千方百計(jì)降低溝通需要,通過(guò)一些手段可以做到,比如
一,清晰,自然的架構(gòu)。
二,高質(zhì)量代碼,代碼像文檔一樣流暢。
三,模塊化,面向接口。
四,務(wù)實(shí)的文檔。
五,自動(dòng)化測(cè)試。
……
有些溝通是必然免不了的,比如需求的溝通,我覺(jué)得最復(fù)雜的需求溝通往往起因于程序員不了解行業(yè)領(lǐng)域知識(shí),而開(kāi)源項(xiàng)目往往是工具類(lèi),框架類(lèi)的項(xiàng)目,絕大多數(shù)不涉及特定行業(yè)領(lǐng)域知識(shí),了解“domain”的門(mén)檻不高,所以需求方面的溝通要求天生就相對(duì)較低。我們平時(shí)工作的很多溝通來(lái)自于技術(shù)問(wèn)題的溝通,我絕不懷疑,技術(shù)手段能夠降低溝通技術(shù)問(wèn)題的需求,而一個(gè)不那么倚重程序員溝通技術(shù)問(wèn)題就能把技術(shù)做好的項(xiàng)目,才說(shuō)明技術(shù)風(fēng)險(xiǎn)低,技術(shù)好。一些事情,比如技術(shù)選型,的確需要Involve比較多的人討論。但是當(dāng)技術(shù)選型確定,模塊劃分清楚,接口清晰之后,技術(shù)溝通的需求就應(yīng)該比較低了。有的時(shí)候技術(shù)上會(huì)遇到一些dilemma,這樣寫(xiě)程序不好,那樣寫(xiě)也不對(duì),有時(shí)候確實(shí)是因?yàn)榧夹g(shù)本來(lái)也沒(méi)有完美的解決方案,總要trade off掉一些事情。但更多時(shí)候是因?yàn)榧軜?gòu)不好,才引發(fā)了隨后的種種麻煩。程序員之間扯皮什么事情該誰(shuí)做,是不是因?yàn)槟K化做得不好?“xx,你給我講講某塊代碼實(shí)現(xiàn)吧,我懶得看了”,是程序員懶還是程序?qū)嵲谑且粓F(tuán)漿糊,慘不忍睹?同一個(gè)問(wèn)題A給B解答一邊,給C解答一邊,后面還有E,F,G….是不是早該寫(xiě)好文檔?
coding的工作不神圣,但確實(shí)不同的人做出的設(shè)計(jì)可以大相徑庭,同一個(gè)功能背后的代碼也可以天差地遠(yuǎn)。做產(chǎn)品不是靠人堆出來(lái)的,三個(gè)臭皮匠頂不了一個(gè)諸葛亮,三個(gè)臭皮匠還不如一個(gè)臭皮匠,因?yàn)榘才乓粋€(gè)諸葛亮可以帶好一個(gè)臭皮匠,三個(gè)臭皮匠能把諸葛亮也熏臭了。開(kāi)發(fā)團(tuán)隊(duì)?wèi)?yīng)該是全高手陣營(yíng),人不必多,但要個(gè)頂個(gè)而的強(qiáng)。玩兒開(kāi)源項(xiàng)目的人都是有熱情的程序員,往往都是高手,程序員用程序說(shuō)話就好了,電話不用天天打也不耽誤溝通。
跑下題說(shuō)team work. 最近在想,team work表面上看是相對(duì)于個(gè)人英雄主義來(lái)說(shuō)的,仔細(xì)一想,其實(shí)個(gè)人英雄主義應(yīng)該是team work的前提。程序員就是要有這樣的本領(lǐng),當(dāng)他把手放在鍵盤(pán)上的時(shí)候,就能源源不斷創(chuàng)造價(jià)值。一個(gè)人沒(méi)單打獨(dú)斗的能力,就沒(méi)資格談team work, 笨蛋當(dāng)然喜歡team work了,不然很容易暴露自己的無(wú)知和無(wú)能。