自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

結(jié)對(duì)編程 VS 代碼審查:對(duì)比開(kāi)發(fā)者文化

開(kāi)發(fā) 后端 前端
從上一份工作到現(xiàn)在的這份工作,我從結(jié)對(duì)編程的開(kāi)發(fā)文化過(guò)渡到同行代碼審查,這個(gè)轉(zhuǎn)變過(guò)程是一個(gè)非常有趣的經(jīng)歷。我認(rèn)為我要記錄下些我所注意到的變化。

從上一份工作到現(xiàn)在的這份工作,我從結(jié)對(duì)編程的開(kāi)發(fā)文化過(guò)渡到同行代碼審查,這個(gè)轉(zhuǎn)變過(guò)程是一個(gè)非常有趣的經(jīng)歷。我認(rèn)為我要記錄下些我所注意到的變化。

你可以找到很多標(biāo)題是/(結(jié)對(duì)編程|代碼審查)的(利|弊)/這種樣式的文章,這些文章的作者都可以給出一套清晰且有說(shuō)服力執(zhí)行方案。我認(rèn)為只要權(quán)衡它們的利弊,這兩種方案都是非常有效率的。我想就兩者的權(quán)衡策略提供些相對(duì)客觀的討論。 

專有名詞的定義

因?yàn)?ldquo;結(jié)對(duì)編程”和“代碼審查”這2個(gè)名詞都有很多種完全不同的解釋,所以首先讓我來(lái)定義下這篇文章中這2個(gè)名詞的含義。

當(dāng)我提到結(jié)對(duì)編程文化,我指的是一個(gè)幾乎可以做到100%配對(duì)開(kāi)發(fā)的團(tuán)隊(duì)。其實(shí)就是2位開(kāi)發(fā)人員在屏幕前合作完 成一項(xiàng)任務(wù)。一位開(kāi)發(fā)人員操作,另一位指導(dǎo)。兩位開(kāi)發(fā)人員都參與到了代碼構(gòu)建的過(guò)程中。每天的編程,開(kāi)發(fā)工作就是與你的搭檔不斷交流。一旦小組(2位開(kāi)發(fā) 人員)完成任務(wù),完成的代碼就直接提交給負(fù)責(zé)人且不需要進(jìn)一步的審查。

當(dāng)在會(huì)議室里大家緊盯投影儀上的代碼時(shí),代碼審查文化可能會(huì)帶給團(tuán)隊(duì)很多想法——至少對(duì)我來(lái)說(shuō)是這樣的。當(dāng)然這 不是我對(duì)代碼審查的定義,這里我指的是借助自動(dòng)化工具的同行代碼審查的過(guò)程。通過(guò)使用像Gerrit Patchsets 或是 GitHub Pull Requests這種運(yùn)行機(jī)制, 開(kāi)發(fā)人員自行編程并將完成的代碼提交給團(tuán)隊(duì)的其他成員進(jìn)行審查。逐行注釋是用來(lái)對(duì)代碼風(fēng)格、代碼功能性進(jìn)行質(zhì)疑和評(píng)論的。一旦一項(xiàng)提交被審核通過(guò),就會(huì)把 它交給負(fù)責(zé)人。

成功的前提條件

兩種文化之間其實(shí)有些無(wú)可爭(zhēng)議的共同點(diǎn):

  • 穩(wěn)固且持續(xù)的整合開(kāi)發(fā):基于每項(xiàng)任務(wù)的構(gòu)建過(guò)程

  • 牛X的核心開(kāi)發(fā)人員:這些家伙可以幫助提高代碼庫(kù)的質(zhì)量并完善體系結(jié)構(gòu)。

  • 代碼質(zhì)量的重要性:團(tuán)隊(duì)以及整個(gè)公司都知道保持一個(gè)高質(zhì)量的代碼庫(kù)的價(jià)值。

  • 不斷的自組織:整個(gè)團(tuán)隊(duì)愿意定期評(píng)估并矯正調(diào)整他們的開(kāi)發(fā)過(guò)程 

