软件开发
OA系统

扫一扫微信二维码

请制止结对编程

发布时间2018年10月29日标签:制止,编程 92
本文作者: 计算机软件开发 - ThoughtWorks 。未经作者允许,禁止转载!
迎接加入计算机软件开发 专栏作者。

(根据真实事件改编,情节有所夸张,请勿对号入座。)

这是一个风和日丽的星期五下战书,Ben 和 Martin 本应该在 Costa 咖啡馆喝一杯下战书茶,一路聊聊周末的计划,然而 PM 的一个微信关照打乱了这统统。原来产品出现了一个bug必要紧急修复,放工之前必须要搞定。两人收到新闻疾步走回到岗位,也没了心情去喝刚泡好的咖啡,立刻打开邮箱查看题目报告。

开始

Ben:看来这不是一个很大的题目,就是处理一个来自于远端服务的非常。如今的情况是BFF(backend for frontends)在内部的远端服务有非常,会将非常直接返回到客户端,如许只要一个保单出了题目,前端所有的保单也都没法用了。

Martin:那怎么解决?

Ben:感觉可以在非常的地方加一个非常处理。这个涉及到RxJava和Java8的stream特征,我不是太认识,要不我们一路Pair吧

Martin:好。

两人喝了一口炙热的咖啡,摆好键盘鼠标,打开了IntelliJ工程。几分钟后,这个故障重现了。

Martin:可以重现的故障通常比较好解决。我们在这里先弄个try…catch试试。 两人好像很有信念,然而重启项目后,故障并没有按照预期停下来。

Ben:hmm,这里为什么停不下来呢?

Martin:可能是RxJava的耽误处理,没有精确的捕获到。如许,你在这里再写一个逻辑,然后在这里设个断点……

焦急

在这个过程中,Martin只是对着屏幕指辅导点,时不时看看手机、在微信上聊聊天。Ben对RxJava并不是很认识,他想紧紧追随Martin的思路,然而增长多个逻辑以后,依然都不能解决题目。15分钟已经曩昔,Ben这时候心生嫌疑,是不是哪些地方没弄对?

Ben:我们理一下思路看看?

Martin:恩,来吧,一路看一下代码。

Martin领着Ben一路看了一下代码,并且一向在旁边辅导Ben进行单步调试。因为RxJava的耽误特征,使得断点很难设置。而抛出非常的调用栈会出如今某些莫名其妙的地方,这让他们根本不知道把try…catch放在哪里才能见效。

Ben:可能是要如许,在这里加一个OnError看能不能解决。

看似题目能够解决,其实是又一次的失败。在两人的激烈讨论中,时间过得很快北京人事考试网首页,一晃眼已经是1个小时以后,咖啡早已经凉了,然而两小我完全没故意情,甚至都忘了咖啡的存在。

Ben对Martin的解决方案越来越没有信念,两人开始重新讨论起解决方案。然而方案是越讨论越复杂,看起来想在放工前解决这个题目是不可能了潍坊网络公司,彻夜是必然了。

简化

Zen是组里的Tech Lead,今天在忙另外一个事情。这个周五真是不得安宁,恨不得想到美国去过过昨天。

Zen听到两小我的讨论,虽然并不了解这个题目的细节,但直觉上认为是跑偏了。立刻提示Ben和Martin:

这不是一个很难的题目,我感觉你们想复杂了?是不是走偏了?能给我说一下你们怎么想的么?

被Zen打断的Martin说了一下之前的解决方案,也说试过了其他的方案了,都不行。因为Zen对这个事情也不是很了解,所以只是提了一个醒:

“Keep it simple,别把事情整复杂了。”

两小我的讨论依然在继承,Ben有点无法跟上Martin的思路,艰难地写着代码辽宁人事考试,但每次都舛错。Pair的气氛犹如冬日里严寒的咖啡一样凝结,不知道孰是孰非。Ben已经有些不喜悦,Martin则依然在一旁指辅导点但并不脱手。

