PRE学习法之应用实例-数学学习

发表于十二月 13, 2018

最近有点迷上了数学。

 

说实话,以前十几年的求学生涯里,从未觉得数学如此有趣过。这次只是为了重温一下大学的微积分知识,短短的一个多月的时间里,为什么会有如此的“学习效果”呢?

 

答案是:现在的我【会】学习了。

 

从十几年的工作中总结出一套行之有效的PRE学习方法(P-PracticeR-ReflectE-Explicate),它让我在想学习任何东西的时候无所畏惧、让我在学习任何东西的过程中更加有效和高效,总是能收获一些因学习而带来的小成就和小惊喜。

 

虽然这次数学探索之旅尚未结束,本文也想分享一些我遇到的与PRE有关的点点滴滴,其实感悟非常多,无法一一详述,就从里面挑选两个点聊一聊吧:TTN树型笔记和Insight洞察力。

 

一、TTN树型笔记

学习的过程中,免不了要记笔记,TTN树型笔记(TTN - Tree-Type Notes)总是我的首选。

 

1. 局部式TTN

一类TTN是通常意义的、局部式的树型笔记,记录一次具体的探索或学习之旅,例如我把每一章或几个章节的要点记录为一棵树,这样,一本67百页的书籍对我来说就变成了不到10页的A4纸,变成了一颗颗知识树。

 

 

而且这次在实践TTN的过程中,深刻体会到“图形”的魅力。对很多知识或概念的理解上,图形要比文字形象太多,也更容易记忆。

 

这些树型笔记的另一大用途就是帮我做必要的“复盘”。由于整个学习的过程持续较久,并且是间断式地行进,有时会中断数天的时间,每次当我试图重新接续起来的时候(就像很多人工作中的那种任务切换一样),TTN总是能够使我快速而平滑地完成这个过渡,只要对照我的笔记,稍微花一些时间,就能把前后内容连贯起来了。

 

其实,此前我经常提到的KYM,TCO等思维导图笔记,也都具有同样的作用,每当一个新人加入项目中,KYM,TCO, TTN这些笔记都可以帮助新人快速有效地了解产品和项目。

 

2. 全局式TTN

 

另一类树型笔记算是我这次新的收获吧,我称之为全局式的TTN。这要先从这次数学学习的背景谈起。

 

简单来说就是,看到所有人都在大谈AI的时候,我也想了解一下。于是找来一些资料开始学习。我知道,所有前辈都会对初学者说,你得具备一定的数学基础,比如矩阵论、概率统计、微积分学等等。

 

注意,这个时候,就需要做决策了- 当你准备要开启一段学习之旅的时候,就要时刻准备着做各种大大小小的决策,这也是检验你自我管理能力Self-Management Ability)的时候。

 

作为一个有经验的测试人员,我的决策自然是“先去Try”,沿着AI这条主干路前进,这主要是基于这样的认知:

- 我大学时高等数学成绩不赖;

- 对于网络上的这些“忠告”持有测试人员天然的怀疑态度;

- 对于AI与数学的关系究竟有多紧密,我还没有清晰的认识,先探索一下再说。

 

可是不久,我就发现我需要update my strategy了,我需要暂停主干的学习,开启一个分支来学习数学。如果你很好奇我是如何知晓什么时候应该进行什么样的策略更新的?告诉你一个简单有效的方法- 我在软件测试中经常这么干- 关注你的feeling,你的感觉会告诉你答案,而你要做的就是抓住你的感觉,别让它溜走(就像我总是在告诉测试人员抓住你的feeling,别让bug溜走一样)。

 

“感觉”这个东西很神奇,它是针对不同上下文中的不同的人的,我有的feeling你未必会有,所以在探索的道路上,决策无所谓对或错,只要你持续地改进和优化你的探索过程,就是最好的探索(BTWcontinuously optimizing your exploration process也是Self-Management的一个重要内容)。

 

看过一些AI的资料后,我发现数学无所不在,而且涉及的深度和广度都不小,同时也发现自己的数学知识几乎忘得差不多了,哪怕是在看懂别人的推演过程和证明过程方面也甚觉吃力,这让我觉得有些“不爽”。终于,当这种“不爽”的feeling一次次地袭来的时候,我决定还是先专门地补习一下数学知识吧。

 

