本文更新版本已挪至 http://www.zhoujingen.cn/blog/1748.html
------------------------------
作为技术人员,经常遇到没有接触过的技术,有时是点滴的小技能,有时可能是大的一个研究课题。在《个人管理 - 从小工到专家》中有一个复用级别的图,其中每一级别都是需要研究的,复用粒度越大的需要投入研究的越多,那么我们如何进行技术研究呢?本篇我将分为两个小节来讲,第一节从一本书籍讲起,第二节从我做的报表引擎过程中的心得来总结,希望对正在或者即将要进行技术研究的读者有所帮助。
像外行一样思考,像专家一样实践
日本的金出武雄先生在《像外行一样思考,像专家一样实践》一书中,用浅显易懂的语言传达了他在科研领域的一些经验,值得我们学习。像外行一样思考,像专家一样实践指的是我们进行最初的设想时只要像普通人那样进行一般的思考就可以了,但是一旦确定了想法,真正要做的话,就要像专家一样缜密、彻底的进行调查和研究,将其实现从现状出发,进行逻辑推理,最终去下结论和实现。最近有好几个人问我同一个问题,每次看别人的东西总是习惯于在还不知道如何使用时就会不自主的深入到思考别人如何实现上,这种在考虑问题时总是从细节(也就是“专家“的角度)着手,这样会导致学习效果很差,所以我们需要学会抽象,不然就会困在细节之中。
在我做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) 整个实现架构的确认和规范
b) 领域特定语言的确认和规范
c) 配置知识的规范
3. 领域实现(DSL、产生器和实现组件的实现)
4. 领域测试
推荐:你可能需要的在线电子书
我的微博:http://weibo.com/openexpressapp
敏捷个人sina围裙:http://q.t.sina.com.cn/135484
欢迎转载,转载请注明:转载自敏捷个人网站