结对编程时如何实现并维持流程?


17

是Mihaly Csikszentmihalyi提出的概念;简而言之,它意味着进入“区域”。您会沉浸在工作中,专注于工作;这项任务可能很困难,但同时又充满挑战。当人们实现潮流时,他们的生产力就会猛增。编程需要大量的精神关注,因为我们经常需要一次兼顾脑海中的几件事。许多人喜欢在一个安静的环境中工作,在那里他们可以全神贯注于任务。如果它们被打断,可能要花费几分钟甚至几小时才能恢复正常。

我了解敏捷开发和极限编程中有一种称为结对编程的实践。这意味着您将整个软件开发团队放在一个房间中,以便无缝沟通。您确实要与一对伙伴一起编写代码,因为通过这种方式,您可以立即进行代码审查,并且可以减少更少的错误。

由于不断的中断,在进行结对编程时,我一直遇到实现流程上的问题。我在思考一个问题,然后突然有人问我另一个问题。我的思路迷路了。

结对编程时如何实现并维持流程?


4
我不同意其他任何人都可以随时插话。
JeffO

3
Flow的另一种选择是识别并保持Ballmer Peak的位置。这可能需要大量的实验,时间和技巧来实现。
气垫船充满鳗鱼

当我应该编写代码时,我会分散阅读此问题的注意力。如果我与某人进行结对编程,那么我不会打开这个问题来阅读它,并且可能会做更多的事情。
TehShrike

Answers:


15

编辑:免责声明-这就是我定义“区域”的方式: A state of extreme focus, in which one is able to understand how many intricate details connect together, regardless of whether these do so elegantly (or simply) or not.

我尝试避免这种状态,因为尽管我可以在区域中生成正确的代码,但以后我和其他开发人员将很难理解它。简而言之:阅读在区域中编写的代码通常可能要求读者在区域中。这个约束是我的问题。

“干净的编码器”上有一章很可爱,其中Bob叔叔有说服力地解释了为什么“进入区域”是一个愚蠢的坏主意。

与“进入区域”相比,这可能是一个更好的选择:直觉并冷静地,专业地考虑您的工作。通信。与您的伴侣分享想法。找出真正的问题。讨论可能的解决方案。您可能不会感到过于专注,但是您可能会做出正确的决定和平易近人的设计。

如果您和您的伙伴伙伴可以在没有所有人都集中精力的情况下讨论问题,那么您很可能将问题归结为更简单的性质。这表明您随时可以重新理解它。

另一方面,如果您只需要花费一些时间使自己的头挺直(有时我们都会这样做),那就接受它。汇集您的想法。首先解决您的问题。

但事实是,如果您这样做了-不要用这段时间来编写生产代码。相反,请试用示例代码和原型。尝试理解问题,而无需考虑解决方案。整理好一切并将其写下来后,请与您的团队和配对伙伴甚至是办公桌上的橡皮鸭进行讨论。如果您仍然无法说清楚,或者他们听不懂,请完善您的想法。一旦确定了所有条件,请将所有思想和示例代码集成到一个实际的可行解决方案中。


2
如果可以的话,我将投票一百万次,无论他们是否在“区域”内,专业人员都学会工作。专业人员可以与人打扰,让他们问问题,周围有噪音,并与其他人进行实际交谈,讨论如何共同完成工作。我对与必须有特殊工作条件才能集中精力的prima donnas无关。
HLGEM

7
@HLGEM-我认为在需要时不能进入一个相当工作的地方就要求太多。
JeffO

2
@HLGEM:当然,专业人员应该在平均工作条件下具有平均生产率。但是,另一方面,以集中的方式让同一专业人士工作也符合雇主的利益,因为这可以极大地提高生产率和质量。
Giorgio

2
“在我看来,人们似乎将“区域”视为解决问题的灵丹妙药,就像一顶思考的帽子。”:不,更琐碎的是,该区域是一种集中状态,您可以在其中提高生产力因为您专注于自己的任务而不会分心。该区域不会使您变得全能,只会使您更有生产力。
Giorgio

