无结对,不编程

敏捷开发
• 阅读 293

极限编程里面有一个比较有争议实践就是结对编程。很多团队的管理者在谈到结对编程的时候,第一反应是浪费时间:本来一个人可以干的事情要安排两个人干,不是浪费时间吗?那结对编程到底会不会浪费时间呢?结合我们禅道团队自身十几年的结对编程实践,跟大家做一下分享。

首先来定义一下什么是结对编程。很多朋友可能觉得自己的团队从来没有实施过结对编程,但其实每个开发团队都做过。最常见的场景就是遇到了棘手的Bug,一个人解决不了,拉上另外一个同事,一块讨论,一块交流,然后把这个问题解决了——这就是一种结对编程。再比如新人来了,团队指定一位师傅来带他。这位师傅跟新人坐到一块,演示解决问题的思路方法,跟新人讨论具体问题的思路方法,或者跟新人一块写点代码打打样,这也属于结对编程的范畴。

很多朋友会认为两个人在较长的时间里面坐在一台电脑面前编程,才是结对编程。但其实结对编程(或者结对工作)是一种很自然的协作方式,无处不在、无时不在。

再来看大家比较关心的关于结对编程效率的问题。要想做完全的度量其实很难,因为很难找出来两组编程能力完全一样的团队来进行对比测试。但从我们自己团队十几年的结对编程实践来看,结对编程并不会降低效率,甚至结对编程的效率会比独自编程更高。我们来具体分析看。

从编程角度来讲,无外乎两个工作:第一是快速地找到解决方案(设计),第二是快速地实现它(编码)。在寻找解决方案的时候,往往会出现两种情况:

  • 第一种是迟迟找不到解决的方案,卡住;
  • 第二种是很草率地找一个方向开始编程,最后发现此路不通,只能推倒重来。

所以首先要解决的是如何快速找到合理的解决方案。俗话说,三个臭皮匠,顶个诸葛亮。两个人互相沟通,互相交流,一方面可以更好的澄清需求,另一方面结合各自的经验,取长补短,可以快速地形成有效的解决方案。单独一个人容易犯错,但两个人共同犯错的几率就低很多了。

再来看编码过程常遇到四种问题。第一种是因为编程能力或者业务不熟练导致的编码效率比较低。第二种问题是编程过程中的低级错误导致的浪费。第三种就是因为考虑不周而导致的逻辑问题。第四种就是因为各种不专注而产生的状态切换造成的浪费。从精益角度来讲,这其实都是浪费,而结对编程可以有效减少这几种浪费。比如:

  • 老带新的方式可以帮助帮助新手了解常见的编程技巧和业务细节;
  • 结对编程的特点提供了编码过程的第三视角,很多低级错误可以第一时间被发现并解决;
  • 结对过程中是两个人频繁交换电脑控制权的过程,需要两个人精力高度集中,也可以避免思考不周而导致的逻辑问题
  • 自己一个人编程的时候很容易被电话、微信等意外中断,现在旁边坐了一个小伙伴,就不好意思总是看手机了,两个人可以一块集中精力工作较长时间

所以从设计和编码两个方向来看,结对编程都可以有效提升编程的效率。除此之外,结对编程还有其他几个好处。除了前面我们提到的老带新之外,还可以有效促进业务知识、编程经验在团队内部的分享传承,进而促进代码的集体所有权,形成统一的编码规范,形成真正意义上的团队协作。也可以为内部轮岗、避免单点打下坚实的基础。

结对编程可以有很多种方式。我们在处理一些比较核心问题的时候,会采用强结对的方式,两个人会固定的工作一个迭代。在禅道里面创建任务时,也会指派给一个用于跟踪结对编程工作量的账号,比如叫xxx组合之类的。平时我们会采用弱结对的方式,人员的组合也会灵活变动。我们在结对编程的时候会有两套键盘鼠标,任何一个同事随时都可以接管键盘来进行编码工作。

极限编程里面的实践都是相辅相成的。结对编程可以促进代码集体所有权、编码规范这些实践的推行,同时反过来说,集体所有权和编码规范又是结对编程的基础。

面向对象编程,请从结对开始。:)

点赞
收藏
评论区
推荐文章
艾木酱 艾木酱
3年前
我们也从 Python 转向了 Golang -- MemFireDB
首先说明一下,Python也是我最喜欢的一门编程语言,我用Python工作了接近8年,并且会一直使用下去。我们团队在开启这个项目之初就做出了从Python往golang转换的预期,因此我们的转换过程没有任何障碍,非常顺利的就完成了。我们为什么会在项目开启之初就做出要更换编程语言的决定呢,为什么不一开始就选择Golang呢?第一个问题
Stella981 Stella981
3年前
Redis 数据结构与编码总结(6)
数据结构总结对象对象type属性值type命令输出底层可能的存储结构objectencoding字符串对象OBJ\_STRING"string"OBJ\_ENCODING\_INT\\OBJ\_ENCODING\_EMBSTR\\OBJ\_ENCODING\_RAWint\\embstr\\r
Wesley13 Wesley13
3年前
USTC现代软件工程
起笔:我希望先简单总结一下我在这门课程中经历的一些工作以及学习到的一些东西,再对自己、队友、老师做一个评价。然后我想提出一些对这门课程的一些看法和建议,与自己的心得体会。第一部分:我在这门课上经历了个人开发、结对开发、团队开发三个项目。分别用三个词来形容它们我认为是:高效、愉悦、拖沓。个人开发真的让人很烦躁,基于种种原因(文件太大、内存不
Wesley13 Wesley13
3年前
2016012084结对作业项目报告
仓库:https://git.coding.net/librarian1/Operation\_Generation\_Validate.git(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgit.coding.net%2Flibrarian1%2FOperation_Generat
敏捷开发 敏捷开发
5个月前
极限编程里最容易被忽略的实践
在前面的一篇文章里面我和大家聊过了极限编程的重要性,今天想和大家聊聊极限编程里面最简单但也往往最容易被忽略的实践——编码规范。说到编码规范,每一个开发人员都非常熟悉,每一个团队也都有自己的编码规范。但实际的执行情况如何呢?估计大多数的团队都是形同虚设,编码
敏捷开发 敏捷开发
5个月前
五步搞定结对编程,你也能行!
程序员为什么都害怕结对编程?
敏捷开发 敏捷开发
7个月前
2024年,行业变动下的程序员应该首先学习哪种编程语言?
本文我们将和大家聊聊2024年那些最流行的编程语言及其优势,以及分享一些在选择编程语言时的一些小TIPS,帮助大家更好的选择出适合的编程语言,
敏捷开发 敏捷开发
5个月前
如何实施极限编程?
极限编程虽然是敏捷开发的一种主要方法,但真正实施极限编程的团队比率很低,只有可怜的7%。是什么原因阻碍了极限编程的推广和实施呢?
敏捷开发 敏捷开发
5个月前
将代码集体所有权进行到底!
极限编程中有一个实践是代码集体所有权(CollectiveOwnership)。这个实践从字面意思理解起来很简单,就是大家共同拥有代码,都有权限浏览、修改代码。这个实践从表面看是一个技术问题,只不过是源代码管理系统的权限如何设置的问题。但从本质上来讲,这是