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

結(jié)對(duì)編程踩坑指南

開發(fā)
本文作為“沉思錄”的第一篇,將列舉實(shí)際交付項(xiàng)目中,在結(jié)對(duì)編程時(shí)遇到的幾個(gè)實(shí)際問題,并針對(duì)具體問題給出一些嘗試過的解決方式。

背景

最近,我開始重新審視這些融入日常的工程實(shí)踐方式,去嘗試找出實(shí)際與理論的差距,分析差距成因,基于分析結(jié)果,嘗試找出可以逐步彌補(bǔ)差距的實(shí)踐方式,從而讓日常軟件交付工作變得更加“順滑”。

本文作為“沉思錄”的第一篇,將列舉實(shí)際交付項(xiàng)目中,在結(jié)對(duì)編程時(shí)遇到的幾個(gè)實(shí)際問題,并針對(duì)具體問題給出一些嘗試過的解決方式。

注意:以下話題不在本文的討論范圍中,并且默認(rèn)讀者已經(jīng)具備下列問題相關(guān)的知識(shí):

  • 為什么進(jìn)行結(jié)對(duì)編程?(如果想了解,可以參見維基百科(https://en.wikipedia.org/wiki/Pair_programming) 或其他相關(guān)郵件)
  • 怎樣開始結(jié)對(duì)編程?(如果想了解,可以參見《7個(gè)你需要知道的結(jié)對(duì)禮儀》(https://insights.thoughtworks.cn/seven-skills-about-pair-programming/))

工作環(huán)境上下文

  • 9 人團(tuán)隊(duì)(1 BA, 1 QA, 1 TL, 6 Devs)
  • 特殊角色(BA,QA, TL)基本都是 Solo 工作,Dev Pair 工作
  • 每對(duì) Pair 同一時(shí)間只會(huì)工作在一個(gè) User Story 上,直到該 User Story 進(jìn)入測(cè)試階段
  • 團(tuán)隊(duì)在 Sprint 開始時(shí)進(jìn)行 Switch Pair 活動(dòng),User Story 未完成的 Pair,會(huì)有一人留在未完成的 Story 上,以便完成保證卡片上下文充足
  • Switch Pair 會(huì)按照 Pair 輪換表(如下)進(jìn)行,以確保所有開發(fā)都會(huì)有均等的 Pair 機(jī)會(huì)

Dev輪換表大概是這個(gè)樣子(每個(gè)周期內(nèi)團(tuán)隊(duì)采用同一編號(hào)的配對(duì)組合):

基于以上的上下文,我們遇到了以下實(shí)際問題:

問題 1:Switch Pair時(shí),需要交接的內(nèi)容過多

Switch Pair 時(shí),需要交接的內(nèi)容過多時(shí),可能會(huì)漏掉一些細(xì)節(jié)信息。為了補(bǔ)充遺漏,會(huì)陷入更多、更深的討論。

具體場(chǎng)景

張三和薛霸經(jīng)過了一周的結(jié)對(duì)編程,手頭的一張復(fù)雜 User Story (無法進(jìn)一步拆分)沒有完成,薛霸被留在了當(dāng)前工作上,準(zhǔn)備和阿樂開始工作。

可是,在薛霸向阿樂介紹當(dāng)前的工作進(jìn)度時(shí),無法清楚地給阿樂說明之前所寫代碼與 User Stroy 的對(duì)應(yīng)關(guān)系和一些必要的上下文。

于是這對(duì) Pair 不得不將張三重新拉回來,進(jìn)行上下文交接,三人討論時(shí)間較長,并且會(huì)將之前已經(jīng)討論過的問題重新討論,降低了工作效率。

分析原因

后來,張三,薛霸,阿樂對(duì)這次效率不盡人意的 Switch Pair 進(jìn)行了回顧,嘗試?yán)脝柎鸬男问竭M(jìn)行分析:

對(duì)于阿樂的問題,薛霸無法清楚地解答,但在拉回張三后,增加了一些額外的討論時(shí)間,就可以解答了。

問: 結(jié)對(duì)的兩人在當(dāng)前工作中,理論上應(yīng)該能夠具備相當(dāng)信息積累。那么,為什么當(dāng)前薛霸和張三出現(xiàn)了信息積累差異的情況? 

答:卡片從 Kick-Off 到當(dāng)前交接 Switch Pair 的時(shí)間跨度較長(7天,含周末),包含內(nèi)容較多,需要一些討論重新回想起當(dāng)時(shí)的信息。 

另外,薛霸無法解答的問題,基本都是張三在薛霸請(qǐng)假期間完成的。

結(jié)對(duì)編程理應(yīng)是有任務(wù)拆分(Tasking)作為前提的,以確保 Pair 兩人對(duì)于當(dāng)前的工作進(jìn)度一致,以盡量減輕請(qǐng)假所帶來的信息不對(duì)稱問題。

問:為什么當(dāng)前的效果并不理想?

答:最初拆分的任務(wù)粒度較大,但實(shí)際上,在一個(gè)大粒度的任務(wù)中,會(huì)包含一些較小粒度的任務(wù),并且這些任務(wù)的完成結(jié)果,還會(huì)影響后續(xù)的任務(wù)內(nèi)容。在工作時(shí),完成了這些較小粒度的任務(wù)后,沒有將關(guān)鍵工作內(nèi)容更新到兩人共享的任務(wù)列表中,于是造成了信息不對(duì)稱情況。

可嘗試的實(shí)踐

于是,大家總結(jié)出了如下可以實(shí)行的行動(dòng):

  • 初始任務(wù)拆分盡量將可能會(huì)產(chǎn)生任務(wù)分支的關(guān)鍵任務(wù)(或問題)標(biāo)出。
  • 在完成任務(wù)的過程中,保持最初任務(wù)列表的更新,特別是上述的關(guān)鍵任務(wù),按需記錄任務(wù)的產(chǎn)出或關(guān)鍵信息。
  • Switch Pair 圍繞任務(wù)列表進(jìn)行,以避免出現(xiàn)內(nèi)容遺漏或花費(fèi)額外時(shí)間討論上下文外的問題。

問題 2:Pair時(shí),其中一人變Solo

  • 采用Navigator-Driver Pair 模式時(shí),掌握鍵盤和鼠標(biāo)的一人(Driver),有時(shí)會(huì)成兼任 Navigator 角色。
  • Pair 過程中,一人會(huì)處于高度集中狀態(tài),另外一人可能會(huì)因?yàn)闆]跟上,而從 Pair 中脫出,產(chǎn)生信息斷層。
  • Pair 過程中,如果不作 Driver 的角色,可能無法完全掌握當(dāng)前 User Story 的全貌。

其實(shí)上述的問題是有一定的內(nèi)在邏輯聯(lián)系的,可以通過下面的具體場(chǎng)景來進(jìn)行復(fù)現(xiàn)。

具體場(chǎng)景

肖蘭和阿發(fā)在結(jié)對(duì)編程過程中,肖蘭使用自己的筆記本電腦外接顯示器,并通過筆記本的鍵盤和觸控板完成操作,阿發(fā)則可以通過外接的顯示器看到肖蘭的操作。

起初,兩人會(huì)對(duì)著外接顯示器進(jìn)行一些討論。

但在深入調(diào)查代碼時(shí)和一些代碼編寫時(shí),肖蘭開始對(duì)著自己的筆記本屏幕進(jìn)行操作,隨著肖蘭逐漸地集中精力,討論和解說停止了。

在連續(xù)幾次的進(jìn)入某個(gè)類查看細(xì)節(jié)代碼,再切換到另外幾個(gè)文件中查看配置文件后,肖蘭寫了幾行代碼試了試。

如此反復(fù)了幾次后,阿發(fā)已經(jīng)不清楚肖蘭所進(jìn)行操作的目的了,但他看著肖蘭投入的樣子,欲言又止,不忍心打斷她的操作。

于是阿發(fā)又努力了3分鐘嘗試跟上肖蘭的思路,可是猜透一個(gè)人的心思何其難也,阿發(fā)最終無奈放棄,于是默默轉(zhuǎn)向自己的電腦(手機(jī)),去看看郵件(朋友圈),等待肖蘭等下有了結(jié)果再同步給他。

可是,肖蘭在完成的調(diào)查整個(gè)過程中獲得的信息,卻不一定都能同步給阿發(fā),阿發(fā)也就無法掌握當(dāng)前工作的全貌了。

至此,Pair 終成 Solo...

分析原因

(1) 硬件設(shè)施準(zhǔn)備不充分。

肖蘭掌控了所有的操作,阿發(fā)更多的時(shí)候都處于一種“被動(dòng)”狀態(tài),結(jié)對(duì)編程的參與感不高,特別是當(dāng)肖蘭“全情投入”后,阿發(fā)的參與感幾乎被全部“剝奪”。

說明:在了解 “如何進(jìn)行結(jié)對(duì)編程” 的部分有說明過,結(jié)對(duì)編程的兩人在硬件準(zhǔn)備上,應(yīng)該盡量平等,至少兩人都有可以各自操作的鍵盤。

(2) 沒有分配、交換角色的活動(dòng)。

結(jié)對(duì)編程是兩個(gè)人共同合作的活動(dòng),那么兩人中每個(gè)個(gè)體在活動(dòng)中的體驗(yàn)感就直接影響這項(xiàng)活動(dòng)的效果。

在上述例子中,肖蘭一開始就掌握了"操作權(quán)”,到了代碼調(diào)查階段時(shí),肖蘭又直接“搶奪”了思維的“導(dǎo)向權(quán)”,隨著自己的想法去調(diào)查、嘗試。

導(dǎo)致阿發(fā)在這次結(jié)對(duì)編程中的參與度極低,體驗(yàn)感也極差,并最終轉(zhuǎn)向獨(dú)自工作。

說明:為了保證結(jié)對(duì)兩人的參與度,結(jié)對(duì)編程存在多種不同的實(shí)踐方式(Navigator-Driver 模式、乒乓模式、鍵盤 + 鼠標(biāo)模式),但無論采用哪種方式,兩人都應(yīng)在實(shí)踐一段時(shí)間后,交換角色,從而使每人都有機(jī)會(huì)從不同的視角分析、解決問題。

(3) 缺少有效溝通。

結(jié)對(duì)編程與其說是編程方式,不如說更多是一種“社交”活動(dòng)。那么,在整個(gè)過程中,結(jié)對(duì)兩人需要進(jìn)行大量,高強(qiáng)度的溝通交流。

在上述場(chǎng)景中,一方面,當(dāng)肖蘭要開始進(jìn)行一些深入調(diào)查時(shí),沒有說明意圖,從而使阿發(fā)開始產(chǎn)生迷茫。

另一方面,當(dāng)阿發(fā)努力嘗試后,依然認(rèn)為自己跟不上肖蘭的操作時(shí),沒有與肖蘭說明情況,從而使兩人的“信息鴻溝”進(jìn)一步被擴(kuò)大。

可嘗試的實(shí)踐

針對(duì)上述問題,可以:

  • 每對(duì)Pair中,至少有一人使用從公司申請(qǐng)(自備)的鍵盤和鼠標(biāo),確保每個(gè)人都有條件能在想要操作的時(shí)候進(jìn)行操作。
  • 每對(duì)Pair按照拆分的任務(wù)列表,每完成 1(X)個(gè)任務(wù),交換一次兩人的角色。
  • 練習(xí)提問。結(jié)對(duì)的兩人中,任何一人發(fā)現(xiàn)兩人的思路不一致時(shí),通過提問的方式,將問題暴露,并解決。

問題 3:Switch Pair頻率高,引發(fā)高溝通成本

Pair 過程會(huì)產(chǎn)生大量的溝通交流,頻繁的 Switch Pair 會(huì)使這種交流的成本擴(kuò)大,那么如何從這種高頻的 Switch Pair 活動(dòng)中獲得更高的個(gè)人收益呢?

具體場(chǎng)景

團(tuán)隊(duì)最近在嘗試提高 Switch Pair 的頻率,從之前的每兩周提升到現(xiàn)在的每周一次,之后視情況仍有提升的可能。

而這給阿花造成了困擾,因?yàn)閹缀趺看谓Y(jié)對(duì)編程,阿花都和搭檔會(huì)討論很多問題,而幾乎每次 Switch Pair,阿花都需要花費(fèi)不少時(shí)間將這些討論的結(jié)果和新的搭檔解釋。