2
@Yam Marcovic:这不是我想到的那种生产力(产生更多质量较低的代码):如果有人以孤立为借口做他们想做的事,那么他们的生产力就不会提高。对我来说,流程并不意味着先弄乱然后写下很多代码,而是要系统地处理特定任务,而不会被其他无关的任务打断。
Giorgio 2013年

5

结对编程有时需要与伴侣隔离一段时间。

您正在一个特定的类上一起工作,并且您意识到您需要编写一种方法,该方法需要对某些复杂的逻辑进行深入思考,否则将返回一个平凡的结果。您可以共同为该方法创建单元测试,并在单独工作时将该方法的编写推迟一段时间。该方法完成后,您将重新配对并评估结果。


为什么不应该在结对编程中实现?
try-catch-finally

5

我发现配对编程适用于一小类问题。例如,如果您正在开发跨平台产品,并且Winders家伙实现了需要操作系统特定代码的功能,则他可以在Mac家伙驱动时帮助Mac家伙在Mac代码上实现相同的功能。

但是,以我的经验,配对编程会异常地导致生产力的净损失。通常感觉就像我们要雇两个开发人员来完成一个工作。

是的,它减少了开发人员在工作日可能中断stackexchange的可怕可能性。

恕我直言,对于那些想要监管他们的开发人员的公司来说,便宜得多,只要他们将每个开发人员与私人保安人员配对,以支持开发人员,并在开发人员放慢速度或试图达到不必要的峰值时用警棍击中该开发人员网页。


1
结对编程的要点不是彼此停止放松。那甚至都不有效。关键是实时进行代码审查。
2013年

3
@Lev:提交之前进行代码审阅会效率更高:审阅从几分钟到半小时和一个小时,而不是整个工作日。
Giorgio 2014年

@Giorgio不完全是。例如,很可能发生这样的情况:您创建了一个错误,然后浪费了捕获错误的时间,然后才对代码进行审查和提交。如果您已对编程,则您的伙伴会注意到该错误并节省了调试时间。
2014年

1
@Lev:“如果您对编程了配对,那么您的伴侣会注意到该错误并节省了调试时间。”:不能保证在配对编程或代码审查中都发现了一个错误。例如,经过六个小时的配对编程,一个人可能会非常疲倦,以至于很容易忽略错误。
Giorgio

显然没有保证,但可以提供帮助。
2014年

3

当开发人员尝试进入该区域时,您将尝试尽可能地隔离自己,以使自己适应并清除思路。配对编程为什么要有所不同?

您和您的伴侣应该找到一个对双方都适用的区域诱导环境。这可能需要在某些方面做出妥协,但是我的主要观点是,结对环境应该类似于独奏环境。关闭外部世界。这对正在一起编程。其他人(通常是其他同事)应该不会打扰(关键性的,“正在做什么”的问题除外)。


0

当您知道解决问题的确切步骤时,流程是一个很好的状态。即几个未知的未知数。您坐在一个安静的角落,努力解决问题。但是,大多数问题/故事/功能在开始编程时都不是很清楚。预期的最终状态与大脑如何“计划”最终状态之间始终存在“差距”。当您实际“做”的时候,您会学到很多东西。你的大脑杂耍

  • 代码设计

  • 打字

  • 学习有关领域和代码的新知识

当我独自编程时,我很难平衡这些事情。我倾向于陷入“兔子洞”,在那儿,我沉没的成本谬误使我无法退后一步,着眼于全局并更改设计。对于这个问题,我也很难和假想的橡皮鸭或真实的橡皮鸭交谈。我毕竟是“流”。

但是,当我高效地进行结对编程时,我会交替进行打字和思考和思考。在这里,许多隐藏的事物都可以显示出来,并且可能会出现不同的设计。如果我要进入兔子洞,配对对象可以将我从兔子洞中拉出来。与真实的人交谈/解释的事情具有使您的想法更清晰的奇妙效果。有时候,我确实会错过参加“流程”的机会,但是我认为配对时比为单人编程对团队的贡献更大。完成所有编程后,==键入。编程发生在大脑中,而当两个大脑相互协作并相互批评时,就会发生更好的编程。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.