结对编程初体验

一、项目描述:黄金点游戏

黄金点游戏是一个数字小游戏,其游戏规则是:

      N个同学(N通常大于10),每人写一个0-100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。玩了几天以后,大家发现了一些很有意思的现象,比如黄金点在逐渐地往下移动。

现在请大家根据这个游戏规则,编一个可以多人一起玩的小游戏程序,要求如下:

   1、本作业属于结对编程项目,必须由二人共同完成,并分别将本次作业过程发到博客,同时将本次作业源代码提交到coding系统;

   2、如果可能的话尽量以C/S或B/S方式实现,即利用服务器接收和处理所有玩家提交的数字,并将结果反馈给各玩家,玩家可以通过客户端提交数字;

   3、如果采用单机方式实现的话,需要为用户提供便利的输入界面;

   4、该游戏每次至少可以运行10轮以上,并能够保留各轮比赛结果。

二、结对编程时间规划

     我拿到结对编程伙伴是在周二,当天下午我首先做的事情就是把剩余6天时间分配做出来,因为时间不是很多每天都有任务。

   1、周二:作出6天时间安排。

   2、周三:(停电)进行方案论证,定下总体流程。必要的module,function要记录下来。附带作出分工。

   3、周四&周五:考虑到编程能力决定安排两天编码。时间允许后延一天。

   4、周六:测试代码(时间可以延后到周日)

   5、周日:晚上6点之前可以做一些未完成的事情,6点之后要开始构思博客的写法。

   6、周一:完成博客提交作业。

PS:实际合作过程中每天用的时间也不是非常长,平均在2~3小时。

三、MyPartner

    我的结对编程伙伴是:周晓宇。

对方博客链接:http://www.cnblogs.com/yu-ch/p/5967161.html

    周晓宇是一个非常善于倾听的人,我在第一天告诉她这几天要做什么,需要当天把结对编程的工作方式作出了解,得看《构建之法》第几页。我用的文字也不是说有多委婉,就是把做的事情说明白,但是她很配合,我觉得这一点很不容易,我比较强势很难做到。

    周晓宇是一个非常仔细思考的人,周三要进行方案论证,在周二我说我们今天就得把流程图,画出来明天互相讲(辩论)。我的意思是先把大体的结构画出来,但第二天我们一对照发现根本不需要辩论,因为我画的是整体的流程,写的是数据存储的方法;她写的是程序最核心的地方:对黄金点的各种处理。这也决定了我们领航员与驾驶员之间的角色转换。

                                     图(1)周三进行方案论证

    周晓宇还是一个对自己编程能力缺乏自信的人,人员分组完成就直接和我沟通,觉得自己编程能力不行,怕拖后腿。事前我肯定不了解她的水平,我先给她吃定心丸,告诉她本题并不难,使用熟悉的语言编写,we are team,还有我在呢,引用奥巴马Yes we can!为团队口号。然后大约过了几个小时,我对她说她必须要做一些事情,有所为,不能像有的组,一个人完成。然后本着以理服人的原则,我陈述 程序并不是主要的事情,结对的过程,才是作业的核心。我觉得很有效,她也很认同,积极的参与设计。在后来发现,她还是有很强的编程能力,找BUG也非常6。就是写的程序相对较少,缺少信心。

                          图(2)领航员与驾驶员的配合,一图表示每天的状态。

四、工作

    实际上前文也讲了一些我们所做的工作,那么在这里主要讲述开发程序所做。

    我负责驾驶的是程序的总框架编写,包含(界面,玩家,创建,输入),把游戏流程做出来。

    周晓宇充当驾驶员的是对黄金点的计算创建保存等 各种操作。

    周的编程习惯实际上和我很像,毕竟师出同门,除了变量的命名之外都比较符合代码规范,变量命名的规范我还真不知道,都是变成英文单词命名的。只不过还没有养成加注释的习惯,所有的注释都是我加入的。代码效率这方面我更加重视,这一点做程序时也有体现,后来进行了一些修改,提升了一些效率。

    这个程序的可扩展性是比较好的,采用模块化设计思想,再拓展功能也是很容易的。有的地方不惜浪费一些空间存代码,读文件的地方暂时没搞通,但是对应的函数还是写了,接口也留好了。

    在我做驾驶员周做领航员的时候,我在写程序时出现了一些错误,比如逻辑,她发现了及时的告诉我。这也体现了结对编程的意义。如果我自己做程序,有的错误要调试的时候才发现。在这里我也发现,对于小程序,一个人编写更好,因为容易调试。对于大工程结对编程的好处才真正的体现出来。大程序找bug是更加费时间的,结对可以省出大量时间。

    在周做驾驶员,我做领航员得到时候,我只发现了周代码中的一些小问题,一个效率更高的实现方式第二天才想到。这里做一下检讨,没有认真地看代码,没做好领航员的职责。

代码:https://coding.net/u/DynastySun/p/GOLD/git

                                     图(3)程序运行图一览

五、总结

    结对编程的体会我就不写了,前面已经写得很详细。

总结:通过这次作业,我也算是多多少少体验了一把结对编程。我们的程序可能只算是一般般,但是我们组对结对编程方法的实践,可以说是遥遥领先的。我们组是最早开始结对工作的,每一天都有明确具体的目标,这就是战略;我们每天围绕目标解决目标,这就是战术。所以我们的生活中有很多事是可以触类旁通的,在十年前很难想象把东西卖到互联网上去,所以人家才是马云。在我们行业还是有很多地方值得我们创新,下一个就是你。(扯多了...)我们在实践中也暴露出了一些问题(具体的看前文)。随着技能的提高,结对编程的方式,可能也会发生一些改变。

    这次结对编程是一次很好的作业,软件工程留的作业都很好,这之间涉及了,两个人之间怎么沟通的问题,良好的沟通是工作好的开端。我觉得我们之间的配合是很默契的,在这里感谢我的合作伙伴——周晓宇同志,感谢她在这几天付出的辛苦努力。

    一个和尚抬水喝,两个和尚挑水喝,三个和尚呢?我很期待下一次的团队编程实践。

                                                                     2016/10/16

posted @ 2016-10-16 18:52  叫我孙先森吧  阅读(230)  评论(0编辑  收藏  举报