以上记述了这么多,其实只描述了这个全局TTN的一个决策点而已,在整个学习和探索的过程中,我的大脑会时不时地停下来思考每一个决策点,虽然我没有把这颗TTN探索树显式地画出来(是的,只要你有TTN的思维,你可以不必每次都真的画出一颗TTN树来,我把这个叫做Mental TTN),可是我知道,它一直都在我的大脑中,遥控着整个学习过程,把握着那些关键的点和方向,比如:

 

- 是否要开启一个新的分支的学习?

- 遇到obstacle或问题时,是跳过还是攻克它?

- 针对当前这个点,学习的深度和广度如何决策?(这个对我来说是最难的,任何一个小的知识点,想学到一定程度,都是需要花费大量的时间,而我偏偏对很多点都非常感兴趣,这时候我会发现我最最最缺少的就是时间!)

- 怎样选择适合自己当前学习目的的资料?

 

下图是我简要地试着把上面讲的这个决策点TTN的形式表达出来的样子:


 

 

全局式TTN的好处是很明显的:

- 它让你不会迷失在局部,能够在focused thinkingdefocused thinking中寻找平衡。比如我虽然当下在学习数学,而且随着学习的愈发深入,我发现越来越多自己感兴趣的东西,找到愈来愈多的书籍和资料,可是同时我也在提醒自己,我还处在“数学”这个分支上,需要适当的时候回到主干以取得平衡,这在测试中有个专门的词,叫做“branching and back-tracking”。

- 它会助力你的Self-Management。我在平时的coachingtraining中接触的测试人员比较多,发现大多数人缺少的就是这个自我管理能力。为什么大家会觉得如果不按照测试用例按部就班的测试就无所适从?让测试人员自由去探索反倒觉得很难?不知如何让自己的测试过程更高效和有效?这些都与探索过程中的自我管理能力缺失有关。

 

Self-Management是一种通用的技能,是PRE学习法中很重要的部分:

- Practice的探索实践中需要自我管理能力,让表面上看起来随意散漫的探索过程可以变成Highly efficient and controlled process

- Reflect的反思过程中需要自我管理能力,让探索者自己知道什么时候该投入多少精力以什么样的形式做什么样的思考,洞察力往往就在这个过程中产生;-Explicate的总结和明晰化的过程中需要自我管理能力,让知识可以相互融合、碰撞,让知识得以沉淀和提炼,并继而引发创新和为下一轮的PRE循环做好准备。

 

二、Insight洞察力

接下来想谈谈洞察力。

 

我之所以能够从这次“偶然的”重温数学的过程中发现之前十几年的学习中都没有发现的“数学之趣”,与洞察力密不可分。获得一个又一个大大小小的洞察力,是PRE学习法的目标所在,因为洞察力是帮助人们不断地建立信心、收获学习带来的成功和喜悦的窍门所在。

 

在个人的学习的旅途中,洞察力可大可小,也不必一谈到洞察力就必是了不起的发现或发明,它可能仅仅是你学习路途中收获的一粒石子,但却会给你带来少许的喜悦和不一样的感悟。不同的工作中都会涉及到各种各样的洞察力,比如对软件测试人员来说,发现别人不知道的bug就是一种洞察力,我会在海盗派测试课程中的DRS(缺陷相关的技能)中重点讲述如何提升发现bug的洞察力。

 

本次数学探索之旅截止到目前我还是收获不少感悟和洞察的,无法逐一赘述,也是挑选两个点稍加分享吧。

 

1. Heuristics启发式

我在软件测试中广泛使用各种启发式的方法,尤其是引导词启发式方法Guideword Heuristics,提炼精髓又方便记忆,这些Heuristics有的是别人发明的,有的是我自创的,比如我提出的KYMKnowYour Mission),里面包含了多种多样的针对被测对象和测试任务上下文的提问,有的人可能觉得内容太多、眼花缭乱,其实你只要掌握了CPPM这四个字母就可以将KYM运用自如了,CPPM就是分别从CustomerProductProjectMission这几个方面展开探寻。

 

