GDCR(Global Day of CodeRetreat) 2013 深圳总结

2014-10-15 21:05

“今年GDCR什么时候搞啊,自从去年参加了GDCR后,再参加别的社区活动都感觉没什么意思。”在上一次的社区活动上,遇到了去年GDCR的一位参会者,他如是说。作为去年的组织者,听到这样的话自然是十分高兴。眼看快一年过去了,我这一篇回顾却还没有写完,实在惭愧。希望能通过这篇文章让更多人了解到GDCR,从而有机会参与到GDCR中来。

什么是GDCR

GDCR的全称是“Global Day of CodeRetreat”,你可以理解为“全球CodeRetreat日”,那么你可能又有疑问了,什么是CodeRetreat呢?

CodeRetreat是一种集体编程练习活动,程序员们聚集到一起,往下项目的压力,操练与切磋编程技艺。

起念

话说2012年组织北京敏捷之旅的时候,请到一位嘉宾来主持代码实践环节,他叫Mike Long,在这次活动上认识他后,得知他是Beijing Soft Craftsmanship Meetup Group(北京软件匠艺小组)的发起人。然后参加了由他主持的“GDCR 2012 北京站”活动。2013年GDCR快到的时候,我在深圳出差,本来打算回北京参加活动的。虽然公司有Home flight可以报销路费,还是觉得跑这么远不合算。于是想看看深圳是否有人在组织,结果是深圳从未组织过。于是又转念一想,何不自己来组织?

场地,食物,引导者

查询官方资料后,发现组织一次活动也并不难,只要搞定“场地食物引导者”三块即可。于是我立即联系了腾讯的军少,军少很快就确定说可以提供一个会议室。搞定了场地,我就下定决心向官方申请此次活动的承办了。

官方有明确要求,食物不能是汉堡或批萨,因为程序员们放弃休息的时间来参加活动,应该得到更好的食物。我计划除了提供午餐外,还有水果和点心,人均50应该足够了,于是我发邮件给市场部门的同事说:“这个活动非常符合我们公司的文化,很多国外的office都组织过,希望公司能给予支持。如果公司不支持,我就自己出钱搞了。”当时我的想法是,这种活动吸引到的是真正对编程有热情的人,我在活动上发现有合适的就推荐到公司,还能拿8000块的伯乐奖是不。不过失望的是公司对活动大力支持,我没有得逞。
万万没想到的是,在官方的Slides中列举的Global赞助商中,也有ThoughtWorks,另外两家分别是Github和JetBrains。


宣传

活动报名我一向用金数据,很快就做好报名页面,开始到处去推广,主要有以下渠道:

  • QQ群
  • 微信
  • 开源中国
  • 活动行

宣传文案如下:

周末想一起写代码吗?尝试结对编程,测试驱动开发,扔掉鼠标只用快捷键,每个方法不超过4行,不写任何注释,不准使用if,各种限制,只是为了提高你的编码技能。赶紧报名,仅有15个名额:https://jinshuju.net/forms/i6KwAB

比较有意思的回复是:

周末还写代码,屌丝注定孤独一生啊。
还提供免费午餐,不会是骗子吧。

不到一周的宣传时间,最后报名22人,统计信息如下:

可以看出,无论是刚开始工作还是工作5年以上都对此活动很感兴趣。其中印象很深的是一个年纪很小,开淘宝店的同学几次打电话过来问有什么要求,说他只自学了一点C语言,很想来参加活动,但是担心自己的编程能力不足。我不断地鼓励他,最后他真的来了。

活动

活动当天下起了小雨,又让一些人缺席,实到14人。上午9点多一些,活动正式开始。
练习的题目是:Game of life

第一个session大家开始理解需求,有的人已经开始编码,有的人一直在纸上做设计。
由于参与者基本都没有实践过TDD和结对编程,在第一个session结束后分享了Simple Design,TDD的基本方法和Ping Pong结对编程的方式。
第二个session也没有加任何限制,让大家用TDD的方式做出解决方案;
上午两个session很快就过去了,我们开始愉快地用餐和聊天,大家都很open,什么都聊。
不过真正好玩的是下午,因为要开始加限制条件了。

我加的第一个限制是每个方法不能超过4行,关于为什么要写短小的函数以及如何保持短小,请看《代码整洁之道》的第三章前3个小节。
每个session结束后,要换一个pair对象,同时删除掉之前所有的代码。

下午第二个session的限制条件是:扔掉鼠标(包括触摸板)。目的是领会快捷键的高效,当然,如果你是Vim党就毫无压力了。在这个session回顾时,我演示了JetBrains公司强大的IntelliJ IDEA,强大的快捷键基本可以完成所有事情,小伙伴们都惊呆了。

第三个限制是:Pair之间不能说话,只能通过代码交流。当然也不能投机取巧,比如写注释。目的是写自表达的代码,让每一个变更或方法名称都有意义,有很强的可读性。其实我们真实的工作中也是这样,你需要阅读修改代码的时候,基本是无法直接和代码作者对话 的,他可能早已离职。

最后回顾

活动的最后,大家分享三个问题:

  • 学到了什么?
  • 有什么惊喜?
  • 有没有能带走的东西?

引导者

作为引导者,可以根据大家的编程能力以及对Clean Code,TDD的掌握情况改变session的数量和内容。
比如你可以改变需求:

  • 地图像地球一样是圆的,也就是说右边界和左边界是相连的,下边界与上边界是相连的
  • 地图可以没有边界
  • 地图不是2D的而是3D的
  • The Zombie Mayhem

也可以加入更多限制:

总的来说,第一次Facilitate这样的活动,倒也没什么压力,大家也玩的很开心,也认识了一帮对编程有热情的人。
2014年,我义无反顾地继续组织深圳站活动,同时将有更多的城市加入到Global Day of CodeRetreat,希望影响更多的程序员。