Barry Schwartz的Paradox of Choice – Why More is Less用大量生动有趣的研究案例说明了很多时候选择少反而让人感觉舒服得多。

我们的思维有很多很多的弱点,我一向认为,正确的思维方式,是一切高效学习的基础。

  • 人总喜欢沿袭以往习得的经验,并通过类比来进行外推。
  • 人喜欢从关联当中寻找因果。
  • 人类的思维充满着各种各样的捷径,每一条捷径都是一把双刃剑
  • 人类的情绪也在很大程度上影响着人的思考。
  • 人类大脑经过长时间的进化,先天就具备一些特定的“思维定势”,以使得人类能够在面对进化过程中经常出现的适应性问题时能够不假思索的做出迅速的反应。
  • 人类不可避免的受着各种各样的偏见的影响,这些偏见有些是有一定适应价值的“思维定势”(如事后聪明式偏见),而有些则是大脑的认知机制的“缺陷”。

以上,构成了人类思维中的种种谬误。而学会思考,就是学会认识到这些谬误。这个豆列( http://book.douban.com/doulist/127649/ )中的书,有一些是介绍人类思维工作的机制的,认识这些机制是正确思考的大前提;有许多是关于人类推理(Reasoning)过程中存在着形形色色的谬误(Nonsense,Crimes Against Logic),唯有认识到这些谬误,才能避免它们,唯有避免了思维的谬误,才能进行正确的思考。一个最完整的认知偏见(cognitive bias)列表:http://en.wikipedia.org/wiki/List_of_cognitive_biases

一个完整的谬误(fallacies)列表: http://en.wikipedia.org/wiki/Fallacies
维基百科上关于 批判性思维(critical thinking) 的条目:http://en.wikipedia.org/wiki/Critical_thinking

如果你正在学习一门专业,你使用自己所投入的天数来衡量,很容易会产生一种错觉,认为投入了不少时间,然而其实,“投入时间”这个说法本身就是荒唐的,实际投入的是时间和效率的乘积。

看书并记住书中的东西只是记忆,并没有涉及推理,只有靠推理才能深入理解一个事物,看到别人看不到的地方,这部分推理的过程就是你的思维时间,也是人一生中占据一个显著比例的“暗时间”,你走路、买菜、洗脸洗手、坐公车、逛街、出游、吃饭、睡觉,所有这些时间都可以成为“暗时间”,你可以充分利用这些时间进行思考,反刍和消化平时看和读的东西,让你的认识能够脱离照本宣科的层面。这段时间看起来微不足道,但日积月累将会产生庞大的效应。

能够迅速进入专注状态,以及能够长期保持专注状态,是高效学习的两个最重要习惯。

很多人在成年之后甚至未及成年,性格就难以再发生大的变化。性格是这样一种自我实现和强化的陷阱:如果你是不容易专注的人,你会发现生活中处处都是分散你注意力的东西,你的思维难以在一个事情上停留半小时,于是你的时间变得琐碎,你很难在一个领域有长久的积累和深入的思考,这样的现实可能会让你感到沮丧,后者让你更加无法专心,这样的现实可能会让你感到焦虑,为了避开焦虑你又会去寻求其他的刺激,结果是恶性循环。

如果你有一些钱不知道花在A还是B上,你先不作决定,没问题,因为钱还是你的,但如果你有一些时间,不知道花在A上还是B上,不行,因为过了这段时间,这段时间就不是你的了。

如何有效地记忆与学习

你所拥有的知识并不取决于你记得多少,而在于它们能否在恰当的时候被回忆起来。

我们在从既有经验中总结知识的时候,应利用适当的抽象来得出适用范围更广的知识(而不仅仅是一个萝卜一个坑);另一方面,在遇到新问题的时候,同样应该对问题进行抽象,触及其本质,去除不相干因素避免干扰,从而有效提取之前抽象出来的知识。

什么样的记忆和学习是更有效的。

下文是一些具体的实践方法,

1) 养成习惯,经常主动回顾一段时间学到的东西(老生长谈了):这不仅有利于巩固长时记忆,而且一段时间之后的回顾你可能已经因为新的知识学习从而对原先的认识有了进一步的看法,通过回顾,可以整合新旧知识,得到新的启发。

