作者:Michael Yang,云智慧架构师
什么是结对编程
结对编程(Pair programming)来自于极限编程 XP(eXtreme Programming),是它的最佳实践之一。顾名思义,结对编程就是两个程序员坐在一起,用一台开发机进行结对开发。
需注意,在国内“老带新”,“师傅带徒弟”的结对方式并非严格意义上的结对编程。由于“老带新”的结对方式资深程序员有更多的话语权,故而失去了结对本身的意义,因此这种结对形式只能算是新人培养的一种形式。
结对编程的实践形式
在采用结对编程实践时,不同的团队有不同的方式:
-
分工明确型:
- 一个人负责编写代码,另外一个人审查代码,负责代码的正确性和可读性;
- 一个人负责详细设计,一个人负责代码实现;
- 一个人写功能代码,一个人写测试用例。
-
共同合作型: 两个人共同讨论关于所开发功能的架构设计、编码实现、测试方法等,然后轮流做输入和观察的工作。此模式很好地做到了信息共享,得到互补的效果。
结对编程如何提高工作效率
结对编程是通过两个开发人员在同一个项目或者任务上并肩协作,轮流编写代码并检查合作伙伴的输出来提高工作效率,下面将详细讲解结对编程提高工作效率的具体方式。
-
打破知识壁垒,互相学习编程技巧,并降低产品需求设计缺陷;
-
互相配合,增强代码和产品交付质量,有效减少 BUG,从而减少测试人员工作量;
-
互相督促,减少“摸鱼”时间,有效提高工作时间;
-
互为 Backup,在能保证项目顺利进行的同时,可更好地处理人员流动。
结对编程的价值
-
从项目角度,提高了产品质量
在一般工作编程中,由于个人的想法难免有疏忽,遗漏和局限性,就会产生“自己看自己写的代码怎么都对”的误区。而在结对时,因为是两个人共同完成一个产品功能,所以双方可以站在不同的角度看到彼此的错误,从而避免了个人主观误区。另一方面,在结对编程过程中,由于代码已被至少一个程序员进行了审查,因此可以让代码的设计、测试和编码更加友好,减少了缺陷,从而提高了产品质量。
结对编程的形式也保证了产品的一个功能,代码实现结构至少可以被两个人知道,两个人可互相形成 Backup,而不会出现像常规编程一个人请假或者离职,后续项目无法推进的情况。此外,有些团队通过定期更换结对编程人员组合,以此保证团队中的每个成员都能熟悉项目的各个功能模块,从而形成项目集体所有的氛围,以及避免了“一人责任制,自扫门前雪”的现象。
更重要的是,在业务需求开发过程中,难免会出现缺陷。在排查问题过程中,结对编程的开发人员无需自己主观排查判断,而是可以通过与自己协同伙伴商议的形式攻克缺陷,这样的效果在最终也往往会是翻倍输出。
-
从团队角度,更好的促进了团队协作氛围以及知识传递分享
从团队角度出发,相比于传统独立工位“栅栏”的工作方式,结对编程一方面更好的实现了知识传递分享,另一方面,结对编程这种即时的沟通交流方式也让团队成员关系变得更加融洽,从而更有利于创建和谐的团队氛围。
根据“乔哈里视窗(沟通视窗)”的理论,在实际工作和人际交往中,共同的开放区越多,沟通起来也就越便利,越不易产生误会。当我们向别人扩大我们的公开象限时,就会更多的和对方建立良好的关系,结对编程便是很好的一种沟通形式。
沟通视窗四象限:
-
公开象限:自己知道,别人也知道;
-
隐私象限:自己知道,别人不知道;
-
盲点象限:自己不知道,别人知道;
-
潜能象限:自己不知道,别人也不知道。
第一个区域,自己知道别人也知道的信息叫做公开区信息;第二个区域,自己知道别人不知道的信息叫做隐私;第三个区域,自己不知道别人知道的信息叫做盲区信息;第四个区域,自己不知道别人也不知道的信息叫做未知区(潜能区)信息。
-
从个人角度,提高了个人能力与工作效率
从个人角度出发,在结对合作时,个人不仅会从结对合作伙伴那里学到新的知识和技能,还能受到对方工作方式和态度的影响。尺有所短,寸有所长,每个人都有自己的优点和长处,值得被学习和尊重。当团队中的每个人的能力提高了,其实就是整个团队能力的提高。
工作效率上,结对编程让大家更专注在工作上,工作外的一些个人活动将不会进行。每个人都有自己要负责的任务,某种程度上,结对编程让两个人内部形成了一个互相监督,共同进步的小团队,为了团队任务的完成,两个人都会专注在自己的任务上,从而大幅提高工作输出的效率。
总结
结对编程其实是在结对磨合中慢慢形成的一种团队共同价值观和文化。这个过程是漫长且潜移默化的,在结对编程中必然经历分歧和统一的过程,而很多团队在分歧中就直接停止了实践,也就无法看到结对带来的好处。因此,在开始结对编程之前,管理人员应全面地考虑你的团队是否真的适合结对编程。
开源福利
云智慧已开源数据可视化编排平台 FlyFish 。通过配置数据模型为用户提供上百种可视化图形组件,零编码即可实现符合自己业务需求的炫酷可视化大屏。 同时,飞鱼也提供了灵活的拓展能力,支持组件开发、自定义函数与全局事件等配置, 面向复杂需求场景能够保证高效开发与交付。
点击下方地址链接,欢迎大家给 FlyFish 点赞送 Star。参与组件开发,更有万元现金等你来拿。
GitHub 地址: https://github.com/CloudWise-OpenSource/FlyFish
Gitee 地址:https://gitee.com/CloudWise/fly-fish
万元现金活动: http://bbs.aiops.cloudwise.com/t/Activity
微信扫描识别下方二维码,备注【飞鱼】加入AIOps社区飞鱼开发者交流群,与 FlyFish 项目 PMC 面对面交流~