我们都可以独立工作
但若联手,便所向披靡
结对编程是指特地安排两名软件工程师坐在同一台工作站前,共同进行工作。
我参与了数百场技术讲坛、公司宣讲等活动遇到的第一个问题都会是为何我会热衷于结对编程的工作形式。我的回答是:高效稳定学习好,质量更可靠,没有信息孤岛,结对让工程师真正帮到彼此。我在Pivotal公司最大的办公室有125对,也就是250名工程师从事结对编程,所以我对此非常清楚。
由于结对编程的这些优势,让我们想要在公司将其从高强度学习扩展至机器智能领域。
结对是最有效的学习方法
结对编程是快速创造高质量产品的最好方法,将机器智能元素融入产品,更不会拖你的后腿。
把数据科学家与工程师结成对子,将会使工程师快速具备机器学习研究的能力,让工程师如虎添翼,同时,数据科学家也有机会了解自己的研究成果是如何应用的,还可以写一些代码,做出产品雏形。
如此一来,每个人都能看到系统全局,而不会囿于自身专业的一隅。合作的两个人都能深入理解产品是如何端到端工作的,并尝试更快地构建系统。最重要的是,工程师和数据科学家互相帮助,取长补短,破解难题,所向披靡。
如果是两个工程师结对的话,彼此持续分享知识,省去了过多的头脑风暴会议。结对的做法源自于人类社会属性,因而能令人持续专注。工程师能够在一起互学互助,心无旁骛地每天工作超过8小时,简直就像在玩Facebook和看搞笑视频一样。
最终,代码的质量就会提高。要知道,代码的行数其实是越少越好。当两名工程师一起写代码的时候,他们能够互相交流,最终你会发现代码质量在飞速提高。
Ben Rady: 如果所有的工程师都结对了,他们每个人的代码数量不是减半了么?
数据科学家过于学术化
经验丰富的软件工程师和数据科学博士们,像是来自于两个完全不同的世界,他们创新和解决问题的方法是大相径庭的。数据科学家通常热衷于深入研究而比较少去接触实际问题,他们善于开发新的机器学习理论,但并不会把这些理论用到实际产品中去。
与之对比鲜明的是,很多工程师对机器学习很有兴趣,但是没有接受过理论培训或专业学习。在这一点上,我认为工程师并不需要博士学位才能有效应用机器学习。特别是,当他们能够和博士们并肩工作的时候,他们就能够快速积累相关知识。如此说来,还有什么学习方法比与专家共事更为有效呢?
对我们来说,结对就意味着打破理论和实践之间的壁垒。我们认为,数据科学家不应该在一个产品研发环境中进行纯理论研究。研究的终极目的是为了将其成果付诸于产品。只有机器学习使我们的用户受益,方能体现出我们的价值。
孤立的团队无法获得成功
曾经(甚至现在),很多公司会设立独立的研究团队。这个团队会将孤身奋战,那些伟大的想法,可能要十年以后才能实现。到最后,只有少部分成果会慢慢地转化为实际产品,而大多数成果可能就此湮灭,很多研究实验室的工作就是这样令人扼腕。
这样的做法是有缺陷的,它把产品开发的研究阶段和应用阶段割裂开来。数据科学家得不到足够的反馈,而工程师也有很多客观限制,无法把研究转化为实际产品。一旦你把研究成果堆在墙角,产品设计理念也就无法实现,因此,这个方法必须改变。
结对编程,使我们能够立即将学术理论以非常灵活的方式付诸于实践。一些初创公司让机器智能专家独立于其他团队工作,这些专家大门不出二门不迈,根本没有真实客户信息来验证自己的想法。而我们恰恰反其道而行之,结对编程使我们能够将最新的机器智能理论快速用于实际场景。
在Helpful公司,我们整个团队的工程师和数据科学家都是结对工作的。我问过一些之前没有结对编程经历的工程师,在这里感觉如何。他们回答说,第一,颇具成果;第二,学习力Max。有一名工程师说,我现工作能够全情投入,并且大家也已经习惯于结对来解决问题,整个团队充满活力。
在Michael Lewis的新书中,他采访了Daniel Kahneman关于他与Amos Tversky合作荣获诺贝尔奖项的事情。Daniel再度将此成果归功于他们之间的关系,归功于他们结对工作,在关键思想中互相支持,最终创建了行为经济学。Kahneman的回答非常简洁:我们可以独立工作,但若联手,即为天才。
原文发布时间为:2017-02-06
本文来自云栖社区合作伙伴“大数据文摘”,了解相关信息可以关注“BigDataDigest”微信公众号