学习框架整理

今天重读刘未鹏的《一直以来伴随我的一些学习习惯》,收获不少,与李笑来相比,刘无论从思考的深度和广度上都更甚。不过作者整理得比较杂乱,我就重新分类并希望以此形成一套思考的框架。没有找到理想的分类方式,就先分为读书,思考,时间,方法四个大块,剩下的整理工作以后继续进行。

  • 读书
  1.  看书挑剔,只看经典。如何选择经典,可以到网上做做功课,看看评价,综合分析一下。
  2. 做读书笔记。一是将自己阅读的时候的思考(包括闪念)总结下来,二是将书中的好例子摘抄下来。(这个习惯是一年前才养成的,发现受益极大。)有了google note,笔记可以加上tag,非常便于回顾,加深理解。我觉得,人与人学习的差距不在资质上,而在花在思考的时间和思考的深度上(后两者常常也是相关的)。
  3. 多看心理学思维的书,因为它们是跨学科的。知识分两种,一是我们通常所谓的知识,即领域知识。二是关于我们的大脑吸收知识的机制的知识,后者不妨称为元知识。虽说这也是领域知识,但跟其它的领域知识不同的是,它指导着我们学习其它所有的领域知识。
  4. 有时间吗?看本书吧。(传统的)阅读和思考永远优于所谓的在互联网上汲取新知识,后者往往浅表、不系统、乃至根本没价值。
  5. 根据主题来查阅资料,而不是根据资料来查阅主题。以前读书的时候是一本一本的读,眼里看到的是一本一本的书,现在则是一章、甚至一节一节的读,眼中看到的不是一本一本的书,而是一堆一堆的章节,一个一个的知识主题,按照主题来阅读,你会发现读的时候不再是老老实实地一本书看完看另一本,而是非常频繁地从一本书跳到另一本书,从一处资料跳到另一处资料,从而来获得多个不同的人对同一个主题是如何讲解的。比如最近我发现在看蒙特卡罗算法时就查了十来处资料,其中有三四篇 paper 和六七本书;这是因为即便是经典的书,你也不能指望它对其中每一个主题的介绍都是尽善尽美的,有些书对某个主题(知识点)的介绍比较到位,有些书则对另一些知识点介绍得比较到位。而有时候一篇紧凑的 paper 比一本书上讲得还要好。我硬盘里面的书按主题分类,每个主题下面都有一堆书,当我需要学习某个主题的知识时(譬如贝叶斯学习或者神经网络),我会把里面涉及这个主题的书都翻开来,索引到相关章节,然后挑讲得好的看。那么,如何判断一个资料是好资料还是坏资料呢?
  6. 好资料,坏资料。好资料的特点:从问题出发;重点介绍方法背后的理念( rationale ),注重直观解释,而不是方法的技术细节;按照方法被发明的时间流程来介绍(先是遇到了什么什么问题,然后怎样分析,推理,最后发现目前所使用的方法)。坏资料的特点是好资料的反面:上来就讲方法细节,仿佛某方法是从天上掉下来的,他们往往这样写“我们定义… 我们称… 我们进行以下几个步骤… ”。根本不讲为什么要用这个方法,人们最初是因为面对什么问题才想到这个方法的,其间又是怎样才想出了这么个方法的,方法背后的直观思想又是什么。实际上一个方法如果将其最终最简洁的形式直接表达出来往往丢失掉了绝大多数信息,这个丢掉的信息就是问题解决背后的思维过程。至于为什么大多数书做不到这一点,我在这里试着分析过。
  7. 有选择地阅读。很多人觉得我读书速度很快,其实我只是有选择地阅读。这里的选择体现在两个地方,一是选择一本书中感兴趣的章节优先阅读。二是对一本书中技术性较弱或信息密度较低的部分快速地略读。一般来说,除了技术性非常强的书之外,大多数书的信息密度很低,有很多废话。一般来说在阅读的时候应该这样来切分内容:1. 问题是什么?2. 方案是什么?3. 例子是什么?如果是需要解释一个现象的(譬如《黑天鹅》),那么1. 现象是什么?2. 解释是什么?3. 支撑这个解释的理由是什么?4. 例子是什么?一般来说,这一二三四用不了多少字就可以写完了(如果假设只举一到两个精到的例子的话),这样的无废话著作的典型是《合作的进化》;那为什么有些书,明明核心观点就那点东西(顶多加上几个精要的例子罢了)却写得长得要命呢?因为人的思维都有一个“联想”的特点,写着写着就容易旁逸斜出,而且作者自己也往往觉得引申出去挺牛逼,有时候很多与主题无关的废话就掺和进来了;那么,阅读的时候就应该有选择性地滤掉这些不相干的废话;此外还有一种可能性就是大量冗余的例子。一般来说组织得比较好的书会有详细且一目了然的目录和索引,根据目录首先就可以滤掉一部分(比如某个子章节的内容你以前是看过的),然后有时候作者还会举很多冗余的例子,如果你已经觉得印象够深刻了这些例子完全可以不看(一些书就非常厚道地对每个观点只辅以一两个最最经典的例子,譬如《与众不同的心理学——如何正视心理学》,这样的书我最是喜欢)。
  8. 为什么看不懂?如果看不懂一个知识,一般有如下几个可能的原因:1. 你看得不够使劲。对此古人总结过——书读百遍其义自现。虽然这个规律不是任何时候都成立的,但是从认知科学的角度看是完全可以解释的,我们在阅读的时候,注意力往往会有选择性地关注其中的某一些“点”,而忽略了另一些“点”,于是一遍看下来可能因为某一些忽略导致无法理解整体。或者干脆看的时候就没注意其中一些细节但重要的东西。此外,大脑理解一个东西需要一定的处理时间,人脑的处理速度很慢,神经冲动每秒传输速度不过百米,所以不能指望看到哪懂到哪。最后,我们可能因为思维定势的原因会从某个特定的角度去看一句话而忽略了从不同角度去理解的可能性。对于这类情况,仔仔细细地再多读两遍,多试着去理解两遍,往往会“哦!原来这样。”地恍然大悟。2. 其中涉及到了你不懂的概念。这是技术性的不理解。这种情况就需要 Cross Reference 。如果一句话中用到了你不懂的概念,那就去查,现在很多书都是电子书,直接搜索一下,或者,对于纸书,看一下书后面的索引就行了。奇怪的是很多人看不懂也不分析一下为什么不懂,就直接放弃了。正如解决问题一样,问题卡住解决不了,第一时间要做的就是分析到底为什么解决不了,而不是直接求救。3. 作者讲述的顺序不对,你接着往下看,也许看到后面就明白了前面的了。
  9. 如何在阅读之前就能获得对一本书质量的大致评估。在深入阅读之前能够迅速评估一本书的质量可以节省很多时间。基本上有几个线索:1. 看作者。牛作者写的书一般都不错。2. 看目录和简介。一份好的目录和简介能够透露这本书质量的相当一部分信息。目录结构是否清晰,是否直白(而不是装神弄鬼),都是衡量的线索。3. 看 Amazon 上的评价,这里要注意的是,除了看整体打分之外,更要看打分最低的人是怎么说的,因为小众意见往往有可能来自那些真正懂行的人(除了来踢馆的),如果在打分最低的意见里面看不到真正有价值的反驳意见的话就相当肯定书是不错的了。4. 看样章。Amazon 上一般都可以随机浏览一些章节的,表达是否清晰,论证是否严谨,内容是否深刻,基本是几页纸就能看出来的。
  10. 如何搜寻到好书。几个线索:1. 同作者的著作。2. Amazon 相关推荐和主题相关的书列(类似豆瓣的豆列)。3. 一本好的著作(或一份好的资料——不管是书还是网页)在参考资料里面重点提到的其他著作。4. 有时对于一个主题,可以搜索到好心人总结的参考资源导引,那是最好不过的。
  11. 制定简要的阅读计划:选出最近认为对你最有价值的书,先总览一下,决定阅读的顺序(哪些章节可以优先阅读)。然后每天看一点。并利用走路、吃饭、乘车或其他不适合带着书和笔的时间来总结看过的内容,建立知识结构,抽取知识本质,与以往的大脑中的知识建立联系。(参见《奇特的一生》
  • 思考
  1. 利用走路和吃饭的时候思考,还有睡觉前必然要弄一个问题放在脑子里面,在思考中迷糊入睡。发现这样一来往往在不知不觉中多出来大量的思考时间。还有一个很大的好处——避免焦虑。卡耐基用一整本书讲了一个有效的做法来避免焦虑——底线思考。然而实际上还有另一个有效的做法,就是投入地做另一件事情。不去想”喜马拉雅山上的猴子”的方法并不是使劲的告诉自己不去想”喜马拉雅山上的猴子”,因为那样等于就是脑袋里想了那只猴子,正确的做法是真的不去想那猴子,而是想别的。用别的东西充满工作记忆,其他的神经活动自然会被抑制(神经科学基本事实)。所以,感到焦虑的时候不妨思考吧,甚至完全可以去理性分析和思考导致焦虑的问题本身,将其拆解,分析来源,在不知不觉中,大脑的工作重心就从情绪模块转向了推理模块了,而且这思考也可能顺带更有效地解决了导致焦虑的问题呢:)
  2. 学习一项知识,必须问自己三个重要问题:1. 它的本质是什么。2. 它的第一原则是什么。3. 它的知识结构是怎样的。
  3. 获得的多少并不取决于读了多少,而取决于思考了多少、多深。
  4. 学习和思考的过程中常问自己的几个问题
    • 你的问题到底是什么?(提醒自己思考不要偏离问题。)
    • OK,到现在为止,我到底有了什么收获呢?(提醒自己时不时去总结,整理学习的东西)。
    • 设想自己正在将东西讲给别人听(有声思考;能否讲出来是判断是否真正理解的最佳办法)。
      3.1 设想需要讲给一个不懂的人听。(迫使自己去挖掘知识背后最本质、往往也是最简单的解释)。
    • 时常反省和注意自己的思维过程。尤其是当遇到无法理解或解决的问题之后,最需要将原先的思维过程回顾一遍,看看到底哪个环节被阻塞住了妨碍了理解。问题到底出在哪里。并分析以后需要加强哪方面的思维习惯,才能够不在同样或类似的时候被绊住。对此,将思维的大致脉络写下来是一个很好的习惯。
    • 养成反驳自己的想法的习惯:在有一个想法的时候,习惯性地去反驳它,问自己“这个难道就一定成立吗?”、“有没有反例或例外?”、“果真如此吗?”之类的问题。(参见Critical Thinking
    • 人的思维天生就是极易流于表面来理解事物的(参见《Psychology of Problem Solving》第11章)。觉得自己理解了一个问题了么?条件反射性地问自己:你真的理解了吗?你真的理解了问题的本质了?问题的本质到底是什么?目前我的理解是什么?我对这个理解感到满意吗?这样的理解到底有什么建设性呢?等等。
  5. 重视知识的本质:对于程序员来说这一点尤其重要,程序员行业的知识芜杂海量,而且总是在增长变化。很多人感叹跟不上新技术。应对这个问题的办法只能是:抓住不变量。大量的新技术其实只是一层皮,背后的支撑技术其实都是十来年不变的东西。底层知识永远都不过时。算法数据结构永远都不过时。基本的程序设计理论永远都不过时。良好的编码习惯永远都不过时。分析问题和解决问题的能力永远都不过时。强大的学习能力和旺盛的求知欲永远都不过时。你大脑的思维方式永远都不过时。
  6. 重视积累的强大力量,万事提前准备:计划订长一点,自然就可以多获得准备的时间。设想你若干年后会在做什么事情,需要哪些技能,现在就开始准备。一个5年计划便可以让你获得从现在开始的5年准备时间。5年中每天腾出半个到一个小时专心于某一件事情,认准一个方向,每次走一点,其实不要说5年,两年就会发现会起到宏大的效应。长期订阅我的Blog的朋友们也一定注意到我基本上不写东西,一般一个月写上2篇就算多的了。但总结一段时间的学习和思考的习惯却一直都没有停止(博客文章对我来说是学习和思考的副产品,我并不为写文章而写文章),所以5年下来竟也写了不少东西。所以这就是一个简单的例子。你大致还可以从我的Blog看出来我一段时间关注的东西,一般来说,一段比较长的时间(少则半年至一年——譬如对心理学与思维的关注;多则几年——譬如对编程技术的关注),在这段时间内,我的业余时间会被一个主题所充斥。反之,如果不知道目的是什么,就不知道往哪个方向上使劲,就容易产生无用功。
  7.  抬起头来:人的思维是非常容易只见树木不见森林的(否则这个成语从哪来的呢?)。时不时抬起头来审视一下自己正在做的事情,问一问它(对现在或未来)有什么价值,是不是你真正希望做的。你学到的东西到底是什么?它们重要吗?你需要在这个时候学习这些吗?(见第2条)。你的时间就是你的资源,你投入这些资源来掌握知识,所以到底用来掌握哪些知识是一个很重要的问题。仅仅遵循兴趣是不够的,人会对很多次要的东西产生兴趣,并一头钻进去浪费好多时间。所以判断一个东西值不值得学习是很重要的。
  8. 有时间吗?总结总结最近得到的新知识吧。一般来说,我在一段时间内学习的一些东西总是会在这段时间内一直在脑子里打转,一有时间空隙(譬如走路,吃饭)它们就会自己蹦出来,促使我去进一步思考和总结。永远不要认为对一个知识的把握足够深刻,“理解”的感觉很多时候只是假象。学会反问自己对知识到底把握了多少,是很有价值的。(如何反问,前面的总结中有提到)。
  9. 学习一个东西之前,首先在大脑中积累充分的“疑惑感”。即弄清面临的问题到底是什么,在浏览方法本身之前,最好先使劲问问自己能想到什么方法。一个公认的事实是,你对问题的疑惑越大,在之前做的自己的思考越多,当看到解答之后印象就越深刻。记得大学里面的课本总是瀑布式地把整个知识结构一览无余地放在面前,读的过程倒是挺爽,连连点头,读完了很快又忘掉了,为什么?因为没有带着疑问去学习。
  • 时间
  1. 重要的事情营造比较大的时间块来完成。比如一本好书,或者一个重要的知识点,最好不要切得太琐碎了看,否则看了后面忘了前面。不利于知识的组织&联系。
  2. 善于利用小块时间,也就是《奇特的一生》中所说的“时间下脚料”,如何利用前面有几个方法。同时,也善于创造整块时间(如通过要事优先)。
  3. 重要的事情优先(详见史蒂芬·柯维的《高效能人士的七个习惯》《要事优先》)。尽量避免琐事骚扰,不重要的事情能不做就不做。有时候,紧急的事情往往只是当事人觉得必须马上做完才显得紧急或者干脆就是紧他人之急,最糟糕的就是纯属性格上原因觉得每件事情都得第一时间完成,很多看上去紧急的事情实际上并不是真的”不能再拖了”,有的干脆就并不需要或值得去做。有很多事情都是可以先放一放甚至完全let go的,否则的话就整天被所谓”紧急”的事情牵着鼻子走了。
  • 方法
  1. Google&Wiki(遇到问题做的第一件事情,也是学习某个东西做功课(homework)最先用到的东西。
  2. 关于习惯的养成,必须要说明的:经常看到有些人评论说,说说容易,做起来哪有那么容易啊(另一个无关习惯的“说起来容易做起来难”则是因为纸上谈兵不可能算计到所有现实中的因素,但那是另一个问题)。对此我要说的是,做起来当然不容易,所谓江山易改,本性难移。人的性格和认识事物的框架是长期积累养成的,并且人们非常珍视自己的信念(英语里面表达不相信某个东西叫做“I don’t buy it”)。从进化心理学上这是有依据的,一个经过时间检验的信念往往是更靠谱的。只不过可惜的是靠谱不代表最佳,一个信念能让你活下来并不代表能让你活得最好(详见《Mene Genes》,更多的例子参见《How we know what isn’t so》)。我们评判一个信念的标准是satisficing原则(即足够,能行就好,这个术语不是我提的,是大牛Herbert Simon提的),并不是optimizing原则。话说回来,为什么说起来容易做起来难,是因为“说”只是理性上承认正确,并没有考虑到我们每个人大脑中居住的那个非理性自我。这个自我以强大的情绪力量为动机,以习惯为己任,每时每刻都驱使着我们的行为。因为它掌握了“情绪”这个武器,所以我们只能时时拿它当大爷。不记得是哪位哲学家说的了,理性是感性的奴隶。那么,是不是就是说无法克服既有习惯了?以我的经验(以及观察到的别人的经验),还是可以的。第一条就是认识到习惯的改变绝不是一天两天的事情,承认它的难度。第二条就是如果你真想改掉习惯,就需要在过程中常常注意观察自己的行为,否则习惯会以一种你根本觉察不到的方式左右你的行为让你功亏一篑。有一个认知技巧也许可以缓解更改习惯过程中的不适:即把居住在内心的那个非理性自我当成你自己的孩子(你要去培养他),或者你的对手(你要去打败他)也行。总之不能当成自己,因为每个人都不想改变自己。注意,这跟自我欺骗不同。一来,我们的情绪系统只能这般对付(《Synaptic Self》中提到,大脑中的新皮层(neocortex,所谓“理性”居住的地方,尤其是前额叶)在进化历史上是较为新近的年代才进化出来的,跟底层较原始的模块(如主管情绪的杏仁核)之间的神经网络沟通并不是合作无间,这就解释了为什么有些事情我们明明知道是对的,但就是不能说服自己,情绪还是在那里不依不挠的驱使你去做另一样事情)。二来,我们知道在干什么,所以不能算欺骗:P 总之,对于习惯的更改,除了最重要的一日三省,加上一些认知技巧(其实每个人都是自己的心理学家,你可以自己看看能不能想出什么法子)。其实是没有什么速效银弹的。但是,知难而不退嘛,值得做的事情几乎总是如此:)
  3. 退订RSS:RSS Reader是个时间黑洞。就算mark all as read,在有大量feed的情况下,也会无形中消耗掉大量的时间。我们一旦订阅了某个RSS之后就会倾向于不肯退订它,心想也许某天有个重要的信息会从那里得到。这其实是源于人不肯”关上一扇门(即便门内的收益概率极小)”的心理(参见《Predictably Irrational》);而实际上,关上一扇门,有时能够增大收益期望。仔细观察一下reader里面的feeds,有哪些是真正有价值的,把那些没价值的或者价值很小乃至于不值得每天被它骚扰的,全都退订掉。不要舍不得,那些一个星期都没出现让你眼睛一亮的内容的feed,很大的可能是永远也不会出现。就算可能,也别担心你会漏掉什么宝贵信息,真正宝贵的信息,在其他来源你也会接触到的。一开始我的Greader里面每天都有大量的新内容,每天都是1000+,但一段时间之后发现除了信息焦虑,实际上有价值的内容不多,现在,我很高兴地发现自己摆脱了这种状况,我持续不断地退订feeds,留下的内容越来越少,也越来越精,带来的阅读焦虑也越来越少。(顺便推荐一个东西,aideRSS,初步使用,感觉对订阅reddit这样的每天更新大量内容的feed很有用)。
  4.  趁着对一件事情有热情的时候,一股脑儿把万事开头那个最难的阶段熬过去。万事开头难,因为从不了解到了解基本的一些事实,是一个新知识暴涨的阶段,这个时候的困难是最大的。有人熬不过去,觉得困难太大就放弃了。不过,狂热的兴趣可以抵消对困难的感觉,所以趁着对一件事情有热情的时候,开一个好头是很重要的。(当然,这并不是说持之以恒就不重要了)。当然,也许这个是因人而异的,对我来说我会在对一件事情有浓厚兴趣的时候非常专注地学习,把很多 groundworks 做掉。后面就会顺利一些了。

被“外遇”

平静的家庭生活中,男主突然连续一段时间晚归,女主会去想:TM的是不是在外面有人了?
又过了好一段时间,男主还是继续晚归,女主越来越验证自己的想法。
于是,悲剧开始了。

问题出在哪?
女主犯了一个错误。
她把P(外遇|晚归)错认为是P(晚归|外遇)了,而P(晚归|外遇)>>P(外遇|晚归)。
女主带着“外遇”这个先验条件去检验她的判断,连续几天都是这样,越检验越“正确”,似乎证实了她的判断。

这个错误看起来十分明显,但作为当事人时,我们总是难以察觉。做任何事情时,我们都受到并不知晓的有色眼镜的影响。我们总是相信自己或者只有自己看世界一如它呈现的那样,其他有不同看法的人都是带有偏见的(Blind to bias)。更重要的是女主没学好概率论,弄混了条件概率中的条件。

当男主经常晚归这一事实发生,女主又为什么认为是外遇呢?(可能电视剧看多了,八卦听多了 TOT…)

有两个原因。
1.由于女性相对男性天生缺乏安全感。这是由于身体构造,社会分工 blablabla的原因造成的[2]。
2.开始是焦点效应(spotlight effect)发生作用,我们往往会把自己看作一切的中心,并且直觉地把事情和自己联系起来。后来女主在作出判断之后,总是能感受到负面情绪在内心出现,因为时刻在关注它是否有出现,注意、强化、更注意…… ,直到女主不能承受为止。

[1]The grand delusion: Why nothing is as it seems
[2]女性天生缺乏安全感的原因

Ubuntu 11.10 文本中文乱码解决

由于Gedit在11.10版本中已经升级,原来使用的方法不再适用,新的节点改在了

org/gnome/gedit/preferences/encoding

解决方案:

sudo apt-get install dconf-editor
dconf-editor
#展开org/gnome/gedit/preferences/encodings
#Add GB18030 在utf-8之后
#show-in-menu 中也加入GB18030

推迟满足感

最近在李笑来老师的博客上看到了篇关于延迟满足感的文章,加上以前曾看到相关的两个TED视频,把它们一起整理下来。
1.先別吃棉花糖

2.不要公开宣布你的个人目标

3.推迟满足感
提出“情商”(Emotional Intelligence)概念的美国著名心理学家戈尔曼(Daniel Goleman)曾做过一个关于“推迟满足”(delaying gratification)的实验。

找来一批四岁孩子,给他们每人一块糖,并告诉他们若能等主持人回来再吃这块糖,则还能吃到第二块糖。戈尔曼悄悄观察,发现有的孩子只等了一会儿便不耐烦,迫不急待地把糖塞进了嘴里;而有的孩子则很有耐心,而且很有办法,想出作游戏啦、讲故事之类种种方式拖延时间,分散注意力,最终坚持到主持人回来,得到了第二块糖。戈尔曼又对这批孩子14 岁时和进入工作岗位后的表现进行了跟踪调查,发现晚吃糖的孩子数学和语文成绩比早吃糖的平均高出120分,而且意志坚强,经得起困难和挫折,更容易取得成功。

据说,这个实验说明的是,要取得大的成绩就不能急功近利,不能为当前名利所诱惑,能按社会需要不怕挫折、坚持不懈奋斗是取得成就的重要因素。

这样的结论不知道被多少书引用,并且被反复重申。可是,我看到的是另外一回事儿。“大多数孩子没有等到主持人回来,已经把糖吃掉了”这样一个事实能够完全证明的或者说明的也许只有两件事儿:1) 希望自己的欲望马上获得满足(instant gratification)是大多数人的天性;2) 野心是永远是少数人的天性。

