Braintree对于软件开发有一套自己的方法。其中一个感觉特别有冲击力的就是有关结对编程方面的内容。
很多人在讨论结对编程的时候,通常注重的是结对对代码质量和开发效率产生的效果。这种观点认为:结对的成本是单一开发人员的两倍,但如果他们能在X%的时间内交付代码,并且bug数量和技术负债更少,分别只有单一开发人员的Y%和Z%,那么结合衡量X,Y和Z的值,结对才可能是有意义的。
虽然这种说法没错,但它忽略了我们之所以结对最重要的原因:结对有助于共建一种伟大的企业文化,是让新手开发人员加快速度的***方式,并提供了一种在开发团队中分享知识的很好方式。无论是哪种情况,实行结对编程虽然短期内会让成本小幅走高,但是从长远来看,巨大的收益也会随之而来。
结对意味着合作,这成就了企业文化的核心
结对是一种社会经验:每天8小时的工作时间会与另一个开发人员密切接触。这意味着,如果你与你结对的人不能进行有效的沟通,不能一起好好地研究工作中出现的问题,不能愉快地相处,那么你就悲剧了。这也是为什么Braintree在它的面试流程中将沟通能力和文化契合度列为与技术能力平起平坐的原因:我们不想要雇用那些不能结对的人!
招聘流程是企业文化的基石:没有正确的优秀人才就不可能创造一种充满活力的合作环境。在招聘开发人员时通过着重强调文化契合度和沟通能力,可以早早地表达一种协作的姿态。此外,这还有一定程度的自我选择范围:如果开发人员不想结对工作,那么他们可能并不适合Braintree这样的文化氛围。
短期成本也与此有关。如果我们决定不雇那种虽然技术好但不能好好共事的人,那么基本上等于是为了保护长效的企业文化而放弃了短期生产力的提高。
结对让新手开发人员加速
在与别人结对时,你不仅能观察他们如何编写代码,还能看到你的结对伙伴是如何面对整个开发流程的:发现哪里需要改变,编写测试,阅读源代码,查找文件,配置开发环境,等等。并且你还可以知道他们选用哪种工具,以及如何有效使用工具。
初级开发人员绝对能从中获益匪浅。更重要的是,当轮到他们操作的时候,他们还可以从他们的前辈那里得到连续的反馈。这是我的亲身经历——那个时候我刚加入Braintree,只有大概一年的专业开发经验,在大学里也没有学过多少计算机科学知识。但是在这工作三个月后,我的工作流程得到了彻底的改变。
从长远来看,高级开发人员同样受益:这已经是一个老生常谈的话题,但在教学的同时的确可以加深自己的理解。也就是说,初级开发人员和高级开发人员结对也有相关的短期成本与长期效益。一对高级开发人员固然比初级和高级开发人员结对的进展更快,特别是工作于高级开发人员熟悉的代码库的时候。然而,与新员工结对能使得新员工快速上手。
结对将知识转移置于开发流程的中心
除了基本的编程能力,开发人员需要大量的信息以便于有效地运作。这些信息包括领域知识,基本代码知识,公司约定认识,检查的***惯例,等等。任何值得认真对待的开发方法都需要有一种能够在团队中传播知识的好方法。
结对使得分享成为理所当然。问问题不再成为中断的拦路石——不断地与结对伙伴沟通是正常工作流程的一部分。
除此之外,还有数以百计的开发小技巧能从学自结对伙伴:命令行快捷键,vim技巧,结合vim和tmux的方法,等等等等,不计其数。
结对的持久战
Braintree的开发风格非常强调长远考虑。测试驱动开发;比起机智,代码的编写更强调可维护性和可读性;尽可能缓慢的彻底深入发展。结对是发展工作的一部分:它提供了一种能每天为开发团队提供小投资的方法。我们以这种方式工作,某种程度上是因为我们写的支付处理软件为我们的客户提供了任务关键型服务。而且也是因为我们认为,从长远来看,这些做法会有大大的回报。
如果你对上述观点产生了共鸣,欢迎发表你的见解。