得益于Heuristics给我带来的巨大好处,我在各种学习和探索中,总是会不经意地运用Heuristics这个小技巧。

 

虽然数学中总是充满了各种各样的公式和定理需要记忆,不过很多东西都是可以在其他知识的基础上推导而来的,而这个推导的过程总是更令我着迷,我会试着去演练这个推导的过程,这样我需要记忆的东西就不必那么多了。不过,仍然有一些基础的知识点,最好是牢牢地记下来,尤其是对于那些总是容易引起混淆的知识点,就更需要一些好的Heuristics来帮助记忆了

 

比如,经常需要判断各个三角函数在各个象限中的正负性,当然,简单地在头脑中画出一个坐标系,稍加思考,很容易判断出结果。不过如果你能应用“ASTC”这个Heuristic,就更加快捷了:这四个字母分别代表从第一象限到第四象限,取值为正的三角函数,A-All,第一象限均为正;S-Sin,第二象限正弦为正;T-Tan,第三象限正切为正;C-Cos,第四象限余弦为正。(可惜的是我上学的时候没有人告诉我这个ASTC Heuristic。)

 

 

其实,数学发展到现在,很多解题方法都是很成熟的,书本上或者网站里都有大量的介绍解题技巧的内容,比如如何求极限、如何画出函数的图像、如何求极值、如何求导、如何求积分、如何判断敛散性等,你可以把这些都当作是Heuristics- 需要用的时候能够作为参考。需要强调的是,一定要辨别使用。使用Heuristics方法最忌讳的就是不加辨别地简单遵循地去使用,正确的做法是:Apply Heuristics, not follow them

 

比如我看到一个帖子“极限计算的21种主要方法”,里面用82个例题列举了21种求极限的方法,我全部做过一遍之后,发现这个所谓的21种方法可以分为这么三类:

- 常规的广为熟知的求极限的方法,这类方法我无需特别记忆,因为太熟悉了,比如洛必达法则、“分子分母有理化”;

- 有一些我自然就会尝试和使用的做法,把这些也归为一种特别的“方法”有些牵强,所以我也不必特别关注,比如“直接代入法”、“概念判断法A-有界函数乘以无穷小等于零”;

- 还有极少数的方法(或者某个方法里面的一个小点)是我之前可能没有注意到的,这个需要特别留意一下即可,比如“重要极限法”,需要记住一些重要的极限。

 

你看这样拆解下来,基本上需要额外记忆的东西就不多了。我是花了前后陆陆续续34天的时间才把这82个题目做完,从而完成上述这个拆解过程的,现在却发现这所谓的21种求解极限的方法对我来说意义不大。那是否意味着,我这几天几乎没有什么收获了呢?对于善于学习的人来说,每当全身心地投入一件事情的时候,想要毫无收获其实是件很困难的事儿。

 

实际上,我从这82个题目中收获了几个疑问点(尚待解决的)和两个Heuristics

 

1. 一个是反正切的两角和公式:arctan(A)+arctan(B)=arctan[(A+B)/1-AB]

 

我是在做一道包含两个反正切函数的和的题目中发现这个小的Heuristic的,乍一看题目好像没有头绪,但是稍加推导就得出这个公式了。也许别人早就提出过,不过至少在我的记忆中没有特别的印象,因为之前看到的大多是三角函数的各种恒等式,包括那个两角和的正切公式,貌似很少涉及反三角函数的公式,Anyway,是谁提出的这并不重要,重要的是在我的知识体系中我特别留意到了一个之前忽略的“点”。然后我想,那么其他的sincos的两角和公式是否也有对应的反函数的公式呢,经过一番探索发现不大可能,原因是两角和的正切公式比较特殊,只涉及到正切函数,故而可以反向推导,这的确是个有趣的现象,至于它对我有什么用,我不知道,总之它给我留下了一个不一样的feeling,我的大脑里会为此留一下一个特别的记忆,将来是否能用得上,Who knows

 

2. 另一个是一张图,是的,图形有时候也可以当作非常好的Heuristic

 

我是在做这82到题目的过程中,渐渐地发现这张Heuristic图的。

 

 

