OOPAA

Focusing on OO, Patterns, Architecture, and Agile
posts - 29, comments - 75, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2008年9月22日

     摘要: 作为技术人员,我们经常需要跟客户、业务分析人员等非技术人员沟通软件设计方面的问题。如何比较直观地向这些非技术人员解释设计、软件质量对项目的影响,解释糟糕设计、不干净代码给项目带来的风险,解释我们必须开始关注软家设计问题?这里有两个概念(metaphor)可以帮助我们达到这一点。  阅读全文

posted @ 2010-12-23 23:55 mingj 阅读(6376) | 评论 (2)编辑 收藏

posted @ 2010-12-22 22:55 mingj 阅读(6971) | 评论 (1)编辑 收藏

     摘要: 浮潜潜水员游弋于海水表层,看鱼戏浅滩,望影掠深海。水肺潜水员可以潜过海水表层的深度;他能潜到更深的地方,在一定的区域内研究那些影子以发现鱼类、沉船残骸以及珊瑚的细节。在相同的时间内,浮潜潜水员可以游历更宽阔的水域;而水肺潜水员则在潜游深度上占据优势。成功的项目团队在项目的整个过程中会把浮潜和水肺潜水这两种方式结合起来使用,在特定的时刻明智地选择合适的方法,从而有效地利用了时间。  阅读全文

posted @ 2010-09-24 21:05 mingj 阅读(3910) | 评论 (0)编辑 收藏

     摘要: 在一开始的时候,一切都显得那么美好。市场部有一个来自于客户的请求——添加额外的下拉菜单。然后,在产品中添加一个输出接口的需求来了,产品经理想要加上一份新的分析报表,DBA要求在数据库里增加一个新字段以改变背景的颜色。所有这些需求以及其他更多的需求,都交由开发人员负责加进到产品里面。随着需求的不断添加,产品的特性集不断增长,但过了一段时间之后,每个人——市场部、客户和开发团队——对如何将所有这些碎片整合在一起、这些碎片如何帮助实现业务目标,失去了理解。曾经带着明确目标出发的项目变成了难以下咽的、由各种无关特性炖成的一锅汤。  阅读全文

posted @ 2010-09-14 07:42 mingj 阅读(3934) | 评论 (2)编辑 收藏

     摘要: 在如今大部分的组织里面,是否给申请技术职位的人提供工作机会——这个最终决定权属于管理部门。经理们雇人,经理们裁人:一切都天经地义。然而在某些组织里面,这些技术人员能否得到工作机会却是取决于——至少部分取决于——他们将来的同事。这种同事预审的最终结果只有一种:当经理们让技术职员拥有发言权的时候,每一个人——申请人、职员和经理——都会和盘托出自己的想法。  阅读全文

posted @ 2010-08-31 21:19 mingj 阅读(3163) | 评论 (0)编辑 收藏

posted @ 2010-08-04 01:04 mingj 阅读(4187) | 评论 (1)编辑 收藏

     摘要: 组织相信忙乱的工作状态象征了健康的生产率。  阅读全文

posted @ 2010-07-30 22:44 mingj 阅读(2747) | 评论 (1)编辑 收藏

     摘要: 项目经理的很多技能都与传统的英式保姆有共同之处。  阅读全文

posted @ 2010-07-26 23:38 mingj 阅读(4399) | 评论 (2)编辑 收藏

     摘要: 高涨的士气永远象征着组织的健康。与之类似,低弱的士气则说明肯定有什么地方做错了。有一种管理理念就是奉这种关系如圭臬,试图从相反的方向来利用这种关系。逻辑是这样的:把士气鼓舞起来,其他美好的东西也就跟随而至。  阅读全文

posted @ 2010-07-20 21:54 mingj 阅读(3426) | 评论 (2)编辑 收藏

     摘要: 前一阵子使用JSF开发web应用程序,碰到一个典型的页面转向需求。按照JSP的方案完成了需求,但却给系统引入了BUG。而且更糟的是,系统页面没有任何提示,后台日志没有任何异常信息。本文通过一个JSF的非典型性BUG,提出了软件调试的原则和指导,并就前述BUG进行了调试分析,找到问题的所在。最后,软件调试是一项很有意思的活动,常常给开发人员带来解谜般的快感,或者一团乱麻的纠结。导入代码、设置断点、逐步调试并不是最好的办法,清楚地划分问题域,找准确定点可能会事半功倍。当然,在找出水面下面的暗礁之后,别忘记给自己、给其他人mark上这块区域的暗礁位置,能极大减少以后触礁的痛苦。  阅读全文

