预研工作方法论
预研工作方法论
或许有朋友对题目感兴趣,预研、方法论,感觉貌似风马牛不相及。何为预研,为什么要预研?何为预研的方法论?林林总总,且听我娓娓道来。
一、什么是预研?
预研=预先+研究。在公司的项目开发中,当我们要新增一个功能模块(来自外部竞争对手的迫使、来自客户或市场的需求、来自公司高层的决策等),这个时候我们就需要提前研究下该功能模块的以下几个方面:
1、如何实现新的功能?
执行项目小组会商讨出实现功能的方案1,2,3。方案都具有理论可行性,到具体实操性有待论证,这点也是预研的工作。
2、有哪些难点?(核心)
方案1,2,3在实施的时候的难点,可以在预研的阶段通过“缩小场景”方法指出来。
3、攻破这些难点的方案?(核心)
攻破上述难点,执行小项目会探讨可行的方案。预研阶段就是要论证攻破这些技术难点哪个方案最优,或者如果方案都不可行,说明实施过程中什么原因导致不可行的,并通过已经取得的进制决定工作的下一步方向。
二、预研的特点
新领域:很可能是公司未涉足的新的领域,这块可能是公司高层从上到小都没有人做过。比如,微信的初始创建或许只是知道我们要做一个移动互联网的聊天工具。
新知识:比如笔者第一次接触Lotus Notes,但技术知识的原理具有互通性,这点相信我们技术人员保持强烈的求知欲望都不是问题。
道路的曲折性:我们只能被团队领导告知要实现这个新功能,新的东西大家都没有经验,这时去研究的话很可能会走弯路。但是,有时候弯路会给我们带来“转角”,说不定转角就会遇到新的思路,转角就会带来转机。只是知道,前面不太远的地方有座大山,但是具体如何最近的方式找到去山前的路及爬山的路,可能需要摸索好久,甚至回溯。
举例来讲,IBM的Lotus Notes是企业里应用最多的邮件系统之一,另一个为Microsoft的Exchange。而对于Notes附件压缩这块所应用的压缩算法,从其对应的设置选项里我们能看出默认有LZ1算法,但其另一种压缩算法是什么的,没有官方文档提供,所以这时候只能是猜测。
而对于LZ1及另一种压缩算法是如何实现压缩及解压的,这点由于Lotus Notes不开源,更是无从考证,Google去搜索也都是边边脚脚的资料,不详实、不具体。
上述压缩算法不确定、压缩解压原理不明确,很难通过网上、手头资料去短期猜测或者琢磨透其中的原理,这个时候,我们就需要一个团队集大家所长去研究上述两个难题。
三、预研的形式?
无外乎两种形式:形式一、公司内部抽调人员形成预研小组,形式二、外包给高校(因为高校人员分析的理论能力还是很强的,外包给其他公司也会有的,大多有商业的原因可能会有一定的风险)。
四、预研带来的好处?
预研的摸索看似复杂,但实则是必须的。这是“爬山找路”的过程,是扫清前行障碍的过程,这为后续展开总体设计、详细设计指明了方向。
五、自己体悟的语言的方法论
5.1前期广撒网法
广撒网法针对手头没有具体的资料,不知道如何入手。这个时候需要我们多Google求搜寻,中文资料有的就略过,直接英文关键字查询。当然,越是专业具体的关键词,Google的词条会越少,甚至没有。先略读搜索的链接,如果相关都要细读,看有没有自己想要的。
举例:如开源Samba中rpcclient工具的getncchagnes、getcracknames、getdcinfo的具体使用,有几个参数,每个参数的含义。真的网上几乎不可能找到的。为什么?因为源码都没有说清楚。rpcclient是Samba实现的微软DRSR协议中的部分内容,Samba在rpcclient工具的帮助文档中提及没有官方的文档可参考工具如何使用。这点只能通过阅读源码进行猜测,工作量是很庞大的,开源代码可是基本没有注释的。
当时甚至想到去求助网络,但搜索发现ChinaUnix论坛里几年前就有人问过类似的问题,但无人回复。所以,只能自己去摸索的。
5.2旁敲侧击法
当广撒网法后捞上的不一定都是我们想要的“干货”,这个时候就需要我们有一定的想法去揣测,此路不行,我们可以考虑绕行或者空中飞过或者修地铁过去。或许,从既得的资料中“捞取干货”。即“敲敲”这个行不行,“击击”那个行不行,从这些不行中,思考如何不行?怎么让他能行?
举例:在搜索中无意发现DC之间通信中会产生drsuapi的数据包,这点隐约和自己文档里看到的一致,就引发了后续的再分析。
5.3重点捕鱼法
一旦发现我们需要的线索,就要展开“重点捕鱼”。从相同的地方再去“捞一杆”、“撒一网”,说不定还会有新发现。多试验该道路,往深处“捞一捞”说不定就是可行的的道路。
5.4记录线索法
对于新领域、新知识,不论是搜索还是自己实验、实现的时候,要适时记录下自己发下的线索。说不定某一线索,能引申出其他的新线索。网络搜索有个特点,就是发散。本来看这个问题,但是发现该问题又有其他关键词我不熟悉,又引发你去搜索,这样就可能形成的是“树形”甚至“网状”结构。如果你不停手,很可能就在自己搜索的“大网”或者“森林”里迷失自己,甚至找不到“回家”——回根节点的路。
所以,记下来一是便于自己思路进行串联、回顾;二是,即使迷路,有记录线索就有了“路标”,照样能原路返回。
5.5及时汇报沟通法
项目中我们是团队工作,由于预研的特殊性质,我们可能不能像编码那样有明确的时间进度和具体工作量的要求。由于预研的不确定性,所以需要我们定时的去和团队人员、团队负责人沟通你的想法和你的新的“发现”。让大家共享你的“发现”,这样更便于你去确立NEXT方向,也便于团队纠正你相对偏离的方向,让你在预研前行的路上“不纠结”。
六、预研小结
预研是艰辛的,是极具挑战性的全新的工作,涉及的领域、知识面都是新的。
预研的过程中,有时候你会苦恼,会迷茫,甚至笔者近2周的时间再找到一个突破点并得到团队认可后默许可以下一步,近两周一个问题去论证,“想死的心都有”。
预研要有大胆质疑的精神,不是团队领导的话就是百分百正确的,因为在预研结果没有出来,预研没有明确的方向的时候,可能性都是存在的。你可以去通过自己的预研,去论证思路的可行性,通过自己的“发现”甚至去说明领导思路的不可行性。
但一路走来,你会有丰富的“寻路”、“撒网”、“捕鱼”等的经历,当你再去遇到新的问题的时候,自然有多了方法,多了思考,终归是利大于弊的。
以上是笔者自己的见解,所谓“方法论”无非是笔者自己走过的路与思考,不要纠结于上述名称,从实践中寻得的真知更为珍贵。
笔者NEXT还有预研的很长的路要走……
2013-9-28 11:33 思于家中床前