至于“忍住欲望”究竟能不能决定成功,答案只能是“也许”——和其他所有的“也许”一样,仅仅是零 – 壹之间(不含零和壹)的某一个数值。如果不是“也许”而是“必然”的话,那么,所有的苦行僧都应该必然成功。但是事实明显并非如此——即便是苦行僧,也和其他任何一个群体一样,成功的人永远是少数。不禁想起来前段时间流行的戏谑:“要练神功,必先自宫——就算自宫,也未必成功!”

另外,要知道一个人有无自制能力和此人是否有才华,其实是完全不相干的。古今中外这样的例子多得去了。写下“铁马云雕共绝尘,柳营高压汉宫春。天清杀气屯关右,夜半妖照渭滨。下国卧龙空寤主,中原得鹿不由人。象床宝帐无言语,从此周是老臣。”的温庭筠就是大头才华横溢小头从不争气的一个人。考了那么多年中不了进士就是因为考试作弊上瘾。注意,以他的才华,他是从来不需要抄写别人的。他是帮别人作弊上瘾,并且死活管不住。一上考场,三下五除二就把自己的卷子答完,然后把周围的人全帮上一遍——人送外号 “救救人”。还有,这哥们只要能弄到钱,就一定去春楼花到欠债为止。都到了六十岁,还和一帮人酗酒嫖娼,结果犯了宵禁的法令,被虞侯打得鼻青脸肿……