posted @ 2009-09-28 02:01 mingj 阅读(3865) | 评论 (1)编辑 收藏

     摘要: 在日常生活中,有各种各样的法律规则和道德准则来约束、指导行为。比如在初次的商业合作中,双方都会选择制定一份详尽的合约来规约双方,包括双方拥有的具体权利、以及单方出错时对方享有的权利等。软件开发,在商业上面也必然会有详尽的合约,处理的是两个组织之间的利害关系。但是,软件开发同时作为紧密involve商业客户与开发团队的活动,正如Alistair Cockburn把它比喻称为game——由客户、管理层和开发人员共同play的game,其中也需要由参与play game的各方利害人来共同制定规则,让大家都能玩得开心、尽兴,甚至长久。这样,围绕着多赢长赢的出发点来play game,就同样需要这样一份“权利法案”,对开发过程中的三方利益利害人的权利做出基本的原则上的规定。在敏捷软件开发方法中,特别是极限编程中,就存在这样一份“权利法案”。  阅读全文

posted @ 2009-07-11 17:37 mingj 阅读(3747) | 评论 (0)编辑 收藏

     摘要: 由在敏捷领域最具有影响力的技术社区InfoQ中文站、敏捷方法论的领导厂商 ThoughtWorks共同主办的敏捷中国技术大会(Agile China 2009),将于9月11日~12日(周五、周六)在北京举行。届时将有超过500人来自电信、金融、互联网、教育等行业在内的高级软件开发人员、项目管 理人员等参加。本次大会将特别邀请敏捷宣言缔造者、敏捷编程(XP)方法学创始人Kent Beck,敏捷开发权威人士、敏捷宣言的创始人之一,Dave Thomas,敏捷宣言签署人之一Steve Freeman等国际敏捷领域专家,以及在团队中成功应用敏捷的阿尔卡特、赛门铁克、诺基亚-西门子、华为、腾讯等公司的项目负责人参与此次大会并分享他 们的心得。  阅读全文

posted @ 2009-07-06 19:57 mingj 阅读(2835) | 评论 (0)编辑 收藏

     摘要: 上周末参加openparty,来自译言的几个朋友详细解释了他们预想的译言的收费模式。简单来说,译言会出面买下一些文章或书刊的版权,签约译者进行申领翻译。当译文通过审核,译言就把原文以及译文打包作为收费文章挂在译言收费频道上,按点击率来收费;或者转卖给其他网站,也可以按整文收费。最后,原文作者、译文作者和译言三方来分取利润。如果受好评足够高,译言还可能将译文提供出版,不再仅仅局限在网络上面,而是进入广大的书店。本文着重谈谈译言的出版计划,试图分析在这个时代,谁更有可能脱颖而出,引领行业浪潮?  阅读全文

posted @ 2009-06-28 11:12 mingj 阅读(3802) | 评论 (3)编辑 收藏

     摘要: 在很多人看来,实施了敏捷,似乎就等于纵容程序员,允许他们不把纪律放在眼里。事实是这样子么?本文发表于《程序员》杂志2009年6期,因篇幅较长,故分为两段,本篇为下篇。  阅读全文

posted @ 2009-06-18 09:42 mingj 阅读(3886) | 评论 (1)编辑 收藏

     摘要: 在很多人看来,实施了敏捷,似乎就等于纵容程序员,允许他们不把纪律放在眼里。事实是这样子么?本文发表于《程序员》杂志2009年6期,因篇幅较长,故分为两段,本篇为上篇。  阅读全文

posted @ 2009-06-18 09:40 mingj 阅读(4119) | 评论 (0)编辑 收藏

     摘要: 行业日新月异,敏捷、迭代式和迭代这些热门词已是“飞入寻常百姓家”,一个定义模糊的新角色——迭代经理,也浮出水面。这是新一代的项目经理么?抑或是美其名的团队带头人?又或者是管理上的一个新阶层?谁会被冠以这个“经理”头衔?本文将着重阐述迭代经理作为软件团队成员的工作内容和价值。我们将分析迭代经理的职责范围,同时讨论作为一个不可或缺的角色,迭代经理在面对组织和文化挑战的情况下,如何维持一个健康的工作环境。本文是全文的下部分。  阅读全文

posted @ 2009-06-14 15:45 mingj 阅读(3702) | 评论 (0)编辑 收藏

     摘要: 行业日新月异,敏捷、迭代式和迭代这些热门词已是“飞入寻常百姓家”,一个定义模糊的新角色——迭代经理,也浮出水面。这是新一代的项目经理么?抑或是美其名的团队带头人?又或者是管理上的一个新阶层?谁会被冠以这个“经理”头衔?本文将着重阐述迭代经理作为软件团队成员的工作内容和价值。我们将分析迭代经理的职责范围,同时讨论作为一个不可或缺的角色,迭代经理在面对组织和文化挑战的情况下,如何维持一个健康的工作环境。本文是全文的中部分。  阅读全文

