﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Software Development Culture</title><link>http://www.blogjava.net/moxie/</link><description>将软件文化进行到底</description><language>zh-cn</language><lastBuildDate>Wed, 29 Apr 2026 16:53:20 GMT</lastBuildDate><pubDate>Wed, 29 Apr 2026 16:53:20 GMT</pubDate><ttl>60</ttl><item><title>WebWork深入浅出</title><link>http://www.blogjava.net/moxie/archive/2006/10/20/76375.html</link><dc:creator>moxie</dc:creator><author>moxie</author><pubDate>Fri, 20 Oct 2006 05:46:00 GMT</pubDate><guid>http://www.blogjava.net/moxie/archive/2006/10/20/76375.html</guid><wfw:comment>http://www.blogjava.net/moxie/comments/76375.html</wfw:comment><comments>http://www.blogjava.net/moxie/archive/2006/10/20/76375.html#Feedback</comments><slash:comments>20</slash:comments><wfw:commentRss>http://www.blogjava.net/moxie/comments/commentRss/76375.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/moxie/services/trackbacks/76375.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文发表于《开源大本营》           								                     				作者：钱安川														前言												本篇文章并没有太多WebWork 的实战代码细节。本人非常希望能充当一名导游的角色，带领读者逐步游览WebWork的功能特性和原理。在第一章，我们将提出基于三层架构的Web...&nbsp;&nbsp;<a href='http://www.blogjava.net/moxie/archive/2006/10/20/76375.html'>阅读全文</a><img src ="http://www.blogjava.net/moxie/aggbug/76375.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/moxie/" target="_blank">moxie</a> 2006-10-20 13:46 <a href="http://www.blogjava.net/moxie/archive/2006/10/20/76375.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Pair Programming (结对编程)</title><link>http://www.blogjava.net/moxie/archive/2006/09/14/69714.html</link><dc:creator>moxie</dc:creator><author>moxie</author><pubDate>Thu, 14 Sep 2006 09:53:00 GMT</pubDate><guid>http://www.blogjava.net/moxie/archive/2006/09/14/69714.html</guid><wfw:comment>http://www.blogjava.net/moxie/comments/69714.html</wfw:comment><comments>http://www.blogjava.net/moxie/archive/2006/09/14/69714.html#Feedback</comments><slash:comments>19</slash:comments><wfw:commentRss>http://www.blogjava.net/moxie/comments/commentRss/69714.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/moxie/services/trackbacks/69714.html</trackback:ping><description><![CDATA[
		<p style="margin: 12pt 0in 3pt;">
				<span style="font-family: 宋体;" lang="ZH-CN">（本文发表于《程序员杂志》第九期,略有删改）</span>
		</p>
		<p class="MsoNormal" style="margin: 0in 0in 0pt;">
				<o:p> </o:p>
		</p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%; text-align: right;" align="right">
				<span style=""> </span>
				<span style="font-family: 宋体;" lang="ZH-CN">作者：钱安川（</span>Moxie<span style="font-family: 宋体;" lang="ZH-CN">）</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%; text-align: right;" align="right">Email:qiananchuan@gmail.com</p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<i style="">
						<span style="font-family: 宋体;" lang="ZH-CN">我们</span>Pair</i>
				<i style="">
						<span style="font-family: 宋体;" lang="ZH-CN">做任何一件事情。</span>
						<o:p>
						</o:p>
				</i>
		</p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="">                                            </span>
				<i style="">
						<span style=""> </span>
				</i>
				<i style="">
						<span style="font-family: 宋体;" lang="ZH-CN">——</span>ThoughtWorks</i>
				<i style="">
						<span style="font-family: 宋体;" lang="ZH-CN">西安</span>Office<o:p></o:p></i>
		</p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<i style="">
						<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600">
								<v:stroke joinstyle="miter">
								</v:stroke>
								<v:formulas>
										<v:f eqn="if lineDrawn pixelLineWidth 0">
										</v:f>
										<v:f eqn="sum @0 1 0">
										</v:f>
										<v:f eqn="sum 0 0 @1">
										</v:f>
										<v:f eqn="prod @2 1 2">
										</v:f>
										<v:f eqn="prod @3 21600 pixelWidth">
										</v:f>
										<v:f eqn="prod @3 21600 pixelHeight">
										</v:f>
										<v:f eqn="sum @0 0 1">
										</v:f>
										<v:f eqn="prod @6 1 2">
										</v:f>
										<v:f eqn="prod @7 21600 pixelWidth">
										</v:f>
										<v:f eqn="sum @8 21600 0">
										</v:f>
										<v:f eqn="prod @7 21600 pixelHeight">
										</v:f>
										<v:f eqn="sum @10 21600 0">
										</v:f>
								</v:formulas>
								<v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f">
								</v:path>
								<o:lock aspectratio="t" v:ext="edit">
								</o:lock>
						</v:shapetype>
						<v:shape id="_x0000_i1025" style="width: 187.5pt; height: 157.5pt;" type="#_x0000_t75">
								<v:imagedata o:title="pairprogrammers" src="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.gif">
								</v:imagedata>
						</v:shape>
						<img alt="pair.gif" src="http://www.blogjava.net/images/blogjava_net/moxie/pair.gif" border="0" height="210" width="250" />
				</i>
		</p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">我的第一次</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">（</span>Pair Programming<span style="font-family: 宋体;" lang="ZH-CN">的简称，即结对编程。后面都是用</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">代替）是在</span>ThoughtWorks<span style="font-family: 宋体;" lang="ZH-CN">公司面试进行的。那次，他们来自英国的项目经理</span>Andy<span style="font-family: 宋体;" lang="ZH-CN">面试我，和我一起进行</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">。</span>Andy<span style="font-family: 宋体;" lang="ZH-CN">问我以前是否</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">过，我说：“没有，这是我第一次</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">”。随即他就告诉我：“</span>It’s very fun.<span style="font-family: 宋体;" lang="ZH-CN">（它非常有趣）。”</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">就这样，开始了我的第一次</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">，也是加入</span>TW<span style="font-family: 宋体;" lang="ZH-CN">最重要的一轮面试。其实，刚开始很不习惯，我那可怜的英语口语，陌生的测试优先开发（</span>TDD Test Driven Development<span style="">  </span><span style="font-family: 宋体;" lang="ZH-CN">一种软件开发方式，先写单元测试代码，再写业务代码。我以前也写过很多单元测试，但从没有测试优先）。当我看到需求文档时，大脑几乎是一片空白，不知从何处下手。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">但面试总不能就这样放弃吧。我又仔细看了一遍文档，尝试着写了几段业务代码。做在我旁边的</span>Andy<span style="font-family: 宋体;" lang="ZH-CN">摇了摇头，从我手里拿了键盘。他说应该这样做，先写测试代码。于是他一边和我解释业务需求，一边写测试代码。并提醒我，如何去对一个复杂的功能进行分解，并且小步伐的前进。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">在</span>Andy<span style="font-family: 宋体;" lang="ZH-CN">的引导下，我慢慢的进入了角色。充分理解业务之后，也就清楚了该如何写业务代码。我从</span>Andy<span style="font-family: 宋体;" lang="ZH-CN">那里要了键盘，又写了几段代码。然后运行单元测试，绿色状态，测试成功。</span>Andy<span style="font-family: 宋体;" lang="ZH-CN">微笑的向我竖起了大拇指。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">受到鼓励的我，这是已完全放松进入状态。我们又试着完成了几个功能。这时，我们已经不只觉的渡过了</span>2.5<span style="font-family: 宋体;" lang="ZH-CN">个小时。</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">确实是一件非常有趣的事。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">进入</span>ThoughtWorks<span style="font-family: 宋体;" lang="ZH-CN">公司之后，发现在大家不仅</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">编程，还</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">研究技术，</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">撰写文章，</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">翻译，等等。只要是</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">能完成的工作，我们就不一个人完成。甚至在生活中也出现了很多</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">的影子。在我们的西安</span>Office<span style="font-family: 宋体;" lang="ZH-CN">里流传这样一句话：“我们</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">做任何一件事情”。两个人</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">，可以一起一起分享工作乐趣，一起承担工作压力。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">这些天的</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">生活，让我深深体会到了</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">的优点。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<b style="">
						<span style="font-family: 宋体;" lang="ZH-CN">一、</span>Pair</b>
				<b style="">
						<span style="font-family: 宋体;" lang="ZH-CN">可以最大化的提高工作效率。</span>
				</b>
				<span style="font-family: 宋体;" lang="ZH-CN">软件开发并不只是程序员堆砌代码的过程，它更多的是一个创新的过程，是一个发现问题、分析问题、解决问题的过程。一个人编程时，往往有了一丝零碎的想法就开始编写代码。写完代码之后，忽然发现这个方案行不通，只好废弃这些代码，重新开始新的想法。当一个人在遇到疑难问题时，很容易走入“死角”。而</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">则不同，一个人有了想法，首先要表达出来，让自己的同伴理解，经过深刻的讨论，一致认可之后才开始编写代码。一个人编写代码，另一个则在旁边思考，会为下一步的工作提出建设性的意见。发现了问题可以及时的指正。大大的提高了代码质量。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">一个人一天有效工作时间不超过</span>3<span style="font-family: 宋体;" lang="ZH-CN">－</span>4<span style="font-family: 宋体;" lang="ZH-CN">个小时。两个人一起</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">。一个人编写代码，另一个人则从设计的角度思考下一步的工作，有了想法之后，互相讨论，再互换角色。在开发过程中，设计思考和编码实现不停的进行交换，保持了良好的开发节奏。同时可以互相督促，使彼此更加认真的工作。遇到问题和压力时，可以一起面对，互相鼓励。可以一起分享解决问题的成就和乐趣。</span><b style=""><o:p></o:p></b></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<b style="">
						<span style="font-family: 宋体;" lang="ZH-CN">二、</span>Pair</b>
				<b style="">
						<span style="font-family: 宋体;" lang="ZH-CN">是知识传播的最好途径。</span>
				</b>
				<span style="font-family: 宋体;" lang="ZH-CN">很多软件公司都建立有自己的知识库，有的还建立自己的培训部门，甚至高薪聘请一些专家做技术培训。但发现效果并不理想。培训之后，开发人员面临实际的项目，还是一片茫然。而与有经验的同事一起</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">则是在实际项目中学习，具有非常强的针对性。你学到的不仅是一些技术和技巧，更多是他们思考问题方式、解决问题的方法。和各种不同经验的同事一起</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">，你的经验和能力可以得到快速的提高。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">在</span>ThoughtWorks<span style="font-family: 宋体;" lang="ZH-CN">公司，如果你要加入一个项目，完全不用担心它使用的技术和涉及的业务。只要你有一定的基础，和有经验的同事一起</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">能让你很快熟悉和掌握它们。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<b style="">
						<span style="font-family: 宋体;" lang="ZH-CN">三、</span>Pair</b>
				<b style="">
						<span style="font-family: 宋体;" lang="ZH-CN">可以打造出最佳的合作团队。</span>
				</b>
				<span style="font-family: 宋体;" lang="ZH-CN">团队是有组织有计划的，合理有效地利用各种资源，进行最佳的组合。</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">并不是一对固定的伙伴，我们鼓励在团队中经常交换</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">伙伴。这时我们发现，项目不再是一个人的事情，也不是两个人的事情，而是整个团队的事情。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">通过</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">，大家可以在最短的时间内完成磨合。</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">很好的促进了团队的沟通交流，经常一起合作</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">的伙伴，彼此了解、熟悉，很多都是工作和生活上的好友。在这样的团队里，大家很乐意互相协助，一起分享知识，分享快乐。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style=""> </span>
				<span style="font-family: 宋体;" lang="ZH-CN">在听过我们一番热情洋溢的阐述之后，某些项目管理者会点头并且认可</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">带来的力量。但，我们也听到了一些拒绝</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">的声音。下面是我们听到的拒绝</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">的最主要的理由，当然也包括了我们的辩解。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<i style="">
						<span style="font-family: 宋体;" lang="ZH-CN">一、</span>
				</i>
				<span lang="ZH-CN">
				</span>
				<i style="">Pair</i>
				<i style="">
						<span style="font-family: 宋体;" lang="ZH-CN">浪费资源。</span>
				</i>
				<span style="font-family: 宋体;" lang="ZH-CN">以前是一个人完成的工作，而现在却是由两个人一起完成。一个人在写程序，而另一个却在旁边观望。为开发人员支付报酬的老板是多么心疼那些白花花的银子。</span>
		</p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style=""> </span>
				<span style="font-family: 宋体;" lang="ZH-CN">可是，作为老板的你可曾做过统计过，每天加班工作</span>12<span style="font-family: 宋体;" lang="ZH-CN">小时，满脸疲惫的开发人员到底为你创造了多少的价值？在这漫长的</span>12<span style="font-family: 宋体;" lang="ZH-CN">小时中，能高效工作的时间又能有多少呢？一个开发人员每天编写几百行的代码，可是真正具有实效性的代码又有多少呢？</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style=""> </span>
				<span style="font-family: 宋体;" lang="ZH-CN">软件的本质就是很难用一种标准去衡量它的进度和实效性。开发人员能力的高与低、经验的多与少、工作的主动与被动，对软件开发的成本有非常大的影响。前期糟糕的代码，在后期修正，是需要付出几倍甚至更多的代价。在软件的行业里，人月和代码行永远是神话。</span>
		</p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">在</span>1999<span style="font-family: 宋体;" lang="ZH-CN">年，犹他州立大学（</span>University of Utah<span style="font-family: 宋体;" lang="ZH-CN">）做了一项试验。</span>.<span style="font-family: 宋体;" lang="ZH-CN">两组学生，一组独自工作（一共</span>13<span style="font-family: 宋体;" lang="ZH-CN">人），一组</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">（一共</span>28<span style="font-family: 宋体;" lang="ZH-CN">人，即</span>14<span style="font-family: 宋体;" lang="ZH-CN">对）。他们完成相同的任务（由助教预先设计和开发了测试案例）。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">下面的表格（图－</span>1<span style="font-family: 宋体;" lang="ZH-CN">）是完成相同的四个程序，独自工作和</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">工作使测试案例成功通过的百分比。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<img alt="test cases passed.png" src="http://www.blogjava.net/images/blogjava_net/moxie/test%20cases%20passed.png" border="0" height="202" width="664" />
		</p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">（图－</span>1<span style="font-family: 宋体;" lang="ZH-CN">）</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">下面的柱状图（图－</span>2<span style="font-family: 宋体;" lang="ZH-CN">）则是完成相同的程序，两组所花费的时间比。虽然</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">的学生在刚开始的阶段比独自工作的学生花在同样任务的时间较多，但很快</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">的学生的时间开始大幅度的下降。而独立工作的学生需要花费比</span>Pairs<span style="font-family: 宋体;" lang="ZH-CN">更多的时间来达到接近的代码质量。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<img alt="elapsed time.png" src="http://www.blogjava.net/images/blogjava_net/moxie/elapsed%20time.png" border="0" height="597" width="973" />
		</p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">（图－</span>2<span style="font-family: 宋体;" lang="ZH-CN">）</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">而且，在具体项目中。</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">会带来比上面结果更高的价值。一、在实际开发中，如果错误越多，就要花费越多的时间去修复它。在我们的试验中，没有统计修复错误所花费的时间。二、从图－</span>1<span style="font-family: 宋体;" lang="ZH-CN">可以看出，</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">在产生高质量代码时，也即意味着对需求的准确理解。个人团队对需求理解偏差比较大，后期也要花费更大的代价来纠正。三、从图－</span>2<span style="font-family: 宋体;" lang="ZH-CN">可以看到，</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">的团队开发能力提高很快，这是潜在的价值。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">在比较试验之后的问卷调查之后发现：</span>
		</p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt 0.8in; text-indent: -0.25in; line-height: 150%;">
				<span style="font-family: Wingdings;">
						<span style="">ü<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">      </span></span>
				</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">能用较少的时间生产更高质量的代码。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt 0.8in; text-indent: -0.25in; line-height: 150%;">
				<span style="font-family: Wingdings;">
						<span style="">ü<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">      </span></span>
				</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">的学生们认为自己比一个人的时候更勤奋和更聪明的工作，因为不想让自己的</span>partner<span style="font-family: 宋体;" lang="ZH-CN">失望。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt 0.8in; text-indent: -0.25in; line-height: 150%;">
				<span style="font-family: Wingdings;">
						<span style="">ü<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">      </span></span>
				</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">的学生认为自己比一个人的时候更专著</span>,<span style="font-family: 宋体;" lang="ZH-CN">紧凑和由纪律的工作，而且是持续的。而独立工作的学生也可以专著和紧凑的工作，但往往不持续。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt 0.8in; text-indent: -0.25in; line-height: 150%;">
				<span style="font-family: Wingdings;">
						<span style="">ü<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">      </span></span>
				</span>
				<span style="font-family: 宋体;" lang="ZH-CN">在紧张时间安排和繁重的工作压力下，独自工作的学生很容易蜕变为没有纪律的程序员。</span>
		</p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style=""> </span>
				<span style="font-family: 宋体;" lang="ZH-CN">同时，在</span>ThoughtWorks<span style="font-family: 宋体;" lang="ZH-CN">这样的咨询公司，每个开发者都是能够独挡一面。</span>ThoughtWorks<span style="font-family: 宋体;" lang="ZH-CN">的开发者，在一般的软件公司都是类似项目经理或架构师的角色。你可以想象公司肯定要为他们提供不翡的待遇。可是，他们却</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">做任何一件事情，也从不认为自己是在浪费资源。相反，</span>ThoughtWorks<span style="font-family: 宋体;" lang="ZH-CN">从实践中得出：</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">能够充分的利用每个开发者，让他们发挥最大的价值。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<i style="">
						<span style=""> </span>
				</i>
				<i style="">
						<span style="font-family: 宋体;" lang="ZH-CN">二、人手不够。</span>
				</i>
				<span style="font-family: 宋体;" lang="ZH-CN">也许，在你的公司，昨天又有一个老员工递交了辞职申请。老板看着一张张新的面孔，很无奈的摇了摇头。招聘员工并不困难。但如何让新员工快速进入角色，掌握公司的技术和业务呢？</span>
		</p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; line-height: 150%;">
				<span style="">    </span>
				<span style="font-family: 宋体;" lang="ZH-CN">人员的流动一直是让很多软件公司非常困扰的问题。特别是老员工的离去，也就意味着公司多年的技术和业务积累的流失。</span>
		</p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">而在</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">工作的团队中，几乎不用担心这个问题。</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">可以快速的进行知识传递，通过</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">和</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">伙伴的交换，知识不再是掌握在一个人的手中，而是整个团队一起共享。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">在</span>ThoughtWorks<span style="font-family: 宋体;" lang="ZH-CN">内部，工作的调整和变换是非常频繁的。但很少会对项目造成影响。相反，这样的变换却加快了知识的传递。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<o:p> </o:p>
		</p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<i style="">
						<span style="font-family: 宋体;" lang="ZH-CN">三、开发者不能很好的合作，</span>Pair</i>
				<i style="">
						<span style="font-family: 宋体;" lang="ZH-CN">对开发者要求太高。</span>
				</i>
				<span style="font-family: 宋体;" lang="ZH-CN">真的要求很高吗？看看求职简历，不是每个开发者都口口声称自己具有很好的团队合作精神吗？如果你不能很好的和别人</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">，团队精神又从何谈起呢？</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">那任何两个人都可以搭配进行</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">吗？</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">不，</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">对开发者是有要求的。它要求开发者乐意和别人沟通、合作，要求开发者能够彼此尊重，愿意和别人分享自己的知识。这不正是我们一直倡导的团队合作精神嘛！</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">Pair<span style="font-family: 宋体;" lang="ZH-CN">的搭配是一个有趣的问题。有人说，最好的搭配就是两个人能力相当。其实不然，</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">应该是一种多样的变换组合。在</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">的团队中，经验丰富的开发者有责任带领新人，传知授道解惑，同时可以享受传道的乐趣。新人，更应主动找有经验的伙伴</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">，快速学习提高自己。</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">的核心就是沟通，只要两个人能很好的进行沟通，那么他们就可以很好的搭配。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">关于</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">的实施，其实并不困难。我们需要的只是经验，当然经验也只会来源于实践。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">
		</p>
		<p class="MsoNormal" style="margin-bottom: 6pt; text-indent: 0.3in; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">最后，我要说的是：我在</span>ThoughtWorks<span style="font-family: 宋体;" lang="ZH-CN">中国，有幸多次和传说中的美女天才程序员一起</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">，其中的感觉也就不用多说了，呵呵。</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; line-height: 150%;">
				<o:p> </o:p>
		</p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">参考资料：</span>
		</p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; line-height: 150%;">
				<a href="http://www.pairprogramming.com/">http://www.pairprogramming.com/</a>
				<span style="font-family: 宋体;" lang="ZH-CN">这是一个专门介绍和研究</span>Pair<span style="font-family: 宋体;" lang="ZH-CN">的一个网站</span></p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; line-height: 150%;">
				<span style="font-family: 宋体;" lang="ZH-CN">联系作者：</span>
		</p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">Email:qiananchuan@gmail.com</p>
		<p class="MsoNormal" style="margin: 0in 0in 6pt; text-indent: 0.3in; line-height: 150%;">http://moxie.blogdriver.com/moxie/index.html</p>
