??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品日产aⅴ,91精品久久久久久久久久入口 ,久久97精品http://www.aygfsteel.com/moxie/Y件文化进行到?/description>zh-cnSat, 17 May 2025 19:59:52 GMTSat, 17 May 2025 19:59:52 GMT60WebWork深入出http://www.aygfsteel.com/moxie/archive/2006/10/20/76375.htmlmoxiemoxieFri, 20 Oct 2006 05:46:00 GMThttp://www.aygfsteel.com/moxie/archive/2006/10/20/76375.htmlhttp://www.aygfsteel.com/moxie/comments/76375.htmlhttp://www.aygfsteel.com/moxie/archive/2006/10/20/76375.html#Feedback20http://www.aygfsteel.com/moxie/comments/commentRss/76375.htmlhttp://www.aygfsteel.com/moxie/services/trackbacks/76375.html阅读全文

moxie 2006-10-20 13:46 发表评论
]]>
Pair Programming (l对~程)http://www.aygfsteel.com/moxie/archive/2006/09/14/69714.htmlmoxiemoxieThu, 14 Sep 2006 09:53:00 GMThttp://www.aygfsteel.com/moxie/archive/2006/09/14/69714.htmlhttp://www.aygfsteel.com/moxie/comments/69714.htmlhttp://www.aygfsteel.com/moxie/archive/2006/09/14/69714.html#Feedback19http://www.aygfsteel.com/moxie/comments/commentRss/69714.htmlhttp://www.aygfsteel.com/moxie/services/trackbacks/69714.html Q本文发表于《程序员杂志》第九期,略有删改Q?/span>

 

  作者:钱安川(MoxieQ?/span>

Email:qiananchuan@gmail.com

我们Pair 做Q何一件事情?/span>

                                              —?/span>ThoughtWorks 西安Office

pair.gif

我的W一?/span>PairQ?/span>Pair Programming的简Uͼ即结对编E。后面都是用Pair代替Q是?/span>ThoughtWorks公司面试q行的。那ơ,他们来自英国的项目经?/span>Andy面试我,和我一赯?/span>Pair?/span>Andy问我以前是否Pairq,我说Q“没有,q是我第一?/span>Pair”。随即他告诉我Q?/span>It’s very fun.Q它非常有趣Q。?/span>

pP开始了我的W一?/span>PairQ也是加?/span>TW最重要的一轮面试。其实,刚开始很不习惯,我那可怜的p口语Q陌生的试优先开发(TDD Test Driven Development  一UY件开发方式,先写单元试代码Q再写业务代码。我以前也写q很多单元测试,但从没有试优先Q。当我看到需求文档时Q大脑几乎是一片空白,不知从何处下手?/span>

但面试M能就q样攑ּ吧。我又仔l看了一遍文档,试着写了几段业务代码。做在我旁边?/span>Andy摇了摇头Q从我手里拿了键盘。他说应该这样做Q先写测试代码。于是他一边和我解释业务需求,一边写试代码。ƈ提醒我,如何d一个复杂的功能q行分解Qƈ且小步伐的前q?/span>

?/span>Andy的引gQ我慢慢的进入了角色。充分理解业务之后,也就清楚了该如何写业务代码。我?/span>Andy那里要了键盘Q又写了几段代码。然后运行单元测试,l色状态,试成功?/span>Andy微笑的向我竖起了大拇指?/span>

受到鼓励的我Q这是已完全放松q入状态。我们又试着完成了几个功能。这Ӟ我们已经不只觉的渡过?/span>2.5个小时?/span>Pair实是一仉常有的事?/span>

q入ThoughtWorks公司之后Q发现在大家不仅Pair~程Q还Pair研究技术,Pair撰写文章Q?/span>Pair译Q等{。只要是Pair能完成的工作Q我们就不一个h完成。甚臛_生活中也出现了很?/span>Pair的媄子。在我们的西?/span>Office里流传这样一句话Q“我?/span>Pair做Q何一件事情”。两个hPairQ可以一起一起分享工作乐,一h担工作压力?/span>

q些天的Pair生活Q让我深׃会到?/span>Pair的优炏V?/span>

一?/span>Pair 可以最大化的提高工作效率?/span> 软g开发ƈ不只是程序员堆砌代码的过E,它更多的是一个创新的q程Q是一个发现问题、分析问题、解决问题的q程。一个h~程Ӟ往往有了一丝零的x开始编写代码。写完代码之后,忽然发现q个Ҏ行不通,只好废弃q些代码Q重新开始新的想法。当一个h在遇到疑N题时Q很Ҏ走入“死角”。?/span>Pair则不同,一个h有了xQ首先要表达出来Q让自己的同伴理解,l过深刻的讨论,一致认可之后才开始编写代码。一个h~写代码Q另一个则在旁Ҏ考,会ؓ下一步的工作提出性的意见。发C问题可以及时的指正。大大的提高了代码质量?/span>

一个h一天有效工作时间不过3Q?/span>4个小时。两个h一?/span>Pair。一个h~写代码Q另一个h则从设计的角度思考下一步的工作Q有了想法之后,互相讨论Q再互换角色。在开发过E中Q设计思考和~码实现不停的进行交换,保持了良好的开发节奏。同时可以互相督促,使彼此更加认真的工作。遇到问题和压力Ӟ可以一起面对,互相鼓励。可以一起分享解决问题的成就和乐?/span>

二?/span>Pair 是知识传播的最好途径?/span> 很多软g公司都徏立有自己的知识库Q有的还建立自己的培训部门,甚至高薪聘请一些专家做技术培训。但发现效果q不理想。培训之后,开发h员面临实际的目Q还是一片茫然。而与有经验的同事一?/span>Pair则是在实际项目中学习Q具有非常强的针Ҏ。你学到的不仅是一些技术和技巧,更多是他们思考问题方式、解决问题的Ҏ。和各种不同l验的同事一?/span>PairQ你的经验和能力可以得到快速的提高?/span>

?/span>ThoughtWorks公司Q如果你要加入一个项目,完全不用担心它用的技术和涉及的业务。只要你有一定的基础Q和有经验的同事一?/span>Pair能让你很快熟悉和掌握它们?/span>

三?/span>Pair 可以打造出最佳的合作团队?/span> 团队是有l织有计划的Q合理有效地利用各种资源Q进行最佳的l合?/span>Pairq不是一对固定的伙伴Q我们鼓励在团队中经怺?/span>Pair伙伴。这时我们发玎ͼ目不再是一个h的事情,也不是两个h的事情,而是整个团队的事情?/span>

通过PairQ大家可以在最短的旉内完成磨合?/span>Pair很好的促q了团队的沟通交,l常一起合?/span>Pair的伙_彼此了解、熟悉,很多都是工作和生zM的好友。在q样的团队里Q大家很乐意互相协助Q一起分享知识,分n快乐?/span>

  在听q我们一番热情洋溢的阐述之后Q某些项目管理者会点头q且认可Pair带来的力量。但Q我们也听到了一些拒l?/span>Pair的声韟뀂下面是我们听到的拒l?/span>Pair的最主要的理由,当然也包括了我们的辩解?/span>

一?/span> Pair 费资源?/span> 以前是一个h完成的工作,而现在却是由两个Z起完成。一个h在写E序Q而另一个却在旁边观望。ؓ开发h员支付报酬的老板是多么心疼那些白p的银子?/span>

  可是Q作板的你可曾做过l计q,每天加班工作12时Q满脸疲惫的开发h员到底ؓ你创造了多少的h|在这漫长?/span>12时中,能高效工作的旉又能有多呢Q一个开发h员每天编写几百行的代码,可是真正h实效性的代码又有多少呢?

  软g的本质就是很隄一U标准去衡量它的q度和实效性。开发h员能力的高与低、经验的多与、工作的d与被动,对Y件开发的成本有非常大的媄响。前期糟p的代码Q在后期修正Q是需要付出几倍甚x多的代h。在软g的行业里Qh月和代码行永q是话?/span>

?/span>1999q_犹他州立大学Q?/span>University of UtahQ做了一试验?/span>.两组学生Q一l独自工作(一?/span>13人)Q一l?/span>PairQ一?/span>28人,?/span>14对)。他们完成相同的dQ由助教预先设计和开发了试案例Q?/span>

下面的表|图-1Q是完成相同的四个程序,独自工作?/span>Pair工作使测试案例成功通过的百分比?/span>

test cases passed.png

Q图Q?/span>1Q?/span>

下面的柱状图Q图Q?/span>2Q则是完成相同的E序Q两l所p的时间比。虽?/span>Pair的学生在刚开始的阶段比独自工作的学生花在同样d的时间较多,但很?/span>Pair的学生的旉开始大q度的下降。而独立工作的学生需要花ҎPairs更多的时间来辑ֈ接近的代码质量?/span>

elapsed time.png

Q图Q?/span>2Q?/span>

而且Q在具体目中?/span>Pair会带来比上面l果更高的h倹{一、在实际开发中Q如果错误越多,pp多的时间去修复它。在我们的试验中Q没有统计修复错误所p的时间。二、从图-1可以看出Q?/span>Pair在生高质量代码Ӟ也即意味着寚w求的准确理解。个人团队对需求理解偏差比较大Q后期也要花Ҏ大的代h来纠正。三、从图-2可以看到Q?/span>Pair的团队开发能力提高很快,q是潜在的h倹{?/span>

在比较试验之后的问卷调查之后发现Q?/span>

ü      Pair能用较少的时间生产更高质量的代码?/span>

ü      Pair的学生们认ؓ自己比一个h的时候更勤奋和更聪明的工作,因ؓ不想让自qpartner失望?/span>

ü      Pair的学生认己比一个h的时候更专著,紧凑和由U律的工作,而且是持l的。而独立工作的学生也可以专著和紧凑的工作,但往往不持l?/span>

ü      在紧张时间安排和J重的工作压力下Q独自工作的学生很容易蜕变ؓ没有U律的程序员?/span>

  同时Q在ThoughtWorksq样的咨询公司,每个开发者都是能够独挡一面?/span>ThoughtWorks的开发者,在一般的软g公司都是cM目l理或架构师的角艌Ӏ你可以惌公司肯定要ؓ他们提供不翡的待遇。可是,他们?/span>Pair做Q何一件事情,也从不认己是在浪费资源。相反,ThoughtWorks从实践中得出Q?/span>Pair能够充分的利用每个开发者,让他们发挥最大的价倹{?/span>

  二、h手不够?/span> 也许Q在你的公司Q昨天又有一个老员工递交了辞职申诗老板看着一张张新的面孔Q很无奈的摇了摇头。招聘员工ƈ不困难。但如何让新员工快速进入角Ԍ掌握公司的技术和业务呢?

    人员的流动一直是让很多Y件公叔R常困扰的问题。特别是老员工的dQ也意味着公司多年的技术和业务U篏的流失?/span>

而在Pair工作的团队中Q几乎不用担心这个问题?/span>Pair可以快速的q行知识传递,通过Pair?/span>Pair伙伴的交换,知识不再是掌握在一个h的手中,而是整个团队一起共享?/span>

?/span>ThoughtWorks内部Q工作的调整和变换是非常频繁的。但很少会对目造成影响。相反,q样的变换却加快了知识的传递?/span>

 

三、开发者不能很好的合作Q?/span>Pair 对开发者要求太高?/span> 真的要求很高吗?看看求职历,不是每个开发者都口口声称自己h很好的团队合作精吗Q如果你不能很好的和别hPairQ团队精又从何谈v呢?

那Q何两个h都可以搭配进?/span>Pair吗?

不,Pair对开发者是有要求的。它要求开发者乐意和别h沟通、合作,要求开发者能够彼此尊重,愿意和别人分享自q知识。这不正是我们一直倡导的团队合作精嘛Q?/span>

Pair的搭配是一个有的问题。有Q最好的搭配是两个力相当。其实不ӞPair应该是一U多L变换l合。在Pair的团队中Q经验丰富的开发者有责Q带领ChQ传知授道解惑,同时可以享受传道的乐。新人,更应d找有l验的伙?/span>PairQ快速学习提高自己?/span>Pair的核心就是沟通,只要两个很好的进行沟通,那么他们可以很好的搭配?/span>

关于Pair的实施,其实q不困难。我们需要的只是l验Q当然经验也只会来源于实c?/span>

最后,我要说的是:我在ThoughtWorks中国Q有q多ơ和传说中的女天才E序员一?/span>PairQ其中的感觉也就不用多说了,呵呵?/span>

 

参考资料:

http://www.pairprogramming.com/ q是一个专门介l和研究Pair的一个网?/span>

联系作者:

Email:qiananchuan@gmail.com

http://moxie.blogdriver.com/moxie/index.html



moxie 2006-09-14 17:53 发表评论
]]>
对升U到WebWork2.2.2的牢?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/moxie/archive/2006/06/08/51434.html</guid><wfw:comment>http://www.aygfsteel.com/moxie/comments/51434.html</wfw:comment><comments>http://www.aygfsteel.com/moxie/archive/2006/06/08/51434.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.aygfsteel.com/moxie/comments/commentRss/51434.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/moxie/services/trackbacks/51434.html</trackback:ping><description><![CDATA[ <p> <span id="wmqeeuq" class="postbody">今天webwork?.17升到webwork2.2.2 <br /><br />1、在webwork里的Request是包装过的。用的是com.opensymphony.webwork.dispatcher.WebWorkRequestWrapper?<br />它改写了getAttribute()Ҏ。首先是去request的getAttribute()里面取数据,如果没有取到Q则去ValueStack里面取。小心哦Q?<br /><br /><br />2、从OgnlValueStack里面查找对象Ӟ如果你的表达式语a是数字,则返回一个对应的数字。例?表达式语a123,从ValueStack里面取得的是整型123。太trick了! <br /><br />3、集合支持不向下兼容。XWorkList已经是@deprecatedQ用它就错,q不如直接删除掉。在webwork2.2中,它需要ؓ集合另外配置一个conversion.properties文g。真不明白,q样有什么优点?</span> <br /> <br />4、在webwork2.1.7的ServletDispatcher中提供了异常处理QAction异常由HttpServletResponse抛出500错误Q资源缺导致的错误Q例如action没有扑ֈQ或者jsp文g不存在)Q则由HttpServletResponse抛出404错误。在webwork2.2.2中,遇到Action异常则直接抛出ServletException?/p> <p>5、验证文件。验证执行的序不再是从上到下,“Plain validator”先执行Q即直接?lt;validator>定义的验证优先比字D验?lt;field>高。这样就要注意验证的执行序哦。短路(short-circuitedQ功能是应用在同一U别Q层ơ)的定义上?/p> <img src ="http://www.aygfsteel.com/moxie/aggbug/51434.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/moxie/" target="_blank">moxie</a> 2006-06-08 18:14 <a href="http://www.aygfsteel.com/moxie/archive/2006/06/08/51434.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>培训教程QWebWork ppthttp://www.aygfsteel.com/moxie/archive/2006/02/20/31708.htmlmoxiemoxieMon, 20 Feb 2006 13:14:00 GMThttp://www.aygfsteel.com/moxie/archive/2006/02/20/31708.htmlhttp://www.aygfsteel.com/moxie/comments/31708.htmlhttp://www.aygfsteel.com/moxie/archive/2006/02/20/31708.html#Feedback3http://www.aygfsteel.com/moxie/comments/commentRss/31708.htmlhttp://www.aygfsteel.com/moxie/services/trackbacks/31708.html在公司内部进行WebWork培训Ӟ做的ppt和演C程序?BR>目录Q?BR>

WebWork入门

WebWork原理

WebWork标签库和EL

WebWork实例

下蝲 [webwork ppt]
下蝲 [webwork demo src]



moxie 2006-02-20 21:14 发表评论
]]>
spring培训Q笔?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/moxie/archive/2006/02/20/31707.html</guid><wfw:comment>http://www.aygfsteel.com/moxie/comments/31707.html</wfw:comment><comments>http://www.aygfsteel.com/moxie/archive/2006/02/20/31707.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.aygfsteel.com/moxie/comments/commentRss/31707.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/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">目录Q?BR><BR>Spring教程 1<BR>名词解释 2<BR>Spring框架概述 3<BR>Spring是什么? 3<BR>Spring的历?nbsp;4<BR>Spring的命(Mission StatementQ?nbsp;4<BR>Spring受到的批?nbsp;4<BR>Spring包含的模?nbsp;5<BR>ȝ 6<BR>Spring的IoC容器 6<BR>用户注册的例?nbsp;7<BR>面向接口~程 8<BR>Q用h久化c)重构W一步——面向接口编E?nbsp;8<BR>重构W二步——工厂(FactoryQ模?nbsp;9<BR>重构W三步——工厂(FactoryQ模式的改进 10<BR>重构W四步-IoC容器 11<BR>控制反{QIoCQ?依赖注入QDIQ?nbsp;11<BR>什么是控制反{/依赖注入Q?nbsp;11<BR>依赖注入的三U实现Ş?nbsp;12<BR>BeanFactory 14<BR>BeanFactory理BeanQ组Ӟ的生命周?nbsp;15<BR>Bean的定?nbsp;16<BR>Bean的之前初始化 19<BR>Bean的准备就l(ReadyQ状?nbsp;21<BR>Bean的销?nbsp;21<BR>ApplicationContext 21<BR>Spring的AOP框架 21<BR>Spring的数据层讉K 22<BR>Spring的声明式事务 22<BR>Spring对其它企业应用支?nbsp;22<BR><BR>注:后面的内Ҏ不再完善,但网上的朋友可以帮助完善Q只需注明住处卛_?BR>下蝲 [<A HREF="/Files/moxie/Spring.rar">springW记</A>]</SPAN><img src ="http://www.aygfsteel.com/moxie/aggbug/31707.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/moxie/" target="_blank">moxie</a> 2006-02-20 21:13 <a href="http://www.aygfsteel.com/moxie/archive/2006/02/20/31707.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>培训教程Qhibernate ppt dochttp://www.aygfsteel.com/moxie/archive/2006/02/20/31706.htmlmoxiemoxieMon, 20 Feb 2006 13:12:00 GMThttp://www.aygfsteel.com/moxie/archive/2006/02/20/31706.htmlhttp://www.aygfsteel.com/moxie/comments/31706.htmlhttp://www.aygfsteel.com/moxie/archive/2006/02/20/31706.html#Feedback2http://www.aygfsteel.com/moxie/comments/commentRss/31706.htmlhttp://www.aygfsteel.com/moxie/services/trackbacks/31706.html一、持久化层-O/R Mapping
二、Hibernate入门
三、Hibernate映射xQMapping declarationQ?BR>四、持久化对象的状态和生命周期
五、Hibernate查询
六、Hibernate最佛_?BR>
下蝲 [hibernate ppt]
下蝲 [hibernate doc]

moxie 2006-02-20 21:12 发表评论
]]>
վ֩ģ壺 | Ͽ| | | ӳ| ͡| ʷ| ͨ| Զ| ī| ˰| ۳| ɽ| Ĭ| | Ϻӿ| | ά| ˷| | | ƽң| | | ̽| | | | | | ľ| | ɣ| | ³| ɽ| ľ| | ʡ| | |