2) 创造回忆的机会:我知道第一条不顶用,没有人(好吧,很少有人)能够真正坚持执行。所以有了第二条——创造回忆既有知识的机会。具体来说就是通过:

2.1) 经常与别人讨论,或者讲给别人听。

2.2) 整理笔记:经常整理你的笔记——如果你没有做笔记,现在就开始——整理之前的笔记一来巩固已经淡化的记忆,二来给你重新审视知识的机会。

2.3) 书写:将一段时间学习的知识按照一个主题系统地“串”起来大大地丰富了知识之间的关联,平添无数提取线索。

3) 设身处地地“虚拟经历”别人经历过的事情:

4) 抽象和推广:如果一件事情就是一件事情,那么我们永远也无法学习到“未来”的知识,结果就是每堵墙都要去自己撞一遍试试硬度

5) 联系/比较自身的经历:将别人的经历或者通过阅读和观察得来的经历和自身的经历进行比较,常常能够得到非常有价值的结论。

值得注意的是:
1) 样本大小很关键:比较的个体样本越少越容易产生错误归因,最好多多观察,多多比较和总结。
2) 警惕“沉默的证据”、事后偏见、自利归因:读他人的传记的时候,不管传记是本人写的还是传记作家通过访谈写的,都会有意无意地犯事后偏见,例如最常见的将成功归因为个人能力,忽略机遇因素。将偶然看作必然。

学习密度与专注力

专注力为什么会对学习效率造成这么大的影响。这来源于两个方面,一是专注于一件事情能让表层意识全功率运作,这个是显式的效率。第二点,也是更重要的,它还能够使你的潜意识进入一种专注于这件事情的状态。

学习一项知识,必须问自己三个重要问题:

  1. 它的本质是什么。
  2. 它的第一原则是什么。
  3. 它的知识结构是怎样的。

为什么说起来容易做起来难,是因为“说”只是理性上承认正确,并没有考虑到我们每个人大脑中居住的那个非理性自我。

大脑中的新皮层(neocortex,所谓“理性”居住的地方,尤其是前额叶)在进化历史上是较为新近的年代才进化出来的,跟底层较原始的模块(如主管情绪的杏仁核)之间的神经网络沟通并不是合作无间,这就解释了为什么有些事情我们明明知道是对的,但就是不能说服自己,情绪还是在那里不依不挠的驱使你去做另一样事情)

大量的新技术其实只是一层皮,背后的支撑技术其实都是十来年不变的东西。底层知识永远都不过时。算法数据结构永远都不过时。基本的程序设计理论永远都不过时。良好的编码习惯永远都不过时。分析问题和解决问题的能力永远都不过时。强大的学习能力和旺盛的求知欲永远都不过时。你大脑的思维方式永远都不过时。

阅读方法

  1. 趁着对一件事情有热情的时候,一股脑儿把万事开头那个最难的阶段熬过去。

  2. 根据主题来查阅资料,而不是根据资料来查阅主题。

  3. 好资料,坏资料。好资料的特点:从问题出发;重点介绍方法背后的理念( rationale ),注重直观解释,而不是方法的技术细节;按照方法被发明的时间流程来介绍(先是遇到了什么什么问题,然后怎样分析,推理,最后发现目前所使用的方法)。

  4. 学习一个东西之前,首先在大脑中积累充分的“疑惑感”

  5. 有选择地阅读。

  6. 为什么看不懂?其一:看得不够使劲;其二涉及到了你不懂得概念。

知识结构

如何区分essential和non-essential的知识想必绝大多数时候大家心里都有数,我举几个例子

对程序员来说,硬件体系结构是essential的,操作系统的一些重要的实现机制是essential的,主流编程范式(OO、FP)是为了满足什么需求出现的(出现是为了解决什么问题),是怎么解决的,自身又引入了哪些新的问题,从而适用哪些场景)。这些我认为都是essential的。我想补充一点的是,并不是说硬件体系结构就要了解到逻辑门、晶体管层面才行(其实要了解到这个层面代价也很小,一两本好书就行了),也并不是说就要通读《Computer Architecture: Quantitative Approach》才行。而是关键要了解那些重要的思想(很长时间不变的东西),而不是很细的技术细节(易变的东西)。《Computer Systems: A Programmer’s Perspective》就是为此目的,针对程序员的需求总结出那些essential knowledge的好书。

