Table of Contents
人人都该学点心理学 blog 推荐:负喧琐话 http://blog.csdn.net/g9yuayon
暗时间
暗时间
- 大脑就像 CPU,如果不思考就像 CPU 运行 idle 进程一样,要善于利用思维时间
 - 时间对每个人并不均等,衡量一个人活了多久应该用思维时间来计算
 - 一件事情的实际投入是时间和效率的乘积
 - 暗时间:走路、买菜、洗脸洗手、坐车、逛街、出游、吃饭、睡觉等等
 - 程序思维:任务切换会耗费额外的花销,所以专注比不专注更高效,这也是暗时间
 - 高效学习:迅速进入专注状态 + 长期保持专注状态(思维体力) + 抗干扰
 
设计你自己的进度条
设计你自己的进度条
- 进度条相当于给自己心理暗示(定心丸),能预估什么时候会达到 100%
 - 人会对不确定的未来、不确定的时间投入感到恐惧,这样的心理下人就会选择退出
 
不要过早退出循环
- 遇到困难不要畏难,不要轻易放弃
 - 过早退出也是因为对未来的不确定性、对投资时间最终无法收到回报的恐惧
 - 感受到的困难越大则恐惧越大,恐惧越大则暗示需要投资的时间越多
 - “畏难”所畏惧的不是困难本身,而是困难所暗示的时间经济学意义
 - 高德纳:过早退出是一切失败的根源
 
兴趣遍地都是,专注和持之以恒才是真正稀缺的
- 区别人的不是兴趣,而是毅力,即便没有兴趣,专注和持之以恒也能成为专家
 - 兴趣的很大一类来源是——"我擅长做这件事"
 
生活中的选择远比我们想象的要多,细微的选择差异造就了不同的人生
靠专业技能的成功是最具可复制性的
反思是让人得以改进自己的最重要的思维品质
饿死在干草堆之间的驴子
- 不要因为无法做出决定而推迟决定,推迟决定是最差的决定,白白浪费了时间
 - 不管多纠结,都要好好思考和调查之后做出一个决定并坚持下去
 
一生的知识积累,自学的起码占 90%
如何有效的记忆与学习
- 你所拥有的知识并不取决于你记得多少,而在于它们能否在恰当的时候被回忆起来
 - 联想记忆(记忆编码),提供更多的提取线索,任何一个线索被触发都可能顺藤摸瓜地拎出整条记忆来
 - 理解性的记忆,富含线索
 - 抽象问题,触及本质,有效提取知识
 
具体实践方法
- 养成习惯,经常主动回顾一段时间学到的东西
 - 创造回忆的机会 2.1) 经常与别人讨论,或者讲给别人听:教是最好的学 2.2) 整理笔记 2.3) 书写:思考、关联、增加线索等等
 - 设身处地“虚拟经历”别人经历过的事情
 - 抽象和推广
 - 联想/比较自身的经历
 
学习密度与专注力
- 学习密度:重视积累的力量
 - 专注力也是一种习惯,迅速进入专注的状态
 - 思维体力:持续集中注意力的时间,注意力造就非凡专家,天才来源于长期的专注的训练
 
一直以来伴随我的一些学习习惯
学习与思考
- Google & Wiki
 - 看书挑剔,只看经典
 - 做读书笔记
 - 利用暗时间思考
 - 多看心理学和思维的书
 - 学习一项知识必须问自己三个重要的问题: 它的本质是什么,它的第一原则是什么,它的知识结构是怎样的?
 - 学习中经常问自己: 1.你的问题到底是什么(提醒自己不要偏离问题) 2.到现在为止,我有什么收获(经常总结) 3.设想在讲给别人听(有声思考) 4.设想需要讲给一个不懂的人听(挖掘背后最本质的解释) 5.反省和注意自己的思维过程 6.养成反驳自己想法的习惯 7.人的思维天生就是极易流于表面来理解事物的(追寻知识的本质)
 
