第一篇 暗时间
1.1 暗时间
认为时间对每个人是均等的是一个错觉。“投入时间”这个说法本身就是荒唐的,实际投入的是时间和效率的乘积。
看书并记住书中的东西只是记忆,并没有涉及推理,只有靠推理才能深入理解一个事物。这部分推理的过程就是你的思维时间,也是人一生中占据一个显著比例的“暗时间”,你走路、买菜、洗脸、坐公车、逛街、出游、吃饭、睡觉,所有这些时间都可以成为“暗时间”,你可以充分利用这些时间进行思考,反刍和消化平时看和读的东西,让你的认识能够脱离照本宣科的层面。这些时间看起来微不足道,但日积月累将会产生巨大的效应。
倾向于创造大块的时间来阅读重要的东西,因为这样有利于“沉浸”进去,使得新知识可以和大脑中与其相关的各种既有知识充分融合,关联起来,后者对于深刻的记忆非常有帮助。
能够迅速进入专注状态,以及能够长期保持专注状态,是高效学习的两个最重要的习惯。
具备超强抗干扰能力,才能有效地利用起前面提到的种种暗时间。
1.2 设计你自己的进度条
善于规划的人,会将目标分割成一个个里程碑,再将里程碑分割成ToDo列表。(将反馈时间缩短)
越到困难,不妨用一用互联网,绝大数情况下你并不孤单,你遇到的问题早就有人遇到过,你踩过的坑里尽是前人的脚印,不要仅仅因为一时摸不着头绪,找不着出路就退出。过早退出是一切失败的根源。
兴趣遍地都是,专注和持之以恒才是真正稀缺的。
靠专业技能的成功是最具可复制性的。只要你在一个领域坚持不懈地专注下去,最后必然能成为高手或绝顶高手。
1.3 如何有效地记忆与学习
你所拥有的知识并不取决于你记得多少,而在于它们能否在恰当的时候被回忆起来,在恰当的时候能够想得起来去使用。
理解记忆:知识中包含了精细的概念、逻辑、一般的解题原则、通用的解题手法、背景知识、类似的问题等等无数的记忆和提取线索。
记笔记的习惯,电子笔记本里面有大量的文本片段,我按照主题组织他们,方便检索。并且用自己的话来概括一下主旨,多加几个自己熟悉的关键字。
(举一反三、触类旁通)在从既有经验中总结知识的时候,应利用适当的抽象来得出适用范围更广的知识(而不仅仅是一个萝卜一个坑);另一方面,在遇到新问题的时候,同样应该对问题进行抽象,触及其本质,去除不相干因素避免干扰,从而有效提取出之前抽象出来的知识。
如何有效地总结知识、学以致用:
1.养成习惯,经常主动回顾一段时间学到的东西
2.创造回忆的机会。
1)经常与别人讨论,或者讲给别人听。
2)整理笔记
3)书写。将一段时间学习的知识按照一个主题系统地串起来大大地丰富了知识之间的关联,平添无数提取线索。大主题:学习思维相关的科学(认知科学、心理学、行为经济学等等)如何能帮助我们进行更好的判断、决策、学习、记忆和生活。小主题:“逃出你的肖申克”主要总结思维中的盲点,以及如何避免这些盲点,从而成为更好的独立思考着,作出更好的判断与决策。小主题:“思维改变生活”系列则是按照小主题总结一些思维相关的知识,目的仍然是如何成为更好的独立思考者,对事物进行更理性的判断。
3.设身处地“虚拟经历”别人经历过的事情。很多时候你也无法真正遍历每条人生路径会发生什么,你没有这样的时间资源,取而代之的是你只能通过别人的“替代经验”,自己的“虚拟经历”,来获取尽量多的信息。
4.抽象和推广。将特例中得到的规律推广到一般情况。知识总是会和无关紧要的细节挂钩,被约束在狭窄的一个特定场景中,无法传播,抽象使其在知识树上升一个或多个层次,从而能够被运用到更多分支上。
5.联系、比较自身经历。样本大小很重要;警惕“沉默的证据”、事后偏见、自利归因。
1.4 学习密度与专注力
李阳英语学习方法:许多人学了快10年英语,其开口时间还不如在集训的7天内开口的时间长。
尽管学习时间很长,但学习密度很低,结果乘起来还是低。
非凡的注意力造就非凡的专家。
真正的效率源自于内心对一个东西强烈的热忱,也就是我们俗称的追求,这时候从表层意识到深层意识都关注在这件事上面,脑细胞高度活跃,才能创造最大的效率。
如果你心理总是惦记着某件还没做的事情,那么就不能全神贯注于当下的事情。所以,如果表层意识和潜意识都能专注于同一件事,也就是完全投入,这个时候的效率就能翻倍。
1.5 一直以来陪伴我的一些学习习惯
专题一、学习与思考
1.Google&Wikipedia
2.看书挑剔,只看经典
3.做读书笔记。一是将自己阅读时候的思考(包括闪念)总结下来,二是将书中的好例子摘抄下来。很多时候,仅仅是用自己的语言重新表述一下就能够极大地加深印象和理解。我觉得,人与人学习的差距不在资质上,而在花在思考的时间和思考的深度上。获得多少并不取决于读了什么,而取决于思考了多少、多深。
4.利用暗时间思考。
5.多看心理学与思维的书,因为它们是跨科学的。知识分两种,一是我们通常所谓的知识,即领域知识。二是关于我们的大脑吸收知识的机制的知识(元知识)。
6.学习一项知识,必须问自己三个重要问题。
1)它的本质是什么
2)它的第一原则是什么
3)它的知识结构是怎样的
7.学习和思考的过程中常问自己的几个问题:
1)你的问题到底是什么(提醒自己不要偏离问题)
2)OK,到现在为止,我到底有了什么收获(提醒自己时不时去总结,整理学习的东西)
3)设想自己正在将东西讲给别人听(有声思考;能否讲出来是判断是否真正理解的最佳办法)
4)设想需要讲给一个不懂的人听(迫使自己去挖掘知识背后最本质、往往也是最简单的解释)
5)时常反省和注意自己的思维过程。尤其是当遇到无法理解或解决的问题之后,最需要将原先的思维过程回顾一遍,看看到底哪个环节被阻塞了,问题到底出在哪里,并分析以后需要加强哪方面的思维习惯,才能够不在同样或类似的时候被绊住。对此,将思维的大致脉络写下来是一个很好的习惯。
6)养成反驳自己的想法的习惯。“这个难道就一定成立吗?”、“有没有反例或例外?”
7)人的思维天生就是极易流于表面来理解事物的。问题的本质是什么?
专题二、时间和效率
1.趁着对一件事情有热情的时候,一股脑儿把万事开头那个最难的阶段熬过去。
2.重要的事情优先
3.重要的事情要营造比较大的时间块来完成
4.同时也要善于利用小块时间
5.重视知识的本质。抓住不变量
6.重视提前积累的强大力量。
7.抬起头来。人的思维是非常容易只见树木不见森林的。所以判断一个东西值不值得学习是很重要的。
8.有时间么?总结总结最近得到的新知识吧。学会反问自己对知识到底把我了多少,是很有价值的
9.有时间吗?看本书吧。
10.制定简要的阅读计划。每天读一点,并利用暗时间(不适合带着书和笔的时间)来总结看过的内容,建立知识结构,抽取知识本质,与以往的大脑中的知识建立联系。
11.根据主题来查阅资料,而不是根据资料来查阅主题。
12.好资料,坏资料。好资料的特点:
从问题出发;
重点介绍方法背后的理念,注重直观解释,而不是方法的技术细节;
按照方法被发明的时间流程来介绍(先是遇到什么问题,然后怎样分析,推理,最后发现目前所使用的方法)
13.学习一个东西之前,首先在大脑中积累充分的“疑惑感”。一个公认的事实是,你对问题的疑惑越大,在之前做的思考越多,当看到解答之后印象就越深刻。
14.有选择地阅读。一般来说在阅读的时候应该这样来切分内容:
问题是什么?
方案是什么?
例子是什么?
如果是需要解释一个现象的(如《黑天鹅》),那么
现象是什么?
解释是什么?
支撑这个解释的理由是什么?
例子是什么?
15.阅读的分类:我一般把书分为两类,一类是知识的,一类是思维的。培养思维的书有:《你的灯亮着吗?》、Psychology of Judgement and Decision Making、《别做正常的傻瓜》、How to Think Straight about Psychology、《数学与猜想》、Ask the Right Questions。
16.利用时间碎片:任何一点时间都可以用于阅读。
专题三、知识结构
1.抓住不变量。把知识分为本质和非本质的。对于前者采取提前深入掌握牢靠的办法,对于后者采取用到时查手册的方法。为什么需要掌握本质知识?
如果你不知道某个工具的存在,遇到问题的时候是很难想到需要使用这么样一个工具的,本质知识就是使用得最为广泛的工具。
你必须首先熟悉你的工具,才能有效地使用它。一门语言,你必须了解它的适用场景,不适用场景。你必须了解它支持的主要编程范式,此外你还必须了解它的缺陷和陷阱。
(豆瓣上有一个专门的豆列“学会思考”)一个小tip:学习一个小领域的时候,时时把“最终能够写出一篇漂亮的survey”放在大脑中提醒自己,就能有助于在阅读和实践的时候有意无意地整理知识的结构、本质和重点,经过整理之后的知识理解更深刻,更不容易忘记,更容易被提取。
2.习惯的养成。第一条就是认识到习惯的改变绝不是一天两天的事情,承认它的难度。第二条就是如果你真想改掉习惯,就需要在过程中常常注意观察自己的行为,否则习惯会以一种你根本察觉不到的方式左右你的行为,让你功亏一篑。(把居住在你内心的那个非理性自我当成你自己的孩子,你要去培养他)
对于习惯的更改,除了最重要的一日三省,加上一些认知技巧,其实是没有什么速效银弹的。但是,知难而不得退,值得做的事情几乎总是如此。
1.6 我在南大的七年
1.父亲带给刘未鹏的两个习惯。第一个,学习新东西的强烈动机,有了热忱和兴趣,做事情就不觉得累,就自得其乐。第二个,学习任何新东西的方法——不会么?查书去。
2.遇到麻烦和困难的事情从不放弃。困难只是最正常不过的生活状态,而一步一步跨过障碍则是最简单最正常的方法。
3.如果觉得做不下去了,就硬着头皮坚持做,然后就类似于麻木了,适应了,那种望而却步的感觉会逐渐自动退去。惊人的简单,但事实就是如此,硬着头皮,过了那个情绪上最艰难的时候,就适应了。(翻译Imperfect C++)对性格上的磨炼才是最有价值的收获。
4.开始看英文版的书。好处,其一,不在反感和恐惧英语了;其二,开始意识到英文世界的技术资料有多么丰富,一旦熟练掌握了语言这个平台,背后就是一扇大门,通向一个海量的信息源。
想了一个方案,可以不用额外花时间来学习英语:阅读的训练蕴含在平时的英文技术资料的阅读中,尽量读英文的,且英文资料更一手和全面。书写的训练蕴含在去国外的邮件列表发技术贴和自己写的英文博客文章。口语的训练则蕴含在平时的娱乐中——美剧,有一个暑假我几乎天天开着Friends睡觉(参加实战)。
第二篇 思维改变生活
2.1 逃出你的肖申克
知识经验跨情境转移失败,除了多多反省观察自己之外,在面对问题的时候多抽象其本质也是一个有力的方法,因为前面提到,正是表面不相似性阻碍了知识的迁移运用。
天性。我们有两个大脑:一个理性大脑(由进化年代较为新近的大脑皮层构成,具备自我意识、分析、计划、抽象、语言等复杂功能),一个原始大脑(由进化年代较为久远的大脑区域构成,适应于远古社会,主管情绪及一些原始的需求和条件反射,如生存、繁衍、道德直觉等等)。这两个区域并不总是合作无间的。我们常常需要用理性的声音去说服内心的原始人。
很傻很天真的条件反射:没有得到好的结果并不代表你的过程就错了;结果正确也并不代表方法就一定正确。看重过程,而不是看重单次的结果——因为再好的过程也可能会偶尔失利,但从长远来统计,好的过程总体上必然导致更好的结果。
不需要亲历也能明白——理性的力量:人类最强大的能力就是社会学习,普通人从自己的错误中学习,聪明人从别人的错误中学习。
偏见:我们太可能因为受到知识的局限性而对事物的看法产生无法消除的偏见,有时候打破这种偏见的唯一途径就是开阔视野,多积累知识,以及和具有不同知识背景的人讨论,否则就算抱着“我可能是错的”这种信念,你也不知道怎么去证伪自己的一个猜测。 如果现实世界背后的模型本来就是“有偏”的,假装不引入“偏见”本身就是“偏见”。 时常使用以下两句话来提醒自己,保持open mind:“这只是一种可能,未必是唯一可能” “想不出其他解释不代表就不存在其他解释”
GTD的原理:通过不断的进展,让执行者意识到事情正在朝向完成不断迈进,这种正面趋势所带来的积极情感能够进一步激励个体把事情执行到底。总之我们发明各种认知方法来“诱使”或“要挟”我们的情绪大脑同意去执行一件事情:我们向朋友承诺我们要做的事情,于是我们的情绪大脑会迫于信誉受损压力而去主动完成这件事情。经常动用理性思考也能锻炼理性大脑的“实力”,用进废退。
客观意味着承认存在未知信息的可能性,理性意味着能够从对立面的视角去看问题和思考。很多时候我们无法自制是因为情绪大脑并不知道也并不承认这件事情是错误的。
2.2 书写时为了更好地思考
当我书写的时候,新的内容仍然源源不断地冒出来,就像我的键盘自己也会思考一样。书写的好处:
1.书写时对思维的备忘。
2.书写是与自己的对话。如果不用纸笔,仅用大脑,是很难在思考一个问题的同时对自己的思考进行反思。
3.书写时与别人的交流。每个人的思维都有一些盲点。当我对人类思维的特点了解的越多,我就越是从心底里谦卑地认识到与人讨论是多么重要的一件事情。 盲点是难以反省出来的——如果你不知道一个东西,很大的可能性是你也不知道你自己不知道它。
4.有时候,语言自己也会思考。同一个概念,在大脑中模糊的感觉,和明确地表达成某个特定的词语,是不一样的。
2.3 为什么你从现在开始就应该写博客
写一个长期的价值博客最大的几点好处:
1.能够交到很多志同道合的朋友。我佩服的一些朋友几乎全都是长期用博客记录想法的人。
2.书写时为了更好的思考。
3.教是最好的学。如果一件事情你不能将清楚,十有八九你还没有完全理解。让一个不明白的人做到明白,你必须要知道从不明白到明白他究竟需要掌握哪些概念,这就迫使我们对大脑中整个知识体系来个寻根究底,把藏在水面下的那些东西统统挖出来,把大脑中的那些我们知道、但不知道自己知道的潜在概念或假设都挖出来,把它们从内隐记忆拉扯到外隐记忆中。因为只有完全知道、并知道自己知道一切来龙去脉的人,才能真正把一件事情讲得通通透透。
如果你选择经常总结自己的知识体系,并说出来给你的读者听,你就会发现自己创造了这样的机会。一旦你把自己潜意识里面的东西从幕后拉出来,你就有了面对并反思它们的可能,而不是任它们在幕后阴险地左右你的思维。
发言陈述应该分为四个部分:前提、假设、逻辑和结论。
4.讨论是绝佳的反思。如果公开自己的想法,几乎总能看到与自己持不同意见的人。这种差异迫使对方拿出更深层次的理由。这是一次难得的机会去审视自己的思维中到底存放了哪些错误的信息。
5.激励你去持续学习和思考。为了让你的博客有价值,你必须不断总结自己学习的结果,你必须不断思考,给出比别人深刻、独到的见解。
6.学会持之以恒地做一件事。克服迷失感就是要有一件能够持续做的事情,这就是生活的主心骨,一件能够创造流体验的事情。
7.让你自己成为一个持续学习和思考的人,并只写你真正思考和总结之后的产物,其他一切就会随之而来
只做你最感兴趣的事情,钱会随之而来
8.问题在想通了之后总是简单的,问题的困难程度不在于想通了之后还觉得有多难,而在于从你觉得它难到你觉得它简单需要耗费多少思维体力
9.人非圣贤。正是因为单个人的想法总是有漏洞,才值得拿出来交流(书写是为了更好的思考,讨论是绝佳的反思),被别人指出问题正是改进的空间,藏着掖着的想法永远不可能变得更成熟。
10.无论如何,不用急于求成,在一个主题上深入下去思考,总能挖到别人挖不到的角落。能够把问题长时间停靠在潜意识中是一种技能,能够带来很大的好处,停留的越长你越琢磨得透彻,比别人看到的就越多。
2.4 我不想与我不能
1.自利归因就是把一件事情发生的原因归结为对自己有利的那种情况。
2.俗话说“谋事在人成事在天”。我们的努力是为了增大结果发生的几率,而不是为了那个确定的结果。不要奢望你努力了就绝对会成功。增大成功的几率,本来就是我们付出时间的原因。
2.5 遇到问题为什么应该自己动手
1.对学习新知识的困难程度的评估,我们却很不在行,因为大部分知识都是需要等你掌握了之后才会“豁然开朗”、“柳暗花明”的。
2.为了解决一个技术问题,你踏遍互联网,翻了若干教程、网站、书籍,最终解决了这个问题的同时还知道了以下这些:
a. 以后遇到类似的问题该到哪儿最快最有效地找到参考
b. 哪些网站是寻找这个领域最有价值信息的地方
c. 哪些书是领域内最经典的书
d. 遇到了一些类似的问题,从而理解了除你原本想要弄明白的问题之外的一系列问题
e. 遇到了一些不类似的问题,从而拓宽了视野
f. 在寻访答案的过程中遇到了一些牛人
3.生活就像一条漫长的跑道,在你遇到障碍的时候,如果你总是选择绕过,那么你最终将越来越发现只能绕过障碍,而无力搬开。如果你大多时候选择搬开障碍,虽然表面上来看,跟那些绕过障碍的人相比,你的速度慢了很多,但随着你越来越熟练于解决障碍,最终你的速度将远远超过总是“超近路”的。
困难的路越走越容易,容易的路越走越难。
2.6 什么才是你的不可替代性和核心竞争力
如何构筑你的个人知识体系,使得你的知识技能尽可能成为不可替代呢?
个人的核心竞争力是他独特的个性知识经验组合。如果这种组合:a.绝无仅有;b.在实践中有价值;c.具有可持续发展性,那你就具备核心竞争力。因此,当设计自己的发展路线时,应当最大限度地加强和发挥自己独特的组合,而不是寻求单项的超越。
刘未鹏推荐以下知识技能组合具有相当程度的不可替代性:
1.专业领域技能。成为一个专业领域的专家,你的专业技能越强,在这个领域的不可替代性就越高。
2.跨领域技能。解决问题的能力,创新思维,判断与决策能力,批评性思维,表达沟通能力
3.学习能力。也属于跨领域能力,但是太重要,所以单独列出来。培养学习能力的最好方法就是持续学习和思考新知识。
4.性格要素。专注、持之以恒、自省、好奇心、自信、谦卑
第三篇 跟波利亚学解题
3.1 跟波利亚学解题
1.通过联想,将手上的问题与已知的类似问题联系起来,并从后者中吸取能够利用的方法。也即将一个无法直接解决的问题转化为一个新的、已知的、并容易解决的问题。
2.解题过程:所有的启发式思维方法实质上都是为了联想服务的,而联想则是为了从我们的大脑的知识系统中提取出有价值的性质或定理,从而补上从条件到结论、从已知到未知之间缺失的链环。
3.逆推法:首先我们把需要求解的问题本身当成条件,从它推导出结论,再从结论推导出更多的结论,知道某一个点上我们发现已经出现了真正已知的条件。有了这条路径,我们便可以从已知条件出发,一路推导到问题的解。
4.How to solve it中的启发式思考方法(这些方法要用大量的实例来支撑)
1)时刻不忘未知量。(问题是什么)
2)用特例启发思考
3)反过来推导——归约。本质上是充分利用了结论。结论往往蕴含丰富的条件,借助结论中蕴含的知识,可以更为“智能”搜索解空间。
实例1.求函数的最值。通过考察函数的最值(除了函数的边界点外),必然有一个性质,即一阶导数必然为0。虽然一阶导数为0的点未必是最值点,但是可以排除任何一阶导数不为零的点,这就将解空间缩小到有限多个点
实例2.通过一个9升水的桶和一个4升水的桶在河里取6升水
实例3.100根火柴,两个人轮流取,每个人每次只能取1-7根,谁拿到最后一根火柴谁赢;问有必胜策略吗,有的话是先手还是后手必胜?
实例4.两堆橘子,各位m和n个,两人轮流拿,拿的时候只能选择某一堆里面拿(即不能跨堆 拿),你可以拿1-这堆里所有剩下的橘子,谁拿到最后一个橘子谁赢
实例5.线性规划中经典的单纯形算法
实例6.名人问题
实例7.和最大(小)的连续子序列
4)顺着推导——试错。事实上,如果一个题目的状态空间是有限的话,往往可以通过穷举所有可能性来找到那个关键的性质。
实例1.有一个囚犯,国王打算处决他,但仁慈的国王给了他一个生还的机会。现在摆在他面前的有两个瓶子,一个里面装了50个白球,一个里面装了50个黑球,这个囚犯有一个机会可以随便怎样重新分配这些球到两个瓶子里中(不能为空),分配完后囚犯被蒙上眼睛,国王随机取一个瓶子给他,他在里面摸出一个球,如果是白球则活,否则挂掉。问,这个囚犯如何分配,才能最大化生还几率。
5)调整题目的条件。通过调整题目条件(删除、增加、改变),往往能迅速发现条件和结论之间是如何联系的。
实例1.A国由1000000个岛组成,岛与岛之间只能用船作为交通工具,有些岛之间有船来往,从任意一个岛都可以去到另外任一个岛,当然其中可能要换船。现在有一个警察要追捕一个逃犯,开始他们在不同的岛上,警察和逃犯都是每天最多乘一次船,但这个逃犯还有点迷信,每个月的13日不乘船,警察则不迷信。警察每天乘船前都知道逃犯昨天在哪个岛,但不知道今天回去哪个岛。请证明,警察一定可以抓到逃犯(即到达同一个岛)。
6)求解一个类似的题目。表面一致抽象不一致会导致错误、无效的类比;而表面不一致抽象一致则会阻碍真正有用的类比。
7)列出所有可能跟问题有关的定理或性质。
8)考察反面,考察其他所有情况。
例子:100个人比赛,要决出冠军需要赛多少场
9)将问题泛化,并求解这个泛化后的问题
5.如何在获取知识优势的同时(形成专门知识的思维定势),防止被知识束缚住,是一门技术。
掌握这门技术的钥匙,就是抽象。在吸收知识的时候进行抽象,同时在面对需要用到知识的新问题时也要对问题进行抽象。抽象是对非本质细节修枝剪叶的过程,抽象使我们在掌握知识和解决问题时候的一把有力的奥卡姆剃刀。
6.一个好习惯:将自己的思考过程清晰地写在纸上。回顾的时候,可以总结思考中的重要的一般原则,分析思维薄弱的环节。
7.练习。练习不产生新能力,但是练习最重要的一个作用是将外显记忆转化为内隐记忆,做到无意识就能运用自如。——提到高效学习法:建立抽象知识框架之间的更多思维连接点。
8.启发式方法:特例法;对题目进行变形,变形之后产生了新的视觉和语义线索;抽象策略;分类讨论、分治
9.总结的意义:反思解题过程中的一般性、跨问题的思维法则。
3.2 锤子和钉子
1.手中有锤,心中无锤——任何工具都是有其适用范畴和前提。仅仅将其看做是我们工具箱中的又一件工具,就可以客观地评估它,视具体情况而使用——始终别忘记自己要解决的问题是什么。Why永远在How之前。
3.3 鱼是最后一个看到水的
1.鱼总是最后一个看到水的。人倾向于在既有的框架下去解决问题;更重要的是,在这个过程中很难觉察到框架约束的存在。
2.把简单的事情搞复杂的人比比皆是,把复杂的事情搞简单的人凤毛麟角。
3.避免思维被一门语言束缚的最好办法就是“学习其他语言”。——参考《代码大全》
4.学习C++的第一原则是什么?关注基本的概念和技术,而非特定的语言特性,尤其不是C++中细枝末节的语言细节。
5.使用C++的第一原则是什么?将你的设计理念(概念)直接映射为C++中类或模板。
6.脱离语言思考,使用语言实现。
7.核心就是 Think out of box.
3.4 知其所以然
1.人类解决问题的两大思维方式(联想;演绎和归纳)都是有很大试错成分的,对一个问题的思考实际上是相当错综复杂的,而且充满了无效分支。
2.如果说问题求解是一部侦探小说,那么算法知识结局而已,而思考过程才是情节。
3.讲述思维过程而非结果有几个极其重要的价值
1)内隐化。思维法则是元知识;是内隐记忆。我们需要将更好的思维方法(替代旧的思维法则)通过不断练习内隐化
2)跨情境运用。你学会了在解决数学问题的时候“注意未知数”却不一定能在解决现实生活中的问题中时刻都能“注意你的未知数”。要意识要共性,要知道思维法则也是知识记忆,是问题解决策略。
3)对问题解得更多记忆提取线索。知道了算法是怎样一步一步被推导出来的,我们就一下拥有了大量的记忆线索:对算法发现过程中的任何一个关键步骤(尤其是本质)的回忆都可能使我们能够自己动手推导出剩余的内容。
实例1.堆时怎样由朴素的决策树演化而来的,它又是为了解决什么问题的
实例2.你知道KMP算法的本质在于消除回溯,至于如何消除回溯却并不是那么难以推导的,所以即便忘了也可以借助于大脑的逻辑演绎能力再现出来。
实例3.知道Tarjan算法其实只是从后序遍历经过两个优化调整而来的。其中并查集的使用其实只是优化手段——为了能够迅速判断祖先结点是谁——而非算法本质。 算法设计的主要任务本来就是通过问题条件中蕴含的知识来消除冗余计算和避免不必要的计算。
实例4.如果知道了排序的本质,就能够对什么是最有排序,为什么它是最优排序有深刻的认识。
4)包含了多得多的知识。 记一个算法,就只有一个算法。而记背后的思想,却有助于解决一类问题。算法诞生过程中的思路往往包含了比实际算法更本质得多的知识,实际算法乃至算法的某个特定语言的实现包含了太多表面的不相干知识,它们会阻碍对本质的理解。
5)重在分析推理,而不是联想。重在思维的传授则可以让人养成从问题本质入手,逐步分析推理的习惯,而不是直接生搬硬套。
6)为了深入理解一个算法的来龙去脉前因后果,从一个算法中领悟尽量深刻的东西,需要做到三件事情:
a.寻找算法的原始出处。TAOCP作为一个资料库是绝对优秀的。红黑树的作者——Sedgewick
b.原始的出处其实也未必就推心置腹地和你讲得那么到位。在网上找牛人的解释;自己揣摩,揣摩的重要性,是怎么说都不为过的。
问题1.为什么这样(为什么这是好的)?为什么不那样(有其他做法吗,有更好的做法么?)这样做事最好的吗?(为什么,能证明吗?)
问题2.这个做法跟其他做法有本质联系吗?这个跟那个的区别是什么?
问题3.问题的本质是什么?这个做法的本质是什么?到底本质上是什么东西导致了这个做法如此xx?
问题4.与这个问题类似的还有其它问题吗?同样或类似的做法也适用吗?
c.不仅学习别人的思路,整理自己的思路也是极其重要的。
3.5 为什么有必要知其所以然
1.我有一个习惯,看定理必看证明。一个原本美妙的定理,把其证明扔掉就是真正的买椟还珠,暴殄天物。
2.去理解一个定理的证明会带来巨大的好处,首当其冲的好处就是你很难再忘掉它。理解了定理之后看,定理就归约为证明它所需要的条件加上逻辑。
3.这是一个树状的知识结构,越往上层走,需要记忆的结点就越少。所以我还有一个习惯,就是看到美妙的证明和解法总是会去一遍又一遍地反复揣摩,试图理解想出这个证明的人到底是怎么想出来的,有没有什么一般性的方法可循。
4.看一个问题的解法,必然要看解法所诞生的过程,背后是否隐藏着更具一般性的解决问题的思路和原则。
5.对于每一个问题,弄清楚以下几个一般性的问题:
1)为什么这种解法是对的?
2)为什么那种解法是错的?
3)为什么这种解法不是最优的?
4)证明为什么没有更优的解法
6.知道怎么做是从正确(高效)解法得到的,而知道为什么必须得那样做则往往是从错误(低效)的解法当中得到的。