Two Heads Are Often Better than One
程序员需要思考,思考需要独处。所以这成了对程序员的刻板印象。
这种“孤狼”的编程方法可以被一种更具合作性的方法取代。我认为这可以提高程序员的质量、生产率、以及工作成就感。这种方法还可以让开发者的工作更接近于其他人以及非技术人员——商业和系统分析师、质量保证专家,以及用户。
这对开发者而言意味着什么?意味着光成为技术专家是不够的。你还必须和他人一起工作时变得更有效率。
合作不是问答问题或者坐下来开会。二是撸起你的袖子和他人共同处理工作。
我是结对编程的头号粉丝。你可能称之为“极限合作”。作为开发者,我的技术都是在我结对时成长起来的。如果我在某个领域或技术方面较弱,我就可以学到他或她的经验。如果我在某方面较强,通过不得不向他人做出解释,而明白自己到底哪些懂哪些不懂。一贯地,我们都会把东西拿出来相互学习。
当结对边蹭时,我们每个人都会把我们的(领域和技术)经验带入眼前的问题,并通过独特的见解和经验将其高效而有效地写入软件中。即使在技术知识领域极端不平衡的情况下,更有经验的那位结对伙伴也照样能从他人那里学到东西——或许是一种新的快捷键,或者新的库和工具。而对于那位经验较少的结对伙伴而言,这是很棒的快速入门方法。
尽管这不是唯一的方法,但结对编程在敏捷软件开发支持者中很受欢迎。一些反对结对的人会问:“为什么我要支付两个程序员的薪水来完成同一份工作?”我的回答是,确实,你不该这么干。我认为结对可以改善质量、理解技术领域、以及像是IDE技巧、以及降低突然中彩票风险等(比如你的某位专家级开发者中彩票了,然后第二天他申请辞职)。
学会一个新的快捷键有什么长期价值么?我们又如何衡量结对编程对产品整体质量改善的多少?相比于让你自己用僵化的方法来解决困难的问题,我们要如何衡量你的结对伙伴对你帮助又多少?一项研究指出效率和速度的提升是40%(J. T. Nosek,“协作编程案例”,ACM通讯,1998年3月)。减轻“中彩票风险”又有什么价值呢?其实大部分这些收益都很难衡量。
谁和谁应该结对呢?如果你是团队新人,重要的是找到团队里知识渊博的人。当然,找到那个人缘好且具备指导能力的人也很重要。如果你没有太多领域经验,那就和团队里那个领域专家结对。
如果你还是不相信,那就尝试下:和你的同事合作。一起结对做些感兴趣有粗略的问题。看看感觉如何。多试几次。