尽管大家都知道不是每个欲望都能被满足,但是我们都有无穷无尽的欲望是个确定的事实。于是,哪怕用脚趾头想想都能明白,不劳而获是每个人心中所拥有的诸多梦想之一,甚至可能还是其中最大的梦想。如果不能做到不劳而获的话,那就最好尽量少劳但是一定要尽量多得,并且多多益善。更进一步,大多数人看法惊人地类似甚至相同:如果有收获的话,那最好要马上有收获;如果没有收获的话,那最好要马上有结果。每个人都有这种欲望,只不过或者程度不同,或者在不同的方面表现得各不相同。

这就解释了为什么有些人比另外一些人更容易迷恋赌博。因为这些人比另外一些人更想要甚至需要马上获得结果。赌场里各种赌博形式中赌鬼们最喜爱的就是老虎机了。赌王是不玩老虎机的,因为他们在这种纯粹的赌博中得不到乐趣的同时也不能保证收益。但是赌鬼们不一样,尽管这些赌鬼和赌王一样有着强烈的赢利欲望,但是,赌鬼潜意识里还有另外一个更需要满足的欲望——那就是“马上看到结果”。老虎机可以在这方面满足这些赌鬼——它的操作极为简单,拉一下手柄,五秒钟之内就得到结果——结果是输是赢其实并不重要,重要的是“五秒钟之内就得到结果”!