<img src ="http://www.blogjava.net/moxie/aggbug/69714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/moxie/" target="_blank">moxie</a> 2006-09-14 17:53 <a href="http://www.blogjava.net/moxie/archive/2006/09/14/69714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对升级到WebWork2.2.2的牢骚</title><link>http://www.blogjava.net/moxie/archive/2006/06/08/51434.html</link><dc:creator>moxie</dc:creator><author>moxie</author><pubDate>Thu, 08 Jun 2006 10:14:00 GMT</pubDate><guid>http://www.blogjava.net/moxie/archive/2006/06/08/51434.html</guid><wfw:comment>http://www.blogjava.net/moxie/comments/51434.html</wfw:comment><comments>http://www.blogjava.net/moxie/archive/2006/06/08/51434.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/moxie/comments/commentRss/51434.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/moxie/services/trackbacks/51434.html</trackback:ping><description><![CDATA[
		<p>
				<span class="postbody">今天将webwork从2.17升级到webwork2.2.2 <br /><br />1、在webwork里的Request是包装过的。用的是com.opensymphony.webwork.dispatcher.WebWorkRequestWrapper。 <br />它改写了getAttribute()方法。首先是去request的getAttribute()里面取数据，如果没有取到，则去ValueStack里面取。小心哦！ <br /><br /><br />2、从OgnlValueStack里面查找对象时，如果你的表达式语言是数字，则返回一个对应的数字。例如:表达式语言123,从ValueStack里面取得的是整型123。太trick了！ <br /><br />3、集合支持不向下兼容。XWorkList已经是@deprecated，用它就错，还不如直接删除掉。在webwork2.2中，它需要为集合另外配置一个conversion.properties文件。真不明白，这样有什么优点？</span>
				<br />
				<br />4、在webwork2.1.7的ServletDispatcher中提供了异常处理，Action异常将由HttpServletResponse抛出500错误；资源缺少导致的错误（例如action没有找到，或者jsp文件不存在），则由HttpServletResponse抛出404错误。在webwork2.2.2中，遇到Action异常则直接抛出ServletException。</p>
		<p>5、验证文件。验证执行的顺序不再是从上到下，“Plain validator”先执行，即直接用&lt;validator&gt;定义的验证优先级比字段验证&lt;field&gt;高。这样就要注意验证的执行顺序哦。短路（short-circuited）功能是应用在同一级别（层次）的定义上。</p>
