结对编程技术是一个非常简单和直观的概念,能达到事半功倍的工作效果。但是,人与人之间的合作不是一件简单的事情——尤其当人们都早已习惯了独自工作的时候。作为将来可能使用的一种重要工作模式,很高兴能有机会提前尝试。为了充分体会结对编程,我和小伙伴分别担任了驾驶员与领航员的角色,编写了两遍代码。
代码已提交至coding.net,链接如下:
驾驶员(张航),领航员(刘宇霏):https://coding.net/u/KingZHH/p/Personal-work/git/blob/master/main2
驾驶员(刘宇霏),领航员(张航):https://coding.net/u/tianjiawengg/p/1234/git/blob/master/GoldGame
工作总结:
作为驾驶员:本次编程的题目不是太难,所以在算法上领航员与我没有太多的分歧,在我编写代码时以我的思路为主。在编码时,领航员看得很认真,让本来比较散漫的我也不好意思中途停下去干别的事情,无形之中给了我一些压力,督促了编程的进度。领航员很负责,尽管没有什么算法上的问题,他依然在格式规范和容易遗漏的细节上帮我指出了问题,这省去了很多我将会在调试上浪费的时间还提高了我的代码的规范性和可读性;另外,在有些知识点不确定时,我可以询问领航员,他或者查书,或者将自己知道的分享给我,这又省了我亲自查书的功夫。在领航员的帮助下,我用了一个多点就完成的程序。
作为领航员:领航员虽然工作量不如驾驶员大,但作用还是很重要的。驾驶员的编程能力还是可以肯定的,但可能是稍微有点生疏,会有一些不确定的地方,例如储存结构的选择上,幸好我们已经编了一次了,所以总体上来说,没有什么大问题。驾驶员有些地方有点大意,在程序的整体结构及算法逻辑上控制得不错,但对格式(如换行、行代码长度)不是太关注,虽然不是什么大问题,但驾驶员还是很虚心地接受并适当地进行了改进,整个编程过程在我们两人的配合下还是很快和流畅的。
总体来说,结对编程还是很不错的,确实提高了编程的效率和质量。当我在编程时往往在思考量较大的地方无暇估计一些细节问题,幸好有领航员帮我及时指出,虽然有时会打断我的思路(这有些困扰)。一个人的思维往往存在惯性的思考方式,这容易引起错误,但领航员的存在很大程度上弥补了这个问题。查资料是对时间的一种浪费,领航员也帮我缓解了这个问题。通过领航员和我的努力,最后可以很快完成程序,同时代码的BUG也很少,也就不用在代码编译上耗费太多时间,要知道调试代码往往是最费时间的。当我在看驾驶员编程时,总能对他犯得一些错误产生共鸣,并考虑自己是否也存在相同的问题;在看到他编写的漂亮之处时,不由得和自己的代码作比较,并从中学习优秀的地方。对于我们这种编程能力还有进步空间的程序员来说,这是一种很有效率的学习方式。不可否认,结对编程也存在着一定的缺点。当驾驶员在高度集中地编程时,有人来打断,很容易让驾驶员思路被打断,同时影响其心情。当两个人产生意见分歧时,会影响效率,并且最终结果往往以驾驶员为主导。领航员的工作量相对较少,而且动手较少,有时可能会分心,不能全神贯注到代码上。对于大多人来说,比起结对编程更适应于单枪匹马编程,结对编程时在别人的目光下更容易紧张(很“方”),压力更大,长时间编程就更不用说了,编完程后会比单干更累。
以下为编程过程中的瞬间(绝非虚构):