結(jié)對(duì)編程的樂(lè)趣

接下來(lái)談一下結(jié)對(duì)編程。這真的是一次很棒的經(jīng)歷,每個(gè)人都應(yīng)該感受下。你可以找到其他贊美結(jié)對(duì)編程實(shí)踐效果的文章,但請(qǐng)讓我在這簡(jiǎn)單的總結(jié)一下。

 

[[145908]]

搭檔間似乎有一條高速交流通道,我們可以利用這點(diǎn)帶給團(tuán)隊(duì)很多好處。你可以給菜鳥(niǎo)開(kāi)發(fā)人員搭配個(gè)大神以此來(lái)培訓(xùn)他。因?yàn)楹诵拈_(kāi)發(fā)人員可以在團(tuán)隊(duì)中快速傳播***的實(shí)踐經(jīng)驗(yàn)和技術(shù)知識(shí)。這樣,新的工具與技術(shù)自然而然就可以在團(tuán)隊(duì)中得到分享,每個(gè)人都會(huì)進(jìn)步。

兩個(gè)人結(jié)對(duì)編程可以共同分擔(dān)每天的工作的壓力和精力。有時(shí)這些狀態(tài)的起伏都是相互的。當(dāng)一個(gè)人工作正勁而另一個(gè)分神時(shí),狀態(tài)好的可以幫助另一個(gè)集中注意力。而當(dāng)兩個(gè)人同時(shí)注意力高度集中時(shí),那這工作效率是要逆天的節(jié)奏啊,他們互相可以依靠、信賴。

一個(gè)總是一起工作的小伙伴可以促進(jìn)自我提高;每個(gè)人都想在他們尊重的人面前表現(xiàn)出色。而且這時(shí)我們往往更容易做出些策略決定,同時(shí)也會(huì)帶來(lái)更好的工作氣氛:兩個(gè)人都不會(huì)輕易的選擇捷徑,經(jīng)常會(huì)就某個(gè)問(wèn)題進(jìn)行權(quán)衡討論。

代碼集體所有權(quán)這個(gè)概念更容易被接受,因?yàn)榇a都是至少兩人合作完成的。這些使得整個(gè)團(tuán)隊(duì)能以更積極的心態(tài)面對(duì)失敗。 

結(jié)對(duì)編程是團(tuán)隊(duì)平衡的指向標(biāo)

當(dāng)一切都很順利的時(shí)候,結(jié)對(duì)編程看上去是那么的美好,但它同時(shí)也是只不羈的野獸需要去掌控。結(jié)對(duì)編程的效率可以充分反映團(tuán)隊(duì)的平衡。結(jié)對(duì)編程對(duì)訓(xùn)練 菜鳥(niǎo)來(lái)說(shuō)是非常好的一個(gè)方法,但是過(guò)分的稀釋核心人才,將他們分配給所有的初級(jí)開(kāi)發(fā)人員會(huì)破壞團(tuán)隊(duì)的生產(chǎn)力和氛圍。當(dāng)一個(gè)團(tuán)隊(duì)有過(guò)多的初級(jí)開(kāi)發(fā)員,這種現(xiàn) 象會(huì)發(fā)生的更快,結(jié)對(duì)編程就變成了場(chǎng)人才調(diào)配的俄羅斯方塊游戲。

同樣的平衡問(wèn)題也會(huì)影響到知識(shí)庫(kù)。結(jié)對(duì)編程對(duì)于改進(jìn)、重構(gòu)之前的知識(shí)庫(kù)非常有效。一但一個(gè)新的庫(kù)或者分支被建立起來(lái),就會(huì)增加結(jié)對(duì)人員分配和輪換的難度。

團(tuán)隊(duì)需要不停的發(fā)現(xiàn)類似問(wèn)題并盡早加以改正。知識(shí)和人才的失衡會(huì)導(dǎo)致團(tuán)隊(duì)效率降低,更有可能破壞項(xiàng)目進(jìn)程。

結(jié)對(duì)編程文化會(huì)滋生單一文化