时间和效率
- 趁着对一件事情有热情的时候,一股脑儿把万事开头那个最难的阶段熬过去
 - 要事优先
 - 重要的事要营造大块时间来完成
 - 善于利用小块时间
 - 重视知识的本质
 - 重视积累的力量,万事提前准备
 - 学习之前先判断一个东西值不值得学习: 学的到底是什么、重要吗、需要在这个时候学习吗、未来有什么价值、是不是你真正希望做的
 - 退订 RSS:真正宝贵的信息,在其他来源你也会接触到
 - 多总结最近得到的新知识
 - 多读书
 - 制定简要的阅读计划
 
时间和效率 2
- 根据主题查阅资料,而不是根据资料查阅主题(书只看章节,当字典用) 举例:比如看某个算法,搜集不同资料,看每个人从不同的角度如何讲述的
 - 区分好资料与坏资料
 - 学习一个东西之前,首先在大脑中积累充分的“疑惑感”
 - 有选择地阅读(信息密度低,不需要思考的快速略读) 3 步骤:问题是什么?方案是什么?例子是什么?
 - 阅读的分类:一类是知识的,一类是思维的
 - 利用时间碎片:任何一点时间都可以用于阅读
 - 为什么看不懂?你看得不够使劲/涉及了你不懂的概念/作者讲的顺序不对
 - 阅读之前先获得一本书质量的大致评估
 - 如何搜寻好书
 
知识结构
- 抓住不变量
 
习惯的养成
- 人评判一个信念的标准是 satisficing 原则而不是 optimizing
 
思维改变生活
逃出你的肖申克
亲身经历才能明白?
- 切身体验:更加强烈和深刻
 - 别人口中的故事:也许只是事情的一个方面,难免受到他们自己观念的影响而产生偏见
 - 为什么:别人给你讲道理只能告诉你怎么做(how),而难以解释为什么(why)
 - 世界是复杂的:单一因果来解释事情几乎总是不恰当的
 - 未来是不确定的:头脑清醒,尽量不错失机遇,改善个人因素能大大增加成功的几率
 - 别人的道理,自己的事情:知识经验跨情境转移
 - 认知失调与自我辩护
 - 失败即成功:总结经验教训,失败揭露出的信息往往比成功多
 - 情绪对照
 - 天性:大脑进化选择出来的天性,在判断与决策时的优先级总是最高的 两个大脑:理性大脑(进化年代较新近的大脑皮层,具备自我意识,分析,计划,抽象,语言等复杂功能)和原始大脑(进化年代久远的大脑区域,适应于远古社会,主管情绪及一些原始需求和条件反射,如生存,繁衍,道德直觉等等) 为什么总是感到不满足?感到满足就不会进取,不进取就会被淘汰(优胜劣汰)… 自然选择过程试图最优化的目标函数并不是"幸福感",而是"繁衍概率" 需要用理性大脑去说服原始大脑
 - 习惯
 
亲身经历了就一定明白吗?
- 很傻很天真的条件反射 没有好结果并不代表过程错了,正确的结果并不代表方法一定正确 看重过程而不是单次的结果 再好的过程也可能会偶尔失利,但从长远统计,好的过程总体上必然导致更好的结果
 - 认知偏差 自我服务偏差:将失败归因于外界因素,将成功归因于自己的能耐
 - 
情绪系统 我们平常的决策与判断强烈地依赖于情绪系统的输出
 - 
不需要亲历也能明白——理性的力量
- 让事实替代我们进行了思考和推理
 - 普通人从自己的错误中学习,聪明人从别人的错误中学习(在别人跌倒的地方跳过去)
 - 大脑中走的越远,现实中就走的越稳;大脑中失败的次数越多,现实中失败的次数就越少
 
 - 
仁者见仁智者见智?从视觉错觉到偏见
- 当大脑中的两个假设相冲突的时候,更强硬的那个获胜
 - 先验假设
 - 日常生活中的事件,总有一个平凡的解释和一个疯狂的解释
 - 我们总是混淆“事实”和“推断”(尤其是我们对推断的确信度很高或对我们有利的时候)
 - 很多时候我们根本无法看到或设想另一种可能性
 - 开阔视野,多积累知识,以及和具有不同知识背景的人讨论
 - 仁者见仁智者见智:1.偏见 2.立场 3.选择性关注
 - Open Mind: 1.这只是一种可能,未必是唯一的可能 2.想不出其他解释不代表就不存在其他解释
 
 - 