posted @ 2009-06-13 16:31 mingj 阅读(4020) | 评论 (0)编辑 收藏

     摘要: 行业日新月异,敏捷、迭代式和迭代这些热门词已是“飞入寻常百姓家”,一个定义模糊的新角色——迭代经理,也浮出水面。这是新一代的项目经理么?抑或是美其名的团队带头人?又或者是管理上的一个新阶层?谁会被冠以这个“经理”头衔?本文将着重阐述迭代经理作为软件团队成员的工作内容和价值。我们将分析迭代经理的职责范围,同时讨论作为一个不可或缺的角色,迭代经理在面对组织和文化挑战的情况下,如何维持一个健康的工作环境。本文是全文的上部分。  阅读全文

posted @ 2009-06-13 12:21 mingj 阅读(3436) | 评论 (2)编辑 收藏

     摘要: 我们曾举办了一次为期三天的敏捷培训,学员主要是一些知名软件公司的项目经理和资深开发人员。培训期间,我们带领学员进行了丰富的游戏,通过寓教于乐的方式让他们体验了敏捷方法学的大部分知名实践,并讲解了敏捷方法学推崇的价值和原则。从学员的回顾以及意见表上可以看出培训效果是显著的,但是在培训过程中学员也提到一些问题,主要是对敏捷方法学的实践和价值比较疑惑。在回答问题的同时,我们能感觉到随着敏捷方法学在国内被引入、被宣传,很多软件组织或人员对敏捷方法学都已经有了基本的了解,但是对敏捷方法学向软件行业承诺的价值还存在不同程度的顾虑。  阅读全文

