QCon 全球软件开发大会(北京站)门票 9 折倒计时 4 天,点击立减 ¥880 了解详情
写点什么

Pair Painting 结对粉刷房间

2014 年 4 月 07 日

上周我粉刷了一下家中的厨房,这一过程使我联想到了结对编程。

我和我的搭档之前也有过装饰房间的经验,而且出来的效果也让我们感到十分自豪。但换成了我自己来做的话,尽管我具有良好的技能与知识,但最终的效果也不那么理想。我对此产生了疑问:为什么是这样?

原因在于,如果是我一个人在工作的时候,我会不自觉地变得有些懒散和松懈——只要出来的效果“够好”并且能正常工作,那就行了。而如果我的搭档也在身边,我就会和她争先恐后地去抢着拿装饰用的遮护胶带,因为我知道我们两个人一定能把工作完成得很出色。

一起工作能够让我们对工作的质量产生更大的自豪感,我们会发现自己变得更加用心,因为我们希望自己的搭档也能够为这项工作感到自豪。它的好处还不至于此,因为我们还能从中得到更大的乐趣。

当我不小心将油漆稍稍刷出了边界的时候,我才留意到之前的那位粉刷匠(可恶的前任房客)也把油漆漆出了边界,我只是重复了一个已经存在的问题。那么我有没有停下来去思考一下能否借此机会修复之前所发生的错误呢?没有,因为我的心里有个声音始终在提醒我:“我说过我今天必须要把事情做完”,因此我就把这一目标当作了最重要的事。由于我过于专注手头上的活,而没有想过我这样做会把事情弄得更糟,至少在下次解决问题之前还需要经过很长的时间。我没有在工作的进行中选择修复一些小问题,而是让问题雪上加霜,然后把这个问题丢到我的“琐事清单”中(这个清单只会越来越长,从来也不会变短)。

此外,我还使用了错误的油漆!其实我清楚地知道一个生气勃勃与充满活力的厨房应该使用什么样的油漆,我不需要一个“高级”粉刷匠或者装潢师来告诉我这一点。我只需要有一个人能帮一下我,或者让我去帮一个某个人也行,去跑一趟商店并买回正确的油漆就可以了。但现在我只能使用手上仅有的这种死板的白色油漆了。

当我的搭档下班后来到我房间的时候,他“检阅”了一下我的工作。他并没有指出粉刷出了边界的问题。是啊,何必要提它呢?他并不打算让我重做一遍,现在再指出这一点已经太迟了。这一点只能在下一次粉刷的时候作为“前车之鉴”了,但其实正如我之前所说的一样,并不是我不知道正确的做法是什么,我只是单纯的没有那么做。他也没有注意到我使用了错误的颜料,不过我还是诚实地告诉了他,因此他也做好了明年重刷一次的心理准备。

我最终完成了厨房的粉刷,它看起来还行,但我也并不会感到特别自豪。在工作结束后再让人检阅我的结果,只会放大我所范下的一些错误,让我感到难过。这些问题都应该在当场指出,事后诸葛亮于事无补,协作的效用是无可替代的。

单纯从结论来说,让两个人一起粉刷一间房间看起来似乎是在这件任务上花费了更多的时间,但这两个人也会受到彼此之间的鼓舞,而尽力高质量地完成工作。反之,一个人完成的工作结果虽然“还过得去”,但在一年之后又不得不重新来过。之前所谓的节省下来的时间最终也都消失不见了。

幸运的是,至少我们这对粉刷匠和装潢师都住在这个房间里,而且至少还要待上 1 年,希望到了那时还能够记得住从这次粉刷中所学到的东西。但如果因为某些原因,我们必须要搬离此处的话,那我们只能像那个可恶的前任房客一样,将这些问题留给新房客们去解决了。

结对编程

我相信你已经看到了,以上内容完全可以对应到结对编程中去。以下是由这次粉刷过程中所看到的一些关键点:

  • 在工作中找到更强的自豪感
  • 更强的动力
  • 更高的专注程度(我前面忘了提到我在过程中一共有多少次停下来去查看我的 Facebook 帐号了……!)
  • 减少了累积的技术债务
  • 减少了缺陷与可笑的错误
  • 减少了检阅与重做的时间
  • 共同学习会使记忆更牢固