x=0附近,这些函数都是彼此互为渐进线的,也就是说,当x-->0f(x)~x,或者说,这些函数与y=x的比值的极限为1。这些重要的极限关系都是分散在书的不同章节介绍的,我没有看到集中在一处讲解,这让我感到有些奇怪!Anyway,我觉得有必要把它们都画在一处,然后在头脑里加深印象,因为在解题中经常需要用到它。

 

并且,当我们把图像画出来后,就会发现,当0<x<1时,这几个函数都是递增的,但是显然对数函数增长最慢,多项式函数居中,指数函数增长最快:ln(x+1)<sin(x)<x <tan(x)<ex.

 

可是,这些和PRE学习法究竟有什么关系呢?

 

如果仔细回忆发现这两个Heuristics的过程,就会发现,这实在是走过了一个标准的PRE循环呢!

 

首先,解题的这几天显然是在Practice了,其中涉及的具体的Practice的技巧和方法这里就略过了。

 

其次,重点说说Reflection部分。一个很重要的发现洞察力的方法就是留意“change”,留意各种存在“difference”的地方。比如这个反正切的两角和公式,这对我来说是个很不同的点,因为以前的经历中并未对此留意,所以这引起了我的feeling(可能更多是好奇吧),然后顺着这个好奇的feeling探索一番,我走过了一条被我称之为“Association”的道路,让我把这个新的change与我大脑中已有的知识点“正切的两角和公式”关联了起来,去体味二者之间的联系,最终发现这个Heuristic,经过这样的一番探索,对这个知识点记忆也更加深刻了。

 

再比如,针对上述这张Heuristic图,我走过了一条被我称之为“Regular Events”的道路,因为在解题的过程中,我频繁地有一种“似曾相识”的feeling,终于决定停下来,仔细探索一番,把所有关联的信息汇总到一起,最终成就了这张图。

 

最后,现在写下这篇文章的时候,也是我把学到的东西Explicate的过程,这一步对我而言也要借助于Feeling- 什么时候该停下学习和工作的脚步,进行一番总结呢?我的feeling会告诉我答案。一开始的时候,虽然有些收获,但my feeling = lazy,于是我迟迟不肯动笔;可是当有所感悟的“点”累计到一定程度的时候,my feeling = nervous,我愈发感觉到再不停下来仔细思考总结一番,可能部分“点”就离我而去了,或者这些“点”一直散落在各处让我觉得很杂乱,总之当我感觉有点心虚、慌乱的时候,我知道必须停下来,写点什么了(或者是blog或者是个人的学习笔记),而由于人懒惰的特性,即使现在写下来,文字也仅仅能体现所有真实感悟的十之一二而已。

 

现在不妨回想一下我在中学或大学学习数学的时候,是什么样的情景?有没有这样的PREcycle呢?题目倒是做了不少,对知识的吸收也是有的,可是那仿佛更多靠的是题海战术,是一种典型的Bottom-Up Learning,成长更多地是在长时间的实践中自然累积起来的,比较缓慢;另外教科书式的教学,构成了另外一个方向的Top-Down Learning,学什么、学多深,都由教师决定,很少自主独立思考;分数也可以考得很高,这当然是好事,说明基础打得牢一些,可是只是从“会做题”的层面,知其结论,未必知其原理,更别提思考一些深度而有趣的问题了,这样的学习方式,若能激发对数学的兴趣,着实难也!

 

PRE的学习方式与此完全不同,它是一种Mindful Learning,需要学习者时时刻刻以主动的心态、积极思考和实践来完成的。会PRE    学习法的人,无论做什么工作、学习什么东西,都会主动、积极地尝试从中学到什么东西以提升自己,会把学习和工作的过程转换为一个又一个PREcycle而乐在其中;不会学习的人,实践过后学习过程也结束了:做过一道道题目就是过去了,完成一次测试就是完成了,没有stopand think,不擅长捕捉自己的feeling,不会留意过程中的一个个change,不知晓一条条通往Insight的道路,不懂得如何有效和高效地探索,最终与一个个可能的Insight擦肩而过也就不足为奇了。

 

关于洞察力,之前看过的一张很经典的图,一直记忆深刻。

 

