最近部門為了提高工作效率,決定推行一系列規(guī)范化管理。其中之一就是版本控制。SVN作為近年逐漸興起的新一代版本控制管理工具,加上開源的特點(diǎn),當(dāng)仁不讓地成為我們的第一選擇。
如何開展版本控制呢?剛開始的時(shí)候想得很簡單。心想“我們只要搭建個(gè)SVN服務(wù)器,配置好權(quán)限。然后發(fā)一封郵件,大家肯定會(huì)一呼百應(yīng)。畢竟這是會(huì)上領(lǐng)導(dǎo)重點(diǎn)提出的要求,再加上對(duì)他們有好處,可以提高工作效率,推廣起來肯定是不費(fèi)吹灰之力的”。可是做的往往沒有想的那么容易。
挑戰(zhàn)1:歷史原因
客戶的現(xiàn)有平臺(tái)是90年代搭建起來的,使用的都是古老的技術(shù),當(dāng)時(shí)沒有版本控制的概念。現(xiàn)在要重拾版本控制,談何容易!光是上百個(gè)日常應(yīng)用累都累死你,更不要說那些躺在角落九千年沒人用的應(yīng)用,有些連源代碼都沒有了!只有class文件。真想殺人!
挑戰(zhàn)2:工作習(xí)慣
前面提到的客戶的現(xiàn)有平臺(tái)如此混亂,其中一個(gè)最大的原因就是平時(shí)沒有養(yǎng)成版本控制的習(xí)慣。對(duì)程序的版本控制就是簡單的拷貝-->復(fù)制-->加上日期重命名。所以在一個(gè)項(xiàng)目下可以看到幾十個(gè)帶時(shí)間的備份文件,或者諸如bak1,bak2之類慘不忍睹的文件名。
這些人由于平時(shí)松散慣了,你現(xiàn)在突然要改變他們的工作習(xí)慣和方式,他們會(huì)不自主地產(chǎn)生一種“消極對(duì)待或抵抗”的情緒。之前沒有版本控制不也是過來了,搞什么版本控制嘛?所以說項(xiàng)目管理中最大的成本是什么:是人;最耗時(shí)的改變是什么:改變?nèi)说墓ぷ鞣绞胶土?xí)慣。要強(qiáng)行推行一種技術(shù)不難,但要改變一個(gè)人的習(xí)慣很難。
由于這種潛意識(shí)里的抵抗情緒,所以客戶同事會(huì)用各種理由來阻止使用版本控制。比如說IDE不兼容啊,操作麻煩啊。
挑戰(zhàn)3:誤解
在當(dāng)初部門會(huì)議上提出推行版本控制的時(shí)候,我就知道肯定會(huì)有些人事會(huì)對(duì)我們有意見,認(rèn)為我們是為了出風(fēng)頭或控制大權(quán)而故意推行的。果不其然過幾天后就開始有些同事說一些酸溜溜的話。如果沒有足夠的心里的準(zhǔn)備,這個(gè)時(shí)候的打擊是很大的。
挑戰(zhàn)4:經(jīng)驗(yàn)
由于整個(gè)部門之前沒有任何版本控制的正規(guī)經(jīng)驗(yàn),所以我和另外一個(gè)同事都是摸著石頭過河,不能拿生產(chǎn)環(huán)境下手,什么事情都得在自己技巧上,測試機(jī)器上測試通過,確保萬無一失才敢部署上服務(wù)器。期間我們遇到了很多瑣碎的問題,有些雖然小卻足以浪費(fèi)你一個(gè)下午的時(shí)間。
一個(gè)負(fù)責(zé)SVN同事面對(duì)這種情況,一開始有點(diǎn)落差,顯得有點(diǎn)恨鐵不成鋼的感覺。我向他解析:別看現(xiàn)在我們是裝個(gè)工具,配置下權(quán)限。其實(shí)事件的深層次是我們要改變他們熟悉的工作方式和習(xí)慣。讓他們有了一種受威脅的感覺,從而產(chǎn)生抗拒感。這是人的一種本能,是對(duì)事不對(duì)人的。我們只能一步步來,慢慢地過渡。
方法1:加大宣傳
針對(duì)部門平時(shí)的工作情況,我們找出了由于不使用版本控制而帶來的一系列麻煩。因?yàn)檫@些麻煩多數(shù)人都遇到,所以在談到這些問題時(shí)首先已經(jīng)擊中他們的要害。通過培訓(xùn),交談等方式重點(diǎn)宣傳使用SVN的好處,只有讓客戶感到有好處我們才能繼續(xù)開展下去。
方法2:主動(dòng)出擊
剛開始我們幾個(gè)同事部署好了SVN,卻沒有人愿意使用,這確實(shí)很打擊我們的士氣。于是我們決定主動(dòng)出擊,主動(dòng)發(fā)郵件通知大家,邀請(qǐng)大家以嘗試的方式先把項(xiàng)目放到我們的版本庫進(jìn)行控制,并承諾對(duì)出現(xiàn)的問題,在力所能及的范圍內(nèi)我們都會(huì)盡快解決,這樣很快有了“第一個(gè)客戶”。
方法3:曲線救國
很多同事一開始對(duì)版本控制并不感冒,好既然我正面說不動(dòng)你,那我就來個(gè)曲線救國,釜底抽薪:我先說服客戶,讓客戶同意從SVN中check out/in代碼,而不從其它途徑獲取代碼;或者我直接找上級(jí)領(lǐng)導(dǎo),以行政命令的方式代替日常的說服,這樣就斷了他們的后路,你不用版本控制也不行了。
不過我不喜歡這種方式,至今也沒有使用這種方式。因?yàn)檫@是一種半強(qiáng)迫式的做法。是失敗的管理者采用的粗暴簡單手段。俗話說:攻城為下,攻心為上。不讓同事客戶明白使用SVN的好處,他們是不會(huì)真正配合的。我還是會(huì)堅(jiān)持上面的兩種方法的。
方法4:操作便利
任何一項(xiàng)工具或服務(wù),假如沒有提供便利的操作,哪怕好處說破天也不會(huì)有人用。沒人會(huì)因?yàn)榧夹g(shù)而技術(shù)。所以我們?cè)谕茝VSVN的時(shí)候,除了注意強(qiáng)調(diào)SVN的好處,還必須注意如何為同事,客戶提供最便利的操作服務(wù)。因?yàn)槲覀冮_發(fā)小組和客戶一個(gè)處于廣州,一個(gè)處于香港,網(wǎng)絡(luò)不同。客戶出于安全考慮不愿通過普通公網(wǎng)訪問我們版本庫,但如果版本庫建在客戶處,我們又經(jīng)常需要以VPN的方式登陸然后check in/out,這在大數(shù)據(jù)量的check in/out時(shí)非常緩慢而且會(huì)斷開原來的網(wǎng)絡(luò)連接,用戶體驗(yàn)很差。
針對(duì)這種情況我們將會(huì)采用Apache + SVN構(gòu)建SSL的方式,提供加密方式的SVN連接。即免去客戶的顧慮,也免除我們同事使用的麻煩。更可以脫離公司內(nèi)網(wǎng)的限制隨時(shí)隨地進(jìn)行版本控制。
通過最近這些日子的工作,我深深地體會(huì)到項(xiàng)目管理的難處,這種難處很多時(shí)候比寫不出程序更打擊人,但更有挑戰(zhàn)性和學(xué)習(xí)意義。版本控制之路,路漫漫其修遠(yuǎn)兮,吾將上下而求索。
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。