結(jié)對(duì)編程成功的背后
讓我們一起探索分析結(jié)對(duì)編程成功的特征原因。
結(jié)對(duì)編程正在逐漸成為主流的編程方式。有著兩年結(jié)對(duì)編程經(jīng)驗(yàn)的我注意到,結(jié)對(duì)編程真的很棒,甚至可謂是神奇。但有時(shí)候,卻又阻礙了我們的開(kāi)發(fā)進(jìn)程。我想探究這背后的原因,并搞清楚如何才能讓結(jié)對(duì)編程一直發(fā)揮正能量的模式和方法。
我的結(jié)對(duì)經(jīng)驗(yàn)
我認(rèn)為先說(shuō)明我自己的結(jié)對(duì)編程經(jīng)驗(yàn),有助于各位更好地評(píng)估以下的相關(guān)內(nèi)容。我已經(jīng)結(jié)對(duì)編程將近兩年時(shí)間,就職過(guò)2家不同的公司。一家是咨詢公司,我們開(kāi)發(fā)了客戶端應(yīng)用程序。另一家是創(chuàng)業(yè)企業(yè),開(kāi)發(fā)了一個(gè)大型的SaaS產(chǎn)品。在這段時(shí)間,超過(guò)20個(gè)有著不同背景、性格、技能、經(jīng)驗(yàn)和文化的開(kāi)發(fā)人員和我結(jié)對(duì)編程。
邊注:結(jié)對(duì)編程還有一個(gè)好處就是能讓我與很多厲害的人共事,成為朋友。
有效結(jié)對(duì)的特征
回想我以往的結(jié)對(duì)經(jīng)驗(yàn),很多好的壞的體驗(yàn)似乎一下子歷歷在目,恍如昨天。我將此總結(jié)成為2*2的矩陣。
結(jié)對(duì)編程矩陣
定義
效率代溝
從我的觀察角度來(lái)看,兩個(gè)個(gè)體結(jié)對(duì)時(shí)相關(guān)性******區(qū)別化的因素就是兩者之間的效率。這些因素包括——他們以往各自的經(jīng)驗(yàn)、領(lǐng)域知識(shí)、語(yǔ)言知識(shí),等等。效率的另一種表達(dá)方式就是他們各自的輸出潛力,包括速度和質(zhì)量。為了討論的方便,在這篇文章中會(huì)把高效和低效的程序員分別形容為“高級(jí)開(kāi)發(fā)人員”和“低級(jí)開(kāi)發(fā)人員”。
利好
兩個(gè)人結(jié)對(duì)編程比各自獨(dú)立工作的期望優(yōu)勢(shì)。
效率差距小的結(jié)對(duì)編程
根據(jù)我的經(jīng)驗(yàn),效率差距小的結(jié)對(duì)編程普遍比差距大的要更好。原因或許是因?yàn)殚_(kāi)發(fā)人員擁有的共性更多,交互時(shí)也更自在。在矩陣中列出的要點(diǎn)已經(jīng)非常清楚。從本質(zhì)上講,差距小就意味著他們更能理解和相互尊重,愿意經(jīng)常溝通,共同學(xué)習(xí)進(jìn)步。這將是一場(chǎng)愉快又雙贏的互動(dòng)。
弱弱結(jié)對(duì)
我的觀察結(jié)果告訴我,弱弱結(jié)對(duì)比強(qiáng)強(qiáng)結(jié)對(duì)的利好更多。為什么呢?大概是因?yàn)榈图?jí)開(kāi)發(fā)人員意見(jiàn)性不強(qiáng),沒(méi)有那么自負(fù),更注重學(xué)習(xí),而不是堅(jiān)持自己是“正確”的。
你知道“新同學(xué)交友”效應(yīng)嗎。假設(shè)你還是一個(gè)孩子,在某個(gè)學(xué)年中途隨你的家人搬遷到一個(gè)陌生的小鎮(zhèn)上。這時(shí)候如果班上另外一個(gè)孩子大約也是在相同時(shí)間轉(zhuǎn)學(xué)過(guò)來(lái)的,那么你們更容易成為朋友,因?yàn)槟銈兊奶幘诚嗤?。結(jié)對(duì)編程也是如此。如果你們對(duì)某個(gè)新的應(yīng)用/技術(shù)/語(yǔ)言/等等都不熟悉,那么之后的研究探索,由于處在平等的位置,你們不但更談得來(lái),而且合作解決問(wèn)題的時(shí)候更契合。
兩個(gè)低級(jí)開(kāi)發(fā)人員結(jié)對(duì)的首要目標(biāo)應(yīng)該是學(xué)習(xí)。
強(qiáng)強(qiáng)結(jié)對(duì)
如果是兩個(gè)高級(jí)開(kāi)發(fā)人員結(jié)對(duì)編程,搭檔起來(lái)會(huì)很難。因?yàn)槊總€(gè)程序員都是不同的,想法和意見(jiàn)也不盡相同。經(jīng)驗(yàn)越豐富,越傾向于堅(jiān)持自己的觀點(diǎn),并且還會(huì)越自大。而當(dāng)其中一個(gè)人過(guò)于自大時(shí),另一個(gè)人就只能當(dāng)“應(yīng)聲蟲”了。
更糟糕的是,如果兩個(gè)人都很自大。此時(shí)他們會(huì)不斷地爭(zhēng)執(zhí)爭(zhēng)辯以在駁倒對(duì)方,于是兩人之間的關(guān)系會(huì)緊張,充滿敵意。我見(jiàn)過(guò)更糟糕的是,兩個(gè)人甚至從頭到尾一句話都不說(shuō),這顯然是負(fù)面效應(yīng)了。
良好的強(qiáng)強(qiáng)結(jié)對(duì)應(yīng)該是相互尊重的。相互交流,辯論,討論,還有規(guī)劃,一起創(chuàng)造專業(yè)化的水平。強(qiáng)強(qiáng)聯(lián)合導(dǎo)致的是雄厚的生產(chǎn)能力。
所以,兩個(gè)高級(jí)開(kāi)發(fā)人員結(jié)對(duì)的首要目標(biāo)應(yīng)該是產(chǎn)量。
強(qiáng)弱結(jié)對(duì)
這種結(jié)對(duì)安排往往發(fā)生在有新的開(kāi)發(fā)人員加入公司,或切換到新的開(kāi)發(fā)環(huán)境的時(shí)候。為新來(lái)的人員搭檔一個(gè)高級(jí)開(kāi)發(fā)人員,能讓前者快速融入到團(tuán)隊(duì)中。但是如果選擇的這個(gè)高級(jí)開(kāi)發(fā)人員不合適,那么就有可能損害低級(jí)開(kāi)發(fā)人員的信心和士氣。
期望
首先領(lǐng)導(dǎo)人員必須明白人員安排的目的是盡可能快地推動(dòng)開(kāi)發(fā)進(jìn)程。任何有著利害關(guān)系的人員也應(yīng)該明白這個(gè)道理,這些人員包括其他開(kāi)發(fā)人員、設(shè)計(jì)人員、QA等,尤其是高級(jí)開(kāi)發(fā)人員。并且我們不應(yīng)該給這個(gè)老帶新的組合很多壓力。
輸出速度會(huì)變慢,因?yàn)樯a(chǎn)的同時(shí)發(fā)生了指導(dǎo)。
指導(dǎo)
高級(jí)開(kāi)發(fā)人員應(yīng)該明白他們的角色是指導(dǎo)低級(jí)開(kāi)發(fā)人員,而不是迅猛生產(chǎn)。
好的導(dǎo)師,愿意聆聽(tīng)和回答問(wèn)題,觀察并提出引導(dǎo)性的問(wèn)題。
但是人的本性讓我們很難做到如此。下面是一些要點(diǎn):
不要告訴他們要打什么,要做什么,也不要直接就演示給他們看。不可否認(rèn)這樣會(huì)省事很多。但是你應(yīng)該讓他們看到自己所犯錯(cuò)誤的后果,讓他們自己去思考為什么這樣不對(duì),讓他們自己糾正錯(cuò)誤。允許他們問(wèn)問(wèn)題,然后用引導(dǎo)性的問(wèn)題回答他們,讓他們自己去探索。如果他們陷入了死胡同,就伸手拉一把。
我記得有一次我和一個(gè)完完全全的新手同事結(jié)對(duì)完成任務(wù)。因?yàn)槟菚r(shí)壓力真的很大,我選擇了毫不留情地拖著他往前沖。雖然也經(jīng)常道歉,但明顯他的心情一直很糟糕。
好的導(dǎo)師應(yīng)該具備充足的耐心和自信,積極促進(jìn)低級(jí)開(kāi)發(fā)人員的成長(zhǎng),而不是讓他們成為人云亦云的應(yīng)聲蟲。但是在這個(gè)領(lǐng)域,這樣的導(dǎo)師實(shí)在是太少了。每個(gè)人都忙著完成自己的事情,又或者根本就沒(méi)有教導(dǎo)他人的技能。下面這些問(wèn)題或許有助于我們確定某人是否是一個(gè)好導(dǎo)師:
是否愿意與低級(jí)開(kāi)發(fā)人員分享知識(shí),幫助他們?是否嫉妒低級(jí)開(kāi)發(fā)人員的技能,或是反感他們提出意見(jiàn)和見(jiàn)解?是否愿意犧牲自己的舒適力爭(zhēng)團(tuán)隊(duì)的利好?
高級(jí)和低級(jí)開(kāi)發(fā)人員結(jié)對(duì)的首要目標(biāo)應(yīng)該是指導(dǎo)和學(xué)習(xí)。
結(jié)論
正如我上面分析的那樣,每種結(jié)對(duì)情況都是不一樣的,關(guān)鍵是要承認(rèn)他們的不同,了解如何使其能夠更大地利好于團(tuán)隊(duì)。
祝編程快樂(lè)!