思维模式决定高度——从推广优秀工具说起

     在年度的优秀软件/方法实践盘点总结推广项目中,和同事CK讨论,我们都认为这事儿的性价比不高。原因有三:
     第一、    我们要重构一些不错的方法/工具课件,需要对工具本身进行深入研究;
     第二、    研究之后,发现每款工具都是博大精深,远远超出我们实际应用的本意;
     第三、    我们试图做成白痴教程,让每一个新人能快速上手应用。

     上述原因,让我们非常绝望。这种方式,可以让一些好的工具快速的让所有的人了解掌握。但是反过来,不可能把一个行业的技术预研、优化、探索的活儿砸在一只团队上。更多的创新、发现,应该在每一个人本身。我们希望每一个人都有自主探索的精神和勇气。

      所以在项目总结时,我忍不住说了一段话:需要额外说明的是,分享是一种精神和理念。比如善用佳软的站长就说过类似的话:分享是提供信息、工具和方法,并不是喂饭到嘴里。我也公司的公共培训课说过:学校里面大家掏钱,针对一门课程学习几十个学时,然后划范围考试,效果还不尽人意;那么,在公司培训中,两个小时的时间,是不可能让你具体掌握一门技术的,它的作用是告诉大家:有一个技术/工具/方法,大概能解决什么问题。如果有兴趣,大家可以研究一二。
工具和分享,必须是在本职工作中,有思考、有分析、有困惑的团队和人,才会有主动性去尝试探索和解决问题,才会看到一些分享后,有拨开云雾,恍然大悟的感觉。

     这个话题引入今天的命题,就是思维模式。

     一、    学习的思维

     2012年,我们提炼了很多好的东西,但是发现要成功的分享下去非常难。比如一些工具,可能涉及了linux、数据库、前端领域。但是每个领域的应用都非常少。这就带来两个问题:


    1.1  跨多学科的解决方案,基本无法有效进行培训推广。
     一个新的工具、方法,往往是横跨几个领域的。这就带来一个现实的问题——需要学习掌握的人员范围内,不太可能找到一个人,同时满足几个知识领域都熟悉的前提条件。
     实际上,这也是招聘的一个最大难点,希望招聘到一个会多个领域技能的人。比如要求懂测试本职工作、会linux、会shell脚本、会TCP/IP、懂数据库。不同领域之间的知识串联起来,就是一道天堑。
     举个例子,你要找个女朋友,要求会做饭、会弹钢琴、会舞蹈、会法语,这就基本没戏了——可参考凤姐的标准。一个一个的子集,求交集,就是这个概念。但是,如果你找个女朋友,要求会做饭,包括四大菜系,法国菜,韩国泡菜,在一个领域里面选择具体的技能,会相对靠谱很多。
     所以,一个跨不同学科的知识点推广,是找不到多少人能直接学习、上手和应用的。如果要推广一个跨学科的工具、方法,必须在某些学科进行预培训,先上几门基础课,才能进行针对这个知识点的有效培训。

     1.2 在多学科的学习中,深度和广度非常难以判断。
     还是上面的例子,比如我们要推广一个新的工具Easy Test。你需要懂一些tcp/ip,需要懂一些正则表达式,懂一些隧道,懂一些录制回放的基本测试脚本方法。

     看起来很深奥?但是每项技能,都仅仅需要你懂一点而已。比如TCP/IP,如果是按照思科推荐的《TCP/IP详解》三卷的看法,可能你看两年还是一知半解,但是你使用这个工具,可能仅仅需要的是几千页专业资料中的十几页,也就意味着,你搞定1%左右,就能顺畅的进行日常工作。同样,懂一些录制回放,对一些人可能感觉非常深奥,如果要彻底的了解这玩意,说不定就要从robot开始上手。但是,你看看各种痴迷于游戏的小学初中生,对按键精灵的使用炉火纯青,他们肯定不懂计算机语言,但是依然不影响他们驾驭一款工具。

     这个问题会困扰很多人,需要学习的东西太多,但是任何一门学科,如果要学有小成,扎扎实实的从零开始,大概需要一两年才行。这很明显和快速学习,快速应用,快速出成绩的工作需求不符合。

     软件开发领域,大家面临的学习和应用模式是这样的:
     一个新的技术点/新的硬件/新的操作系统/新的算法/新的架构,一个团队都需要学习。大致划拉了一下,需要八个学科的知识点,但是肯定不是把八个学科都学通学透,可能每个学科领域只需要千分之一左右的知识量。那么,学习模式是:先大致看看文档资料,然后立刻动手干,然后一路google,一路copy代码,一路试错试过去。

      很多新人面对一个职业,面对很多领域的技能,会非常羡慕老员工,真牛,什么都懂。同时,也会对自己要学习的东西产生恐惧感——这么多东西,什么时候才能学得完?在自己青春年少的时候,学习这么多技术,万一两三年后转行,这心血是不是白费了?

      实际上,这是想多了,这个工作,注定了你会接触到很多的学科领域,但可能一门学科,你只需要掌握1%。你可以理解为这就是熟悉的考试前划范围的桥段,不同的是,这个范围,一部分是老员工、导师给你指定的,一部分是自己在不同的应用模式下,自己划范围给自己的。上面提到的深度和广度的判断,也就是自己给自己划范围的能力。


 同样,你零敲碎打学到的东西,并不一定给你下一份职业能带来什么直接的帮助。正如你一路学习的数学、物理一样,现在可能你只是用来买东西算帐,甚至百位数的加减法都需要借助于计算器,但是依然不影响你十几年的理工科模式,带给你的严谨、周全的思考模式。是的,通过练习,获得的思考模式才是最大的收获。学习是一种实践,你只有通过这么一次次的学习,才能培养出来系统的学习思路和学习方法。


      可以换个领域举例子。比如销售去面对客户,可能你在书本上看到过很多沟通的方法和技巧,但是必须是自己要去面对面的和很多客户沟通交流后,才能达到一个比较圆滑通透的境界。你无法问这么一个问题:这个客户谈不成,对三年后的我有什么影响,有什么好处。但是你肯定知道,当你自己和几百个客户沟通交流过,谈成一些项目,谈崩一些项目……你会对自己的沟通、为人处世具有信心,然后相信自己无论面对什么样的客户,都能很好的沟通,把项目搞定。这就是经过一次次的,无法借鉴的细碎沟通,达到对自己为人处世,情商智商上的升华的目的。翻过来,在技术领域学习各种零碎的知识点也是一样的,可能无法让你直接应用在三年后你的工作岗位,但是学习本身的探索,对思维逻辑,对系统性的提炼,甚至对自我的肯定(老子牛逼,学XX语言也就是三个月的事儿,现在这些新东西,算个球啊),这才是零碎学习背后,本质的提升。    


      所以,针对新人去学习技术类知识,给的三条建议为:


    1、    只学一门学科到非常精深。道理是相通的,一法通,万法明。

      面对庞大的知识体系,千万不要试图每一门学科都学的非常扎实,这不符合职场本身的定律。在自己最喜欢、最擅长的领域,把一门学科学的非常精深,然后你会发现,其他的一些领域,在逻辑、方法论上,多是可以借鉴和互相印证的。所以找准自己的法,学通学透,然后去印证其他的领域,这是最快的学习方法。


     2、    面对其他需要掌握的知识,要培养出划重点的能力。

     在某个项目上需要,那么就拿过来一门学科,圈定30页的范围,边学边用,搞定之后先做项目,不求甚解。在项目过程中,一些疑问点自然会明白,一些疑问点当项目结束之后,你还可能不明白,但是已经没有再深挖细究,搞明白的价值和意义了。


      3、    适应这种学习的模式,提炼出一种学习的思维。

      一个新的东西,大致是什么框架,应该去获取那些相关的知识点,然后按图索骥,一步步去搞定。

     如果养不成这种学习的思维,只是希望有个人/课程,能让自己不动脑子,一路next,一路看图操作,就能搞定一门技术的话,那么,无论多么优秀的工具,都是无法推广成功的。

     看看你身边的一部部大块头,从C++到Python,这些书,我们都叫它为工具书。所以,它,注定不是让你像背诵英文字典一样,生吃硬吞,逐行逐字理解之后,才能干活的。工具书,就是你在码代码的时候,你会时不时的翻开,去查阅,去学习的。

     工作中学以致用的学习,需要的是一门傍身的核心技术,然后自己给自己划范围的主动性学习。