同样的道理,酗酒无度的、嫖娼乐此不彼的、吸毒不顾死活的、玩电游没完没了的,都是这种“希望自己的欲望马上获得满足的天性”使然。要命的是,整个社会在用各种各样的方式刺激人们的这种天性并使其越来越强烈。电视广告告诉你所有的减肥药都有神奇的功效,当天开始见效。报纸上的医疗广告告诉你无论你得了病都不要怕,找他——手到病除。各种培训班告诉你不管学什么都要速成,因为人生苦短。有一种防身术学习班期期火爆,看看它的名称就知道为什么这么火爆了——“一招制敌”!

也许最善于利用人类天性的商业机构就是银行了。想住大房子?好!我给你办贷款,慢慢还,不着急,三十年之内还清就好。想买新款轿车?行!我给你办贷款,不用还得太快,三五年之内还清就可以。房子有了,车子有了,还想要什么?说,没关系。不怕你没有钱,我可以给你办信用卡,透支么,给你10万的信用额度,想买什么就买什么吧!这是一个“享受在先”的时代!并且人人如此!当然了,关于银行是如何对付那些最终欠债不还的人,它可从来不会在广告上提及,也尽量不对外公开。

其实,承认“希望自己的欲望马上获得满足” 是自己的天性就好办了。因为,平静接受并且正确认识自己的天性是改变天性的第一步。就算有些时候天性难移,无法彻底改变,那么也起码还可以稍加控制,略微改善。没必要控制自己的方方面面,这不是很难做到,而是干脆不可能做到。尤其是对大脑格外活跃的人更是如此。所以,有的时候成为高手需要愚钝,金庸小说里的郭靖成为一代宗师的根本原因更可能是因为他傻到一定程度,所以,很多人或事情对别人来讲是诱惑,对他来讲是干脆就是不存在的;于是,他可以用普通的智商长期只专注在一件最应该做的事情上,最终天下无敌。