posted @ 2009-05-22 20:19 mingj 阅读(4142) | 评论 (2)编辑 收藏

     摘要: 对于软件开发,多少代工程师梦想能像堆积木一样堆出满足功能需求的软件。Brooks在No Silver Bullet一文中提到解决软件开发过程中复杂性的一种可能方案就是成熟的组件市场,人们可以购买需要的组件而不是再自行开发。但对于开发工作,有没有一种更高层面的模式,可以把原来混乱无序的开发过程分解成一段段明确定义的步骤?比如说,开发人员接到一个任务,他可以这样跟他的同伴解释他的计划:“我先要抽取类(extract class),然后移动方法(move method),就完成了。”这正是本文试图讨论的主题:通过一系列明确定义的重构步骤,以达到实现系统功能的目的。我们可以进一步假想,重构是否就是开发人员开发软件的领域专属语言呢(refactoring as DSLs to developers' development)  阅读全文

posted @ 2009-05-16 15:15 mingj 阅读(3822) | 评论 (3)编辑 收藏

     摘要: 戊子年终于走到了岁末,转眼即将迎来己丑年。因为今晚就将踏上归途,本博提前给blogjava以及广大读者拜个早年了:各位新年好,恭喜发财!新的一年就要到了,牛年希望大家都能牛气一些,不管在生活上,还是工作学习上。每个人都是不断学习和进步的。截止目前,本博也是在酝酿着一些的文章,就此晒晒新年的写作计划吧!  阅读全文

posted @ 2009-01-23 10:40 mingj 阅读(2189) | 评论 (2)编辑 收藏

     摘要: 最近结束了一个企业OA系统的项目,客户是一家海洋航运行业的企业,散运业务全球第一。该系统以工作流系统为基础平台,对员工工作进行电子化和规范化,由系统来驱动员工自动、快捷、可管地完成日常工作。在开发过程中,在综合评比多种工作流产品之后,我们选择了开源工作流产品——OSworkflow作为底层工作流引擎支撑,通过扩展OSworkflow的接口把业务系统和工作流引擎完美无缝地集成在一起。本文就是跟大家一起分享osworkflow扩展过程中的经验心得,希望能对其他朋友有帮助。  阅读全文

posted @ 2009-01-16 17:15 mingj 阅读(5491) | 评论 (11)编辑 收藏

     摘要: play! framework 是一个面向小型网站开发的 rails-like 的 Java 框架,不仅在目录结构上,在系统的 skeleton 生成上,也把 rails 学了个七七八八。最近和同事也在做一个 rails style 的 Java Web 应用开发框架,参考了 rails 的很多 feature,但更多的是按照自己的开发理念和哲学思想“拿来” rails 里面有借鉴意义的思想。面对号称 rails-like 的 play! framework,这几天身在海滩上,于是花了一些时间好好研究了 play! 的源代码一番。“看上去很美”,是读完代码后脑海中第一下涌现出来的想法,我承认我是OOafarian。  阅读全文

posted @ 2008-12-31 22:08 mingj 阅读(5331) | 评论 (14)编辑 收藏

     摘要: 前一段时间读了Matt Stephens 与 Doug Rosenberg 合著的《Extreme Programming Refactored: The Case Against XP》(以下简称《Refactored》)。该书虽然是针对 Kent Beck 的《Extreme Programming Explained: Embracing Changes》(以下简称《Explained》)第一版进行阐发,然后 Kent Beck 在《Explained》第二版里面也修正了一些 XP 的理念和态度,但是《Refactored》书中提到的一些见解和看法现在读来还是挺有意思的。特别有意思的是作者在书中把 XP 和马克思主义来做对比,得出一些共同点,也颇让人若有所思。本文结合我公司敏捷培训中学员问得比较多的问题做了一番比较粗略的解释,希望对使用敏捷方法学还有疑问的组织或个人能有一定的帮助和借鉴意义。  阅读全文

posted @ 2008-12-31 00:52 mingj 阅读(3524) | 评论 (1)编辑 收藏

     摘要: play! framework 是最近出的一个号称 rails-like 的 java web 开发框架,blogjava有些博友也发表了一些blog来宣传。这两天“在海滩上”,就花了一些时间读了一下play! 的源代码,有些心得体会。特别是对play! 宣称的“Edit your Java files, save, refresh your browser and see the results! No need to compile, deploy or restart the server”功能非常感兴趣,于是着重看了 play! 在 hot swap 这一块的实现代码。结果,真相揭晓了,不存在魔术。  阅读全文

posted @ 2008-12-30 17:06 mingj 阅读(4486) | 评论 (12)编辑 收藏

     摘要: 目前有很多软件组织陷入在软件开发的焦泥坑中,面临着种种不同而又复杂的情况。分析其根源,重量的、不能及时反馈改进的软件方法是原因之一。而在现实中,项目管理层往往通过增加人力等手段,却又陷入 Brooks' Law 的迷雾之中。企图一劳永逸,通过大规模过程改进来提升交付能力,更是被 Fred Brooks 斥为“there is no silver bullet”。这种情况下,敏捷方法的出现自有它的优点,不仅就软件开发的本质复杂性,而且也就软件开发的附加复杂性进行了有益的探索。这些探索被证明是有效而且长期的,只是落实到具体人、具体实践上面,又是被歪嘴和尚念了真经。  阅读全文

posted @ 2008-12-18 13:58 mingj 阅读(3629) | 评论 (6)编辑 收藏

     摘要: 说起 DIP ,大家第一反应肯定是 spring framework,想起“Dependency Injection”(依赖注入)。对 DIP 而言,真是幸也 spring,不幸也 spring。作为 OO 设计开发的重要原则之一,DIP 远远不只是依赖注入模式,重读 Robert Fowler 的《Agile Software Developement:principles,Patterns,and Practices》,就会发现前面的理解只见其表,不见其里——只抓住 DIP 实践的表面形式,而对其背后 OOA & OOD 的深刻涵义视而不见——真是入宝山而空返。本文就将试着分析 DIP 的内外两层涵义,并根据实际的例子分析,给读者增进对面向对象思想的理解。  阅读全文

posted @ 2008-11-02 17:37 mingj 阅读(1836) | 评论 (2)编辑 收藏

     摘要: WEB 应用通常会引入 Session,用来在服务端和客户端之间保存一系列动作/消息的状态,比如网上购物维护 user 登录信息直到 user 退出。在 user 登录后,Session 周期里有很多 action 都需要从 Session 中得到 user,再验证身份权限,或者进行其他的操作:这其中就会涉及到程序去访问 Session属性的问题。传统 Servlet 程序因为使用 Servlet API,从而对 Servlet API产生依赖,不利于 controller 的测试和逻辑复用。本文介绍了四种 Spring2.5 中访问 Session 属性的策略,并从 POJO 化、易于测试和复用、利于属性访问等方面一一分析了每种策略的优点和不足,提供给读者进行评价和选择。  阅读全文

posted @ 2008-10-12 16:57 mingj 阅读(4328) | 评论 (4)编辑 收藏

     摘要: 在开发过程中,我们通常需要mock特定的对象来测试预期行为,或者使用stub对象来提高单元测试效率。最常见的例子就是在多层webapp中,在 controller类的测试方法里mock或stub底层dao类的方法,从而减轻单元测试时数据库操作的开销,加快单元测试速率。至于 Reflection,已不是java的新概念了,各样框架基本上都有使用Reflection来增强Runtime的动态性。而java5里 Reflection效率的提升和annotation的引入,更是极大地提高java语言的动态性,让开发人员得到更多Runtime的灵活性。本文将演示如何使用spring2.5和Reflection简化测试中的mock。  阅读全文

posted @ 2008-09-22 09:58 mingj 阅读(1969) | 评论 (0)编辑 收藏