不论我们所获得的Insight多么微小,它都不是浮在表面可以被每个人轻而易举看到的东西,它必是需要经过一番努力、探索和思考才能被获取的东西。毫不夸张地说,我在学习数学时,书里面的每一个定理都是前人经过大量的探索而获得的Insight甚至是Wisdom但这并不代表着,当我了解了这个定理后,我也收获了相应的Insight!这些定理和公式,充其量,与我而言,只是一些零散的Data而已。是PRE学习法帮助我从零散的Data,一步步吸纳为Information,与我的Knowledge体系结合起来,再引发一些Insight

 

学习数学如此,做各种工作也是如此。比如对测试人员来说,开始接触一个新的特性的时候,可能会阅读大量的文档、开各种各样的会议,这其实是在吸收大量的Data,如果测试人员自身缺乏将这些Data整理、吸收、一步步消化为知识和洞察力的能力,是不可能有好的测试结果的,因为我们知道,这个数据吸收转换为信息、知识和洞察力的过程,这个不断地收集、整理、吸纳、转换信息的过程在测试中是持续存在着的。

 

2. Triple-Loop Learning三环式学习

当我应用PRE学习法的时候,会有无数个PRE cycles发生,正是这些一个个的PRE小循环促使我不断提升。如果仔细审视这些PRE小循环,会发现它们帮助我提升的方面是有所不同的,大致可以划分为三个方面,我把它叫做三环式学习Triple-LoopLearning


 

 

第一环,点的提升。可以对应于对某个知识点的掌握,一种类型题目的解决等等。比如上文Heuristic中提到的例子,通过PRE cycles提升了“求极限”的能力;而对应于软件测试来说,这一环对应于掌握了一个具体的测试设计方法,提升了一次次测试执行的技能,掌握了缺陷相关的探索技能等等;对于玩游戏来说,这一环可以对应于掌握了某一个具体的技能,每一局玩得更好了等等。对于很多人来说,针对他们所从事的工作或者当下所关心的那件事情,只要加以努力,就可以把事情做得更好(当然这个“好”也是可以分为多个level的),也就是说,可以抵达“点”的提升的境界。但如果学习满足于此的话,那么我只能说这种学习是Single-LoopLearning了。

 

第二环,面的提升。要想达到第二环的学习,就必须学会针对第一环的PRE cycles进行更深入的思考,获得更多的洞察,将多个“点”连成“面”,从而对整个领域(domain)有更深的认知。

 

比如同样是学习微积分,我大学时除了会做题之外,其他的什么也没有提升,我甚至不知道为什么要学习这些东西。而现在重新阅读微积分的书籍不过月余,却引发了很多思考。比如,我渐渐发现,相比于加减乘除那些初等运算,“极限运算”是如此重要,如此的不同寻常(针对的是不确定性的数目),求导、求积分、级数问题等等都可以表示为某种极限的运算。显然,高等数学比初等数学研究的内容更难一些,试图解决很多表面看起来很难有结论的“不确定性问题”。那么,

-为什么要研究这些“不确定性问题”呢?应该是这些问题更接近现实世界中各种纷繁芜杂的现实问题吧。

-可如果是这样,为什么我工作17年了,感觉也没怎么应用这些数学知识呢?

-一种可能的猜测是,在软件领域,这些年来,我们试图开发的软件,我们试图帮助客户解决的那些现实的问题都属于“确定性问题”?好像貌似如此,至少绝大部分的软件,我们都期望需求是清晰的、业务规则是明确的、算法是严谨的、逻辑是清楚的;

-另外一种猜测是,可能与我的测试工作有关,我的测试更多是黑盒的,从用户角度,关注需求,在这个层面很少会直接应用某些高等数学的知识,而如果是这样,那么开发人员、具体编写代码的人员,与测试人员的体会可能完全不同,毕竟,应用任何数学的知识还是最终要靠代码落实的。

-这又让我联想到“问题域的分析”,我提出的“MFQ&PPDCS”框架其实就是分析问题(需求)的,当一个问题摆在眼前,无论多么复杂,都可以通过层层的MFQ进行拆解,最终得到合适粒度的单功能M,然后针对每个单功能MPPDCS的方法进一步分析,很显然,即使到了这一步如此细致的粒度,仍然属于黑盒层面,仍然无法直接接触到“数学”知识运用的层面。