Zen一看表已经3点钟了,又插了一句嘴:

Martin,既然你对这个更认识,你来操刀吧。你来写代码吧。

可能因为之前的讨论过于激烈,Martin反驳Zen:

我们在Pair啊,他对RxJava不认识,我应该引导他。我看着他写就可以了。

Zen说,

你们的解决方案是什么,给我看看。

诠释了一通以后,Zen也没有更多的想法,就让他们继承吧。但Zen建议道:

在这个紧要的关头,我们应该改变一下Pair的体例。如今不是教授知识,而是要高效的解决题目。在这种压力的情境下,你可以直接实现本身的思路,带着别人飞就好了。

分歧

Martin稍微岑寂了下,拿过键盘,继承开始修复题目。Ben这时候在一旁观察,也适当的歇息一下,之前手忙脚乱的按F8、F9的神经也得以缓和。

Ben:看来照旧不行。我们再理一下代码吧。

Martin:你说的这些我之前都试过,都不行,要如许才行。

Ben:我说的是如许做的,既然我们还没讨论清楚,我们再来看一下代码吧。

两人拿出了纸和笔,对着屏幕一边画一边讨论,然而Ben并不认可Martin的方案,说要采用另外个方案。Martin则坚持认为这是一个可行的方案,得试试。Ben拿过键盘,预备按照Martin的方案写代码,但内心面颇为不爽,一向在想说服Martin采用他的方案试试。

怒气

到此时,时间都已经不知不觉曩昔两个小时了,然而题目好像离原形总是忽远忽近。两小我已经委靡不堪,再加上解决方案的不同等,两人的言语中开始表现出一些怒气。

Zen在运行测试的空档,打断了两人的对话,建议道:

既然大家已经产生了分歧,要不然两小我分开,各自实现一个,看谁能够先实现,然后再来讨论。

Martin对于Zen并不认同,认为Zen诘问诘责他和Ben没有Pair好。

Zen诠释道:

其实我听出了两人意见的不同一,言语中已经有一些怒火,如许下去Pair的服从很低。首先,大家带着不爽来干活,互相质疑。更关键的是,解决题目已经用去了两个多小时,大家都比较疲惫,可以适当歇息。我让你们分开的目的是让大家岑寂一下,在不受打搅的情况下工作一段时间,可能会不一样。

岑寂

Martin回到了电脑面前,按照他的思路一步一步做下去。Ben去上了个厕所,倒掉了那杯冷冰冰的咖啡,泡了杯热茶。回到电脑前专注的重新按照他的思路一步一步走下去。

其实两小我已经接近了原形,只是这之间一直的对话把细致力消费殆尽。两人企图达到一个同一,然而口头的对话并不能解决题目,反而暂缓了这个过程。

10分钟后,Ben喜上眉梢的说已经搞出来了一套可以运行的方案,叫Martin一同过来看看。Ben的一时解决方案比较简单好理解,但并不完善。认识RxJava的Martin指出了一些可以改进的地方。

然后两人又开始了新一轮的Pair,重新将这个方案完美。有了这个基础的解决方案,两人都很喜悦,是朝着一个精确的方向大步向前。

尾声

下战书6点半,虽然比正常放工晚了半个多小时,但还好整个解决方案都正常了,交付的义务也顺利完成。

Ben和Martin都总结道,我们应该制止结对,当:

  • 两人的思路不同一但无法说服对方时:我们可以考虑分开一阵,恬静一下,各自用可运行的代码来证实思路的可行。这里只必要相对粗糙的代码即可。
  • 时间已经超过番茄时间而感到疲惫时:人的专注力是有限的,在Pair时特别很是累,分外是在能力方面存在较大差距的时候。在这时候我们可以试试番茄工作法,让大脑得到歇息。
  • 细致力不集中或者有其他事务要处理时:在Pair的时候形象代言公司,彼此要尊重对方,不要玩手机、看其他无关的网页,除非事先取得别人的赞成,否则就要等到制止结对、处理完事务后再继承。