遇见 20 万年前的自己
- 正确而理性的做法是永远都勇敢地迈出第一步
 - GTD 的原理:“情形正在变好”可以带来正面情绪,从而激励个体把事情执行到底
 - 以“诱使”或“要挟”的认知方法来促使自己执行一件事
 
 - 
理智与情感
- 我们理性的大脑非常善于对自己的行为作出立即的、看上去合理的解释
 - 我们知道答案,却往往不知道求解的真正思维过程
 - 只要我们的情绪大脑(原始大脑)首先认定一件事,那么理性大脑就会屈服,并会寻找利于自己的解释
 - 客观意味着承认存在未知信息的可能性,理性意味着能够从对立面的视角去看问题和思考。
 - 克服大脑天生的缺陷:用进废退
 - 习惯之所以难以改变,就是因为习惯是自我巩固的——越用越强,越强越用
 - 要想从既有习惯中跳出来,必然要依赖外界的力量——对于心理机制的知识
 - 能够改变既有的习惯,依靠的不是自制力,而是知识
 
 - 
我们为什么会欺骗自己?(my title)
当人们为一件事付出的越多(金钱/时间/社会关系),这些既有付出会对他们的思维产生越来越大的影响(经济学中的“沉没成本”), 我们的思想被迫对自己的行为作出合理的解释(“认知失调”),因为谁也不希望自己那么大的付出是愚蠢而错误的,因此理性大脑 不再客观,开始自欺欺人。
 
书写是为了更好地思考
- 书写是对思维的备忘
 - 书写是对思维的缓存
 - 书写是与自己的对话
 - 书写是与别人的交流
 - 有时候,语言自己也会思考
 
为什么你从现在开始就应该写博客
- 能够交到很多志同道合的朋友
 - 书写是为了更好地思考
 - “教”是最好的“学”
 - 讨论是绝佳的反思
 - 激励你去持续学习和思考
 - 学会持之以恒地做一件事
 - 一个长期的价值博客是一份很好的简历
 
我不想与我不能
- 自利归因:把一件事发生的原因归结为对自己有利的那种情况。
 - 人生不得意往往有 2 个原因:外因(不可控),内因(自由意志和主观能动性,可控)
 
遇到问题为什么应该自己动手
- 寻找捷径是很聪明的做法
 - 寻找捷径只是小聪明
 - 困难的路越走越容易,容易的路越走越难
 
什么才是你的不可替代性和核心竞争力
- 技术路线的选择重要但不具有决定性
 - 个人核心竞争力是他独特的个性知识经验组合 如果这种组合:1.绝无仅有 2.在实践中有价值 3.具有可持续发展性 那么你就具备核心竞争力
 - 具有相当程序不可替代性的知识技能组合 1.专业领域技能 2.跨领域的技能(解决问题的能力、创新思维、判断与决策能力、批判性思维、表达沟通能力等等) 3.学习能力 4.性格要素(专注、坚持、自省、好奇、自信、谦卑等等)
 
跟波利亚学解题
跟波利亚学解题
- 联想、归约、推导、启发式思考方法(heuristics)
 - 把问题本身当条件,从它推导出结论,再从结论推导出更多的结论,直到我们发现已经出现了真正已知的条件。这个过程称为分析。
 - 探索源头
 - 《How To Solve It》中的启发式思维方法: 1.时刻不忘未知量(即时刻不忘到底要求什么,问题是什么) 2.用特例启发思考 3.反过来推导(结论往往蕴含丰富的条件) 4.试错 5.调整题目的条件(如增加/删除/改变条件) 6.求解一个类似的题目(“迁移”) 7.列出所有可能跟问题有关的定理或性质 8.考察反面,考察其他所有情况 9.将问题泛化,并求解这个泛化后的问题(“发明者悖论”) 10.意识孵化法(“思维体力”,一直放在脑子里思考) 11.烫手山芋法(提问,把问题扔给别人)
 - 一点思考 1.联想的法则:知识同样是一把双刃剑,一方面它提供给我们解决问题的捷径优势,另一方面也是思维的桎梏 2.知识,知识 3.好题目,坏题目 4.一个好习惯 5.练习,练习:将外显记忆转化为内隐记忆 6.启发式的局限性 启发式方法在 2 个层面上起作用:1) 辅助联想起 soft knowledge 2) 辅助探索出 hard knowledge 启发式方法的局限性也存在于这 2 个方面: 1) 有些联系通过“启发”想不起来 2) 许多 hard knowledge 是不能被启发探索出来的 7.总结的意义
 
