APAC Day of Coderetreat 2015

来源:互联网 发布:开淘宝用什么软件好 编辑:程序博客网 时间:2024/05/16 11:09

时间:2015年6月11日
地点:杭州滨江诺基亚大厦
参与者:来自滨江各个IT公司的大牛与菜鸟们

题目:
今年的题目还是game of life
https://zh.wikipedia.org/wiki/%E5%BA%B7%E5%A8%81%E7%94%9F%E5%91%BD%E6%B8%B8%E6%88%8F

生命游戏是一個零玩家遊戲。它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。
1. 当前细胞为存活状态时,如果周围低于2个(不包含2个)存活细胞时, 该细胞变成死亡状态。(模拟生命数量稀少)
2. 当前细胞为存活状态时,如果周围有2个或3个存活细胞时, 该细胞保持原样。
3. 当前细胞为存活状态时,如果周围有3个以上的存活细胞时,该细胞变成死亡状态。(模拟生命数量过多)
4. 当前细胞为死亡状态时,如果周围有3个存活细胞时,该细胞变成存活状态。 (模拟繁殖)

形式:
整个过程分成4个session,在每个session中,两个参与者一组,共同完成这个游戏的开发。每个session会有不同的要求限制。session结束后都要把代码彻底删除。

session1:
时长:90min
限制条件:pair work
说明:这是一个热身的环节,主要是为了熟悉题目
发现:
这一环节我是跟麦总一组的。
按照我的思路,便是一开始就设计一个全局的二维数组,然后在函数中传入某个细胞的坐标,基于二维数组计算该坐标下一时刻的状态。
麦总却认为,规则中并没有提及二维数组和坐标的事情,某细胞下一时刻的状态只它当前时刻的状态和它的邻居数有关。
因此,我们的第一个函数是“计算一下时刻的状态”,参数为“当前状态”和“邻居数”。
在TDD的开发中,每新设计一个函数,都尽力要求这个函数既要简单,容易实现也容易测试,又不能太拘泥于细节。
我不得不承认,这是我至今遇到的最好的关于game of life的“第一个函数”。

session2:
时长:60min
限制条件:pair work, closure
由于麦总的到来,我们临时加了一个session,就是让麦总花半小时给我们介绍一门极冷门的语言“closure”,然后我们现学现卖,用closure实现game of life
发现:
麦子曰:如果学习一门新的语言,不能让你对程序有新的思考,那么这个语言就不值得学。
麦子曰:编程语言有两个山头,一个是以汇编、C/C++为代表的语言,它们都是以图灵机为基础的。另一个山头是以python为代表的语言,它们是以另一套与图灵机等价的体系为基础的。closure属于第二种。
我只学过图灵机山头的语言,表示对这个观点不理解。也理解不了closure的使用方法。也许他说的有道理,因为作为高级语言的closure,于我而言还不如汇编语言更容易理解。
这是一个独特的体验。

Session3:
时长:60min
限制条件:pair work, UT,
说明:一边写代码一边写测试是个好习惯。其实测试不一定要是UT,只是为了引导大家在写代码的同时写测试,然后可以进一步推广TDD。
发现:
这一环节我没有参加组队,而是观察每个队伍的表现。
麦总和另一大牛组队,大牛很有挑战精神,在麦总的指导下,再次挑战closure。
有的组队显然是有一定的基础,很快就搭好了gtest的环境,开发和测试交替进行,有条不紊。
有的组队用assert自己封装了山寨版的UT环境,也能起到UT的作用。
有的组队却一点经验也没有,两个人各自在自己的电脑上写着产品代码和测试代码。没有版本管理工具,只能通过QQ传代码,怎么可能做到TDD的“5分钟之内要运行测试”呢?
有的组队干脆没有测试,定义了一个很复杂的“第一个函数”,然后埋头奋斗于这个复杂的函数,在杂乱的逻辑间纠结不清。
我尝试给他们一些引导:
我:这个session的要求是要写测试,你们的测试在哪呢?
答:代码还没有写完呢,写什么测试啊。
我:我们一般比较推荐先写测试,再写代码。
然后就没有然后了,该同学忙于应付复杂的逻辑,无暇顾及我的建议

session4:
时长:60min
限制条件:pair work, UT, TDD,每个函数的逻辑代码行少于4行。
说明:终于到了推广TDD环节了。
发现:
这一环节,我和大牛一组。与其说是pair work, 不如说是他引导我怎么做。
语言使用的是python。TDD什么的,那就不用说了。
4行是一个不可思议的限制,轻轻松松就超标了。
按照我的想法,长度变短函数,就应该拆分,可是已经就这么点内容了,怎么拆呢?
正当我犹豫的时候,大牛像变魔术一样,把几行代码就合并成了一行。
我想说:python很神奇,大牛很牛

session5:
时长:60min
限制条件:pair work, UT, TDD,没有if、for、while等条件控制语句。
说明:限制条件控制语句本来没有什么特别的目的。host说,杨过砍掉了右手,才发现他的左手也可以用剑。我们尝试不要去用我们原来特别依赖的东西,也许会有意想不到的发现。
发现:
这一环节继续与大牛一组,又加入进来一个MM。MM大概是第一次参加,一点都不知道要怎么做。大牛很有耐心,也很擅长引导,用“深入浅出”来形容太合适了。后来才知道,大牛是专业coach。

0 0