<img src ="http://www.blogjava.net/moxie/aggbug/51434.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/moxie/" target="_blank">moxie</a> 2006-06-08 18:14 <a href="http://www.blogjava.net/moxie/archive/2006/06/08/51434.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>培训教程－WebWork ppt</title><link>http://www.blogjava.net/moxie/archive/2006/02/20/31708.html</link><dc:creator>moxie</dc:creator><author>moxie</author><pubDate>Mon, 20 Feb 2006 13:14:00 GMT</pubDate><guid>http://www.blogjava.net/moxie/archive/2006/02/20/31708.html</guid><wfw:comment>http://www.blogjava.net/moxie/comments/31708.html</wfw:comment><comments>http://www.blogjava.net/moxie/archive/2006/02/20/31708.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/moxie/comments/commentRss/31708.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/moxie/services/trackbacks/31708.html</trackback:ping><description><![CDATA[<P>在公司内部进行WebWork培训时，做的ppt和演示程序。<BR>目录：<BR></P>
<P>WebWork入门</P>
<P>WebWork原理</P>
<P>WebWork标签库和EL</P>
<P>WebWork实例<BR><BR>下载 [<A HREF="/Files/moxie/webwork-ppt.rar">webwork ppt</A>]<BR>下载 [<A HREF="/Files/moxie/webworkDemo.rar">webwork demo src</A>]<BR></P><img src ="http://www.blogjava.net/moxie/aggbug/31708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/moxie/" target="_blank">moxie</a> 2006-02-20 21:14 <a href="http://www.blogjava.net/moxie/archive/2006/02/20/31708.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring培训－笔记</title><link>http://www.blogjava.net/moxie/archive/2006/02/20/31707.html</link><dc:creator>moxie</dc:creator><author>moxie</author><pubDate>Mon, 20 Feb 2006 13:13:00 GMT</pubDate><guid>http://www.blogjava.net/moxie/archive/2006/02/20/31707.html</guid><wfw:comment>http://www.blogjava.net/moxie/comments/31707.html</wfw:comment><comments>http://www.blogjava.net/moxie/archive/2006/02/20/31707.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/moxie/comments/commentRss/31707.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/moxie/services/trackbacks/31707.html</trackback:ping><description><![CDATA[<BR><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">目录：<BR><BR>Spring教程&nbsp;1<BR>名词解释&nbsp;2<BR>Spring框架概述&nbsp;3<BR>Spring是什么？&nbsp;3<BR>Spring的历史&nbsp;4<BR>Spring的使命（Mission Statement）&nbsp;4<BR>Spring受到的批判&nbsp;4<BR>Spring包含的模块&nbsp;5<BR>总结&nbsp;6<BR>Spring的IoC容器&nbsp;6<BR>用户注册的例子&nbsp;7<BR>面向接口编程&nbsp;8<BR>（用户持久化类）重构第一步——面向接口编程&nbsp;8<BR>重构第二步——工厂（Factory）模式&nbsp;9<BR>重构第三步——工厂（Factory）模式的改进&nbsp;10<BR>重构第四步－IoC容器&nbsp;11<BR>控制反转（IoC）/依赖注入（DI）&nbsp;11<BR>什么是控制反转/依赖注入？&nbsp;11<BR>依赖注入的三种实现形式&nbsp;12<BR>BeanFactory&nbsp;14<BR>BeanFactory管理Bean（组件）的生命周期&nbsp;15<BR>Bean的定义&nbsp;16<BR>Bean的之前初始化&nbsp;19<BR>Bean的准备就绪（Ready）状态&nbsp;21<BR>Bean的销毁&nbsp;21<BR>ApplicationContext&nbsp;21<BR>Spring的AOP框架&nbsp;21<BR>Spring的数据层访问&nbsp;22<BR>Spring的声明式事务&nbsp;22<BR>Spring对其它企业应用支持&nbsp;22<BR><BR>注：后面的内容我将不再完善，但网上的朋友可以帮助完善，只需注明住处即可。<BR>下载 [<A HREF="/Files/moxie/Spring.rar">spring笔记</A>]</SPAN><img src ="http://www.blogjava.net/moxie/aggbug/31707.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/moxie/" target="_blank">moxie</a> 2006-02-20 21:13 <a href="http://www.blogjava.net/moxie/archive/2006/02/20/31707.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>培训教程－hibernate ppt doc</title><link>http://www.blogjava.net/moxie/archive/2006/02/20/31706.html</link><dc:creator>moxie</dc:creator><author>moxie</author><pubDate>Mon, 20 Feb 2006 13:12:00 GMT</pubDate><guid>http://www.blogjava.net/moxie/archive/2006/02/20/31706.html</guid><wfw:comment>http://www.blogjava.net/moxie/comments/31706.html</wfw:comment><comments>http://www.blogjava.net/moxie/archive/2006/02/20/31706.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/moxie/comments/commentRss/31706.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/moxie/services/trackbacks/31706.html</trackback:ping><description><![CDATA[目录<BR>一、持久化层－O/R Mapping<BR>二、Hibernate入门<BR>三、Hibernate映射申明（Mapping declaration）<BR>四、持久化对象的状态和生命周期<BR>五、Hibernate查询<BR>六、Hibernate最佳实践<BR><BR>下载 [<A HREF="/Files/moxie/hibernat-ppt.rar">hibernate ppt</A>]<BR>下载 [<A HREF="/Files/moxie/hibernate-doc.rar">hibernate doc</A>]<img src ="http://www.blogjava.net/moxie/aggbug/31706.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/moxie/" target="_blank">moxie</a> 2006-02-20 21:12 <a href="http://www.blogjava.net/moxie/archive/2006/02/20/31706.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>