結(jié)對(duì)編程是個(gè)較為高強(qiáng)度的實(shí)踐方法,它并不適合每個(gè)開(kāi)發(fā)人員。這就意味著一個(gè)團(tuán)隊(duì)要想采用結(jié)對(duì)編程,就必須招募那些在項(xiàng)目中熱愛(ài)與人交流的開(kāi)發(fā)人員。團(tuán)隊(duì)必須權(quán)衡其中的利弊,這樣才能達(dá)到結(jié)對(duì)編程的效果。

招募隊(duì)員的評(píng)價(jià)標(biāo)準(zhǔn)也層出不窮。每個(gè)開(kāi)發(fā)人員都應(yīng)該問(wèn)問(wèn)自己,“我是否愿意每天坐在別人旁邊和他一起編程、工作?”。這些問(wèn)題對(duì)建設(shè)一個(gè)和諧團(tuán)隊(duì)是 非常重要的,但同時(shí)這些問(wèn)題也會(huì)引起隊(duì)員間淺意識(shí)的恐懼與偏見(jiàn)。千萬(wàn)別雇傭和團(tuán)隊(duì)成員性格、背景截然不同的開(kāi)發(fā)人員,他很有可能會(huì)破壞團(tuán)隊(duì)氣氛。

結(jié)對(duì)編程會(huì)幫助團(tuán)隊(duì)根據(jù)自身的利益構(gòu)建統(tǒng)一的開(kāi)發(fā)環(huán)境(包括開(kāi)發(fā)工具、實(shí)踐方法、開(kāi)發(fā)技術(shù)),但它也會(huì)讓團(tuán)隊(duì)在開(kāi)發(fā)的道路上一意孤行。促進(jìn)技術(shù)產(chǎn)業(yè)的多樣性一直是項(xiàng)艱巨的任務(wù),而結(jié)對(duì)編程文化更容易同化整個(gè)團(tuán)隊(duì)。

結(jié)對(duì)編程不適于解決Hammock問(wèn)題

結(jié)對(duì)編程有益于項(xiàng)目持續(xù)發(fā)展和某些技術(shù)知識(shí)的共享,但結(jié)對(duì)編程不利于做出謹(jǐn)慎的決定以及創(chuàng)造力的發(fā)揮。只有在處理更大的系統(tǒng)架構(gòu)設(shè)計(jì)問(wèn)題,我們才能做出這類謹(jǐn)慎的決定。

特別當(dāng)大神與菜鳥(niǎo)配對(duì)時(shí),大神會(huì)在編程前先做程序設(shè)計(jì)而不是把時(shí)間“浪費(fèi)在”與菜鳥(niǎo)的交流上。這就會(huì)導(dǎo)致在程序設(shè)計(jì)中1+1<2。

有時(shí)候你需要代碼審查

當(dāng)一個(gè)使用結(jié)對(duì)編程的團(tuán)隊(duì)經(jīng)歷了上述種種問(wèn)題,核心開(kāi)發(fā)人員便會(huì)開(kāi)始懷疑搭檔們的業(yè)務(wù)能力。也許指不定在哪個(gè)配對(duì)小組中,兩個(gè)開(kāi)發(fā)人員都是菜鳥(niǎo)。漸 漸的團(tuán)隊(duì)間的信任就會(huì)出現(xiàn)危機(jī),這就意味著核心開(kāi)發(fā)人員會(huì)覺(jué)得應(yīng)該進(jìn)行代碼審核。因此這種團(tuán)隊(duì)間的信任危機(jī)會(huì)嚴(yán)重影響到結(jié)對(duì)編程的效果。 

[[145910]]

代碼審查的樂(lè)趣

起初,我覺(jué)得我會(huì)很不適應(yīng)代碼審查文化,因?yàn)槲乙呀?jīng)習(xí)慣了結(jié)對(duì)編程文化。但事實(shí)卻相反,剛開(kāi)始的體驗(yàn)讓我覺(jué)得如魚(yú)得水。

