深圳APAC Day of CodeRetreat笔记

来源:互联网 发布:子见夫子乎 编辑:程序博客网 时间:2024/04/29 11:37

深圳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.每一场都有不同的限制条件, 我们要求每一场都和不同的同学去结队编程.

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:(你丫的能早睡?)
2 0