软工课的第一次小作业是两人结对编程,使用JavaScript共同开发一个Game of Life网页游戏,游戏逻辑并不复杂:在一个无限延伸的网格中,每个网格住着一个存货状态随机的细胞,在一定规则下,一个细胞在下一代的生死取决于其周围细胞的数量。与以往的个人编程或团队开发不同,从编程实现到测试,再到最后的文档编写,都要通过两人结对来完成。通过作业实践,对结对编程有了更多的感受。
在我们开发过程中,两人分别承担驾驶员和领航员的角色,“驾驶员”负责具体的编码工作,“领航员”则负责检查,及时纠正代码中的问题。在没有结对编程实践之前,我的感觉是这种编程方式很别扭,有个人在我身边盯着我会很不习惯,有可能还会降低效率。但在我们两人编程之后,会发现这是一种全新的体验。
结对编程与传统方式的不同
认真对待
我认为,结对编程与个人编程一个最明显的不同就体现在心理差异上。因为结对编程是两个人的事情,不论是担任驾驶员还是领航员的角色,都需要对程序设计和实现有足够的准备,否则很容易变成一个人写代码,另一个人无所事事。以我的经历为例,在未开发前,我提前一天把以前写过的JS代码又读了一遍,以便能够充分掌握JS的一些基本语法和编写规范,同时编写一个小的动态网页,以便能够熟练使用网页开发中的html、css和JS。在开发之前,自己仔细想了实现方法,做到胸有成竹。因为是两个人共同完成,有在他人表现的一面,所以甚至会比平时更严格地要求自己。
开发过程中,要打起十二分精神,两个人紧密配合,谁也不好意思开小差,能够集中注意力在代码上。
提高效率
结对编程的形式使得代码处于不断地审查过程,每一段代码都由一个人编写,另一个人检查,最大程度上减少了出现bug的可能;两人互相交流,商讨实现方式,遇到问题时,能够做到互补。比如,我可能忘记了js随机产生0或1的方法,而另一个很清楚,这就减少了搜索的时间,提高了效率。
在测试过程中,因为有两个人共同调试,所以能够更快的发现问题所在。比如在编码完成后,打开网页,发现页面什么也没有显示,按下F12键查看后,并没有报错,这时我准备打开源代码,步步调试。但我调试几部后,悦欣已经发现问题,原来游戏开始的接口写好后,并未调用。除此外,程序运行地还是十分流畅的。
互相学习
结对编程也是一个互相学习的过程。在结对编程过程中,两人会不断就实现方法、代码风格或命名方法等进行讨论,两个人的思路能够进行互补,在编写过程中能够学到对方解决问题的思路和方法,对于提高自己解决问题和编程能力有很大的帮助。