﻿<?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-zhb8015-文章分类-MartinFlow</title><link>http://www.blogjava.net/zhb8015/category/51348.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 26 Jul 2012 08:17:31 GMT</lastBuildDate><pubDate>Thu, 26 Jul 2012 08:17:31 GMT</pubDate><ttl>60</ttl><item><title>-敏捷-(转)</title><link>http://www.blogjava.net/zhb8015/articles/383838.html</link><dc:creator>zhb8015</dc:creator><author>zhb8015</author><pubDate>Tue, 24 Jul 2012 07:06:00 GMT</pubDate><guid>http://www.blogjava.net/zhb8015/articles/383838.html</guid><wfw:comment>http://www.blogjava.net/zhb8015/comments/383838.html</wfw:comment><comments>http://www.blogjava.net/zhb8015/articles/383838.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhb8015/comments/commentRss/383838.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhb8015/services/trackbacks/383838.html</trackback:ping><description><![CDATA[<div><p><div>原文：http://nanfang.iteye.com/blog/930563</div></p><p><br /></p><p>在一家以敏捷开发和咨询著称的公司工作了一年了，以下是我当前对敏捷的认识：<br /><br />1. 敏捷宣言：<br /><br />个体与交互&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 胜过&nbsp;&nbsp;&nbsp;&nbsp; 过程与工具<br />可以工作的软件&nbsp;&nbsp;&nbsp; 胜过&nbsp;&nbsp;&nbsp;&nbsp; 面面俱到的文档<br />客户协作&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 胜过&nbsp;&nbsp;&nbsp;&nbsp; 合同谈判<br />响应变化&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 胜过&nbsp;&nbsp;&nbsp;&nbsp; 遵循计划<br /><br />以上是大家熟悉的四句箴言，但还有一句话也许常被忽略：&#8220;即，虽然右侧条目有其价值，但我们更重视左侧条目&#8221;。这句话也放在了宣言不显著的地方。宣言的<a href="http://agilemanifesto.org/">官网</a>背景是几位敏捷先贤讨论问题的画面，中间的大胡子应该是老马（Martin Fowler）。这副背景画颇有宗教油画的风格。<br /><br />2. CMMI<br /><br />一 个叫德里克&#183;布鲁克斯的人曾经领导开发过一个失败的大型计算机操作系统：System/360。他离开这个项目后写出了古典名著《人月神话》。接替布鲁克 斯来擦项目屁股的人叫做瓦茨&#183;汉弗里。汉弗里惊讶的发现这么大的项目居然没有正式严格的计划，不知道汉弗里到底经历的多少麻烦，他退休后加入了一个五角大 楼开办的软件工程学院，在那儿他和同事们建立了软件成熟度模型（CMM），其中最有名的是其五个台阶：<br /><br />台阶一：组织基本没做啥<br />台阶二：组织做一些计划，跟踪，配置管理工作，也讨论质量保证等话题<br />台阶三：组织为各种活动定义了过程<br />台阶四：组织有了准绳，活动可以跟踪和度量<br />台阶五：组织有持续改进的过程<br /><br />有时，敏捷和CMMI被人们一起谈论作对比，从我对它们目前的了解来看，两者似乎没太多联系。而且CMM5的&#8220;持续改进的过程&#8221;似乎比&#8220;敏捷&#8221;还敏捷。<br /><br />3. Scrum<br /><br />我第一次真正对敏捷产生兴趣是两年前听说了这个词，随后参加了公司的Scrum的兴趣小组，也读了些Scrum的书，其中对<a href="http://book.douban.com/subject/4201536/">这本</a>印 象深刻。有一阵子还傻乎乎的自己给自己写Backlog，Sprint和Story，还关注下Burning down  chart。对于很多人，或许Scrum就是敏捷，敏捷就是Scrum。依我看来，Scrum像是CMM3 +  敏捷，或者是基于敏捷理念的开发流程。有趣的是：几乎每本Scrum的书和文章都要提到一鸡和猪的故事。Scrum之所以流行可能是其提供一整套可操作的 过程，容易上手，如同方便面一般方便。但是教条的执行Scrum我看还真一点都不敏捷。<br /><br />4. 极限编程（XP）<br /><br />极限编程的名字起得颇有邪教的感觉。XP要比Scrum历史悠久，但没有Scrum那么流行。XP中的TDD和结对编程常常引起很大的争议。在我一年的XP实践中，我却很对这两个玩意产生了极大的兴趣。、<br /><br />反感TDD的人往往是没有真正尝试过TDD的人，想玩玩TDD的最佳方式也许是跟一个熟悉TDD程序员结对一会儿。很多场合下，用TDD开发非常有趣并且能写出高质量的代码。但是任何时候都教调的使用TDD不一定能带来多大好处，测试代码也有维护成本的。<br /><br />对 于结对编程，大多数人都是很难理解的。有些拥有结对编程经验的程序员对它又爱又恨。结对最大的好处或许是知识传播，想学习某种技术时和一个高手结对是效率 非常高的方式。新人加入团队，和老成员结对能非常迅速的进入状态。但是两个水平差异不大，但开发习惯迥异的人坐在一起结队是一种煎熬。一个经常发生的事情 是：经过长时间无意义的讨论甚至争吵后，双方妥协写出一段折中的代码，这段代码仅仅是折中的而不是最好的代码。<br /><br />5. 精益（Lean）<br /><br />敏 捷宣言已经发布十年了，已经不是新鲜玩意了。业界需要点新潮点的词汇。精益来自于丰田公司的生产模式。在朝鲜战争时期，丰田汽车公司为了为美军提供更多品 种的汽车，来自丰田纺织公司的大野耐一根据以往的经验并通过不断的实践发明了丰田生产方式。这种生产方式在学术界被称为精益生产。精益生产中有不少实践跟 一些敏捷开发实践不谋而合，如自动化，可视化等。但是生搬硬套精益思想中的一些理念到软件开发中多少有些别扭。<br /><br />6. 敏捷实践<br /><br />以下是我接触过的敏捷实践：<br />结对编程：尤其适合老人带新人，和老艺人传帮带很像，和高手结对真是职业生涯的幸事<br />TDD：有趣，值得尝试<br />站立会议：不错的交流方式，站会讲究简短不展开，有问题会后交流<br />故事卡：一种很有效的需求分析方式<br />故事墙：可视化项目进展，很有趣，但我个人认为作用不大<br />燃烧曲线：没感觉，或许客户喜欢看<br />回顾会议：回顾会议的召开需要些技巧，需要个好的主持方式，确实能暴露问题<br />Show Case:需要客户配合才有作用<br />重构：啥也不说了，最爽的事</p> <p>迭代开发：讨厌僵化的迭代开发，迭代计划还是有弹性的好</p> <p>看板方式：来自精益生产，能够取消迭代，减少浪费，赞<br />持续集成：见7<br /><br />7. 持续集成<br /><br />每当Build成功，就有小鸟唱歌；Build失败就是一声闷雷，团队中必须有人站出来为此负责。这种开发模式我去年才刚刚接触到，但恐怕我的职业生涯会离不开它了，我认为它是最有用的敏捷开发实践。甚至有些同事对持续集成的评价是持续集成就是敏捷。<br /><br />8. 传说中的敏捷团队<br /><br />传说中的敏捷团队，每个人都是多面手，沟通畅通，有效协作，共同成长并且持续改进，心心相通，众志成城，快速响应变化，为客户带来最大的价值。我相信这样的团队是存在的，因为我现在所处的项目团队已经让我看到了敏捷团队的雏形。<br /><br />9. Martin Fowler</p> <p><br />有幸和老马有了一次面对面的交流，和老马介绍了下我们的项目，但他也没有给出什么建议。<br />最后我问了两个问题：<br />我：您是我的偶像，请问我如何才能成为一个像您这样的软件开发高手？<br />老马：我无法回答，我不是开发者了，我只是个演说者。<br />我：项目中和客户交流，客户说你们不用搞太多测试和TDD之类，我们希望你们做的更快些，多实现功能为主。我认为我们的主要目的是为客户多交付价值，所以我们确实应该减少测试的力度，您怎么看？<br />老马：你需要权衡（Trade off），但在我看来写测试只会让我更快些。<br /><br />10. 对敏捷的质疑</p> <p><br /><a href="http://coolshell.cn/articles/3778.html">一篇对敏捷讽刺的帖子</a>，的确，如果教条的使用一些敏捷实践恐怕没什么好处。在公司内部，也有很多<span style="font-size: 10px;">质疑</span>敏捷的声音，我想如果没有质疑和反馈来促使改进，敏捷就不是敏捷了。</p> <p>&nbsp;</p> <p>11. 技术 &gt; 任何方法论</p> <p>&nbsp;</p> <p>我到现在还一直持有这个偏激的观点：软件开发不是工程而是艺术，开发者的技术水平决定了软件的水平。敏捷实践能够帮助优秀的发者们做的更好更快。但追求更高的技术才是软件开发的王道。</p></div><img src ="http://www.blogjava.net/zhb8015/aggbug/383838.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhb8015/" target="_blank">zhb8015</a> 2012-07-24 15:06 <a href="http://www.blogjava.net/zhb8015/articles/383838.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Martin Fowler: 软件开发“教父”(转)</title><link>http://www.blogjava.net/zhb8015/articles/373632.html</link><dc:creator>zhb8015</dc:creator><author>zhb8015</author><pubDate>Mon, 09 Apr 2012 07:37:00 GMT</pubDate><guid>http://www.blogjava.net/zhb8015/articles/373632.html</guid><wfw:comment>http://www.blogjava.net/zhb8015/comments/373632.html</wfw:comment><comments>http://www.blogjava.net/zhb8015/articles/373632.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhb8015/comments/commentRss/373632.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhb8015/services/trackbacks/373632.html</trackback:ping><description><![CDATA[<div><table width="100%"><tbody><tr align="center"><td colspan="2"><div>Martin Fowler: 软件开发&#8220;教父&#8221;</div><br /></td></tr><tr align="center"><td colspan="2"><br /><div>(2008-07-08 14:47:18)</div><br /></td></tr><tr valign="top"><td colspan="2"><div> <p style="text-indent: 2em">他改变了人类开发软件的模式，他被开发者们尊为&#8220;教父&#8221;，他从不与媒体谈论技术以外的事情。这个谜一样的科学家Martin Fowler，终于首次敞开心扉，讲述自己的故事。</p> <p style="text-indent: 2em">&#8220;Martin Fowler！&#8221;&#8220;Martin Fowler！&#8221;6月21日，在第三届&#8220;敏捷中国&#8221;技术大会北京开幕式上，近千名技术开发人员都表现出异常的兴奋。</p> <p style="text-indent: 2em">在观众热烈的掌声和兴奋的期盼中，蓄着大把胡子、穿着衬衫、一身休闲打扮的Martin Fowler走上讲台，开始侃侃而谈。没有讲稿，也无需讲稿，因为有关技术的一切，他早已烂熟于心。</p> <p style="text-indent: 2em"><strong>从&#8220;意外&#8221;到&#8220;教父&#8221;</strong></p> <p style="text-indent: 2em">从上个世纪80年代开始，Martin Fowler就一直从事软件开发工作。说起走上这条路的原因，他的回答却很简单:&#8220;其实这是个意外。我在学校学的是计算机专业，我觉得很感兴趣，就继续从事这个工作。&#8221;</p> <p style="text-indent: 2em">上个世纪80年代中期，正是软件行业蓬勃发展的时期，Martin对面向对象开发这个新领域发生了兴趣。他开始把面向对象的思想应用到商业信息系统的开发中去，并很快成了这方面的专家。而正是这个兴趣，让Martin遇到了对他产生终身影响的人。</p> <p style="text-indent: 2em">&#8220;他叫Jim Odell，也是一个技术专家。&#8221;Martin说。那时候，Martin在当时美国最大的一家咨询公司工作，负责软件开发技术方面的工作，而Odell作为一个独立的软件咨询师，恰巧跟Martin在同一个工作组，共同从事一些面向对象开发的研究。</p> <p style="text-indent: 2em">&#8220;当时我们一起做概念建模，还有驱动开发。我非常享受跟他一起工作。&#8221;说起这些，Martin的眼光从深邃开始变得闪烁，似乎陷入了深深的回忆之中。</p> <p style="text-indent: 2em">随后，在Jim Odell的鼓励下，Martin也开始写书。他的思想，从面向对象开发到重构，从UML建模到XP开发（极限开发），开始越来越多地被人了解，他成了开发人员心中的大师。</p> <p style="text-indent: 2em">2001年2月，17名像Martin Fowler这样、在软件开发各领域有所建树的大师们，汇聚在犹他州Wasatch山脉中的一处滑雪场内，用3天的时间放松、讨论。他们想改变传统的以文档为驱动的、笨重的软件开发模式。</p> <p style="text-indent: 2em">于是，在这个非正式的集会上，诞生了一个在软件开发历史上具有里程碑意义的&#8220;文件&#8221;，这就是被 广为称颂的《敏捷软件开发宣言》，而&#8220;出生在英国的Martin  Fowler，则让全美国人学会了&#8216;Agile（敏捷）&#8217;这个词的发音&#8221;。《敏捷软件开发宣言》的网站上这样记载Martin。</p> <p style="text-indent: 2em">传统的软件开发，开发者得先研究清楚用户所有的需求，再开发出一套完整的方案。这不仅使得开发 周期长，而且整套方案中决不允许有任何纰漏，否则用户的需求就无法满足，而对开发者来说，更改也非常困难。而敏捷开发则是从用户核心需求入手，在短时间内 拿出一个原型，然后根据用户的其他需求增加模块，同时修改和完善，属于&#8220;可以让汽车一边跑，一边换轮子&#8221;的开发方式，非常适合对开发周期要求越来越短的商 业软件开发。</p> <p style="text-indent: 2em">敏捷开发彻底改变了人类开发软件的模式。</p> <p style="text-indent: 2em"><strong>低调的自由主义者</strong></p> <p style="text-indent: 2em">事业上的巨大成就，让Martin Fowler被技术人员奉为膜拜的对象，但他却低调得让人难以捉摸。</p> <p style="text-indent: 2em">照理说，&#8220;教父&#8221;级的人物应该游走在全球各大城市之间，频繁地参加各种学术交流和演讲。而被技 术开发人员视为全球最受欢迎的演讲者之一，Martin Fowler却很少参加这类活动。Martin说:  &#8220;我觉得人们给我的关注太多了，我不喜欢被关注。我就是一个普通的人，住在普通的房子里，开普通的车，吃普通的饭，有时间就去骑骑自行车，或者和我的妻子 去郊游。&#8221;</p> <p style="text-indent: 2em">就连&#8220;教父&#8221;这个称呼，他给出的惟一评价也只有两个字&#8212;&#8212;奇怪。&#8220;这个名字是别人给的，我谈不上喜欢，也说不上不喜欢。就是有点奇怪，因为教父在电影和小说里，都是强盗那样的人。&#8221;</p> <p style="text-indent: 2em">相比之下，每每在做自我介绍时，Martin Fowler更愿意称自己为&#8220;作家和咨询师&#8221;，而他最喜欢的工作，则是现在的状态&#8212;&#8212;每天主要的精力都用来写书和钻研自己感兴趣的软件技术。&#8220;写书是我最大的享受，这样的生活很自由。&#8221;</p> <p style="text-indent: 2em">的确，Martin是一个不折不扣的自由主义者，他做事的理由永远很简单，就是感兴趣。也因为如此，Martin做了很多年的独立软件咨询师，为的就是&#8220;独立工作的公正性和创造性&#8221;。直到1999年，他开始为ThoughtWorks做一些咨询工作。</p> <p style="text-indent: 2em">ThoughtWorks完全开放的工作空间让Martin感到惊讶，他发现在这里工作，沟通 是完全平等的。而更重要的一点就是，Martin发现，ThoughtWorks的工程师都有很强的技术能力，有些甚至不比自己差，只是不如自己有名。而 且他们离商业软件开发非常近。</p> <p style="text-indent: 2em">因此，Martin最终决定接受ThoughtWorks的加盟聘书，而且无论多忙，都会特意去各个项目组走走，给别人一些意见，也从别人那里了解商业软件开发的最新动向。</p> <p style="text-indent: 2em"><strong>采访手记</strong></p> <p style="text-indent: 2em"><strong>离开技术就难受</strong></p> <p style="text-indent: 2em">在采访中，Martin给自己下了这样一个定义，&#8220;一个喋喋不休的人&#8221;。</p> <p style="text-indent: 2em">第一眼见到Martin的时候，他刚跟技术人员结束讨论，原定上午10点开始的采访，因此推迟了15分钟。进入采访的会议室，这个络腮胡的男人还沉浸在刚才的兴奋中，很用力地握了握记者的手。</p> <p style="text-indent: 2em">但当得知记者此次采访的目的并没有太多地关注技术时，我在他脸上看到了很明显的失望，浅浅地说了一句: &#8220;噢，好吧。我喜欢说技术，不喜欢说自己的事情，所以我看情况，能说多少就说多少吧。&#8221; 正如Martin自己所说，他不喜欢被太多地关注，所以采访开始得并不顺利。</p> <p style="text-indent: 2em">尽管如此，Martin还是很认真地配合着采访，比如，当在提到一些书籍、人名时，他都会非常仔细地写下来，就像对待软件开发一样，尽量做到严谨。</p> <p style="text-indent: 2em">而这些小细节，也透露出这个软件开发大师身上的一些特质。当问题一旦与技术相关，Martin 的话虽然不是太多，但可以很明显地感受到他的目光会变得炯炯有神，手势也会比以前多起来。如果问题和技术没什么关系，比如他事业中的一些经历，或者家人、 朋友时，他就会很认真地想一想，但谈的就很少。</p> <p style="text-indent: 2em">&#8220;在Martin的头脑中，兴奋点似乎只有技术。&#8221;ThoughtWorks的员工告诉记者。&#8220;Martin很不喜欢接受采访，除非纯谈技术，否则对他来说简直是受罪。&#8221;</p> (李响 计算机世界报)</div></td></tr></tbody></table></div><img src ="http://www.blogjava.net/zhb8015/aggbug/373632.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhb8015/" target="_blank">zhb8015</a> 2012-04-09 15:37 <a href="http://www.blogjava.net/zhb8015/articles/373632.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>采访MartinFlow(转)</title><link>http://www.blogjava.net/zhb8015/articles/373631.html</link><dc:creator>zhb8015</dc:creator><author>zhb8015</author><pubDate>Mon, 09 Apr 2012 07:36:00 GMT</pubDate><guid>http://www.blogjava.net/zhb8015/articles/373631.html</guid><wfw:comment>http://www.blogjava.net/zhb8015/comments/373631.html</wfw:comment><comments>http://www.blogjava.net/zhb8015/articles/373631.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhb8015/comments/commentRss/373631.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhb8015/services/trackbacks/373631.html</trackback:ping><description><![CDATA[<div>  <div><div style="layout-grid:15.6000pt; "><p style="margin-bottom: 0pt; margin-top: 0pt;"><br /> </p>   <p style="margin-bottom: 0pt; margin-top: 0pt;"><span style="font-weight: bold; font-size: 10.5pt; font-family: 'Verdana';"><br />     </span></p>   <p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-weight:bold; font-size:10.5000pt; font-family:'Verdana'; ">我是一个幸运的家伙</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Verdana'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Verdana'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8212;&#8212;Martin&nbsp;Fowler北京访谈</span></p> <p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;孟岩&nbsp;/&nbsp;记者</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span>&nbsp;<span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">2005 年6月初，ThoughtWorks首席科学家、技术思想大师Martin&nbsp;Fowler来到北京。尽管这次访问行程繁忙，他还是在离开北京的前一天晚上 抽时间接受了我们《程序员》杂志的采访。很明显，连日来马不停蹄的奔波演讲使他相当疲劳，但是正如他自己所说，他用说话的方式写作，用写作的方式说话，即 使是在我们不长的交谈中，他仍然给我们带来了很多深刻的启发。</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">记者：您现在是一位对软件开发社群有着重大影响力的人，对您来说，您认为取得成功最重要的三个因素是什么？</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">MF：我认为，排在前三位的是运气、运气和运气。</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">记者：这太让我们惊讶了，难道您把您的成功归结为运气吗？</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">MF： 我说我有好的运气是因为恰好在合适的时间做了合适的事情，比如：在面向对象兴起的时候，我恰好加入了一个使用面向对象的先锋团队；随后我又恰好接触了刚刚 兴起的建模技术；1997年我撰写了《UML&nbsp;Distilled》，恰好赶上了UMFL的大流行；之后我恰好加入了C3项目，从而见证并且参与了敏捷方 法的诞生；这样&#8220;恰好&#8221;了很多次，所以我说我真的太幸运了。</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">记者：我想这么多连串的幸运应该也是您付出努力才得到的。</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">MF： 我不知道，但是我却是在做每件事情都非常投入，可以说是兢兢业业，一丝不苟。你知道，我不是一个喜欢预测未来的人，所以从不把时间花在无休止的烦躁和争论 上，而是尽可能投入眼前的工作。当然像我这样的人也很多，所以我说，能够站在现在的位置上，真的完全是靠运气。当然，提到写作，我认为我还算是个不错的作 者，似乎有天赋的表达能力。</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">记者：是的，我前不久读了您的《企业应用架构模式》一书，您的表达能力点给我们留下很深的印象。说到所谓的&#8220;企业开发&#8221;，究竟什么叫&#8220;企业开发&#8221;，它究竟有什么特点？</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">MF： 企业开发&#8221;是一个很含糊的词，我一般用它来指代所谓业务软件开发，以区别于传统的软件产品开发。企业开发通常要和数据打很多交道，而且时间和资金的压力很 大，客户的需求多变，而且需要多次迭代和大量集成性工作。企业开发是要遵守一系列业务逻辑的，而正如我在《企业应用架构模式》一书中所说的，这些业务逻辑 最大的特点就是没有逻辑。</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">记者：那么您认为企业开发者所面临的最大挑战是什么？</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">MF：如我所说，企业应用的业务逻辑经常是没有逻辑性可言的，因此为了了解它，开发者必须不断沟通和交流！只有不断的沟通和交流才能开发出用户真正需要的软件。</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">记者：您觉得企业开发当前最重要的趋势是什么？</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">MF： 我觉得眼下最有趣的趋势是人们正在竭尽全力地寻找做一件事情最简单的办法，怎样用最简单的方法构造大型的复杂的应用程序和企业解决方案。比如说：在 Java开源社群中出现的以Spring为代表的轻量级容器。以及Ruby&nbsp;on&nbsp;Rails，它根据&#8220;习俗&#8221;来自动设定很多元素，大大提高了开发效率， 也简化了开发过程。</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">记者：看来您对于Python和Ruby这样的动态语言非常感兴趣，是吗？</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">MF：坦率地说，至少在目前的情况下，大型的、复杂的、严肃的应用程序还是以Java和.NET为主，但是对于一些小的应用来说，Python和Ruby这样的动态语言确实展现出一些让人觉得非常有趣的特性，我本人就是一个Ruby的爱好者。</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">记者：有的企业开发者认为，目前的企业开发效率已经足够高了，只要将目前的工具和框架掌握得很好，就可以高效率地开发出高质量的企业应用。您觉得我们的效率真的足够高了吗？</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">MF：不，我并不是这样认为。我们的开发效率还有很大的提高空间，尤其是如何快速、清晰地了解客户需求，并将其转化为符合要求的应用程序。这个过程对于我们目前的企业开发来说还是太慢了。</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">记者：可是，我们几乎不需要做任何大的设计工作，体系和架构是确定的，还有很多框架在辅助我们，并将所有有趣的设计工作都代替我们做了，在这样的开发过程中，趣味何在？</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">MF： 如何快速而准确的满足业务需求，对业务逻辑进行建模才是有趣的事情。而像O/R&nbsp;Mapping这样的事情，是非常乏味而枯燥的。对我而言，绝不会认为撰 写一个O/R&nbsp;Mapping的工具是一件有趣的事情。它与业务本身无关，而只是作为基础设施而存在。有这样的工具我觉得非常好，但是我认为更重要的，还 是把握客户对业务的需求。</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">记者：好吧，那让我们来谈谈面向对象的思想，这可以说是当今企业开发的主流思想，我记得您曾经在书中说过，面向对象使得构造大型复杂系统成为可能，但是现在SOA正在兴起，您觉得这是否意味着面向对象要过时了呢？</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">MF： 当然不，谈到服务，其实在服务的背后仍然是面向对象，服务是暴露功能的一种方式，而在背后提供功能的，仍然是对象。而且开发这些功能仍然需要大量面向对象 技术。总而言之，服务关注的是如何对外暴露接口，而在这些接口背后的构建工作仍然非常复杂，面向对象为这些工作提供了一种很好的解决方法。</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">记者：在中国，由于一般企业的管理还不成熟，所以客户的需求变化频繁而且剧烈，很难保持接口的稳定，有人认为面向对象在这种情况下并不适合使用，因此把希望寄托在SOA上，您对此如何看待？</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">MF： 我觉得这种观点是很奇怪的，说到接口的不稳定，无论是对对象还是对服务都同样是存在的。在服务中也需要像契约这样的手段对外发布功能，因此同样存在接口不 稳定的情形。所以SOA根本解决不了这个问题。我认为这更多的是一个开发方法的问题，例如敏捷开发中，频繁地改变对象的接口，通过与客户的密切交流来了解 和满足业务需求，同时通过重构来调整应用程序的内部结构，这样至少会使接口尽早稳定下来。同时也应该为接口的进化提供一种行之有效的手段。这个问题确实不 好回答，这说的只是一个基本思路。</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">记者：问您一个具体的技术问题。在很多企业应用中，人们都会开发一个数据访问层，这是为什么呢？为什么不直接在业务逻辑层中存取数据库？</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">MF：我本人喜欢在不同的地方作不同的事情。业务逻辑是一回事，存取数据库是另外一回事，所以它们不应该纠缠在一起。这是主要的理由。还有一个次要的理由，设计一个数据访问层，一旦数据库发生变化，移植起来会快得多。</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">记者：但是这样的设计也有缺点。当我们要改动数据表结构时，往往需要相应地在数据访问层做改动，接着在业务逻辑层作改动，有时甚至要改表现层。这不是很麻烦吗？</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">MF：哈，这是人们经常抱怨的事情，但是这就是所谓的trade-off。分层在带来一些好处的同时也带来了这样的麻烦。</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">记者：再说说单元测试。很多人不愿意进行单元测试，是因为时间的压力太大了。如果项目时间很紧张，难道我要花掉一半的时间来写单元测试？</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">MF：当然！因为单元测试能够使你更快地完成工作。无数次的实践已经证明这一点。你的时间越是紧张，就越是要写单元测试，它看上去慢，但实际上能够帮助你更快、更舒服地达到目标。</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">记者：道理固然如此，但是实际上很多人没有心情去写完备的单元测试...</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">MF：在这种情况下，你可以只写那些确保代码在正常情况下正常工作的单元测试，不必应对各种各样的错误情形。</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">记者：即使这样也还是很烦人。我发现自己经常在测试一些显而易见的事实，比如一加一等于二，还经常把精力放在一些不重要的测试上。</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">MF：什么叫重要？什么叫不重要？这是需要逐渐认知的，不是想当然的。我为绝大多数的模块写单元测试，是有点烦人，但是当你意识到这工作的价值时，你会欣然的。</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">记者：您能给中国程序员几个忠告或者建议吗？</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br /></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">MF： 对全世界的程序员我都是那么几条建议。第一，每年学习并熟悉一个新的编程语言。坚持几年，你对于程序设计会有非常深刻的见解。第二，学习测试驱动开发，这 种新的方法会改变你对于软件开发的看法。第三，劳逸结合，不要总是绷得紧紧的，爬爬山，跳跳舞，经常放松神经，你会发现你更有活力和创造力。我的一些最好 的想法就是在山顶上萌发的。</span></p></div></div> <br /> </div><img src ="http://www.blogjava.net/zhb8015/aggbug/373631.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhb8015/" target="_blank">zhb8015</a> 2012-04-09 15:36 <a href="http://www.blogjava.net/zhb8015/articles/373631.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>