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