控制这种天性正确的方法是,仔细审视一下自己都在哪方面这种天性尤为强烈?再一次拿出纸笔罗列。经过几天甚至几个月的长期反复审视,你会发现那个列表变得越来越长。别怕,相信我,谁都是这样的——至少99.9%的人是这样的。然后从列表中挑出一个最重要的(如果你有野心的话,再挑出一个也很重要的),写在随时可以看到的地方,不停地提醒自己这方面一定要控制这种天性。

我个人觉得,在工作和学习上控制这种天性是最重要的。为了能在这一个方面控制住自己的天性,有的时候,在其他方面稍微放纵一下都是非常有必要的。相信我,偶尔大醉一场没什么不好。偶尔连续打上两天两夜的牌不仅有助于身心健康也是一种很好的社交活动。但是,在工作和学习上,坚决不要放纵。工作和学习都是艰苦的,路程都是漫长的,成果都不可能一蹴而就。经验告诉我们,工作和学习的过程中当然需要技巧,但是,当场见效的技巧少之又少,而且,就算找到了,也只不过是两种情况之一:1) 寻找这个技巧已经花费了太多的时间;2) 这个技巧可能有后遗症,只不过是现在还不知道而已。

事实上,“推迟满足感”是心智成熟的人必备的能力,也是需要挣扎和锻炼才可以习得的能力。在生活中,只有极少数人最终掌握了这个能力,也因此使得他们与众不同的同时又往往令他人迷惑地意味“我怎么看不出来他到底比我强在哪里呢?”其实,说穿了就很简单,掌握了“推迟满足感”之技巧的人早就有因此获的极大的、只有少数人才会获得的利益的经历。于是,他们最终表现为比绝大多数人“更有耐心”——甚至,惊人的耐心。这些耐心被用来不动声色地承受更多的打击和挫折,轻松坦然地面对更多的威逼和利诱;甚至,可能会仅仅因为他们惊人的耐心,那些打击和挫折对他们来讲不再称得上是打击或者挫折,那些威逼和利诱对他们来讲根本并不存在……

