作者:Tony Qu

上周六订了coderetreat上海站的课程,一大早7:30就出门了,确实远了点,在五角场那里,过去坐地铁也要1个小时左右,到那边已经9:10分了。

首先来说说coderetreat的含义,retreat在英文中有治疗的意思,所以code retreat可以翻译为编程技能修正课程,其主要流程是通过若干个session,每个session 45分钟,解决一个编程问题,可能是算法或者实际问题,题目类似ACM,但它并不注重结果,没做完也没关系,但在做的过程中要能学到东西。当天由于是全球活动,其实世界各地都在同时进行活动,当然会有些时差,据姚若周同学(主要组织者之一)讲,当天日本有5个城市、悉尼也有好几个城市、中国也有好几个城市、还有米国、欧洲都在进行活动,大屏幕上有个视频共享界面把世界各地的活动情况都试试传送了过来,看到世界各地的一群人都在做同一件事,你懂得,这感觉非常特别。

IMG_20121208_165551 

接着来说下活动租用的场地,看到这碑大家应该明白了吧,没错,就是创新工场上海办公楼,地址是国定东路300号,其实是和国定东路200号一起的,都是创业园区,只是两个门而已,离地铁十号线站大概10分钟路程。那楼还真的不是盖的,虽然地方有那么点小偏,但楼绝对是又新又赞的,连我远在德国的学长看了这照片不禁感叹中国的楼盖的是好,德国都是些破楼。

image 

image

(以上照片使用了android 4.2的全景拍摄功能,自动合成效果貌似还能接受。)

据说场地是创新工场免费赞助给agile tour和coderetreat的,所以省了不少成本,毕竟这活动是公益性质的,在这里替大家谢谢开复和创新工场的无私奉献者们。

 

言归正传,回过头来说coderetreat。这活动通常是两个人一组,一组有一台电脑就行了,因为是结对编程,另一个人不一定要有电脑,有纸和笔就行了。由于要编程结对的两个人原则上是要懂同一种语言的。

主要规则如下图所示

image

 

第一点:所有测试必须通过

第二点:代码要清楚、要有意义、要保持一致

第三点:不要重复行为或配置

第四点:使方法、类和模块尽可能的小(里面的代码越少越好)

这四点可不是这么容易达到的,大家自己体会吧。
其实每个45分钟的Session做的东西都是一样的,在新一轮session开始时,你可以重新选择搭档,因为这个活动注重的是与不同的人交流获得不同的心得和知识。我总共换了2次搭档,3个人,第一个是个携程的架构师、第二个是某大学教授,第三个是一个老外(米国人,我后来才知道他尽然也是certicated scrum coach,牛人啊,膜拜~)。

我与携程的哥们配合很是默契,我们做需求分析很快,而且考虑到了很多情况,第一场虽然没写几行代码但是基本把整个问题搞清楚了,还写了几个测试用例,后来因为说要换搭档,所以没一起做下去,估计一起做几轮,我们一定能完成。第二个是王教授,人家是大学里教软件工程的,但是人家倒也没闲着,自己做了个BDD框架,我们整个session基本上在聊她那个框架,蛮有意思的,因为目前好的BDD并不多,他们是希望通过项目实践把整个BDD流程做熟,然后进行孵化,据说还在博客园发过文呢。第三个是那个米国大牛,人家可是boostagile.com的培训师,英文叫Dale, 中文名叫大乐,这位大叔中文确实讲得不错,虽然很多话他听不懂,但他很谦虚,经常会说“这个不会”、“我脑子坏了,记不住”,甚是搞笑,和这种大牛呆在一起完全没有任何压力,又可以学到很多东西,真是难得啊。

 

来说说当天我学到的东西

a. 如果是TDD,单元测试应该先于代码实现,即使是类名也应该是通过单元测试代码中的名字创建出来的,而不是先写那个类。

b. 单元测试代码应该最小化,测试的东西应该是非常基本的功能,不要涉及和这个用例无关的逻辑,即使有些时候它在同一个被测试的方法中实现。

c. 不同的人考虑问题的角度不一样,产生的培训效果会完全不同。

我接触的三位同学他们的出发点都是不同的,第一位和我差不多,希望完成任务,所以我们更注重用捷径完成问题,但有时会忽略过程;第二位同学完全是来推广她的BDD的,所以(强行)要求我用它的BDD框架来设计测试用例,但说实话,由于我对这框架不熟,所以不可能在45分钟内马上上手,所以我后来干脆和她聊其他事了,呵呵;第三位同学更注重过程,他和姚若周一直在讨论如何写单元测试(我当时其实在旁边打了回酱油),如何能写得让单元测试只有很少的代码,少于5行,所以相比之下,第三位老外的收获可能是最多的,但他其实无所谓做不做完,这和这个活动的初衷也更接近。

d. 如何不用if实现同样的逻辑

当天我们的题目正常思路肯定会用到if,因为要判某个细胞是否活着,后来老外想了个办法,直接只存活着的细胞结点,这样遍历的时候就不用判断了,肯定是活细胞。这招说实话,我一开始确实想不到。

e. Dvorak键盘布局

这是一种特殊的键盘布局,据说可以改善手到敲击任何一个键所需的距离,当然这需要练习2周-4周才能适应,具体可以看http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard

f. 不用鼠标写代码

这是差不多在下午倒数第二轮讲师提的要求,说实话,一开始大家都不习惯,但后来发现用快捷键确实会有不同的效果,习惯了就会很快。

g. 适当的围观可以带来意想不到的宣传和学习效果

我是个很注重细节的人,我发现基本上有个问题或讨论只要超过3个人就会引起多人围观,这时人数会迅速变成6人甚至10人,但围上来的基本是想知道他们在讨论什么,能学到什么?这很重要,因为大家对话题有同样的兴趣。

h. 做结对编程时,即使发现了错误也不要马上打断你的搭档,这样一方面是效率问题,一方面也是对搭档的尊重,等他写完这部分代码,一起指出效果会很不同,这同时也是在做code review。

 

先写到这吧,希望以后有更多这样有意义的活动可以参加,再次感谢agile tour对coderetreat活动的赞助。