深圳APAC Day of CodeRetreat笔记
前言
最近参加了小波老师组织的深圳APAC Day of CodeRetreat,受益匪浅. 在此分享下活动的感受.转载请注明出处 http://blog.csdn.net/uxyheaven
什么是 CodeRetreat
CodeRetreat是集中编码操练活动,在为期一天的时间内自己编写代码,以真实地反映自己的代码水平,并且互相学习.
一个典型的coderetreat通常(如在coderetreat.org网站上所概述的一样)包括以下内容:
- 要解决的代码问题(或kata)是创建一个虚拟的康威生命游戏(Conway’s Game of Life),它通过应用一些简单的规则,对跨越多代的细胞的生命和死亡进行模拟.
- 编码活动一共会举办五或六场,每一场的时间是45分钟. 中间的休息时间可以进行交谈,用餐和饮酒,整场活动的时间需要一整天.
- 在具体过程中需要同时应用结对编程和测试驱动开发方式.
- 在每场编码活动结束后,所有的代码必须被删除,并且在下一场活动开始时要更换拍档.
- 参与者并不一定要在活动中实现一个完整的解决问题的方案.
- 可以在活动中加入不同的限制(例如:”方法不能够返回伤任何值”,“不可交谈”等等),因此,你可以从不同的角度对问题空间本身,以及与他人合作的方式进行重新探索与解读.
我们的CodeRetreat
活动开始之前,我并不知道什么是CodeRetreat. 在小波老师介绍了今天要做的事情后,发现活动很合自己的胃口.
我们首先开始了自夸式的自我介绍. 大伙的普片优点都是自己学习能力很强,有多年编程经验的同学还有本身编码能力很强的属性,而刚入门的同学则有可塑性很强的属性. 总之,可以用咱的自夸来概括一下,来参加活动的同学编码能力基本都是同龄top10%了. 周末还写代码,能不甩同龄人一截么. 至于妹子那是啥,能吃么?
我们的Kata是Tennis.每一场都有不同的限制条件,我们要求每一场都和不同的同学去结队编程.
@H_403_35@Session One第一场是让我们熟悉需求的,我们用的语言是Objective-C.
需求可以见http://codingdojo.org/cgi-bin/index.pl?KataTennis
我和我的partner对于Tennis不了解,咱先是直接就把这段代码丢给了有道词典,果然翻译得不尽如人意. 我们对比着机翻和原文,总算是了解了七七八八. 后来我在直接在百度搜索网球记分规则
,将剩下的一些疑点也弄清楚了.
然后开始了紧张的编码工作,我一上来就是分了tennis manager,player,point info三个类 加上一个tennis result接口,还有个默认的环境类,结果时间结束的时候只完成了一份没有自测的代码. 此时我还没了解活动是需要强调简单设计原则.
有的同学玩过红白机的tennis游戏,有的看过tennis比赛. 速度快的组5分钟就开始了编码工作. 对比我们这组应该是花了些时间在理解需求上. 可见开发人员懂业务是多重要啊.
结束时,有的同学分享了自己的巧妙解决思路,很是赞一个. 咱分享了一下咱的设计想法,结果被大伙一直吐槽,此时咱还在纳闷,这个不是最简单的设计么,你们难道不是这样写的,怎么还说我弄的太多了?
Session Two
意犹未尽的第一场结束后,我们马上开始了第二场.
第二场的限制是使用TDD,我和小波老师结队的,我们用的语言是Objective-C.
小波老师纯键盘操作,这时感觉小波老师碉堡了,不熟悉oc竟然打的比我快.
我用了我自己写的单元测试类. 可是说来惭愧,咱虽然听过TDD的分享,但是思想完全不是TDD,可以说咱只是写了一个能辅助我用于自测的类. 在小波的老师的引导下,咱对TDD有了认识. 后来的总结上,各位同学说出了自己对TDD的一些理解,此时咱可以说自己get了新技能.
在第二场的开发中,我和小波老师一人写测试用例一人写实现代码,然后交替进行. 整个过程很愉快. 我在这里重命名了tennis manager为match又加入了match的工厂方法和 player的接口. 此时我还是没有发现我的问题所在.
场后的总结和吃饭的路上,我和zhichao同学交换了下想法. 发现自己被吊打了. 这个时候我已经意识到自己的问题了:设计过度. zhichao同学告诉我,凡事解决不了的事情都可以通过加一个间接层去解决,能直接解决的事情就直接去解决他. 不要过度追求设计模式,理解需求,写出合适的代码,自然而然的就是xx模式,可能是设计模式的一种,也可能是一种新的模式.
Session Three
第三场的限制是使用快捷键编程,我们用的语言是Ruby.
我和我的partner都不熟快捷键,so被IDE虐. 小波老师则给我们分享了两个很赞的技巧:
- 用vim的方式操作chrome的插件vimium
- 分屏小工具spectacle
纯键盘的速度确实要比键鼠快. 哪怕是键盘家触摸板也没有纯键盘那样的爽快感.
我们总结了下常用快捷键的分类,大致如下:
Session Four
第四场的限制是使用纯文本环境编码,我们用的语言是Python.
我直接就不会写代码了,大神则表示区别不大.
我的partner给我展现了他的风格的代码,比我写的简单多了,一个类加几个方法就完成了需求. 对比自己之前的代码,发现自己确实是过度了.
Session Five
最后一场的限制是不说话,我们用的语言是Java.
我的我的partner在写之前商量了不少,可真正写起来发现不是那么一回事. partner没有写测试用例. 当partner把代码交给我的时候,我没能理解他的意图.只好又把代码还给了partner.后来partner修改了一次代码,再交给我,我才能继续完成下面的代码.
对比一下,我和之前的partner用的是TDD,加上能说话,在交换写代码的人的时候,彼此之间能够很清楚的了解接下来来要做什么. 结队编程的时候专注力比平日果然要高. 在最后的一场里,由于前一天弄到3点多才睡,又早起,又已经进行了四场,导致我在最后的一场中有了短暂的时间注意力没集中,partner写的嵌套又深,种种的原因,使得我们第一次的代码交流失败.
show
活动的最后,我们展示了只有一个函数的C实现,可读性高的Python实现,函数式变成的Erlang实现. 看了其他语言的实现版本,进行了一天的思维的碰撞,编程果然是一件很有乐趣的事情.
总结
今天的活动是完全不虚此行,感谢小波老师,感谢中兴迅雷的赞助. 很期待后续的活动. 最后用三个问题来结束:
- 如果今天你学到了某些东西,那么你学到了什么?如何正确的使用TDD
- 如果今天有什么事让你感到吃惊,那是什么样的事?
快捷键很强大 - 如果你打算在下次活动中进行某些改变,那是什么样的改变?要早睡和锻炼身体.养精蓄锐,好好参加下一次活动.ps:(你丫的能早睡?)