这些优点合在一起就会增加你所产出的代码的质量,而且还不需要你付出更多的时间。而且这些代码的知识现在就有两个团员能够理解,而不仅是你一个人。

结对编程的意义远不只是帮助初级开发者从高级开发者这里学到知识,它的意义在于共同打造一个解决方案。

如果以上这几点是结对编程所产生的结果,那就有必要看一下一个优秀的结对需要具备哪些素质。我与我的搭档能够配合无间并不是出于偶然,而是由于我们之间的关系存在一些重要的特性,才能够达到良好的效果。

良好的关系(relationship)合作关系(partnership)所需要的六个 C。:

交流(Communication—— 良好的合作需要沟通,而不是在搭档犯错的时候袖手旁观,而在之后每次出现意见分歧的时候就旧事重提!此外,也不要一个人在那里安静地忙着粉刷,否则你的观察者会很快停止对你的关注。你应该做的是,一边工作一边保持沟通,让搭档有机会表达意见。这样你也能够受到鼓舞和激励,因此你们也能够为一些大工程共同分担责任。

自信(Confidence——在与搭档合作时,要有自信能够解决所遇到的障碍,也要能够承担风险。此外,不要担心某些建议或许看起来很傻就不去提,如果两人中有一个人因为不安而感到拘束,这种结对就不是很高效。

Ron Jeffries 在这里(浏览文件最下方)讲了一个很好的故事,那是他首次进行结对编程的经历,他从一位“傲慢的”年轻人那里学到了不少东西。你要意识到你为你的搭档所带来的价值,即使你的搭档比你更资深。先不说别的,即使是开口问一些很“傻”的问题也会带来很大的好处,它会挑战开发者所坚持的一些假设与习惯。人们不会因为你提出了一些有助于他们清空固有的己见就对你咆哮的!

妥协(Compromise—— 为了对自信加以平衡,你必须做好妥协的准备。在你们的工作不断推进的同时,你也要保持开明,并准备接受彼此的意见与风格。即使你认为你知道最快的解决方法,也应将你的搭档的想法作为一种选择。因为对新意见的接受和促进会使你得到双倍的具有创造力的观点,而不是减半。

舒适(Comfortable—— 请放轻松。对搭档的反馈要表现得积极、耐心和大方。重要的一点是要建立起一种良好的关系,使你们都能够没有顾虑地表达出想法。当然,这还取决于你们的空间有多大,请保证你坐姿舒适,有足够的地方放置玻璃酒水杯,能清楚地看到显示器,而且你们两人都能很方便地操作电视遥控器键盘和鼠标。

改变(Change—— 结对编程的方式有多种,它们都强调了作出改变的重要性。

如果在结对编程中应用番茄工作法技术(Pomodoro),那就需要你们有规律地互换你们的角色,这可以始你们保持醒觉,并且更加投入。

如果使用乒乓(Ping Pong)结对编程方法,那么其中一人要编写单元测试,而另一个人要编写出通过该测试的代码。频繁地进行角色互换仍然非常重要,你依然可以使用番茄工作法来使这一过程正规化。

我的搭档不愿意接受拆开组合而换一个新搭档,但你毕竟需要保证事物的新鲜感。 我鼓励交换搭档,因为如果你每天都和同一个人进行结对,迟早你们会开始上火。好的做法是在团队之内进行轮换,每隔一日或者半日彼此交换任务,以此对团队中正在开展的工作都做到心里有数。这一点是实现知识共享和跨技能工作的最高方式,经过证实,这种方法能得到非常好的结果。

尝试一下(Give it a Chance—— 如果你从来没有尝试过结对编程,接受这一过程或许不是非常自然。要你接受它,承诺会在一个月的时间内进行尝试,并接受这种方式并不容易。在最糟糕的情况下,你可能会对它感到厌恶,并且这个月的效率很低下。但在最好的情况下,你会接受这种方式,并且整个团队都将更为专注和得到鼓舞,团队成员们将为你们所共同努力得到的成果感到自豪。

开始尝试

我们已经表明了结对编程带来的各种好处:高标准、共同责任感以及乐趣!但是你需要为进行结对做好准备。仅仅是让两个人一起坐在显示器前面并不会让这一切自动发生,只要一点点努力,小心仔细地检查和接受它,这一切就会开发发生。

如果你和你的团队已经决定要采用结对编程,这里有些很好的资源能够帮助你们开始这一过程,举例如下:

  • 我个人很喜欢 Laurie Williams 的这篇论文,它展示了结构编程中的许多优秀实践的基本原理。
  • 如果你是新手,这里有一份简单的列表,其中列举了你在这个过程中可能会遇到的问题,并帮助你积极地克服它们。
  • 如果你开始尝试之后感到有些不对劲,你可以从 Zee Spencer 的这篇文章中学到一些关于建立良好关系结对的指导。

关于作者

Victoria Morgan-Smith是金融时报(Financial Times)的一位高级项目经理,从 2009 年开始就开始领导团队了。在这之前,她曾有 9 年的开发经验。这一背景使得她能够不断寻找有趣的方式进行指导和促进工作,并且激励团队成为自我组织良好的团体。她对团队外部的合作也很有热情,通过敏捷原则来分析怎样交付可评估的商业价值。

查看英文原文: Pair Painting

2014 年 4 月 07 日 08:11720
用户头像

发布了 428 篇内容, 共 151.1 次阅读, 收获喜欢 23 次。

关注

评论

发布
暂无评论
  • 在敏捷实施中寻求帮助

    培训和指导可以帮助组织实施敏捷。但只有在人们对帮助持开放态度时,它们才能发挥作用。是什么使得人们有时候不让教练帮助他们?组织可以做些什么来鼓励帮助行为呢?

  • 远程工作

    你觉得远程工作是否是一种妥协?大约五年前,Biomni的一些团队开始尝试在家办公的模式。他们中的许多人离开伦敦投身乡村生活,用饲养家禽、山地自行车等取代酒吧和餐馆作为休闲娱乐。现在,他们感到自己的团队更加紧密、协作更有效、招募到了更好的人才,同时工作起来也比以前更加高效。在此期间,远程办公究竟起到了怎样的作用?

  • 结束语|写作有时候是一面镜子

    希望这门课能成为那面镜子,打通你我的隔阂。

    2020 年 11 月 25 日

  • 结对编程:肩并肩还是面对面

    结对编程是一门敏捷软件开发的技术,其目的是让两个开发人员共同在同一个工作站上工作。关于结对编程所带来的好处已广为流传,相应的技术和方法也得到了广泛实践。然而,在进行结对编程时,最好的安排座位的方法又是怎样的呢?

  • 彩蛋:这是一个严肃的课程

    2019 年 11 月 28 日

  • 敏捷建导者一定会殚精竭虑么?

    敏捷建导师除了最主要的责任(即提高团队工作的有效性方面)外,还涉及到其他方面。因此建导者要担负很多责任,从而常常导致他们为此殚精竭虑。最近,在Group Facilitation新闻组上,有一个有趣的讨论详细探讨了这个问题。

  • 13 条实践助你更好地完成代码评审

    如果做得不适当,代码评审可能会令人恼火、花费大量时间,并且无法提高质量。

  • 非技术人群成就 10 倍工程师:我学习到的最佳工程建议

    当我致力于成为一个10倍工程师时,我开始越来越多地反思人们提出的建议,希望借此让自己的工作能力快速提升。一般来讲,我发现最好的建议往往来自那些跟我的工作内容——也就是软件工程方面毫无关联的人群。

  • 第 101 讲 | 刘俊强:领导力提升指南之培养积极的态度

    不论你自己或团队产生了负面情绪、士气低落,这些都是你要承担责任的,因为你是管理者,需要你来带领大家走出困境解决问题。

    2018 年 10 月 9 日

  • 如何更好地进行每日立会?

    每天的每日立会变成冗长的进度报告会议,团队成员因而变得难以集中注意力,类似故事我们经常听到。有哪些技术可以帮助人们避免类似状况以及其他与立会相关的陷阱呢?

  • Coding Dojos:练习掌握软件开发的艺术

    Coding Dojos(编程道场)是开发人员们磨砺自己开发技能的聚会之所。其中基本的构建模块是被称为“Kata(形)”的小型练习。 不同的参与者们反复解决这个问题,作为实践练习,来提升自己的编码和设计能力。Emily Bache开始在一个Wiki上记录Dojo的内容,大家可以从Wiki中的内容开始了解Coding Dojos。

  • 世界顶尖运动队教练的成功秘诀

    需要团队参与的运动,与软件开发有类似之处,要想成功,团队因素至关重要。实际上,团队运动有许多令人兴奋的因素可以为软件开发所用。本文列出的9项主要原则来自于顶级教练Marc Lammers,他是在打造世界最佳曲棍球队的过程中发现这些原则的,而且文章也把这些原则映射到软件开发实践之中。

  • 结束语 | 遇“荐”之后,江湖再见

    如果要说整个写专栏过程中的一些感悟和心路,那就概括为三个“如”字吧。这三个“如”字,是三种痛苦,同时,也是三种收获。

    2018 年 5 月 30 日

  • 在远程办公时保持联系

    远程办公能够为你带来自由与独立,你可以随意选择工作的时间与地点。但独自工作,并远离你的工作伙伴也可能会让你感觉孤单,并且让你感觉脱离了这个团队。 InfoQ有幸采访了Pilar Orti,采访内容涉及了远程办公的优缺点、在远程办公时也要保持联系、以及在远程办公团队中如何创建信任感。

  • 结对编程简介

    一个由聪明能干的开发者组成的敏捷团队正在努力完成交付。他们遇到了一些意料之外的缺陷,正在努力修复生产环境中发现的缺陷;前端开发的工作量比后端开发更大,因此当前端开发者挣扎着试图跟上进度时,后端开发者反而处于无所事事的状态。可能他们需要更新控制器系统,但是Brian是唯一一个能够看懂控制器代码的人,不幸的是他现在正在忙其他事情。这个场景是不是很熟悉?结对编程可以有效地解决这些问题并给这个煎熬中的团队带来更多好处。那么为什么很多团队不进行结对编程呢?

  • 结束语 | 永远做一个具有极客精神的人

    愿你能够抱持一颗极客之心,不断探索,找到自己擅长、并且感兴趣的方向,在技术之路上成就自我,成就梦想!

    2021 年 1 月 15 日

  • 如何和工程师有效沟通?

    优秀的产品经理能够激发工程师自身的能动性,让他们满腔热情地投入到产品开发中。

    2018 年 5 月 26 日

  • 远程结对编程实战:看看别人是怎么做的

    在进行远程工作时,使用结对编程方式能够有效地增进开发者之间的互动,并促进团队的良好关系。它不仅能够促进信息的流动,还能够防止开发者注意力分散的现象。你可以多尝试一下各种工具,以找到一种能够适合你进行远程结对的方式。结对编程是一种耗费精力而且缓慢的过程,有一些工作是你更愿意自己完成,而不是靠结对实现的。而在分布式团队中进行结对时,会自然地浮现出同理心与无私的特质。阅读本文以学习他人在远程结对方面的经验。

  • 敏捷实践的另一种声音

    敏捷实践已经获得了越来越多软件公司的支持和推广,但是Jim Bird最近在一篇文章中指出,某些敏捷最佳实践其实可以无需遵循,因为它们不会给你带来太多好处,有时甚至是负面影响,这些“不重要”的实践包括:测试驱动开发、结对编程、每日站立会议等。

  • 我是如何完成从码农到管理层的过渡的

    作为码农的我们,经过数年甚至十数年的打拼,怀着美好的向往,我们终于完成了职业的转换,进入了管理层,成了经理。然而,梦做到最真的时候,往往也是梦醒的时刻。从码农到经理,其实也是”才出狼窝,又入虎穴”。要知道,做一个合格的经理,比成为一名优秀的程序员,可谓难于上青天,不亚于脱胎换骨。从码农到管理层过渡,并没有捷径可走,必须从内而外的改变和提升。今天,我们翻译了 Toggl 的新晋经理 Thiago Duarte 分享他从码农过渡到管理层的经历和心得。

发现更多内容

边缘计算隔离技术的挑战与实践

边缘计算隔离技术的挑战与实践

Pair Painting 结对粉刷房间-InfoQ