Wednesday, December 16, 2015

暗时间 读书笔记



http://blog.me115.com/2014/09/749

记忆和推理

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

学习和思考

人与人学习的差距不在资质上,而在花在思考的时间和思考的深度上。
获得的多少并不取决于读了多少,而取决于思考了多少、多深。
学习一项知识,必须问自己三个重要问题:
  1. 它的本质是什么。
  2. 它的第一原则是什么。
  3. 它的知识结构是怎样的。
我只想说最最重要的,那就是: 让你自己成为一个持续学习和思考的人,并只写你真正思考和总结之后的产物,其他一切就会随之而来。
问题在想通了之后总是简单的,问题的困难程度不在于想通了之后还觉得有多难,而在于从你觉得它难到你觉得它简单需要耗费多少思维体力,你耗费的时间越长,说明有越多的人最终还是没有想明白(路越长走到底的人越少)。
所以,如果你习惯了思考问题,就总会有东西写,先有思考,然后有总结,然后在总结中进一步思考。

保持专注

能够迅速进入专注状态,以及能够长期保持专注状态,是高效学习的两个最重要习惯。
要掌握一门专业知识,其实每天一点时间,专注、积累和持之以恒也就够了。
模仿高德纳先生的名言:过早退出是一切失败的根源。 兴趣遍地都是,专注和持之以恒才是真正稀缺的。

实践与反思

孟岩先生说到,是不是弯路,不是那么容易界定的。 的确,也许真的有更好的路,但事前真的很难判断哪条路是最优的,我们能做到的,是把一条路走透了、走深了,只要不是一条太不靠谱的路,深入的过程中总会有很多的收获。只要不是太顽固,善于反省,总有一天也会逐渐意识到越来越靠谱的路。
时常反省和注意自己的思维过程。尤其是当遇到无法理解或解决的问题之后,最需要将原先的思维过程回顾一遍,看看到底哪个环节被阻塞住了妨碍了理解。问题到底出在哪里。并分析以后需要加强哪方面的思维习惯,才能够不在同样或类似的时候被绊住。对此,将思维的大致脉络写下来是一个很好的习惯。
ps:在叉路口,犹豫不前时,任选一条走下去,在实践的过程中不断反思校正,总会走上属于自己的正确的路;
选择了,走下去,错了也会成对的;

改变顽固的习惯

有一个认知技巧也许可以缓解更改习惯过程中的不适:即把居住在内心的那个非理性自我当成你自己的孩子(你要去培养他),或者你的对手(你要去打败他)也行。总之不能当成自己,因为每个人都不想改变自己。

理解事物的本质

设想自己正在将东西讲给别人听(有声思考;能否讲出来是判断是否真正理解的最佳办法)。设想需要讲给一个不懂的人听。(迫使自己去挖掘知识背后最本质、往往也是最简单的解释)

主题学习

根据主题来查阅资料,而不是根据资料来查阅主题。以前读书的时候是一本一本的读,眼里看到的是一本一本的书,现在则是一章、甚至一节一节的读,眼中看到的不是一本一本的书,而是一堆一堆的章节,一个一个的知识主题,按照主题来阅读,你会发现读的时候不再是老老实实地一本书看完看另一本,而是非常频繁地从一本书跳到另一本书,从一处资料跳到另一处资料,从而来获得多个不同的人对同一个主题是如何讲解的。
在这段时间内,我的业余时间会被一个主题所充斥。反之,如果不知道目的是什么,就不知道往哪个方向上使劲,就容易产生无用功。

讲清楚思维过程

