Global Day of Code Retreat 2012 -- Shanghai

12月8日全球有将近160个城市一起参与组织了Global Day of Code Retreat 2012。上海站在创新工厂,由我和姚若舟Joseph(@姚若舟)一起组织。这次网上报名有60人,实际来了35人,已经是历次编程活动参与人数最多的了。之前在Scrum Gathering Shanghai 2012中Open Space的环节做了一次Code Retreat,感觉不是很正式。这次是完整一天的Code Retreat,感觉十分不同。这次还和同时区的其它8个城市一起视频连线,试了把Google Hangout,十分酷。

GDCR Google Hangout

Code Retreat是一个一天的集中练习的活动,专注于软件开发和设计的基础。通过给开发人员提供专注练习的机会并远离完成工作的压力,CodeRetreat这种形式已被证明是提升编程技能的有效方法。通过练习模块化和面向对象的基本原则,开发人员可以提高他们编写代码的能力并使变更成本最小化。

Code Retreat每次都采用同样的题目:Conway’s Game of Life,规则如下:

  1. 当一个活的细胞周围有1个或者没有活的细胞,它将因为寂寞而死。
  2. 当一个活的细胞周围有多于3个的活细胞,它将因为过度拥挤而死。
  3. 一个活的细胞周围有2个活3个活的细胞,它将会生存。
  4. 任何一个空白的周围有3个活的细胞,将会诞生一个新的细胞。
我们一共安排了6个Session,每个Session包括45分钟的编程时间,15分钟的Retro和休息的时间。每个Session大家结对编程,结束时删除所有代码!删除代码的目的也是把大家从结果导向引导至过程导向,不看重最终写出来的代码,而看重代码过程中的技巧和方法的练习和互相学习。同时在每个Session开始前,大家都需要切换pair,这样大家可以与不同的人以前练习,互相学习对方的技巧和思路。

第一个Session主要让大家了解问题。我们只给出了题目和Wiki链接,并没有介绍这个题目的内容及规则。这个Session大家自己去Wiki上了解这个问题。

由于第一个Session给大家的时间不是很充裕,不到半个小时,第二个Session让大家尝试用代码实现这个问题。出乎预料的是,第二个Session有不少人已经写了测试,甚至有人直接就是用测试驱动开发实现的。

第三个Session让大家写实现代码的同时,都要写测试,之前写了测试的,这次尝试用测试驱动开发。让更多的人开始写测试。

下午开始后面3个Session。下午会加一些比较有挑战的限制。

第四个Session给大家的限制条件是所有方法的代码行数不超过5行。大家对这个限制还是有些异议的,不过做了之后大家又有了些新的认识,代码可读性的提高,方法职责单一等。

第五个Session的限制条件是No if,不允许使用条件分支语句包括if和Switch类语法。我们给大家一些提示帮助大家思考,不用if的可能解决方案。

第六个Session的限制条件是不允许用鼠标。这个对很多人来说还是个不小的挑战,这需要大家对编辑器或IDE的快捷键十分熟悉。虽然实际上大多数人还是需要先用鼠标来学习快捷键,不过大家都开始在尝试了,至少他们今天或多或少学到了一些快捷键。

在这整个过程中,大家使用了许多语言和平台,包括:PHP,Java,C#,C++,Objective C,Abap。多语种的互相交叉学习帮助大家从更多的角度学习编程技巧。本来计划在整个过程中,我需要在各个Session中引导大家,帮助大家思考编程过程中碰到的问题,特别是像单元测试和测试驱动开发,以及如何在各种限制下解决问题。其实大家都处理得很好。

[gallery link="file" ids="124,126,127,128,129,130,125"]

Jackson Zhang

Jackson Zhang

Odd-e敏捷教练,主要涉及组织,团队,产品,技术,工程实践等,曾为多家知名企业提供教练与培训服务。译有《用户故事与敏捷方法》,《.NET单元测试的艺术》和《实例化需求说明》。擅长工程实践(如测试驱动开发,单元测试,重构,持续集成等),产品探索(Impact Mapping,Pretotyping,Lean Startup等)与团队协作。zbcjackson AT gmail.com

Read More