如果你回忆一下自己结对编程(pair programming) 的经历,有多少次你能感觉到自己效率和能力的提升呢?又有多少次你为不愉快的经历而烦恼?
结对编程为软件开发团队(不管他们是否采用敏捷过程)带来的好处已经广为人知,但是要有效的实施结对编程,不仅需要团队的成员相信结对编程的益处,更重要的是,他们要全身心的投入。
怎样才能让结对编程更有效呢?仅仅是两个人共同完成一个任务并不意味着那是一次有效的结对经历。除了完成任务,结对编程也是增进你和其他团队成员之
间关系的好机会。你们可以互相学习,不仅仅是技术,也可以多了解一下彼此国家和民族的文化。你也可以了解一下他们的追求,他们为什么充满斗志,又为什么垂
头丧气。
Marcos Brizeno,一个在巴西的ThoughtWorker, 在他的一篇博文中提到了结对编程中会碰到的挑战:
- 编程环境:结对编程中要使用相同的硬件和软件
- 疲劳:结对编程中每个人都要保持高度的注意力
- 自尊心:当你的想法不被接受时,需要保持虚心,避免不必要的争吵
好吧,我也没有什么灵丹妙药能让结对成为更加神奇的体验,不过在这里我还是有几点建议,让大家可以更好的面对Marcos提到的那些挑战:
#1 -不要让一个人霸占键盘
结对编程中,对开发环境更熟悉的那个人经常会长时间掌控着键盘。另一方也觉得如果他写代码的话会拖慢进度。这样做的坏处就是,任务结束的时候,对开
发环境不熟悉的那个人没有多少进步,他依旧不熟悉这个开发环境。对此,我们的解决办法是设定闹钟,时间到了就互换,双方轮流写代码。
#2 -要共同管理注意力
出于多种原因,结对中的一个人可能会比另一个人更能集中注意力。当这种情况发生时,如果你是能集中注意力的一方,你要停下来和另一方讨论这个问题。让你的另一半自己恢复他/她的注意力可能要花很久的时间,你自己也可能因此丧失注意力。番茄工作法 之类的窍门可以帮忙提升注意力,但你最好还是和对方共同讨论来找到最佳解决办法。
#3 -不要一个人干活
有时你的另一半需要离开一会。这时,你要停下手头的活,尽量等她/他/它回来。在等待时,你可以做点其他有益于项目或公司的事情,也可以处理一下自
己的杂事。当然,有时也要看具体情况。如果情况紧急,你不能停下来,那当你的另一半回来时,你要把自己单独做的那一部分解释清楚。
#4 -要有劳有逸
干活的时候集中注意力很重要,但是过度集中注意力是有害的。毕竟我们都不是机器人,谁也不能连干八个小时不带休息。所以我们还是需要间断的休息时
间。休息的时候完全不要想工作的事情,也尽量保持两个人在一起,比如讨论个大家都关心的话题,一起打打游戏,一起喝杯咖啡之类的。
#5 -要庆祝你们的成就!
在任务每一阶段结束的时候,或者每次结对结束的时候,你们要好好回顾一下自己的成就,要给自己一点激励。好好庆祝吧!跟其他同事分享一下你们的成果也不错。
#6 -要和你的同伴保持同步
很自然的,有时一个人比另一个人对任务了解的更深入。这有可能造成两个人的节奏不同步,以至不愉快的经历。如果你了解的更多,你要及时意识到这一
点,控制你的节奏,让你的同伴跟上。必要时,停下你手头的工作,好好解释一下。同样,如果你是跟不上趟的那个人,要及时提出来。让你的同伴慢下来,好好跟
你解释他/她到底在做什么,以及为什么这么做。记住,沟通是必须的。
#7 -要使用合适的交流方式
在交流时,要使用结对编程的两个人都能理解的语言。很难想象你能准确的理解一个句子,如果你连句子里的单词都不认识。所以,请尽量用简单直白的描述。如果有帮助的话,不妨在纸上把自己的想法画出来。你也可以找别人帮忙,如果他能把问题解释得更清楚。
#8-要学会处理分歧
在结对编程的过程中,分歧是经常会有的。面对分歧时,双方都应该先仔细听取对方的观点,然后用平静和尊重对方的语气阐述自己的观点。这时侯,最忌讳
的就是盲目自信。你要试着从对方的角度看待问题,这会让你发现自己遗漏了的地方。不要把这变成一场谁对谁错的争斗,你也没必要在每次辩论时都成为获胜的那
一方。如果双方实在没有办法达成一致的观点,那就试着找别的同事帮忙做个选择。
#9 -既要作学生,也要作老师
就算你才刚刚加入一个新的项目,所知不多,你也能立刻作出自己的贡献。同样的,如果你和一个刚刚加入项目的新手结对,你也要留给他/她发挥自己能力
的空间。多问些启发式的问题,逐步的解释你们的任务,在潜移默化中让你的同伴自己找到解决方案。此时你需要扮演的是一个良师益友的角色。
#10 -要及时提供和接受反馈
在结对结束的时候,要抓紧机会给对方一些意见和建议,再拖一阵,你的印象就模糊了。不用搞得太正式,15到30分钟足够了。你可以评价一下和他/她
结对的感觉如何,他/她有什么需要继续保持或改进的地方。如果你赶时间,至少也要把自己的想法记录下来,然后等有合适的机会转达给你的同伴。
最后,值得一提的是,我在这里提供的窍门都是我以前和其他 ThoughtWorker 结对编程时收到的建议。这些不是什么金科玉律,你就当作我给你的建议好了。
那么,现在轮到你给我提建议了。你有什么更好的办法来应付结对编程中的各种挑战吗?欢迎拍砖。
来源:51CTO