-那么,进一步思考,如果我们的软件面对的是“不确定性领域的问题”,MFQ&PPDCS的思路是否还适用?这两类问题的分析方法有哪些异同?在应用数学知识方面有什么区别?

-谈到MFQ&PPDCS,我又联想到MFQ&PPDCS其实是一个解决从“应用层面”到“软件工程层面”映射的问题,把一个来自用户世界的需求映射为IT工程人员理解的东西,以进一步实现和验证。那么如果从“应用层面”映射到“数学层面”,将现实世界的一个个问题转换为一个个数学函数,有没有系统的思路呢?我的MFQ&PPDCS经验又是否可以提供些许借鉴呢?毕竟,PPDCS中的每一个建模方法都可以看作是一种“函数”的映射,都要解决“输入-处理-输出”的问题。

-。。。。。。

 

以我目前对AI和对数学浅薄的认识,只是能信马由缰地问出一些问题罢了,肯定不知道答案,可能很多问题本身就是错的。不过,重要的是,在学习的过程中,我们思考了,问出问题了,这种质疑的精神是第二环学习最为看重的

 

假如你好不容易解出了一道题目,第二环的学习告诉你:不要离开,赶紧思考一下,你是如何做到的?使用了什么方法?有没有使用新的你以前不知道的方法?为什么这道题目困惑你这么久?这里有什么特别之处值得你留意?这种Obstacle你以前遇到过吗?我可以从中学到什么?对我下一步的决策有什么影响?与我之前所知晓的内容有什么联系吗?有没有问题的思路?我哪里做的好或不好?。。。。。。

 

如果经常针对第一环的PRE cycles你问出更多的问题,进行更深入的思考,持之以恒,慢慢地,你就会发现你的着眼点已经由“点”到“面”了,你可能发现很多“点”之间的联系,那是不一样的洞察,你可能对所在领域有了不一样的认知,你已然是一个Double Loop Learner了,我想只有少数人才能抵达这个境界吧,毕竟领域专家可不是遍地都是呢。

 

第三环,学习能力的提升。日常的PRE cycles不仅让你对某个具体的“点”或者所在领域的“面”有了更多的感悟,你对学习这件事,也会产生一些领悟,拾起这些点滴的领悟,久而久之,你就会拥有一套属于自己的学习方法了。比如最早我只是模糊地感觉到“实践”“思考”“总结”的重要性,于是提炼出了这三个词,(当时还不叫PRE,而是叫做PTLPractice-Think-Learn,后来和Michael Bolton交流我的学习方法,他才建议我换三个更准确的词表述,于是改为PRE。)之后,尝试把PRE的思想应用在我的教学课程中,不断摸索;之后在软件测试的实践中、在各种小游戏的实践中,去探索PRE的有效性,到现在PRE学习法的体系已经初步建成,设立了《海盗派学习法:PRE》的课程,我把PRE应用在我所有从事的活动中,不断提升自我。

 

对我个人来说,我已经养成了一种思维习惯,任何时候我学习任何东西的时候,都会时不时地停下来,审视自己刚刚走过的这段学习之路,看看我是如何学习的?效果如何?有没有什么比较好的做法?这意味着什么?等等。无一例外地,我总是能获取一些感悟,从而不断丰富我的PRE学习体系,比如这次能够将TTN分为“全局式TTN”和“局部式TTN”,就是一例。当然,我并不会刻意地去应用PRE方法去学习数学,而是在学习数学的过程中不经意地在应用PRE方法,同时当我迷茫的的时候,PRE会帮助我指引方向,告诉我怎样避免失败、学而无功。

相比于领域专家来说,会学习的人并不多,所以我猜能抵达Triple Loop Learning的人少之又少吧。

 

好了,说了这么多,终于把一点感悟码成了文字,nervous的感觉不见了,现在我的feeling急不可耐地告诉我,时间紧迫,赶紧继续我的学习之路吧!

Comment Box is loading comments...