关键是自己在学习新知识的时候带着第三只眼来敏锐地判断这个知识是否是不变量,或不易变的量,是否完全可以在用的时候查手册即可,还是需要提前掌握(一些判断方法在上文也有所提及)。并且学会在纷繁的知识中抽象出那些重要的,本质的,不变的东西。

在学习新知识的时候常常问自己三个问题:

  • 该知识的(体系或层次)结构是什么
  • 本质是什么
  • 第一原则是什么。

学习一个小领域的时候,时时把“最终能够写出一篇漂亮的Survey”放在大脑中提醒自己,就能有助于在阅读和实践的时候有意无意地整理知识的结构、本质和重点,经过整理之后的知识理解更深刻,更不容易忘记,更容易被提取。

思维改变生活

我们在大脑中走得越远,在现实中就走得越稳。我们在大脑中失败的次数越多,在现实中失败的次数就越少。

漫长的进化已经在我们的神经回路中刻下了“光源来自上方”这样一个强大的假设,所以虽然第一副图片本该完全有两种解释,我们还是不可避免地只看到其中的一种解释,即假设光线来自上方的解释,即使卯足了劲看也难以将凸的看成凹的,因为难以克服进化印刻在大脑中的“光线来自上方”的假设,因此为了让你看到“当光线来自下方时你会看到什么景象”我不得不将图片颠倒一下,结果你就看到原来凸的变成凹的了。

在社会文化方面,人们常用“仁者见仁、智者见智”这个俗语来指代三种现象:
1) 偏见:不同的人戴着不同的有色眼镜,对同一现象产生不同的理解或解释。是平凡的解释还是阴谋论的解释?存乎一心。
2) 立场:例如对于“生活的意义”没有统一的标准公理,因此每种生活都是合理的,各人可以持有不同的价值观,优化不同的目标函数。
3) 选择性关注:对于同一事物,不同的人关注的点不一样,象有四腿,各摸一条。

设想一下,人类的高级认知模块是在相对较近的进化年代出现的,然而原始的情感和条件反射模块却在千万年的进化长河中忠实地保护着我们在自然环境中生存下来并努力繁衍后代(《Mean Genes》),这些模块似乎“理应”拥有更强大的力量,然而工业时代的到来将人类生存的环境极大的改变了,我们大脑的原始模块适应的是远古时期的生活,以采集狩猎为主题的社会构成,这跟现代工业文明相差颇大,

书写是为了更好的思考

  • 书写的好处有以下几点:

  • 写是对思维的备忘:

  • 书写是对思维的缓存:

  • 书写是与自己的对话:

  • 书写是与别人的交流:

  • 有时候,语言自己也会思考

所以,如果你习惯了思考问题,就总会有东西写,先有思考,然后有总结,然后在总结中进一步思考。

我不想与我不能

我们每个人内心的观念都会对我们看待周围的事物起到一个滤镜的作用,过滤一切所见之物。扭曲它们以使它们符合我们内心的主观意识。

困难的路越走越容易,容易的路越走越难。

总结波利亚在书中提到的思维方法,尤其是《How To Solve It》中的启发式思考方法,有这样一些:

  • 时刻不忘未知量(即时刻别忘记你到底想要求什么,问题是什么。)

  • 用特例启发思考。

  • 反过来推导。

  • 试错。

  • 调整题目的条件(如,删除、增加、改变条件)。

  • 一个类似的题目。

  • 列出所有可能跟问题有关的定理或性质。

  • 考察反面,考察其他所有情况。

  • 将问题泛化,并求解这个泛化后的问题。

正如金出武雄在《像外行一样思考,像专家一样实践》中所说的,人类的灵感一定是有规律的,认知科学目前至少已经确认了人类思维的整个物质基础——神经元。而既然它们是物质,自然要遵循物质的运行规律。只不过我们目前还没有窥破它们,但至少我们可以确信的是,它们在那里。事实上,不需要借助于认知科学,单单是通过对我们自己思维过程的自我观察,也许就已经能够总结出一些重要的规律了,也许,对自身思维过程的反观真的是人有别于其它动物的本质区别。

当然,也有许多题目,求解它们的那个关键的知识可以通过考察题目本身蕴涵的条件来获得,这类题目就是测试思维本身的能力的好题目了。而如果这个性质根本无法通过对题目本身的考察得出来,那么这个题目测试的就是知识储备以及联想能力。