好资料的特点:从问题出发;重点介绍方法背后的理念( rationale ),注重直观解释,而不是方法的技术细节;按照方法被发明的时间流程来介绍(先是遇到了什么什么问题,然后怎样分析,推理,最后发现目前所使用的方法)。坏资料的特点是好资料的反面:上来就讲方法细节,仿佛某方法是从天上掉下来的,他们往往这样写“我们定义… 我们称… 我们进行以下几个步骤… ”。
人们最初是因为面对什么问题才想到这个方法的,其间又是怎样才想出了这么个方法的,方法背后的直观思想又是什么。实际上一个方法如果将其最终最简洁的形式直接表达出来往往丢失掉了绝大多数信息,这个丢掉的信息就是问题解决背后的思维过程。至于为什么大多数书做不到这一点,我在这里试着分析过。
正如解决问题一样,问题卡住解决不了,第一时间要做的就是分析到底为什么解决不了,而不是直接求救。

知识结构: essential的和non-essential

抓住不变量 我喜欢把知识分为essential的和non-essential的。对于前者采取提前深入掌握牢靠的办法,对于后者采取待用到的时刻RTM (Read the manual)方法(用本)。
关键要了解那些重要的思想(很长时间不变的东西),而不是很细的技术细节(易变的东西)。《Computer Systems: A Programmer’s Perspective》就是为此目的,针对程序员的需求总结出那些essential knowledge的好书。
essential的知识也往往正是那些需要较长时间消化掌握的东西;

书写是为了更好的思考

在开始书写你的想法之前,我知道很多人不书写的原因是因为觉得没有什么可写的,其实这是一个怪圈,你越是不开始书写,总是拿有限的思维缓存去默想一个问题,就越是没有内容可以写,如果你逼着自己将一些不成熟的想法写下来,看着自己写的内容,试着进一步拓展它们,就有可能在理性的道路上走得很远,很远。

为什么你应该(从现在开始就)写博客

一开始的时候你是因为要写博客而去使劲地思考和总结,指望给出令人眼睛一亮的东西,到了后来,就变成了因为你习惯了思考和总结,因为你意识到书写是更好的思考,你就必须使你的想法成为文字。至此本和末就会各归原位,不再颠倒。

遇到问题为什么应该自己动手

为了解决一个内存泄漏的bug,你学习了一堆底层知识、了解了一堆调试工具、学习了若干wikipedia页面,表面上看来,仅仅为了解决这一个小bug你的时间花销未免太大了点,然而关键就在于,它的收益远远不止于解决了这一个小bug,下次你遇到任何类似的bug的时候就能够哐当两下就解决之了。 生活或工作中,很大程度上你遇到的每个问题都不是孤立的,既然你遇到了某问题,那么很大的可能性你以后还会遇到类似的问题。

做笔记的窍门

