101与金根回顾敏捷个人:(17)技术研究之道
作为技术人员经常遇到没有接触过的技术有时是点滴的小技能有时可能是大的一个研究课题。在《个人管理 从小工到专家》中有一个复用级别的图其中每一级别都是需要研究的复用粒度越大的需要投入研究的越多那么我们如何进行技术研究呢本篇我将分为两个小节来讲第一节从一本书籍讲起第二节从我做的报表引擎过程中的心得来总结希望对正在或者即将要进行技术研究的读者有所帮助。像外行一样思考像专家一样实践编辑 日本的金出武雄先生在《像外行一样思考像专家一样实践》一书中用浅显易懂的语言传达了他在科研领域的一些经验值得我们学习。像外行一样思考像专家一样实践指的是我们进行最初的设想时只要像普通人那样进行一般的思考就可以了但是一旦确定了想法真正要做的话就要像专家一样缜密、彻底的进行调查和研究将其实现从现状出发进行逻辑推理最终去下结论和实现。最近有好几个人问我同一个问题每次看别人的东西总是习惯于在还不知道如何使用时就会不自主的深入到思考别人如何实现上这种在考虑问题时总是从细节也就是“专家“的角度着手这样会导致学习效果很差所以我们需要学会抽象不然就会困在细节之中。在我做OpenExpressApp时就借鉴了这个思路先不以目前所拥有的技术为前提去看待问题而是从希望最终能做成什么样子的终点作为我的开始在学习的过程中不去考虑具体实现更多的从使用方式去看当我对最终的结果有所了解后才开始像技术专家一样去考虑实现。这其实也就是以终为始也是《高效能人士的七个习惯》中的一个要点。这本书是我几年前看的具体的忘记了下面只说一些还记得的相关内容可能和书中不一样对原著感兴趣的可以去看原书理论越是适用于简单、抽象的问题越具有价值KISS(KeppitSimple,Stupid)原则正是我们像外行一样思考的基本原则。当自己都觉得不简单时就需要考虑加深自己的理解并考虑如何更抽象简化一下在解决问题时能准确地限定问题的关键点将会非常有效。这点很重要在《架构 又一个类似与“平台”一样的词汇》中我说过架构要做到关注点分离也就是需要把主要问题考虑出来并进行关注点分离。锤炼构想的方法就是跟他人交流在交流中进行验证。交流方式有很多种直接和身边人沟通、上技术论坛交流、使用别人的软件看别人如何做的等解决问题的两大必要条件首先要有好的思路如果方向不对再怎么努力也无法到达目的地同时扎实的基础、毅力、效率也是非常重要的否则就只能是空中楼阁、纸上谈兵。我在这里说的方向不是说你的想法思路必须进行严格的验证而是指研究人员在做研究之前至少需要明确目标并对自己的研究结果有信心。解决问题的阶段独创不是灵光闪现出来的而应该是经过长时间的思考最终得出的结果。我们不能指望刚进行研究就出结果而应该以持续的努力去做研究。描绘问题仔细、反复地思考问题是怎么产生的多问几个why从什么地方入手最容易得出答案试用第三方成熟软件是一个我认为非常好的途径。广泛收集材料打好解决问题的基础。对问题进行归类对于与问题本质无关的可以暂时不考虑。培养解决问题的基本能力从简单入手逐步提高自己解决问题的能力由浅入深长时期的关注会让问题越来越简单。增强解决问题的能力多做尝试多找些问题来试慢慢深入问题逐渐提高解决问题的能力要像缠绕细铜丝一样一圈一圈慢慢缠绕才能形成铜线圈。提高能力的过程是不能中断的一旦停止已经积累起来的能力就会土崩瓦解。知觉、思考、行动都源于“经过理解的记忆”如果我们把他人长时间研究得出的成果总结记忆下来不仅高效便捷也能为自身的思考打下坚实的基础。培养思考能力是养成“像外行一样思考”的必经之路记忆与反复学习是“像专家一样实践”的力量源泉。思考的重点是创意而不是因循守旧要敢于去构想大胆假设很多荒诞无稽的想法往往确实新的科学真理的起点。对于解决问题我们首先需要的是构想方案然后才是去论证构想的正取性这样才可能出现新思维和创新。就像OpenExpressApp一样我的目标就是让业务人员可以做出基线产品来通过业务工程来提高产品质量和开发速度这些在有的人看来觉得比较难但我觉得只是时间问题而已。在实践过程中我也不是一次性的就开始进行OpenExpressApp的开发而是利用机会逐步实践各个关注点如报表和AutoUI等技术都是在不同项目组中进行验证的。一切速成的方法都是外行的词语而不是专家的实践方法实践需要的是日积月累像专家一样实践不仅仅是为了解决你遇到的问题和构想更多的是不断的去提高解决问题能力提高我们的分析能力和思维能力。只有意识到实践应该像专家一样你才可能感受到自己知识和技能的微不足道才能促使自己不断去完善自己的知识。思考需要的是像外行一样的广度而实践需要的是像专家一样的深度。在《个人管理 从小工到专家》中我也说过在很多情况下将自己定位在一个更高的层次上去看问题要把自己的视野拓宽做事时要回归应有的定位。不能把研究工作当作一件很严肃的事情应该把它当作一件有趣的事情去做。这里说的有趣是指精神上的放松但内心仍然要认真对待。这点其实很重要我也深有体会因为只有你觉得有趣你才会容易坚持否则苦的是你自己。表达自己的想法、说服别人实践、国际化时代的讲演、会话、写作能力这部分内容后面我会单独介绍。外行不关注实现的难度关注的是目的和要求像外行一样思考不仅是创新的一种途径也是保证现有工作更有价值的一个保障所以当技术人员面对需求人员提出的很多问题时不要立马去反对别人而应该以赞赏的眼光去看别人。 而专家目标远大做事严谨技术人员都要力争专家对具体实现严谨最终能不能作是一回事但是对待外行的意见应该是赞赏的而不是对立的。像外行一样思考像专家一样实践这句话说起来很简单但是做起来很难。我们的很多工作中可能是反着来的是向专家一样思考、像外行一样实践考虑问题时什么因素都考虑最终可能实现的也不做了真正决定要做的到执行时又没有做得卓越。如何将这句口号落实到现实其实也是有一些方法论的《六顶思考帽》等水平思考方式就不错。虽然对六顶思考帽接触和应用还很少但后期我还是打算先提高介绍给大家一起学习。从报表研究想到在很多情况下将自己定位在一个更高的层次上去看问题要把自己的视野拓宽做事时要回归应有的定位。在2006年时研究过一阵子平台第一期任务主要是做报表自认为这个工作做得还是自己很满意的。在2007年时也给大家分享了一下我的研究方法感觉这些方法正好和本篇blog主题吻合所以在这里就把他粘出来和大家分享一下。如果上面小节像外行一样思考像专家一样实践是理解作者的见解那下面的就全是我个人的心得。学习为什么要学习why学历代表过去经验代表现在学习能力代表未来学什么what学以致用怎么学How高胖高先深度再广度再深度依次螺旋。只要认定what是好的可以通过主动、被动、强迫三种方式去学习。方法选择研究重点先从架构角度 分离关注点分人或者迭代进行研究重点重点研究选择对决定后的选择 进行重点研究从案例、产品、模型、应用等多个角度去考虑这些重点验证实践选择考虑如实现和应用这些重点心得业务驱动技术、技术带动业务合理使用现有资源不要重复发明轮子借鉴专业软件公司产品开发适合公司的产品。在对新技术进行实践过程中最好采用迭代的方法快速看到能运行的程序可以更好的进行产品管理并增加自己的信心适当的文档工作能够帮助理清思路开发活动大纲在《软件观点 软件工厂方法》和《软件工厂方法(二软件工厂应用》中提到过领域工程开发的大体活动大纲是借用《产生式编程》中方法方法大致如下1. 领域分析a) 领域定义i. 目标和风险承担者分析。此活动的工作量依赖于项目的大小和上下文。ii.领域范围界定和上下文分析1.应用领域和现有系统的分析2.领域特征的确定3.与其他领域关系的确定b) 领域建模i. 关键概念的确定ii. 关键概念的特征建模共同点、可变性、特征依赖和特征交互2. 领域设计a) 整个实现架构的确认和规范