再次,这是个依赖经验才能真正体会并理解的道理——乃至于很多人一生都无法获得这种经验,无法理解这种道理。前面的这段文字,再次尽管啰唆但值得反复认真阅读——尽量运用你的心智能力去思考,去体会,去凭空演练,而后,掌握个中道理以及技巧。再次体会运用心智获得解放的快乐。

真正拥有耐心,甚至惊人的耐心的你,生活就会从此开始发生天翻地覆的变化。你会发现,你对追逐新潮的电子商品失去了兴趣——那可是过去你为之不停地浪费时间和金钱的主要渠道之一。你会很自然地等待到下一个新产品的推出之前,用相对很低的价格买下它,然后,在避免了所有兼容性麻烦的情况下,让那个曾经时髦的产品在你的手中变成实用的产品。

维吉尼亚大学的心理学家阿尼塔.克雷顿博士(Dr. Anita Clayton)甚至通过设计精巧而严密的实验,用其统计结果来说明所有的丈夫都应该通过练习学会“推迟满足感”的技巧,即,通过有意减少性交次数,和延长性交之前的交谈爱抚时间大大提高性生活的质量。按照阿尼塔.克雷顿的观点,性压抑和性欲得不到满足,直接与各种我们常见的精神疾病紧密相关。她表示她非常惊讶,搞不明白人们为什么会对仅仅通过运用心智就可以无成本地解决的简单问题,却要么逆来顺受一辈子,要么花上大价钱购买昂贵的药物或者去约见心理医生——往往到最后只不过是不了了之?

