我的项目工程师同事、建筑师和我最近参加了一个关于“固定团队远程移动编程”的内部培训课程。我们想学习如何在一群人中最好地一起编程,有什么工具支持,以及在我们的团队中学习和做这种工作是否容易。在这篇帖子中,我想分享我在这次培训中的经验。
Mob编程或集成编程描述了一种软件开发方法,在这种方法中,整个团队一起工作,同时使用相同的代码。在今天的家庭办公时间,它看起来是这样的:
反过来,团队成员分享屏幕,并负责写作(“打字员”)。然而,团队成员只写其他成员讨论过的内容,然后听写!打字员不参与讨论,也不自动编写代码。
5分钟后,下一个团队成员编写并共享屏幕。再过5分钟,你又变了。这可以一直进行到代码完成或经过预定义的时间段。
在软件方面,我们找到了在开源工具mob中执行mob编程的支持。如果团队在Git存储库中工作,mob(通过mob start)将创建一个临时开发分支,在mob编程期间,工作将在该分支中完成。同时,它还带来了一个计时器,当5分钟的工作时间结束时发出警报。在mob next中,临时开发分支的所有变更都将提交。下一个人成为办事员,然后再次运行mob start。这将加载前一个编写器的所有更改,从而可以无缝地处理代码。5分钟后,职员运行mob next,轮到下一个人。当mob编程回合结束时,mob done被执行。该命令将所有更改保存到提交中,然后可以将提交推送到主开发分支。
在我们的训练中,我们进行了一次暴徒会议。我们提前考虑了一个主题:在Azure中使用Ansible设置Kubernetes集群,并在其中部署一个示例应用程序。老师指导我们学习工作方法,并提出问题,否则我们只能靠自己了。
最重要的一点是,每个团队成员都有相同的工作环境。对于我们的mob编程,我们需要git、Ansible(包括相同的集合)和kubectl的最新版本,以及包含大量软件包的当前Python版本。
当一个团队成员在Windows上工作,另一个在WSL上工作,第三个在Linux虚拟机上工作时,会遇到无数的障碍,让每个人都能达到有意义的工作。当然,我们在某个时候换成了Docker。为此,我们创建了一个所谓的管理容器,它将所有必需的软件包安装在一个容器中的正确版本中。这解决了90%的问题,我们能够在暴民会议中一起解决剩下的10%。然而,在我们到达这一点之前,一个多小时过去了。
在mob会议开始时,我们觉得5分钟的切换间隔非常短,我们或许应该延长它。然而,我们很快发现了为什么短时间间隔是有意义的:每个人都应该在30分钟内轮到自己写作。例如,如果你将间隔时间延长到10分钟,那么5人团队中的每个人每小时只能得到一次。这会很快导致分心。由于时间间隔较短,人们的注意力仍然较高,因为很快又轮到每个人了。
在我们的培训中,我们也学到了很多关于合作的知识。mob会话中的每个人都要专注于任务,这一点很重要。积极参与是必不可少的:如果有人不在我们身边或对某个问题有想法,那么这个人应该积极解决它。这样一来,每个人都能掌握全局,不会失去工作的欲望。同样,你应该积极决定休息,因为这样专注的工作和讨论很快就会让人筋疲力尽。
在暴民会议期间,一个有趣的问题可能是团队中的知识分配不均。如果当前的作者比其他团队成员对这个主题有更深入的了解,那么这个人可能会觉得自己写得慢了,想要继续自己写下去。然而,在这里,耐心和毅力是必要的,这样才不会丢下一个人。如果其他人是作者,专家可以与团队分享他的专业知识,这样每个人都可以参与。
由于许多不同的人在一次暴徒会议中一起工作,因此问题的解决方案可能会有所不同。事实证明,每个人都可以展示和讨论他们的解决方案,通常在团队中,你会发现每个人都同意的变体。
这样的mob会话可能非常有用:你可以立即与团队分享你的知识,你不需要代码审查,四只眼睛(或10只眼睛)可以看到两个以上。当然,这样的会议也会耗费精力,因为你几乎必须一直专注于讨论。如果每个人都有一个工作环境,你很快就会进入一个流程,在这里一起工作很有趣。
Linux和开源爱好者。传统上,我喜欢在云端原生的土地上种植植物。