这个星期在团队里面搞了一次Coding Dojo,每个人都从中学到了很多东西,效果十分不错,因此我想分享一下。
什么是Coding Dojo?
Coding Dojo是一个学习的过程。一些程序员(通常是15-20人)在一起编程解决一个程序问题。一边编程,一边互相学习。每个人可以从Coding Dojo中学到:解决问题的思路、编程技巧、面向对象设计、演进式设计、结对编程、测试驱动开发、持续集成等等。其实即使从别人犯的错误中,我们也能够学到很多。
组织
一周以前组织者会发出邀请,同时给出所要解决的问题(比如我们这次决定实现一个JSon Parser)。以下是我们的议程:
- Coding Dojo以及原则介绍 – 5分钟
- 问题介绍 – 10分钟
- 2个时段的结对编程 – 20分钟 × 2
- 中断(所有人一起讨论一下当前的解决方案,以及下一步方案,注意事项)- 10分钟
- 2个时段的结对编程 – 20分钟 × 2
- 反省 – 10分钟
会议室组织方式
在会议室中间有两个人结对编程,一个是驾驶员(Pilot),另一个是领航员(Co-pilot, Navigator)。周围坐的都是顾问(Advisor, Sensei),前面是投影仪。
Coding Dojo中的角色
教练(coach)帮助维护秩序,引导大家
驾驶员(Pilot):负责具体实现,边写代码,边要把自己的设计意图大声说出来
领航员(Co-pilot):负责帮助驾驶员进行设计,负责控制设计的战略方向
顾问(Advisor):坐在周围,通过投影仪观察当前的进展,可以提出问题,但是不能给出方案。驾驶员与领航员必须先回答顾问的所有问题,才能继续写代码。
一些原则
- 不要讨论太多,先写代码
- 写代码之前,先写测试
- 每个人都能从其他人身上学到东西,哪怕是错误
- 所有人参与写代码
- 如果你知道好的方案,分享给大家
- 顾问只能问问题,不能提方案,驾驶员和导航员必须回答所有问题
我们的Retrospective
- 导航员应该更多帮助驾驶员
- 在同一个时段内导航员和驾驶员应该多切换,当然另一个方案是每次替换结对的时候,替换导航员,然后让原来的驾驶员成为导航员引导下一个驾驶员
- 顾问应该保持耐心,减少对驾驶员和导航员的干扰
- 减少私下讨论
- 驾驶员应该大声把设计意图说给大家听
- 实现的Test Case应该事先明确
- 每个人应该尊重驾驶员和导航员,虚心学习
- 使用代码库
- 频繁签入代码
- 重构不够
- 每个人做驾驶员的时候使用自己的环境,使用熟悉的工具。其他人也可以学习他的技巧以及工具
- 重构的时候,跳跃太大
- 使用标准键盘
- 更多的面向对象设计
- 使用Pomodomo作为时间箱,但是使用一个Range(20分钟 +/- 五分钟)而不是一个点
- 鼓励每个人参与
- 教练确保会议秩序
- 替换结对的时候确保所有的测试通过。
Coding Dojo的资源
http://codingdojo.org/cgi-bin/wiki.pl?FrontPage
http://www.youtube.com/watch?v=gav9fLVkZQc