由于将项目维持在工作记忆中需要很大的认知精力,使得我们的注意力无法暂时移开去思考其它相关的子问题,而写到纸上的话我们就减轻了工作记忆的负担,可以转移注意力去集中思考某个子问题;同时我们又可以随时回过头来,重新将以前想过的结论装入记忆(内存),完全不用费心去阻止它们被我们的工作记忆遗忘。

人类的无意识思维天生有着各种各样的坏习惯,譬如前面提到的范畴陷阱就是创新思维的杀手,譬如根据表面相似性进行类比也是知识转移的一大障碍。更遑论各种各样的思维捷径了(我们平常进行的绝大多数思考和决策,都是通过认知捷径来进行的)。所以说,如果任由我们天生的思维方式发展,也许永远都避不开无意识中的那些陷阱,好在我们除了无意识之外还多出了一层监督机制——意识。通过不断反省思维本身,时时纠正不正确的思考方式,我们就能够对其进行淬炼,最终养成良好的思维习惯。

解题练习的最重要目的不是将特定的题目解出来,而是在于反思解题过程中的一般性的,跨问题的思维法则。

我们当然是需要掌握语言特性的,但重点在于要从语言特性看到特性背后蕴藏的支持设计和编程的概念(concept)。比如类支持的概念,继承支持的概念,虚函数支持的概念,模板支持的概念... 这个论点泛化之后的结论就是:学习编程重在学习基本的概念和素养,这些是长期稳定不变的东西。

讲述思维过程而非结果有几个极其重要的价值:

  • 内隐化:思维法则其实也是知识(只不过它是元知识——是帮助我们获得新知识的知识);是内隐的记忆。
  • 跨情境运用:思维法则也是知识记忆,是问题解决策略
  • 对问题解的更多记忆提取线索:我们平时学习算法时几乎仅止于“理解”,别人把一个方案放在你面前,你去验证一下,心说“哦,不错,这个的确可以工作”。
  • 包含了多得多的知识:记一个算法,就只有一个算法。一个萝卜一个坑。就好比背99乘法表只能解决乘法问题一样。而记背后的思想,却有助于解决一类问题。

重在分析推理,而不是联想:

为了深入理解一个算法的来龙去脉前因后果,从一个算法中领悟尽量深刻的东西,则需要做到三件事情:

  • 寻找该算法的原始出处:TAOCP作为一个资料库是绝对优秀的,基础的算法只要你能想到的,几乎都可以在上面找到原始出处。
    • 原始的出处其实也未必就都推心置腹地和你讲得那么到位:前面说过,算法设计出来了之后人们几乎是不会去回顾整个的思维过程细节的,只把直指目标的那些东西写出来。结果就又是一篇欧几里德式的文章了。
    • 不仅学习别人的思路,整理自己的思路也是极其重要的:

简单地说,如果你对于每个问题都能真正弄清以下这几个问题的答案,那么可以肯定的是,你的理解,记忆,以及学习的效率都会得到质的提高:

  • 为什么这种解法是对的?
  • 为什么那种解法是错的?
  • 为什么这种解法不是最优的? 证明为什么没有更优的解法。

数学之美番外篇

希尔伯特希望能够证明,在任一个无矛盾的形式系统中所能表达的所有陈述都要么能够证明要么能够证伪。这看起来是个非常直观的结论,因为一个结论要么是真要么是假,而它在它所处的领域/系统中当然应该能够证明或证伪了(只要我们能够揭示出该系统中足够多的真理

,“最好的问题”就是那些能够均分所有可能性的问题,因为那样的话不管问题的答案如何,都能排除掉k-1/k(k为问题的答案有多少种输出——猜数字里面是2,称球里面是3)种可能性,而不均衡的问题总会有一个或一些答案分支排除掉的可能性要小于k-1/k。于是策略的下界就被拖累了。

假设:我们假设句子中一个词的出现概率只依赖于它前面的有限的 k 个词(k 一般不超过 3,如果只依赖于前面的一个词,就是2元语言模型(2-gram),同理有 3-gram 、 4-gram 等),这个就是所谓的“有限地平线”假设。

贝叶斯方法是一个非常 general 的推理框架。其核心理念可以描述成:Analysis by Synthesis (通过合成来分析)