耐心有着神奇的力量。当每个人都在拖延,最后又手忙脚乱的时候,你的生活却非常从容。因为你从一开始就知道你今天的所有轻松安逸,都可能是未来的成本;所以,你早就把一些轻松安逸安排到未来的某个时段,而心平气和地每天完成相应的工作。于是,你不仅从容,而且快乐。你会变成一个守时的人,一个生活规律的人,一个身边的朋友都信赖的人。你会定时去健身房,从不为自己瘦得太慢而烦恼的同时竟然用节食甚至吞食泻药的方法去减肥,因为,在那些人因为无奈而抱怨的人面临绝望的时候,你早已经是持续锻炼了许多年的健康的人。

编译原理笔记

这学期学习编译原理,一门比较难啃的课程,于是做成笔记鞭策自己,教材主要参考“龙书”,部分参考《编译原理基础》,顺便鄙视下学校采用这么非主流的教材。

Update Log :

  • 10.23 :词法分析部分。含自动机,NFA到DFA转换。把之前写过的程序整理上来。
  • 10.24:去除无效代码部分完成,可剔除单行及多行注释
  • 10.26-10.28:完成词法分析主程序,能够识别浮点数及转义字符并识别简单词法错误

Ⅰ词法分析(lexical analysis)

将字符序列转换为单词(Token)序列的过程。进行语法分析的程序或者函数叫作词法分析器(Lexical analyzer,简称 Lexer),也叫扫描器(Scanner)。词法分析器一般以函数的形式存在,供语法分析器调用。

1.正规式及自动机部分(搁置)

2.NFA及DFA(整理中)

3.设计及编码

  •  去除注释,得到有效代码:(过两天要进行重构)

Continue reading …

IPV6 OpenVpn 搭建

1.安装LZO,OPENVPN

yum install gcc gcc-c++ kernel-devel openssl-devel  patch -y
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz
wget http://swupdate.openvpn.org/community/releases/openvpn-2.2.0.tar.gz
wget https://github.com/downloads/jjo/openvpn-ipv6/openvpn-2.2.0-ipv6-0.4.16.patch.gz -no-check-certificate
gunzip -d openvpn-2.2.0-ipv6-0.4.16.patch.gz
tar zxvf openvpn-2.2.0.tar.gz
tar zxvf lzo-2.06.tar.gz
patch -E -p0 < openvpn-2.2.0-ipv6-0.4.16.patch
cd lzo-2.06 && ./configure && make && make install
cd ../openvpn-2.2.0 && ./configure && make && make install
cd .. && cp -r ./openvpn-2.2.0/easy-rsa/ -r /etc/openvpn