二、    测试的思维

     同样,在测试领域多年,试图教授过很多测试方法,测试概念,从黑盒测试到场景分析,但都收效甚微。很多软性的知识,不是能照本宣科,或者类似学习流水生产线的一道工序一样,能把大多数人培养出来的。痛定思痛,才恍然大悟,实际上这是一种思维逻辑的培养,就好像数学、物理这种学科,通过一个个的定律,反复做各种习题,最后形成的就是理工科相对严谨、缜密的思维模式。

     哲学的终极问题是:你是谁?你从哪里来?你要到哪里去?
     所以,测试工作的终极问题就是:这是什么?这个怎么测试?结果怎么验证?

     所有关于测试的思考、设计,都可以化为这三个问题。
     比如这个命题“地震测试仪器怎么测试”,毫无疑问,实验室是不可能模拟出地震的种种参数的。那么如何进行设计呢?如果有钱,在各板块的异动活跃点设立测试环境,还是干脆,哪里地震了,就带着设备,趁着余震进行,现场的环境存在的时候,进行一些仪器测试?

     所以测试的思维,就应该是抽丝剥茧,设立种种验证方式和检查点,然后确认验证结果的一种思维——如果没有养成这种思维模式,那么再多的测试设计培训,都是无用的。一个是自觉自省的主动性,一个是照猫画虎的被动性。

     网上有很多思维的典型展示,比如《我是如何查到王珞丹地址的?》或者周鸿祎的电话泄密事件等,整体来说,这就是一种系统的思维方法:
      1、    选定目标
      2、    尝试构建几种获取资源的途径
      3、    遍历获取
      4、    不断的总结反思,带入新的逻辑和线索
      5、    找到答案或者靠近答案。

     只有建立起这种思维思考的习惯之后,我们谈到的测试设计才能势如破竹。就好像一个人是天生幽默的人,自然能信手拈来一个个的段子。而如果是反过来,我们一定要让大家死记硬背几种套路,想必是事倍功半的。


     每个领域都有自己的核心技能。在技术领域,毫无疑问,你的系统性思维,决定了你学习新东西的速度,决定你了解决问题的速度,决定了你系统架构的完备性和健壮性,决定了你在自己体系内的高度。


敬请关注我的新浪微博@叁石而厉