首先不得不承认,每个在各自独立设计,实现软件的过程中不免要犯各种错误。在结对编程中,因为有随时的复审和交流,每个人都有强项,恰恰与木桶效应相反,最后的结果是各方面两个人的最高水平!这样,错误少了,程序的初始质量就高很多。自然省下很多修改时间。尤其是对于(==写成=)这种低级无脑难以发现的问题。
结对编程的过程也是一个相互督促的过程,每个人的一举一动都在别人的视线之内,所有的想法都要受到对方的评价。这种督促的压力,让双方都变得更有执行力。
结对编程也磨练了两个人的友谊,锻炼了如何怼的别人心服口服,还能继续做朋友的能力。
我认为结对编程的主要目的是控制品质和风险,同时建设团队。会给人看的代码和不会给人看的代码品质上有天壤之别。经过讨论的实现也往往比自己独自决定的考虑的更加全面。技术细节掌握在一个人手里对于团队是危险的。而结对既可以让避免这种情况,还能让工程师更快的进步,让团队更多交流,更加融洽。要说效率,两个高度自律的高手结对编程可能在效率上要付出代价。但是即使如此,也是完全值得的。另一方面,好的品质,会让测试更顺利,对应需求变化更快速。也可以说是增加了效率。
结对编程绝对可以大幅度提高工作效率,但同时,他让工程师一分钟都不能走神,每天高强度工作n个小时。结对编程虽然很好,但绝对是大体力劳动,太累人,不是一般人干得来的,实践当中很少有团队能够坚持下来。
在学校中较难实现真正意义上的结对编程,两人没有大把的时间来共同编程,只能实现两人合作,合作过程中出现分歧,如何高效解决,给对方积极的反馈。三明治法是一个不错的选择:“三明治”式的批评,是指对某个人先表扬、再批评、接着再表扬的一种批评方式。由于这种批评方式并不是一味地采取批评的手段,而是在二层厚厚的表扬之间夹杂着批评,因此被称为“三明治”式的批评。
对接收获
接口的核心是封装!
我是UI组,之前总觉得要core组写好了,我才能写出自己的程序,而这样就失去了模块化的意义,失去了对接的意义。
而模块化就意味着不仅他的core可以很容易的被UI所调用,也意味着我们UI可以很方便地获取我需要的core数据。因此我们也来做一个封装起来的接口函数是有意义的。这样就从core组接口到我们的函数转变成core组接口到我们的接口再到我们的函数。更好更深的封装意味着更深的黑箱也就意味着更表面的对接,好的接口也就是可以完美处理好浅接口与深封装的矛盾。
说一下在对接的过程中我遇到的问题和我认为的好的接口。
- 接口独立,模块化,分散。如有些组把“+-”“*/”混为一谈,就没有将功能分散开,难以合适的对接。
- 如果能提前交流一下,在功能分割较明确的情况下,减少对接函数,加深封装能够使对接更简单。