2.初始化PKI并生成证书

cd /etc/openvpn/2.0/
export D=`pwd`
export KEY_CONFIG=$D/openssl.cnf
export KEY_DIR=$D/keys
export KEY_SIZE=1024
export KEY_COUNTRY=US
export KEY_PROVINCE=CA
export KEY_CITY=SanFrancisco
export KEY_ORG="anrua" #引号要用英文半角符号
export KEY_EMAIL="i[at]anrua.com" #引号要用英文半角符号
. vars
./clean-all
./build-ca
./build-key-server server
./build-key keyname

./build-dh

3.把生成好的证书下载到本地

find ./ -name "*.crt" -or -name "*.key" -not -name "server.key" -not -name "ca.key" |  xargs tar czvf keys.tar.gz

4.创建服务端配置文件(命名为*.conf)

local 2604:6600:1093::efe1:23f2 #替换为你的ipv6地址
port 9999
proto upd6       #可替换为tcp[tcp6]
dev tun
ca /etc/openvpn/2.0/keys/ca.crt
cert /etc/openvpn/2.0/keys/server.crt
key /etc/openvpn/2.0/keys/server.key  # This file should be kept secret
dh /etc/openvpn/2.0/keys/dh1024.pem
server 10.8.2.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp-udp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 205.185.112.68"
push "dhcp-option DNS 205.185.112.69"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
#cipher AES-128-CBC   # AES加密,可取消
comp-lzo
;max-clients 100
user nobody
group nobody
persist-key
persist-tun
status openvpn-status-udp.log
log         /var/log/openvpn/openvpn-udp.log
;log-append  openvpn.log
verb 3
#把此配置文件上传到/etc/openvpn/2.0/conf/

5.配置路由转发并启动服务

/sbin/iptables -t nat -A POSTROUTING -s 10.8.2.0/255.255.255.0 -j SNAT --to-source [ipv4地址]
service iptables save
service iptables restart
sysctl -w net.ipv4.ip_forward=1
/usr/local/sbin/openvpn --config /etc/openvpn/2.0/conf/v6.conf&

6.配置客户端文件并连同刚才下载的keys.tar.gz一同分发给用户

client
dev tun
proto udp6
remote 2604:6600:1093::efe1:23f2 9999
ca ca.crt
cert client.crt    #和以上client证书名对应
key client.key     #和以上client的key名对应
ns-cert-type server
#cipher AES-128-CBC
comp-lzo
comp-noadapt
verb 2

7.客户端配置参照

http://vpn6.anrua.com/openvpn-configuration/

提高效率:远离高科技

最近读到一篇文章,其中讲到有几个提高工作效率的方法,摘抄几条:

  • 不要上闲网,如果忍不住了,可以用这两个插件屏蔽网站 :

Leechblock for Firefox and StayFocusd for Chrome

  • 设置专门的游戏帐户,密码尽量长(对不打游戏的没用)
  • 尽量使用Unix或Linux的Console模式工作(还没有geek到这个程度)
  • 用纸笔代替电脑打草稿(一直都这样,可以推广到先在纸上写代码)
文章的核心观点

The productivity paradox, popularized by economist Erik Brynjolfsson, notes that computational power has advanced exponentially for decades, yet growth in labor productivity remains modest.

While many factors explain the paradox, the one most relevant to modern knowledge workers is the dual capacity of technology to aid and to distract.

To resolve this paradox, my guiding principle for productivity applies:

Mold your life so that the path of least resistance is the path of maximum productivity.

The key to unlocking the productive potential of technology is to cripple it.

Erect and enforce barriers to using technology to procrastinate.

实现sqrt(double x)

1. 牛顿迭代法
可以取x初值为神数0x5f375a86

double SqrtByNewton(double var)
{
    double x=var;

    while(x*x-var>1e-6 || var-x*x>1e-6)
    {
        x=(x+var/x)/2;
    }

    return x;
}

2. 二分法
效率较牛顿二分法低

float SqrtByBisection(float n)
{
    if(n < 0)
        return n;
    float mid,last;
    float low,up;
    low=0,up=n;
    mid=(low+up)/2;
    while((mid-last) > 1e-8 || (last-mid) > 1e-8)
    {
        if(mid*mid>n)
            up=mid;
        else
            low=mid;
        last=mid;
        mid=(up+low)/2;
    }

    return mid;
}

3.在牛顿迭代法的基础上,还有一个更为神奇的方法,请移步

http://blog.redfox66.com/post/2010/10/06/sotry-about-sqrt.aspx(已失效)