锤子和钉子
(一)
- 心中有锤子(技能),看什么都是钉子:思维定势/局限,人倾向于在既有框架下去解决问题,而这个过程很难觉察到框架约束的存在
 - 没有锤子是万万不行的
 - 正确的态度:手中有锤,心中无锤
 
(二)
- 如果你想钉一个钉子,所有东西看上去都像锤子:专注于你要解决的问题,那么你所看到的东西就会呈现出以往你没有看到的一面
 - 把自己变成钉子,就是顿悟(eureka)的奥秘
 
鱼是最后一个看到水的
- 普通人遵守规则,牛人无视规则,伟人创造规则
 - Think out of the box.
 
C++
- 学习 C++的第一原则是什么?关注基本的概念和技术,而非特定的语言特性,尤其不是 C++中细枝末节的语言细节。
 - 使用 C++的第一原则是什么?将你的(与语言无关的)设计理念(概念)直接映射为 C++中的类或模板,即脱离语言思考、使用语言实现。
 
知其所以然
- 比如看一个算法,不要看算法逻辑的描述,要看算法诞生过程背后的思想(寻找原始出处)
 - 我们要的不是相对论,而是诞生相对论的那个大脑。我们要的不是金蛋,而是下金蛋的那只鸡。
 - 思考一个问题过程中的 2 种思维形式:1.联想 2.演绎&归纳
 - 如果说问题求解是一部侦探小说,那么算法只是结局,而思考过程才是情节!
 
为什么有必要知其所以然
- 看定理必看证明,在没有明白背后的证明之前,任何一个定理对你来说都是等价的——等于背诵乘法口诀
 - 去理解一个定理的证明,你就很难再忘掉它
 - 这是个树状知识结构,越往上层走,需要记忆的节点就越少
 - 知道怎么做是从正确(高效)解法得到的,而知道为什么必须得那样做则往往是从错误(低效)的解法当中得到的
 
康托尔、歌德尔、图灵——永恒的金色对角线
图灵的停机问题(The Halting Problem)
- 停机问题:不存在这样一个程序(算法),它能够计算任何程序(算法)在给定输入上是否会结束(停机)。
 - 反证
 
Y Combinator
- 
lambda calculus(lambda 算子)
- 
基本语法(BNF):
::= ::= lambda . ::= ( ) - 前两条语法用于生成 lambda 表达式(lambda 函数),如:lambda x y. x+y haskell 里用“\”代替希腊字母 lambda,所以写成\ x y. x+y 这是一个匿名的加法函数,它接受 2 个参数,返回两值相加的结果 实际上 lambda calculus 里一切都只不过是文本替换,有点像 C 语言里的宏 第三条语法可以给出更简洁的中缀表达,即(+ x y) 函数的定义出来了,最后一条规则就是用来调用一个 lambda 函数的:((lambda x y. x+y) 2 3),类似于 f(x,y)写成(f x y)的形式 为了简洁,我们:let Add = (lambda x y. x+y),进而可以写成(Add 2 3)
 
 - 
两条公理:
- Alpha 转换公理:如"lambda x y. x+y"转换为"lambda a b. a+b"
 - Beta 转换公理:如"(lambda x y. x+y) 2 3"转换为"2+3"
 
 
 - 
 - 
