从设计模式开始,已经有很多人尝试总结了各方个面的很多模式。不管是写的人多,读的人也多。甚至考的人也多。数年前去IBM面试实习生,Mentor问我的问题就是知道什么是Visitor模式不。但是模式为什么出现,这些牛人为什么花这么多时间精力去讨论,去总结,我还是最近才开始有所领悟。
事情的起源是公司内部的一些讨论。我们公司(ThoughtWorks)是做敏捷咨询的。很多咨询师都是非常有经验的开发人员,但是做开发有经验未必做咨询有经验。在国内做过几个大的咨询项目之后,不少同事都有一些咨询方面的经验收获。个人都想做一些总结,以帮助咨询经验不多的后加入者。领导层也非常支持,觉得这个事情非常好。
我想很多人都有类似的“文档化经验”的想法吧。但是这种事情一旦落实到如何去做的时候,就争议颇多。有人就建议,不如来一个工作手册。把第一天做什么,第二天做什么都写下来。此论一出立马引来非常多的反对。反对的意见是非常有道理的,如果按照这样的做法做下去,只会有两个结果。要么,实践者变得僵化,没法给客户提供他们真正要的价值。要么,按照手册去做解决不了客户的问题,客户下次就不请我们了。总之,这种记录“我们过去是怎么做”的东西都觉得没什么用。大家最常提的一个说法就是,“每个地方的情况都不一样”。
既然这种包含太多工作细节的工作手册不行,那么我就来个Check List吧。把咨询中能够用到的工具都列出来。比如说,团队访谈,比如说,复盘。这个说法呢,大家都觉得行。至少在研究问题的时候可以把Check List看看。这种做法其实是效仿XP。极限编程其实就是一个Check List,包含了各种有用的Best Practices。这种做法又很类似Pattern,包含了各种各样的经典的应对之策。
所以模式是什么?模式就是一种“记录经验”的工具。无数前辈大拿觉得自己有经验可以和整个行业共享,他们选择的方式就是模式。但是,模式在实际的应用效果中是并不尽人意的。最主要的问题就是模式的误用。而这种误用的根源,我觉得就是他们的名字。模式本身的内涵是非常丰富的,完整的模式包括Context,Solution, Forces, Resulting Context。但是统领所有内容的标题却只是Solution。这样就容易让人只记住Solution,而忘记了它所适用的场合。或者因为不是完全理解适用的场合,而在适合的场合错过了应用模式的机会。
另外一个缺点是模式的整理不是按问题分类。经常我们会发现,对同一个问题,其实有好几个适合的模式。比如,提供了一个扩展点,我们既可以用Template Method,也可以用Strategy。但是由于模式是按照解决方案分类的,这样就没法对问题进入深入的讨论。而我们在应用模式的时候,首先面对的是手上的问题。从问题,到解决方案,这才是真正的经验所在。而模式本来的意图就是“记录经验”,却把这经验最重要的一部分没整理好。并不能说模式没有包含这一块的内容,好的模式书都有对什么问题适合什么模式的深入讨论。只是问题出在了整理方式上。
James Coplien经常强调一个Pattern Language。其实就是尝试把Pattern按照其服务的Context组织成一个Language。有点把模式按照问题组织起来的意识。但是他归纳的Pattern Language都比较高层,比如说Organization Construction Pattern Language。但是我觉得对于具体问题更好。比如说,项目上要培养新人怎么办?这个时候就可以去比较DayCare和PairProgramming这些组织模式在处理这个问题上的适用性。
所以我觉得很多模式,都应该按照所处理的问题做一个重新的整理。整理出来的结果就是一个“问题清单”。我觉得这比“模式清单”要有用的多。即便这个问题清单不去写解决方案,光是深入地讨论这些问题就非常的有价值。问题分为两类,一种是错误,那么我们可以“有则改之,无则加勉”;另外一种是常见的挑战,那么我们可以在真正遇到的时候敏锐地发觉我们已经有前人的经验可以利用了。
虽然这似乎只是认识上一小步进步。但是让我却非常激动:)最近对组织模式非常感兴趣。下一篇就从问题入手,尝试把组织模式给重新整理一下。Oh了。
分享到:
相关推荐
参观者在展览会上的学习和创新行为也反映出展览的基本功能之一:交流和传播信息。 本文基于国内外关于展览知识传播的研究文献,运用SEM来建立参观者学习与创新行为的模型。 以深圳机械展览会为例,验证了模型中路径...
这是策略模式中的一个经典实例,通过鸭子问题,能让学习者更好的了解设计模式,这也是headfirst 设计模式中用的经典实例
3. 了解面向对象设计要解决的问题是什么 4. 记住面向对象七大设计原则是哪些 5. 掌握七大设计原则都解决了什么问题 6. 掌握简单工厂模式 7. 掌握工厂方法模式 8. 掌握抽象工厂模式 9. 掌握原型模式 10. 掌握构建者...
让编程初学者能以可视化这种低门槛的方式,了解各个设计模式的概念与适用于解决的问题,激发用户学习兴趣,并为之后良好的编程习惯打下基础。 1. 系统基本功能与流程 1.1 功能要求 1.1.1 基本功能 学生前台页面 用户...
学习网络运营模式深入解析-让你了解电子商务核心基础.ppt
对于那些具有丰富的开发经验的开发人员,学习设计模式有助于了解在软件开发过程中所面临的问题的最佳解决方案;对于那些经验不足的开发人员,学习设计模式有助于通过一种简单快捷的方式来学习软件设计。
而且,争取的学习方法也不是了解所有的设计模式就可以无敌于天下。我所强调的学习方法就是在熟练掌握基本要素的基础上,了解大致的框架。这一条不仅是学习类库的方法,对设计模式来说是可行的。同时,切记的是在平时...
让编程初学者能以可视化这种低门槛的方式,了解各个设计模式的概念与适用于解决的问题,激发用户学习兴趣,并为之后良好的编程习惯打下基础。 1. 系统基本功能与流程 1.1 功能要求 1.1.1 基本功能 学生前台页面 用户...
通过深度学习了解少量模式光纤中的模式
希望对设计模式有所了解和深入研究的都适用,可以结合 HEADFIRST设计模式 学习 ,加深了解! http://download.csdn.net/source/1355480
其经验已经证明,如果能够理解模式后面的基本原则和动机,理解为什么它们会这样运作,那么将有助于你加速学习模式的进程。 阅读本书,读者能够完整地理解12个核心的设计模式和1个分析模式,了解设计模式并不是孤立...
微课学习,适合才接触web开发的学生,了解什么是B/S模式和C/S模式,对比B/S模式与C/S之间的不同。
目的:探讨基于Web问题的学习模式在外科教学中的应用,以更好地探索和研究外科教学模式。 方法:采用随机表编号法对右江民族医科大学学生和教师所选择的对象进行问卷调查。 结果:大多数教师了解WPBL教学模式,并...
J2EE学习以及Linux组件学习的日常总结,适合想了解和温习基础知识的童鞋。目前计划包含的内容有设计模式、Spri
学习C#,了解C#的设计模式 ,让你轻轻松松的学习C# 更好的学习C# 真正的变成高手
事实上,我们可能很多情况下都是在不了解设计模式或者了解的不多的情况下作为程序员工作了多年。也在不经意间实现了一些设计模式。 那么我们为什么还要学习设计模式? 一方面,设计模式教我们如何使用面向对象...
中科院的研究员写的模式识别的研究进展,大家可以看一下,了解一下,对模式识别有个基本的认识
本课程为控制科学与工程学科研究生...通过本课程的学习,希望学生能了解模式识别基础理论和方法,了解模式识别和机器学习最新研究成果,掌握基本思想和关键技术,培养学生在模式识别及其应用领域的研究和技术开发能力。
本书开创性地深入揭示了重构与模式这两种软件开发...通过本书,读者不仅能够更好地学习和理解模式和重构,了解两个领域的新进展和业界最新领悟,还能够学到实战中实现模式的多种方式,学会如何在不同情况下进行选择。