如果说这世界上有一家公司懂“软件开发”,那非 Pivotal Labs 莫属。Pivotal公司的Edward Hieatt和他的同事都是从事敏捷开发培训,指导结对编程工作,在跟客户合作中,他们发现有大量的创业公司在成长壮大的过程中,都会经历不同程度的企业开发文化上的变质侵蚀。跟Pivotal公司合作过的超过100家公司中,大部分都会重新找到他们,说他们需要更多软件开发上的支持,帮助他们更快的开发出产品、更好的管理公司的成长,但Edward Hieatt的发现却是,他们的真正问题隐藏在更严重的软件开发文化问题中。尤其是那些由风险投资支持的创业公司的早期阶段,发展的压力影响企业文化的存在,进而严重影响正常的软件开发活动。
至于解决方案,正如Edward Hieatt在First Round Capital CTO峰会上说的,非常清楚:培养一个完全拥抱结对编程的企业文化。
通常,当程序员在谈到结对编程的好处时,他们典型的观点结对编程能使他们写代码更快或更好,而Edward Hieatt却认为,这只是这种重要开发方法的关键作用之一。事实上,结对编程活动牵涉到一系列人的各个方面的因素,它改变了人们传统的团队形式和团队合作的理解。例如,跟结对编程不同,当今的文化中,当一个团队还在初级阶段,程序员通常会各自为政,自己安排时间,自己解决任务,不能形成一个团队。还有,一些技术首领担心结对编程会影响团队的开发速度,影响开发人员的工作产出,至少会影响那些喜欢独自坐在一边整天独自编程的习惯。
什么才是有活力的企业软件开发文化
问创业者或程序员,什么才是有活力的企业软件开发文化时,大部分他们的回答都指向开发环境、招聘过程、技术选择,编程审查规范,团队首领等。然而,在Edward Hieatt的眼里,这些都不是软件开发文化所关心的。
相反,软件开发文化真正关注的是发生在开发团队各个方面上的一系列的行为和交互,它影响到决策的如何产生,谁会参与决策,以及决策对业务经营承担哪些责任。
这是企业文化的终极定义。
团队合作在我们这个行业中没有定义
如果想让一个公司培养出一个可持续的软件开发文化,我们必须首先定义什么是“团队合作”。在Edward Hieatt的眼里,尽管关于团队合作的陈词滥调到处都是,然而,在软件行业里,关于“团队合作”的概念要比其它行业落后几十年。现实情况是,在软件企业里,英雄崇拜思想仍然盛行,个人英雄行为仍然被鼓励——你可以看到那些通宵加班的人,还有团队中各人的贡献不平衡。更严重的,这些科技企业通常不善团队管理,随意的强行拼凑团队,导致他们在一起不能很好的进行开发。要想结对编程,首先要想清楚什么是团队合作。
为什么要结对编程
谈论软件开发,实际上是谈论人,它实际是人的一种社交活动。因此,结对编程应该是团队合作的核心思想,以此为基础建立软件开发文化,当团队开始迅速壮大后,这种文化能给公司带来无尽的益处。例如,在Pivotal公司,程序员所有时间都在结对编程,结对编程能带来:
- 程序员之间分享程序里的各种知识,能更严格的要求自己,能更好的相互交流,更好的协作,因为这是做一名结对队友的责任。
- 能更好、更容易的培养新人,教、学相应更及时,在大公司里还可以在各团队间交叉。
结对编程在文化培养中起核心作用。
如何结对编程
当向结对编程转变时,团队首领通常会担心程序员们有很大的抵触,但实际上大多时候,当方法正确时,人们通常是非常喜欢这种形式。一般的抵制情绪来自两种担心,一种是担心和另外一个人的合作,另一种担心是一天到晚要用嘴去说。但如果你能意识到这只是程序员之间的工作交流,他们通常会很快的接受这些。
如果你的公司准备实施结对编程,Edward Hieatt对实施方法上给出了下列技巧指导:
- 团队必须在一起,在同一个地点工作
- 开发机器必须共有,不能属于某个人
- 结对必须每日轮换(包括跨越团队的组合)
- 公司要给各组合要有自主权
- 管理上要听取意见,而不是发号施令
- 定期检查和反馈,确保实施方法正确
- 对那些犹豫不定是否采用结对编程的团队,先小范围实验,如果感觉不错,再全队实行。
- 结对的人前一天要沟通后,确保能都有时间。
结对编程的收获
Edward Hieatt发现,一个公司一旦形成结对编程文化,各种反馈信息都会显示正面效应非常明显。团队程序员之间交流频度的提高给出了有力的证明。结对编程不是一个轻松的决定,需要花时间去适应,但Edward Hieatt相信,这是值得的,这是形成真正的软件开发文化关键的一步。
图中是男女结对,我怀疑这会降低工作效率。
要是给我个美女, 我也愿意结对编程
我什么都不想说。
想让一个项目慢下来,给程序员一个异性结对伴侣吧
我的个人感受,其实结对比较累。因为要两个人一起思考,思靠问题的节奏需要一致,所以精神必须高度集中,而且两个人思想必须同步,交流的非常紧密才行。
自己一个人做就轻松些,可以随时调整节奏,不时走走神。
不过效率确实要比两个人分开来得高,最大的效益提升在于,程序中的各种逻辑错误和其它各种BUG包括拼写错误都被极大程度的减少了。
文中谈论的结对编程有点过于绝对化和片面化,具体还要受限于种种条件不说,搞不好文化没搞起来,效率倒是降低了很多,从而造成项目延期,影响产品的交付。
自己无法理解自己的代码就证明逻辑混乱.有的编译是关联的,只有嵌套的时候才能决定嵌套编译是否正确.
水管理論 一個水管能有多少的水通過 取決於他最窄的那端
再者 某些情況下結對開發
花在嘴上的時間 說不定比花在寫code的時間上來的更慢