递归的迷思
- 递归:函数定义中用到自身,自身调用自身
 - 就以上两条公理,我们无法用 lambda 表示递归函数,比如计算阶乘 f(n): if n==0 return 1 else return n*f(n-1)
 - 我们很容易想到:lambda n. IfElse n==0 1 n*
(n-1) 但在 C 语言里 可以填函数名本身,而 lambda 算子系统里的 lambda 表达式(函数)是没有名字的  - 一次失败的尝试: let F = lambda n. IfElse n==0 1 n*F(n-1) let F 在它所代表的 lambda 表达式还没有完全定义出来之前,是不可以用 F 这个名字的
 
 - 
一次成功的尝试
- 软件工程里的一条黄金定律:任何问题都可以通过增加一个间接层来解决
 - 刚才不成功的定义:lambda n. IfElse n==0 1 n*
(n-1) 既然不能在 直接填函数自身,那我们可以增加一个参数,也就是说把 参数化: lambda self n. IfElse n==0 1 n*self(n-1) 现在我们调用这个函数的时候,只需要加传一个参数 self,这个参数不是别人,正是这个函数自身: let P = lambda self n. IfElse n==0 1 n*self(n-1) 比如计算 3 的阶乘:P(P,3) 可惜还差一点,我们分析 P(P,3)这个调用,按 Beta 转换规则展开: IfElse n==0 1 n*P(n-1) 这里 P(n-1)虽然调用到了 P,然而只给出了一个参数,而 P 的定义需要 2 个参数(self 和 n) 为了让 P(n-1)变正确,我们还得加个参数,于是我们稍微修改一下 P 的定义: let P = lambda self n. IfElse n==0 1 n*self(self, n-1)  
 - 
不动点原理
- 我们假设一个完美的递归函数 power: power(n): if n==0 return 1; else return n*power(n-1) 重新考虑刚才的 P(P,3),一开始传递了一个有缺陷的 P 为参数,于是我们进行了修改 那如果我们试着这样 P(power,3)传递一个真正的递归函数 power 呢? 展开 P(power,3): IfElse 3==0 1 3*power(3-1) power(3-1)会直接计算 2 的阶乘,所以 P(power,3)会一直计算出 3 的阶乘 设想的这个 power 是为了引入不动点的概念
 - 什么是不动点? 在 lambda 算子系统里,如果给一个 lambda 函数的参数不足,则得到的就是一个新的 lambda 函数, 这个新的 lambda 函数所接受的参数也就是你尚未给出的那些参数。换句话说,即调用一个 lambda 函数可以分若干步来进行,每次只给出一部分参数,而只有等所有参数都给齐了,函数的求值结果 才能给出来,否则你得到的就是一个“中间函数”。 P(power)展开是: IfElse n==0 1 n*power(n-1) 参数 n 待定 不妨写成 lambda n. IfElse n==0 1 n*power(n-1) 我们再定义 power 试试: let power = lambda n. IfElse n==0 1 n*power(n-1) 一模一样!也就是说 P(power)展开后跟 power 是一样的,即: P(power) = power 这就是不动点。即对于函数 P 来说 power 是这样一个“点”:当把 P 用到 power 身上的时候,得到的结果仍然 还是 power,也即 power 这个“点”在 P 的作用下是“不动”的。 可惜这一切都建立在一个不存在的 power 的基础上! 我们再假设存在一个神奇的函数 Y,把 Y 用到任何伪递归的函数 F 上就能得到 f,即: Y(F) = f 而 F(f) = f,所以我们得到:Y(F) = f = F(f) = F(Y(F)) 也就是说 Y 具有性质:Y(F) = F(Y(F))
 
 - 
铸造 Y Combinator
let Y = lambda F. let fgen = lambda self. F(self(self)) return fgen(fgen)
 
歌德尔的不完备性定理
任何足够强到蕴含了皮亚诺算数系统(PA)的一致(即无矛盾)的系统都是不完备的, 所谓不完备,也就是说在系统内存在一个为真但无法在系统内推导出的命题。
- 命题 P:P 处于形式系统 T 中,P 不可在系统 T 内证明。
 - 一旦这个命题能够在 T 中表达出来,我们就可以得出“P 为真但无法在 T 内推导出来”
 - G(g): UnPr(G(g)) (从歌德尔公式我们直接看到了 Y Combinator!)
 - 以上只是第一不完备性定理,还有一个推论被称为第二不完备性定理: 任一系统 T 内无法证明这个系统本身的一致性。
 