提醒自己在摘抄的笔记上面多加几个自己熟悉的关键字,比如用自己的话来概括一下主旨,因为自己的习惯用词和作者的习惯用词往往不一样,在阅读作者的文字的时候,你也许下意识里会用自己的习惯词汇来重新表述这段文本,并存放在记忆中,结果一段时间之后当要寻找的时候大脑中只记得自己的说法,却不记得作者原话了,然而为了检索到原始文本你必须要知道作者是用什么词汇来表述的。为了弥补这个问题,可以在存放文本的时候加上自己的一段概述,这似乎是一个不错的方案——我们平时在学习和记忆的时候也经常听到类似的提倡:用自己的话复述一遍之后理解得更深刻(实际上是更容易记住和提取出来——知识还是那些知识;此外用自己的话复述也常常触发与自己的知识体系中其他知识的联系,进而编码进更多的记忆提取线索

总结既有知识,抽象高层次知识

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

编程语言的惯用法

GitHub+书单,你最好的简历

新手更能写出教程

最适合将一个东西讲给别人听的时候并不是等懂了很多年以后,而是刚刚弄懂的时候,这个时候从不懂到懂的差别记忆还非常鲜明,能够清清楚楚地记得到底是哪些关键的地方是最折磨人的,也最能够站在不懂者的角度来思考问题。像波利亚这样,成了大师还能够站在不懂者角度去换位思考的,可以说是凤毛麟角。

知其所以然

这是一个树状的知识结构,越往上层走,需要记忆的节点就越少。所谓触类旁通者,其实便是因为他擅长去理解解法背后的更具一般性的东西。所以我还有一个习惯,就是看到美妙的证明和解法总是会去一遍又一遍的去反复揣摩,试图理解想出这个证明的人到底是怎么想出来的,有没有什么一般性的方法可循,很多时候,在这样揣摩的过程中,你会理解到更深刻的东西,对问题性质更深刻的认识,对解决问题的思路更深刻的认识,这些认识不仅对于你理解当前这个定理或问题有极大的帮助,同时也有助于你解决以后会遇到的表面不同但本质一样的问题。
知道怎么做是从正确(高效)解法得到的,而知道为什么必须得那样做则往往是从错误(低效)的解法当中得到的。
一本从思维角度来讲问题求解的书则可以一遍遍将你置于不同的问题场景下然后在该提醒你的时候提醒你,让你醒悟到“哦,原来这个时候也应该想到这个啊。”,做多了这样的思维演习你就会逐渐从中领悟到某种共性,并将一些思维习惯得到强化,于是终于能够在需要运用某策略的时候能适时的想起来了。
里面提到“思维体力”的概念,所谓思维体力就是能够持续集中注意力的时间,注意力造就非凡专家,天才来源于长期的专注的训练。

规划:分割你的任务

善于规划的人,会将目标分割成一个个的里程碑,再将里程碑分割成TODO列表。前阵子流行的GTD方法学,核心的理念就在于,如果你把任务分割了,你就有了进度条,你就知道,事情在不断的进展,你总会完成任务或到达你的目标,你会有一个时间估计。反之如果没有这个分割,整个的任务或目标对你来说就只有两种状态——“完成”和“未完成”

领导的作用:确定正确的方向

程序员基本上是去解决一个定义好的问题,去实施一个定义好的方案。然而决策问题就不一样了,决策问题是需要去定义问题是什么,以及权衡最佳方案是什么,不管是决策技术架构还是决策商业策略,都是非常复杂的思维过程,需要综合和权衡大量的信息,这种能力就不是简单楞着头搞下去能练出来的了,很多时候需要抬起头来看,免得只见树木不见森林。
如何权衡最佳方案实际上是一个复杂的统筹规划。更重要的是,你往往甚至都不知道问题是什么,能够从纷繁的信息中抽象出问题,是一种极大的能力。这里推荐`你的灯亮着吗?:发现问题的真正所在》 和失败的逻辑:事情因何出错,世间有无妙策 

不要为技术而技术

CodingHorror 的作者最近在博客里面跟着 Steve Yegge 同学宣称,如果有一件事情是他想教给程序员同学们的,那就是 Marketing 。无独有偶,有一次吃饭的时候鲍志云同学也提到: Marketing Sense 是很重要的。其实也就是不要总想着写牛代码,用牛语言技术,不要落入为技术而技术的怪圈,而是首先想明白做的事情有什么价值,先弄清做什么,为什么做,再去想怎么做,这样后面的功夫才花的有价值。

学习这件体力活

学习——本质上是个体力活(尽管是有一定方法的体力活),这个体力活大致分为两步: 将外界(书本上的)知识转化为外显记忆。 通过不断练习,将外显记忆转化为内隐记忆
而第二步又包含两个过程: 将关于思维方法的知识转化为内隐记忆从而不知不觉就遵循。 将关于事实知识(例如“定理”、“性质”)的提取线索们转化为内隐记忆从而看到XX就能想到YY。(参考《找寻逝去的自我》第二章“记忆的建构:对现在和过去的编码和提取”) 关于第一点有本不错的书——《学习的艺术》。

暗时间

作者非常注重所谓的暗时间,即充分利用各种碎片时间来思考学习。但由于不同任务之间的切换,大脑需要一定时间才能进入状态。因此要充分利用暗时间,需要锻炼自己快速进入状态的能力,保持状态的思维体力和抗干扰能力。
另外,要适时给自己投入的时间一定“回报”,避免畏难过早退出。

思维改变生活

然而如果我们意识到对于游戏的热爱是正常的,获得群体认同感和成就感的渴望早就刻在了我们的基因上。但这部分动机来源于我们相对原始的大脑,后者并不能区分网络虚拟世界等事物,而我们的理性大脑能够认识到虚拟世界的成就并不能转化为现实世界的成就(电子竞技除外)。当我们进一步意识到自己无法自制是受情绪大脑的错误判断影响后,我们就会觉得任其驱使是非常愚蠢的。而我们的情绪大脑当然并不希望自己是愚蠢的,而且认识到大脑的局限性并最终摆脱它,我们在情绪上会感到愉快。这样就以子之矛攻子之盾。

跟波利亚学解题

解决问题一般通过联想、归约和推理。作者认为大量的练习可以加强联想的能力(即一看到问题就想到解决方法),但有时并不一定有好处,因为它依赖既有知识,并可能形成思维定势。相对来说,归约和推理更加可靠,而且可能得到更多未知的“软知识”,但未必会推理到达想要的结果那里。
作者特别提倡要知其然并知其所以然,看定理必看其证明,看问题的解法必看其所诞生的过程。因为这样可能会得到一些更加普遍的原则和思维方法。
能够迅速进入专注状态,以及能够长期保持专注状态,是高效学习的两个最重要习惯。
我们在日常的工作中总会面对各种邮件,各种会议,各种打断,那么如何在这种任务切换的状态下保持良好的效率?这里就引出了一个高效的好习惯 - 抗干扰。习惯都是在生活中养成的,作者就常在车上看书提高自己扛干扰的能力
在我看来作者所说的 设计自己的进度条 和 敏捷开发 的感觉非常类似,每一个任务就是一个story,每个分割后的小进度条就是一个时间节点,每一个story结束就是一个大的进展。通过这种下意识的心里暗示,我们就清楚的知道自己还需要多少努力才能达到目的,就不会让我们 过早的放弃 ;更能清楚的把握自己的方向,不要在工作、生活、时间的腐蚀中忘记自己的目标。
不要过早退出循环 ”。
我们在尝试新的事物的时候,总是会越到各种各样的困难,不同的人会在碰壁不同的次数之后退出。用程序员喜欢的话来说就是,我们都在for循环,区别在于你是什么情况下break;的。有的人退出阈值高,这是能坚持的一类人;有的人退出阈值低,这类人很可能遇到一些障碍就退出了。
过早退出是一切失败的根源。

靠专业技能的成功是最具可复制性的
它需要的只是你在一个领域坚持不解的专注下去,只需要选择一个不算太不靠谱的方向,然后专心致志地钻下去,最后必然能成为高手或绝顶高手。世上有很多成功带有偶然因素和运气成分或出身环境,但至少这一样,被无数人复制了无数遍,否则就不会存在学校和教育了。
这句话其实就只有一个关键词:专注。
如何有效地记忆与学习
书中先从记忆的机制出发,解释了为什么会有死读书的记忆法,怎么去避免死读书。有关这种提高记忆质量的方法在网上有非常多的讨论,关键就是让记忆有迹可循。“ 缺乏线索的记忆就像记忆海洋中的孤岛,虽然在那里,但是难以访问。而富含线索的记忆则是罗马,条条大路通罗马。 
那么如何在生活中更有效的总结知识,书中提到的方法就非常中肯了。
1、养成习惯,经常主动回顾一段时间学到的东西
2、创造回忆的机会。a.经常与别人讨论,或者讲给别人听;b.整理笔记;c.书写
3、设身处地“虚拟经历”别人经历过的事情
4、抽象和推广。PS:就是把我们遇到的问题用自己的 YY 进行归纳推理,记得有个牛X人说过(是谁忘记了),优秀的程序员都有一颗能YY的心^_^
5、联系/比较自身的经历
下面列举了作者自己的一些学习习惯,确实非常到位。而且对于 思考和选择书 方面作者都有清楚的认识,很值得我们学习:
1、遇到问题的第一件事,Google & Wiki
2、看书挑剔,只看经典。在选择书籍的时候做足功课是对我们自己的时间负责:)
3、做读书笔记
4、关于思考的习惯我就没有那么认同了,不过每个人 适合的方式 都有其区别,可能这个方式会适合你:1.利用走路和吃饭的时候思考;2.睡觉前必须弄个问题在脑子里面,在思考中入睡
5、多看心理学与思维的书,因为它们是跨学科的
6、学习一项知识,必须问自己三个重要的问题。1.它的本质是什么;2.它的第一原则是什么;3.它的知识结构是怎样的
7、学习和思考过程中常问自己的问题。如:目的是什么?收获是什么?设想做自己将东西讲给别人听等。
1、如果你遇到困难,绝大多数情况下你并不孤单,你遇到的问题早就有人遇到过,你踩过的坑里尽是前人的脚印。
2、兴趣遍地都是,专注和持之以恒才是真正稀缺的。
3、生活中的选择远比我们想象的要多,细微的选择差异造就了不同的人生。
4、反思是让人得以改进自己的最重要的思维品质。
5、如果你有一些钱不知道化在A还是B上,你先不作决定,没问题,因为钱还是你的,但是你有一些时间,不知道花在A上还是B上,不行,因为过了这段时间,这段时间就不是你的了
6、一生的知识积累,自学的起码占90%。
7、趁着对一件事件有热情的时候,一股脑儿把万事开头那个最难的阶段熬过去。
利用时间碎片:任何一点时间都可以用于阅读。
主动思考
把要做要学的事情长驻大脑,给予最高优先。

(推理)深入理解事物
深入理解一件事
① 迅速进入专注状态
② 创造大块时间阅读
③ 持续保持状态

六丶靠专业技能的成功是最具可复制性的
在一个领域专注下去。
八丶饿死在干草堆之间的驴子
推迟决定是最差的决定,时间流逝,什么也没得到。
学习最终的目的在于能在恰当的时候能想起来并使用。(学以致用)
能否提取记忆取决于提取线索(概念丶逻辑丶背景知识,相关问题等),和记忆时的线索(当时的场景,问题的背景,空间位置)
用自己的话复述一边

具体方法
1养成习惯,经常主动回顾一段时间学习到的东西。2创造回忆的机会
① 与人讨论,或将给别人听。
② 整理笔记。
③ 书写。
3设身处地“虚拟经历”别人经历过的事。
4抽象的推广 学会看到本质的东西,举一反三。
5联系/比较自身的经历

2. 看是挑剔,只看经典。
3. 做读书笔记。
①阅读时候的闪念
②摘抄书中好例子
③用自己的语言重新表述
4.利用吃饭,走路时间思考
将思考成为习惯 避免焦虑(如果最坏的情况也不过如此,又有什么可担心的?)大脑一个模块兴奋会抑制另一个模块。将焦虑转化为推理,我为什么会焦虑?大脑就会从情绪模块转为推理模块。
5.多看心理学与思维的书,因为它们是跨学科的。
两种知识
① 领域知识
② 元知识,指导我们学习其他所有邻域知识
6.学习一项知识,必须问自己三个重要问题。
①它的本质是什么
②它的第一原则是什么
③它的知识结构是怎样的
7.学习和思考的过程中常问自己的几个问题。
①你的问题到底是什么(提醒自己不要偏离问题)②到此为止,我到底有了什么收获(提醒自己总结,整理学习的东西)
③设想自己正在将东西将给别人听(能否讲出来是判断是否真正理解的方法)
④设想需要将给一个不懂的人听(挖掘知识背后最本质,最简单的解释)
⑤时刻反省和注意自己的思维过程
⑥养成反驳自己的习惯
时间和效率
1.趁着对一件事有热情的时候,一股脑的吧万事开头的那个最难的阶段熬过去。
2.重要的事情优先 避免琐事,能不做就不做。
3.重要的事情要营造比较大块的时间集中做。
4.善于利用小块时间。
5.重视知识的本质
6.重视提前积累的强大力量(比别人往后多看一年,就比别人领先一年的时间准备)

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts