什么样的人不适合做Pair Programming
太过自负
•不能容忍别人的意见
•我总是对的
•我吃盐多过你吃米
太过自卑
•没主见
•没责任心
什么样的人适合做Pair Programming
Extreme Programming对实施的程序员提出了更高的要求。这种要求不是技术水平,也不是学历水平也不是工作经验。这种要求是对一个人的心智,道德,修养的更高要求。
程序员的四怕:
1) 怕自己看上去傻
2) 怕被认为是没用的
3) 怕自己变的不重要(过时)
4) 怕自己不够好
Pair Programming中,编码不再是私人的工作,而是一种公开的“表演”。程序员的代码,工作方式,技术水平都变得公开和透明。
XPer的素质
一个XPer应该具备这样一些基本素质:诚实,公正,开明,勇敢和谦卑!在这些素质的基础之上,才是对技术水平,能力和天分等的要求。
•诚实
•公正
•开明
•勇气
•谦卑
具备这些素质才能克服“四怕”,才能成为一个成熟和专业的Developer。
如何Pair Programming
•Driver – 写设计文档(Class diagram等),进行编码(Unit Test and Business Object)等XP开发流程。
•Navigator – 审阅Driver的文档、Driver对编码等开发流程的执行;考虑Unit Test的覆盖程度;是否需要和如何Refactoring;帮助Driver解决具体的技术问题。
•Driver和Navigator不断轮换角色,不要连续工作超过一小时,每一小时休息15分钟。Navigator要控制开发时间。
•主动参与 – 虽然每个Engineering Task都有owner,但不能一旁观者的心态来做。任何一个Task都首先是两个人的责任,也是所有人的责任。没有“我的Code”、”你的Code”或“她的Code”,只有“我们的Code”。
•只有水平上的差距,没有级别上的差异。一个Pair,尽管可能大家的级别资历不同,但不管在分析,设计或编码,双方都拥有平等的决策权利。
•Pairs之间互换Partner。每个Task都应该和不同的Developer配对。
•每隔一天,甚至是半天,互换Partners。但Task的owner因该继续留该Task的Pair中。
•如果Pair中的一人请假,另一人应尽量不要写Production Code。
•Pair一起加班
All I Really Need to Know I Learned in Kindergarten
By Robert Fulghum (Fulghum 1988)
Share everything.
Play fair.
Don’t hit people.
Put things back where you found them.
Clean up your own mess.
Don’t take things that aren’t yours.
Say you’re sorry when you hurt somebody.
Wash your hands before you eat.
Flush.
Warm cookies and cold milk are good for you.
Live a balanced life – learn some and think some and draw and paint and sing and
dance and play and work every day some.
Take a nap every afternoon.
When you go out into the world, watch out for traffic, hold hands and stick together.
Be aware of wonder.
多年来在IT领域中, 有很多个这首小诗的山寨版, 如:
All I Ever Need to Know about Testing I Learned in Kindergarten 翻译版: http://blog.csdn.net/imlogic/archive/2006/04/25/676526.aspx
All I Really Need to Know about Pair Programming I Learned In Kindergarten http://collaboration.csc.ncsu.edu/laurie/Papers/Kindergarten.PDF
原文作者: 犹他大学 Laurie A. Williams Robert R. Kessler
原文链接: http://collaboration.csc.ncsu.edu/laurie/Papers/Kindergarten.PDF
作者提出的在Pair编程中的几点建议:
注: 英文为准确小标题, 但有些小标题有点牵强附会 后面的中文为本人按照大意随意添加, 仅供参考…
双人编程指在一个项目中由两个程序员编写一个软件的技术.每两人在同一台机器上工作,其中一人操作机器的同时另一个在旁边仔细看着代码被编写出来.操作者从战术上关心当前自已在编写的每一行代码,观察者确认语法规范,并从战略上考虑整个程序.他们频繁地交换彼此的角色,并且更快地编写出比单人编写更少错误的代码.并且,这些代码至少被两个以上的开发者所熟悉。
The Practice 实践
Pairing 配对
Pairing begins when the developer responsible for a task asks someone else for help. The rule is: when asked, you must say yes. This does not mean you have to immediately stop what you are doing. Rather it means that you must negotiate a time when you can offer that help and another time when you can get help in return.
双人编程开始于负责某个任务的程序员寻求他人的帮助。原则是:有人来问,你必须说是,不过这不意味着你要马上停下你在做的工作,而是说,可以商定某个时间帮忙,而在另一个时间让对方帮你的忙。
The pair partner does not assume responsibility for the task. That responsibility remains with the task owner. Nor does the pair partner commit to staying with the owner until the task is complete. The pair partner only commits to help.
双人编程的拍档者不对所做的任务承担责任,责任由负责任务的那个程序员承担,,拍档者直到任务完成也不会承诺与任务负责人共同负担任务的责任,只是承诺会帮忙。
One member of the pair becomes the driver, while the other looks on. The driver types in the code, runs the compiler, runs the unit tests, and so forth. The watcher examines each keystroke, each command, each test result, and offers help and suggestions. Both parties are engaged at all times.
双人编程中的某个成员成为操作者,同时另一个作为观察者。操作者敲代码,编译,做单元测试,观察者检查每一次敲击,每一个命令,每次测试的结果,并提供帮助和建议,整个时间里两边都同样的忙碌。
Sometimes the driver will know best what to do, and the watcher will simply be following along. At other times, the watcher will dictate what to do to the driver. Sometimes the driver will get frustrated and will hand the keyboard to the watcher,thereby switching roles. Other times, the watcher will ask for the keyboard and switch roles. this will happen many times in a pairing session.
有时,操作者知道该如何做到最好,这时观察者就只是随着思路走就行了。反之,观察者可以指示操作者该如何做。有时操作者会思路阻碍做不下去,键盘交给观察者,两者便换了角色。在整个编码过程中,观察者会主动要求键盘输入,从而交换角色,这种情况是经常发生的。
Changing pairs 交换配对
Pair partners are not long term. A typical pairing session will last about half a day. Either partner can opt out of the pair for any reason. When this happens, the owner of the task must find another pair partner. This may mean that it is time for the task owner to pay back a favor to someone who paired with him or her last week. On the other hand, perhaps he or she should ask
someone with the right experience to help with a particularly sticky problem.
双人编程的两个拍档不是长期合作的。一个典型的双人编程会持续大约半天,其中每个拍挡可以以任何理由要求重新选
优点
一、Pair 可以最大化的提高工作效率。 软件开发并不只是程序员堆砌代码的过程,它更多的是一个创新的过程,是一个发现问题、分析问题、解决问题的过程。一个人编程时,往往有了一丝零碎的想法就开始编写代码。写完代码之后,忽然发现这个方案行不通,只好废弃这些代码,重新开始新的想法。当一个人在遇到疑难问题时,很容易走入“死角”。而Pair则不同,一个人有了想法,首先要表达出来,让自己的同伴理解,经过深刻的讨论,一致认可之后才开始编写代码。一个人编写代码,另一个则在旁边思考,会为下一步的工作提出建设性的意见。发现了问题可以及时的指正。大大的提高了代码质量。
一个人一天有效工作时间不超过3-4个小时。两个人一起Pair。一个人编写代码,另一个人则从设计的角度思考下一步的工作,有了想法之后,互相讨论,再互换角色。在开发过程中,设计思考和编码实现不停的进行交换,保持了良好的开发节奏。同时可以互相督促,使彼此更加认真的工作。遇到问题和压力时,可以一起面对,互相鼓励。可以一起分享解决问题的成就和乐趣。
二、Pair 是知识传播的最好途径。 很多软件公司都建立有自己的知识库,有的还建立自己的培训部门,甚至高薪聘请一些专家做技术培训。但发现效果并不理想。培训之后,开发人员面临实际的项目,还是一片茫然。而与有经验的同事一起Pair则是在实际项目中学习,具有非常强的针对性。你学到的不仅是一些技术和技巧,更多是他们思考问题方式、解决问题的方法。和各种不同经验的同事一起Pair,你的经验和能力可以得到快速的提高。
在ThoughtWorks公司,如果你要加入一个项目,完全不用担心它使用的技术和涉及的业务。只要你有一定的基础,和有经验的同事一起Pair能让你很快熟悉和掌握它们。
三、Pair 可以打造出最佳的合作团队。 团队是有组织有计划的,合理有效地利用各种资源,进行最佳的组合。Pair并不是一对固定的伙伴,我们鼓励在团队中经常交换Pair伙伴。这时我们发现,项目不再是一个人的事情,也不是两个人的事情,而是整个团队的事情。
通过Pair,大家可以在最短的时间内完成磨合。Pair很好的促进了团队的沟通交流,经常一起合作Pair的伙伴,彼此了解、熟悉,很多都是工作和生活上的好友。在这样的团队里,大家很乐意互相协助,一起分享知识,分享快乐。
参考资料:
Moxie同学把在项目中遇到的developer分为四类。
1、优秀型的Developer。有丰富的工作经验,很好的解决问题能力,善于沟通,有幽默感,还有生活情调。这个不说了,他在任何地方都是受欢迎的。
2、巨大潜力的Developer。没有工作经验,理解能力不错,悟性比较高,人很勤快,爱问问题,脾气也好,懂得尊重其他同事。这类 developer,我们也非常喜欢。我们遇到一个这样的应届毕业生,刚来的时候,只会一些基本的Java知识,他在团队中工作5个月,并已成为客户公司的主力developer了。
3、Trick型的Developer。也许没什么经验,但思维非常活跃,也许喜欢狡辩,也偶尔会指责别人,有点小懒惰,而且会自我感觉非常良好。与这样的develoer合作时候,问题争论会很多,但对问题的理解也会更加深刻。这样的devloper,需要教育提醒。告诉他我们是一个 Team,多用“我们”这个词,你指责别人,别人也会以同样的方式对你。如果能改正这些缺点,他绝对是个好同志。
4、普通的Developer。要么是技术不错,但是理解能力很弱;要么是沟通、理解能力不错,但是工作态度不好,爱混日子。和这样的 developer 一起Pair是要辛苦一些,需要一些技巧。能把你的技术方案,讲得通俗易懂,这也正说明你思考正确和深刻,我们在开发的时候,要善于分解问题,将一个复杂的问题分解,小步前进,这样开发才有一个非常好节奏。工作态度不好的,那就多问问题,逼他思考工作.
// Proudly powered by Apache, PHP, MySQL, WordPress, Bootstrap, etc,.