阿花認(rèn)為這降低了工作的效率,并且自己也沒從中獲得額外的收益,那為什么還要提升 Switch Pair 的頻率呢?

分析原因

其實(shí),阿花遇到的工作效率降低問題,可以利用問題1中提到的實(shí)踐進(jìn)行嘗試。

另外,隨著頻率的提升,需要傳輸?shù)男畔⒘恳矔?huì)下降,再加上合理的拆卡,工作效率問題的影響應(yīng)該微乎其微。

可是,阿花提出的另一個(gè)問題,“如何從高頻 Switch Pair 中獲得更高的個(gè)人收益問題?” 這卻不是一個(gè)單靠結(jié)對(duì)編程技能就能解答的問題。

先拋開 Switch Pair 的初始目標(biāo)(信息流動(dòng))不談,因?yàn)檫@其實(shí)是對(duì)于團(tuán)隊(duì)的收益(一定程度上降低團(tuán)隊(duì)人員變化帶來的風(fēng)險(xiǎn))。 

那么,對(duì)個(gè)人而言,要想從 Switch Pair 中受益,就需要從敏捷軟件工程實(shí)踐的相關(guān)理論和目的出發(fā),如果能結(jié)合“快速反饋,識(shí)別變化”,那得出的結(jié)論就不難了:

  • 更頻繁的搭檔交換,能使反饋的信息源變化,從而使反饋的角度變化,有利于個(gè)人從不同視角識(shí)別自身的長處與短板。無論是主動(dòng)通過觀察學(xué)習(xí),還是通過收集反饋,都提供了更加豐富的輸入。
  • 縮短單一搭檔工作的時(shí)間,但保證周期性的輪換,提供了一個(gè)適當(dāng)?shù)臅r(shí)期(大約一個(gè)月)去嘗試、應(yīng)用一些變化,從而在下次輪換到相同的搭檔時(shí),可以收集驗(yàn)證性的反饋。

