用最笨的办法保持领先
-
原文载于先安博客,http://cn.openerp.cn/1222。Joshua建议我转发在这里听听大家的意见。其实主要目的就是忽悠更多人来一起写openerp-china.org的页面
------------------------------------------------------------------------------------------------------------------------------------------
ERP功能繁多,细节琐碎,上手容易,精通难。这是行业的共识。
实际上最终用户只要了解大体流程、熟悉自己每天使用的那几个界面即可。并不需要对整个系统有精深的把握。
顾问就不这么轻松了。人家“雇”你来“问”你问题的,你必须不假思索地回答,而且得答对。顾问不仅要作为老师培训最终用户如何在日常工作中使用,还要根据企业的实际情况对软件现有功能和逻辑做定制。培训要求突出重点,定制要求影响面小。这些都是在熟悉系统前提下才能达到的标准。
OpenERP社区里有很多要成为OpenERP顾问的人,有些企业内部的IT人员也不得不自己承担这个职责(没有实施预算)。那么如何深入掌握OpenERP的方方面面细节从而保障项目实施进度,这是很多人关注的问题。
首先说一个前提,每个人的技术背景不同,思维方式不同,做事习惯不同,所以一个方法不一定适用所有人。
第一步,看资料达到了解。
要了解OpenERP很容易,老肖的书、我录制的10天试用OpenERP系列、官方的OpenERP Book、6.1的Demo视频这些都有助于你了解OpenERP大体是什么样。但掌握这些您只能介绍OpenERP给别人,要实施基本上很难。
第二步,做翻译达到熟悉。
OpenERP有1000个模块,但并不都是常用的。基本上我们现在实施的客户主要还是进销存、财务、项目管理、人力资源、CRM这几块。当然每一块都有一些附加的小模块实现特殊功能,不过抓住主线往往是成功的关键。我在翻译OpenERP中文包的过程中,基本了解了系统自带的169个模块的功能(因为每个界面字段和错误消息都需要翻译)。可以说参与界面中文翻译是最笨但是最有效的熟悉OpenERP功能的方式。经过了这个过程,OpenERP的功能在你脑中就有了一个地图。虽然还没有细化到指导作战,但足够让你有把握回答客户,OpenERP有没有这个功能,这个功能在哪里。作为初级顾问,已经算合格了。
第三步,写wiki达到掌握。
初级顾问主导不了一个项目,还有一个台阶要上。如果说初级顾问脑子里有一张地图,那高级顾问脑子里就要有一本字典。对于OpenERP界面上的每一个字段、按钮,都能解释清楚数据或逻辑从哪里来,要到哪里去。这个字典用到的时候很给力,直接解决误解、困惑和问题。可是写的时候很痛苦,重复性劳动和枯燥的术语,有时可能因为一个点不明确要看两个小时代码,最后落实到字典里只是一句话。用这种方式掌握系统虽然很笨,但是很扎实。就像在地图上插红旗,红旗插满了就胜利了。其实你把地图看几百遍也不如去实地走一下,能映入你脑海的不是那个地名,而是只有那个时间那个地点才有的风景。实际上我们在开始写OpenERP中国社区的wiki之后,也深深感到,自己参与或是等别人写完了再来看,区别很大。别人写好了,那只是一张更详细的地图而已,你看了它你还是初级顾问。只有你新建了这个页面,复制了大量文本作为骨架,经过仔细研究斟酌填满了血肉,你才能说你真正掌握了。而且对你说,这个字典不需要索引(索引是给初级顾问看的),你总是知道用什么关键字来找回这段记忆。
第四步,读源码达到精通。
脑子里有了那本字典,你已经是高级顾问了。遗憾的是,高级顾问是名片上印的,这个行业里最多的就是参差不齐的高级顾问。如何把优秀变成卓越,保持领先?要知其然更要知其所以然,能问出有启发性的扩展问题,才是能力的体现。最后一个笨办法就读源代码。顾问读源代码,听起来有点儿疯狂。这不应该是码农的事情么?实际上,源代码是开源项目的最大资产,我们一直只关注了分发的自由,却没有重视阅读的自由。对于ERP咨询顾问这个行当来说,其他厂商很少为你提供这个机会。所以其他ERP顾问可以背地图、背字典,却无法更深入,深入到加入expert的maillist影响下一个版本的功能设计。在googlecode上逐行注释写上自己的理解并发布出来请技术牛人指正,这本身就是跨界交流的最好方式。为你在项目上提出最优的实现方案打下坚实的基础。更重要的是,源码提供最终答案。你在资料里看到的、在界面上感觉的,不一定是正确的。源代码不会粉饰、无法润色,系统有没有这个功能、功能实现到什么程度、有没有隐含的或是显式的bug,怎么修补或是绕过这个bug,源代码里都有唯一正确的标准答案。
—- 突兀的分割线 —-
[glow=red,2,300]阅读文档、参与翻译、整理wiki、阅读源码[/glow],这是先安员工正在使用的方学习方法。不是什么技巧,相反很慢、很笨,但很有效。希望介绍给其他人共同进步,通过扎扎实实的进步与初学者拉开距离,积累能力为用户创造价值。
当然,笨办法不适合聪明人。其他的路也可以通罗马。是否选择这条路,仍旧是自由的。 -
前几天忽悠ccdos读源代码,没想到它写出一篇23页的读后感,还提出10个问题
我的问题1:Sale_CRM是怎么被自动安装的(反向的依赖关系是如何实现的)?
我的问题2:这里的客户和商店,都是 many2one的字段,为什么 商店不能直接创建?而 客户却可以?
答:在视图(crm_make_sale_view.xml)定义中:,shop_id 被指定了一个 widget=selection,使其为“选择型”,而partnet_id是默认的根据数据类型获得的widget,估计是many2one_list,参见下面网址对widget属性的描述。<br / http://doc.openerp.com/v6.1/developer/03_modules_3.html#field br />
我的问题3: XPATH 怎么定义的?语法?还看不懂
我的问题4: YML 文件的测试数据 怎么玩的?
我的问题5: 按钮是怎么触发打开向导窗口的?
答:按钮的类型type=action, 该类型的按钮触发 name 中定义的action_windows。
这里定义的action_windows 是"%(action_crm_make_sale)d"。
这语法暂不懂,初步理解是 在 其他的视图中定义的 action_crm_make_sale 的实际ID 整型数值在这里替换后
我的问题6: 视图描述中,groups 属性是什么含义?
答:文档没找到说明:根据测试,估计是应用到 用户首选项的 简化界面和扩展界面红。groups="base.group_extended" 的字段,将不会出现在扩展界面中
我的问题7: 这个 section_id 字段的描述中有这样一个属性 domain="[('section_id.user_id','=',uid)]", 数据库中user_id都是空的,此表达式会产生什么效果?
我的问题8 :view_crm_make_sale 里 <group col="4" colspan="4">,这col和colspan是什么区别?
答:(猜想?)col 是分割成4列,而colspan是指将占用4列
我的问题8 :makeOrder 方法的 返回值 return value 是后续动作的定义 ?接下去是指定了另外一个 action ?
我的问题10 :function 类型的字段中,sotre 是如何理解的?
我的问题11 :属性字段(properties fields)和 标准字段(normal fields) 有什么区别 ? 什么场合使用?
答:(猜想)properties fields 的值会随着不同公司不同而变化?
今天YY语音专题讨论