在代碼審查中,沒(méi)人會(huì)看到你還未完全滿意的代碼。因?yàn)殚_(kāi)發(fā)人員知道自己編寫的代碼最終都會(huì)被別人閱讀,所以保持好的編程風(fēng)格的壓力激勵(lì)著開(kāi)發(fā)人員。

與結(jié)對(duì)編程相比,代碼審查允許開(kāi)發(fā)人員可以對(duì)問(wèn)題進(jìn)行深入思考。你可以花上一小時(shí)在房間內(nèi)獨(dú)自思考、出去溜達(dá)尋找靈感、google下相關(guān)問(wèn)題的背景信息、閱讀相關(guān)學(xué)術(shù)論文或者做些其他的事情。這種自由度可以讓開(kāi)發(fā)人員找到更多解決問(wèn)題的方法,有利于整個(gè)代碼構(gòu)建的過(guò)程。

在一個(gè)使用代碼審查的團(tuán)隊(duì)中,你寫的代碼就代表自己,因?yàn)槟闩c同事們溝通的主要渠道就是你寫的代碼。這讓團(tuán)隊(duì)能包容更多個(gè)性迥異的開(kāi)發(fā)人員,在招募隊(duì)員時(shí)更有效率。你會(huì)很愿意與一位難以相處但代碼寫的非常好的開(kāi)發(fā)人員共事。

代碼審查是異步的,這就帶來(lái)了很多好處。首先,團(tuán)隊(duì)更容易為隊(duì)員們靈活地調(diào)整工作時(shí)間表。如果一個(gè)開(kāi)放人員從早上5點(diǎn)到中午的工作狀態(tài)很好,那再好 不過(guò)。如果另一個(gè)開(kāi)發(fā)人員要去夜校學(xué)習(xí),更傾向加班,這種情況也沒(méi)有問(wèn)題。你也可以有策略的分配代碼審查任務(wù),確保更多有經(jīng)驗(yàn)的開(kāi)發(fā)者加入到代碼審查的過(guò) 程中。這樣無(wú)形中提高了代碼的質(zhì)量,避免項(xiàng)目中的漏洞。

我還發(fā)現(xiàn)使用代碼審查更能促使你對(duì)自己提的意見(jiàn)的價(jià)值進(jìn)行思考。在結(jié)對(duì)編程的過(guò)程中,出于個(gè)人喜好或是強(qiáng)迫癥,你會(huì)忽略很多代碼細(xì)節(jié)。但在代碼審查 的過(guò)程中,你必須判斷你推薦給別人修改代碼的意見(jiàn)是不是合理、可靠。我自己也有些堅(jiān)持(放棄)建議的經(jīng)歷。我希望未來(lái)我能在這部分記錄我更多的感受。

代碼審查讓你變得孤單

結(jié)對(duì)編程文化與代碼審查文化最明顯的差別就是每天你總是一個(gè)人構(gòu)建代碼。對(duì)某些個(gè)性的人來(lái)說(shuō),這再好不過(guò)。但對(duì)我來(lái)說(shuō),這是個(gè)難以適應(yīng)的轉(zhuǎn)變。

當(dāng)然,有許多方式可以避免孤單帶給你的困擾。比如,和其他崗位的同事們呆在一起。我已經(jīng)經(jīng)歷了兩種截然不同的社交方式,想去了解 37 signals 的《remote work》這本書(shū)里面的論斷,也許它能給出如何處理不同社交方式的答案。

隱私 vs 自控

雖然你有在同事面前好好表現(xiàn)的動(dòng)力,但你是唯一清楚每天你在干嘛的人。你可以出去溜達(dá)一圈尋找解決問(wèn)題的***方法,但你也可以到處閑逛、與別人閑聊、不做正經(jīng)事。

與結(jié)對(duì)編程相反,代碼審查對(duì)項(xiàng)目進(jìn)度沒(méi)有嚴(yán)格規(guī)定。一個(gè)開(kāi)發(fā)人員在固定的時(shí)間內(nèi)沒(méi)有必須要完成任務(wù)的壓力。任務(wù)的進(jìn)度完全于自己控制。這可能會(huì)造成嚴(yán)重的后果。