大道至简——康托尔的天才
无穷集合、超限数
- 
神奇的一一对应
- 两个无穷集合“大小”一样当且进当它们的元素之间能够构成一一对应 比如偶数集合与自然数集合
 - 除了一一对应,还有不能构成一一对应的两个无穷集合,比如实数集合与自然数集合 因为实数集不可列举,由此引入对角线法
 
 - 
对角线法——停机问题的深刻含义
反证,具体证明见 page 215-218
 - 
罗素悖论
R = {X:X 不属于 X} 依然是用对角线法反证
 
数学之美番外篇:快排为什么那样快
- 核心:算法每步都是概率均等的比较,即留下一半的可能性
 - 从信息论的角度解释:只有提出每种答案的概率都均等的问题,才能获得最大信息量
 - 为什么快排其实也不是那么快:概率不均等的比较
 - 基排(radix sort)为什么那么快?概率均等的比较
 - 所有基于比较的排序都逃脱不了 nlogn 的宿命
 
数学之美番外篇:平凡而又神奇的贝叶斯方法
概率论只不过是把常识用数学公式表达了出来。——拉普拉斯
历史
- 源于解决一个“逆概”问题:在此之前人们已经可以计算正向概率,比如袋子里 N 个白球,M 个黑球,摸一个球是黑球的概率多大? 但问题反过来,如果事先不知道袋子里黑白球的比例,闭着眼睛摸一个或好几个球,观察这些取出的球的颜色,可以对袋子里黑白球的比例作出什么样的推测?
 - 现实世界是不确定的,人类的观察能力是有局限性的
 - 我们需要: 1.算出各种不同猜测的可能性大小(计算特定假设的后验概率,对于连续的假设空间则是计算假设的概率密度) 2.算出最靠谱的猜测是什么(模型比较,如果不考虑先验概率就是最大似然方法)
 
一个例子:自然语言的二义性
- The girl saw the boy with a telescope.
 
贝叶斯公式
- 60%男生,40%女生,男生总是穿长裤,女生一半长裤一半短裤。遇到了 N 个穿长裤的人,问有多少女生/多少男生。
 - 假设学校里总人数为 U,于是 穿长裤的男生个数有: U * P(Boy) * P(Pants|Boy),其中 P(Boy)=60%,P(Pants|Boy)是条件概率,即在 Boy 这个条件下穿长裤的概率,这里是 100% 穿长裤的女生个数有: U * P(Girl) * P(Pants|Girl),其中 P(Girl)=40%,P(Pants|Girl)=50% 两者一比就得出了答案
 - 
将答案形式化,我们要求的是 P(Girl|Pants),即穿长裤的人里有多少女生, 而我们的计算结果是 U * P(Girl) * P(Pants|Girl) / (U * P(Boy) * P(Pants|Boy) + U * P(Girl) * P(Pants|Girl)) 即 P(Girl|Pants) = P(Girl)*P(Pants|Girl) / (P(Boy)*P(Pants|Boy) + P(Girl)*P(Pants|Girl)) 分母其实就是 P(Pants),分子其实就是 P(Pants,Girl) 一般形式就是:P(B|A) = P(AB) / P(A),或 P(B|A) * P(A) = P(AB)
 - 
最大似然的 2 个问题
- 并不能提供决策的全部信息
 - 即便一个猜测与数据非常符合,也并不代表这个猜测就是更好的猜测,因为这个猜测本身的可能性也许就非常低 比如:-1 3 7 11 可以说是等差数列,也可以说是多项式-x3/11 + 9/11*x2 + 23/11 把前项当作 x 代入后的计算结果
 
 - 
奥卡姆剃刀
如果两个理论具有相似的解释力度,那么优先选择那个更简单的