可嘗試的實(shí)踐

想要在高頻 Switch Pair 的實(shí)踐中最大化個(gè)人利益,那么就需要充分利用此時(shí)的機(jī)會(huì)和資源,即不同的搭檔的視角,再結(jié)合 Feedback 機(jī)制,就可以很容易構(gòu)建個(gè)人有目的,有針對(duì)性的提升計(jì)劃。

那么就從每次 Switch Pair 前,向上一個(gè)搭檔收集這段時(shí)間合作的反饋開始吧。

注意:Switch Pair 的頻率不必一味求高,只要能夠確保工作所需的關(guān)鍵信息在團(tuán)隊(duì)內(nèi)充分流動(dòng)即可。

小結(jié)

結(jié)對(duì)編程也只是程序員工作中會(huì)用到的一項(xiàng)技能而已,那么只要是技能,通過時(shí)間的堆積,去磨煉,去思考,就會(huì)有所提升。

穩(wěn)扎穩(wěn)打,時(shí)間會(huì)給予最棒的回饋!

責(zé)任編輯:趙寧寧 來源: Thoughtworks洞見
相關(guān)推薦

2022-07-27 10:39:14

Spring代碼IDEA

2021-07-29 10:39:50

MySQLMySQL5.7MySQL8

2023-05-04 10:08:00

Windows 10WinAFL二進(jìn)制

2024-02-04 08:26:38

線程池參數(shù)內(nèi)存

2018-09-11 09:14:52

面試公司缺點(diǎn)

2013-01-30 10:03:01

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

2013-05-06 10:22:07

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

2013-11-28 10:22:37

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

2025-04-27 00:04:00

C#異步編程

2010-01-27 09:33:40

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

2013-06-20 09:38:57

2015-09-11 08:59:03

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

2017-10-24 13:02:29

2020-09-15 08:46:26

Kubernetes探針服務(wù)端

2014-03-03 09:48:55

SSHTmux

2013-05-24 09:37:25

結(jié)對(duì)編程結(jié)對(duì)編程實(shí)踐BitBucket

2023-08-31 08:10:18

2017-05-05 08:12:51

Spark共享變量

2021-10-28 19:10:02

Go語言編碼

2023-02-20 08:11:04

點(diǎn)贊
收藏

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