堆積起來(lái)的代碼審查任務(wù)

雖然由于代碼審查的異步性,它具有更靈活的項(xiàng)目進(jìn)度安排時(shí)刻表,但在某些情況下它也會(huì)遇到執(zhí)行的瓶頸,比如每個(gè)任務(wù)都需要審查,或是核心開(kāi)發(fā)人員由于代碼審查的任務(wù)繁多而無(wú)法進(jìn)行自己的編程開(kāi)發(fā)。

在代碼審查中,開(kāi)發(fā)人員間的交流慢且有局限性 —– 在別人編程時(shí)提出建議的速度遠(yuǎn)遠(yuǎn)比審核已經(jīng)完成的代碼快。這種速度上的差距可以通過(guò)立刻審查已完成的代碼的方法有所減少。而且缺乏經(jīng)驗(yàn)的開(kāi)發(fā)人員常常會(huì)落入一些代碼審查的陷阱中。

“嗯,好像適合我”

總之,結(jié)對(duì)編程促進(jìn)開(kāi)發(fā)人員在構(gòu)建過(guò)程中交流,而代碼審查通常在任務(wù)構(gòu)建完成后進(jìn)行,這有利于項(xiàng)目的整合。代碼審查需要審閱者投入相當(dāng)多的精力,這就會(huì)使審閱者對(duì)代碼質(zhì)量的要求相對(duì)寬松。

哪個(gè)更好?

我希望我已經(jīng)闡述了結(jié)對(duì)編程和代碼審查在保持代碼質(zhì)量的實(shí)踐中的利與弊。***也是最重要的是團(tuán)隊(duì)對(duì)所做的選擇要采取務(wù)實(shí)做法,因?yàn)檫@會(huì)讓團(tuán)隊(duì)能坦誠(chéng)的面對(duì)執(zhí)行效果。一旦你意識(shí)到你使用方法的不足,你才能對(duì)此做出改進(jìn)。

如果你還未解決上述的這些問(wèn)題,那就加入一個(gè)注重代碼質(zhì)量和項(xiàng)目進(jìn)度的團(tuán)隊(duì),在團(tuán)隊(duì)中試著去尋找這些問(wèn)題的解決方案吧。

原文:http://phinze.github.io/2013/12/08/pairing-vs-code-review.html 作者: Paul Hinze
譯文:http://blog.jobbole.com/61349/ 譯者: shao

責(zé)任編輯:王雪燕 來(lái)源: Paul Hinze
相關(guān)推薦

2014-03-13 11:08:42

結(jié)對(duì)編程代碼審查

2013-08-22 09:04:21

2013-08-22 14:15:38

2012-06-13 01:23:30

開(kāi)發(fā)者程序員

2021-03-09 09:00:00

Python開(kāi)發(fā)工具

2014-04-14 10:13:04

開(kāi)源開(kāi)發(fā)者

2014-04-16 09:33:08

開(kāi)源文化開(kāi)發(fā)者

2017-10-20 11:07:45

編程代碼編程模式

2014-03-06 09:43:54

代碼編程習(xí)慣

2012-02-21 22:27:56

AndroidQtQt Mobility

2024-03-05 19:17:37

2013-08-20 13:55:19

測(cè)試代碼審查

2019-09-20 09:57:21

微軟開(kāi)源Windows

2013-03-18 09:58:52

2018-11-23 11:50:02

Linux開(kāi)發(fā)者編程書(shū)籍

2018-11-23 09:07:00

Linux開(kāi)發(fā)者書(shū)籍

2013-01-30 10:03:01

結(jié)對(duì)編程編程語(yǔ)言

2013-05-06 10:22:07

結(jié)對(duì)編程敏捷開(kāi)發(fā)敏捷管理

2013-11-28 10:22:37

編程結(jié)對(duì)編程

2017-03-17 10:29:12

開(kāi)發(fā)者開(kāi)發(fā)語(yǔ)言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)