<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>刘未鹏 &#124; Mind Hacks</title>
	<atom:link href="http://mindhacks.cn/feed/" rel="self" type="application/rss+xml" />
	<link>http://mindhacks.cn</link>
	<description>思维改变生活</description>
	<lastBuildDate>Sun, 20 Nov 2011 13:31:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>怎样花两年时间去面试一个人</title>
		<link>http://mindhacks.cn/2011/11/04/how-to-interview-a-person-for-two-years/</link>
		<comments>http://mindhacks.cn/2011/11/04/how-to-interview-a-person-for-two-years/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 17:18:00 +0000</pubDate>
		<dc:creator>刘未鹏</dc:creator>
				<category><![CDATA[学习方法]]></category>
		<category><![CDATA[未分类]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[杂感]]></category>

		<guid isPermaLink="false">http://mindhacks.cn/2011/11/04/how-to-interview-a-person-for-two-years/</guid>
		<description><![CDATA[Joel Spolsky曾经感叹：招聘难，难于上青天（此处笔者稍加演绎:)）。他有两个辛辣但不乏洞察力的断言：真正的牛人也许一辈子就投大概4次简历，这些家伙一毕业就被好公司抢走了，并且他们的雇主会给他们不赖的待遇，所以他们也不想挪窝。（刚刚去世的Dennis Ritchie就是这样一个人）而“人才”市场上能找到的大多都不是什么人才。招到这帮人轻则费钱重则把你公司搞挂。

诚然，也许没有哪个行业像IT行业这样，无形资产占据公司的绝大多数资产。拒坊间传言比尔·盖茨就曾经说过类似这样的话：只要允许我带走100个人我可以再造一个微软。这话没搜到原版出处，但是从一个侧面反映了IT公司当中智力资产所占的比例之重。

所以一个自然的推论就是，招聘也许是一个公司决策当中最最重要的一个环节。Joel Spolsky把他在这方面的观察，体会和洞见集结成了一本小册子《Smart and Gets Things Done》，开篇就挑战“产品是公司成败的关键”这个传统观念，他认为创造最适合工程师生活的环境，留下最优秀的人才才是最先最重要的一步，接下来好的产品是水到渠成的事情。国内iapp4me.com创始人郝培强正是这个理念，所以他在微博上说：

我们是小公司，工资开的不高，也不招太多的人，但是电脑都是iMac27，iMac21，Macbook pro15，基本上比很多大公司都好多了。软件没盗版，刚才photoshop的正版我也收了。中午管饭，公司备伞。哈哈。节日假正常放，从不加班，早晨11点上班，下午6点下班。我是有资格说某些大公司的员工苦逼的。

事实上，米国找个人尚且难成这样，搞得Joel还费心费力写本书语重心长地劝企业们要善待好工程师，国内找个人更是难上加难，国内高质量问答社区知乎创始人周源就曾经在知乎上分享他呕心沥血的招人历程，看完真是让人慨叹这年头找个靠谱的人多不容易（这条知乎问答还有很多精彩的跟帖）]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.joelonsoftware.com/">Joel Spolsky</a>曾经感叹：招聘难，难于上青天（此处笔者稍加演绎:)）。他有两个辛辣但不乏洞察力的断言：<a href="http://www.joelonsoftware.com/articles/FindingGreatDevelopers.html">真正的牛人也许一辈子就投大概4次简历</a>，这些家伙一毕业就被好公司抢走了，并且他们的雇主会给他们不赖的待遇，所以他们也不想挪窝。（<a href="http://www.ruanyifeng.com/blog/2011/10/dennis_ritchie.html">刚刚去世的Dennis Ritchie就是这样一个人</a>）而“人才”市场上能找到的大多都不是什么人才。招到这帮人轻则费钱重则把你公司搞挂。</p>
<p>（当我把这篇文章给<a href="http://weibo.com/sdxinz">邹欣</a>老师review的时候，他说了另外两点：1. 最好的人也许不投简历，就决定去哪里了。所以要在他们做决定前找到他们。2. 比较差的会投很多次简历，找不到工作的时间越多，投的简历越多，给整个pool 带来很多噪音，top10%的简历也许根本不算全部人的top10%。）</p>
<p>诚然，也许没有哪个行业像IT行业这样，无形资产占据公司的绝大多数资产。拒坊间传言比尔·盖茨就曾经说过类似这样的话：只要允许我带走100个人我可以再造一个微软。这话没搜到原版出处，但是从一个侧面反映了IT公司当中智力资产所占的比例之重。</p>
<p>所以一个自然的推论就是，<b>招聘也许是一个公司决策当中最最重要的一个环节</b>。Joel Spolsky把他在这方面的观察，体会和洞见集结成了一本小册子<a href="http://www.amazon.com/Smart-Gets-Things-Done-Technical/dp/1590598385/">《Smart and Gets Things Done》</a>，开篇就挑战“产品是公司成败的关键”这个传统观念，他认为<a href="http://www.joelonsoftware.com/articles/HighNotes.html">创造最适合工程师生活的环境，留下最优秀的人才才是最先最重要的一步</a>，接下来好的产品是水到渠成的事情。国内<a href="http://iapp4me.com">iapp4me.com</a>创始人<a href="http://tiny4.org/blog/">郝培强</a>正是这个理念，所以他<a href="http://www.weibo.com/1400229064/xrEqt7Ax0">在微博上说</a>：</p>
<blockquote><p>我们是小公司，工资开的不高，也不招太多的人，但是电脑都是iMac27，iMac21，Macbook pro15，基本上比很多大公司都好多了。软件没盗版，刚才photoshop的正版我也收了。中午管饭，公司备伞。哈哈。节日假正常放，从不加班，早晨11点上班，下午6点下班。我是有资格说某些大公司的员工苦逼的。</p>
</blockquote>
<p>事实上，米国找个人尚且难成这样，搞得Joel还费心费力写本书语重心长地劝企业们要善待好工程师，国内找个人更是难上加难，国内高质量问答社区<a href="http://www.zhihu.com/">知乎</a>创始人<a href="http://weibo.com/thinkingit">周源</a>就曾经在知乎上<a href="http://www.zhihu.com/question/19551593">分享他呕心沥血的招人历程</a>，看完真是让人慨叹这年头找个靠谱的人多不容易（这条知乎问答还有很多精彩的跟帖）：</p>
<blockquote><p>其实从 08 年到现在，我一直想这事能不能有点窍门，或者是实用的方法，结论是几乎没有。我用过的大家都用的方法：</p>
<ul>
<li>在水木上发贴子（有点效果） </li>
<li>在蓝色理想上发贴子（无效） </li>
<li>在技术邮件组里发贴子（无效） </li>
<li>买 51job/智联 最便宜的服务（有点效果） </li>
<li>给所有可以想到的人打电话，请他们推荐（无效） </li>
<li>给所有和你讨论过创业，喝过点小酒的人打电话（无效） </li>
<li>约前同事私下谈（有效） </li>
</ul>
<p>我用过的大家可能没有用的方法：
<ul>
<li>上 twitter，看 XXX 的 follower，一个一个看，看他们的 twitter，博客，Google Reader 分享，想办法搞到邮件，联系，半夜电话骚扰。 </li>
<li>上豆瓣，前端后端挑几本重量级的书，去找想看，看过，正在看这本书的人，一个一个看，看他们的活动，博客，Google Reader 分享，想办法搞到邮件，联系，半夜电话骚扰。 </li>
<li>找同事，问他们都看什么技术博客，想办法搞到邮件，联系，半夜电话骚扰。 </li>
</ul>
</blockquote>
<p>正是这样的不容易，才有不少公司走内部培养的办法，这里的逻辑是：一上来就招到靠谱的人太难了，但找一块靠谱的璞玉然后雕琢雕琢相对就简单很多。这倒是个办法，但这样做的人难免就陷入了纠结：<a href="http://weibo.com/1400229064/xsf3T5wRp">培养好了，人跑了怎么办</a>。这也不能怪招聘的公司，的确是人之常情。其实解决的办法也很简单，培养的时候进行适当引导，让员工发挥自己的主动学习能力，这样不但人得到更多成长，公司也不会觉得投入太多患得患失。所谓师傅领进门修行在个人。</p>
<p>但是，这仍然还是没有解决根本的问题，就是<b>招聘真的很困难</b>。应聘者固然觉得自己是在“海投”，大海捞针一般。而招聘者何尝不也是这种大海捞针的感觉。这就好比两个人谈恋爱，都想和对方好上，但是偏偏就聊不到一块去。</p>
<p>招聘真的很困难。以至于招聘者每年需要绞尽脑汁出新笔试题，以免往年的笔试题早就被人背熟了。出题很费脑子，要出的不太简单也不太难，能够滤掉绝大多数滥竽充数的但又要保证不因题目不公平而滤掉真正有能力的，要考虑审题人的时间成本就只能大多数用选择题，而选择题又是可以猜答案的（极少有人会在选了答案之后还敢在空白的地方写为什么选某答案的原因的）。更悲催的是，有些题目出的连公司的员工们自己都会做错（真的是员工们做错了吗？还是题目本身就出错了？）</p>
<p>笔试完了之后如果还没有被鄙视就要进入面试环节，姑且不说笔试题的种种弊端，就说面试环节，短短几个小时的面试（大多数公司也许连几个小时的面试时间都没有），既需要全面考察基本知识，又要考察编程素养，还要考察（也许最重要的）性格心态。再然后还有一项<em>根本没法考察但却占据程序员相当一部分工作时间的：<a href="http://tiny4.org/prog/diary/2007/12/blog-post.html">debug能力</a></em>。面试官不但得找准问题，不因对方一题答对而妄下结论，也不因一题打错而就扼杀机会，还要以管窥豹，从一朵花看到整个世界，从面试人的举止言谈，分析问题的方式，甚至写程序的笔迹来观察这个人的性格，做事的方式和心态，简直是要面试官具备心理分析师的水准才行。</p>
<p>这厢要招人的雇主苦不堪言，那边找工作的人也是一团乱麻。绝大多数应届生直到毕业也不清楚他们想要去的公司到底需要什么样的能力，或者说，他们到底需要具备什么样的能力才能在应聘季节拥有自己的选择权。中国虽然本科教育环境差，但是同样有很多的人在本科希望整点东西出来，他们有一腔的激情和抱负，有强大的动力，但就是不知道自己需要掌握哪些技能才能满足雇主的要求，求告无门，整年整年苦闷的像没头苍蝇一样乱撞（我就收到过很多次这样的来信，他们往往很想学点东西，但又不知道哪些重要哪些不重要，到底该学到什么程度，<strong>不知道导致不确定，不确定导致</strong><a href="http://www.amazon.com/Paradox-Choice-Why-More-Less/dp/0060005696/"><strong>决策瘫痪</strong></a>，干脆嘛也不动，荒废时间）。</p>
<p>什么叫熟练？什么又叫精通？那么扎实呢？两年的YY经验又意味着什么？能这么简单的量化吗？同样是两年的“实践”有的人能真的学到点东西，有的人也许近似一无所得。那么实习呢？很多人都一定要在简历上弄个实习经验，这个又能说明多少问题呢？大作业呢？得奖呢？有一次我面试一位同学，<em>据简历说编译原理课的大作业得了一等奖，可我一问什么是递归下降，就傻眼了。</em></p>
<p>这个现实的结果就是，<strong>现在绝大多数应届简历而言，也许最具信息量的部分不是“精通XXX，熟悉YYY，掌握ZZZ”，不是“在UUU实习过”，也不是这个项目那个作业，反倒是越来越被认为不重要的一项：毕业学校</strong>。<em>毕业学校本不应该是最具信息量的</em>，它之所以最具信息量只是源于一个悲剧的事实：<em>简历上其他条目实在信息量太少了</em>。所以靠谱的面试者往往学会了无视简历上华而不实的内容，只相信面试的时候亲眼所见，扫两眼简历也就罢了，最后还得自己捋起袖子慢慢面。而应聘者也许也知道招聘的也不会细细纠简历上的条目，所以什么词也都敢往上捅，反正先过了HR筛简历这关再说。从经济学角度来讲，应聘者的这种策略是正确的，没有代价（因为目前似乎没有公司会去给已经申请过的人做一个诚信数据库），但至少有可能会带来巨大的收益。应聘成了博彩。而博彩式的应聘给招聘公司带来了巨大的筛选压力。简历成了摆设。</p>
<p>那么招聘这个关系里面的第三者——学校——所处的位置呢？学校更关心的是毕业率和就业率，这似乎是件好事，有这个为目标，那么老师们似乎应该努力让自己的学生多学点东西。可惜就业的质量似乎不是最重要的指标，此其一。其二老师本身大多数没有丰富的业界经验，根本不知道企业整整需要的人才是什么样的，可能花了精力，但却培养不出雇主真正需要的人。另一方面，老师所起的作用很多时候甚至是一个负面的作用，例如布置大作业表面上看上去是培养学生的能力，我们姑且不说抄袭，假设每个人都做了，那么大作业本身能够衡量多少东西呢？能否衡量代码质量，能否衡量团队协作能力？能否衡量交流能力？考虑到大作业用到的东西往往都是书里面现成的，<strong>大作业甚至不能衡量学习能力。而学习能力简直算是这个行业最重要的能力没有之一了</strong>。</p>
<p>所以，简而言之，<strong>如果把人才培养/招聘这件事情本身类比做一个项目，那么这整个项目迄今为止就是一个巨大的失败</strong>。为什么这么说呢：</p>
<ul>
<li>和需求严重脱节：作为人才需求方的雇主的需求到底是什么？绝大多数应聘者都没搞清。更严重的是，这却一点都不是应聘者的错。因为雇主是stakeholder，是雇主自己的责任得去说清楚需求是什么。结果应聘者实现的不是雇主想要的，雇主想要的应聘者没有实现。 </li>
<li>应聘者雇来培训自己的人根本不管事：学生交了学费，就相当于雇老师来培训自己，可培训者根本也不了解（或不关心）他的客户们的需求。这里，学生是需求方，老师则是实现方。弄清需求的职责在后者，可后者也弄不清。 </li>
<li>学生自己也弄不清：学生自己既是需求方（需要特定技能），也是实现方。可他们自己也弄不清需求到底是什么。 </li>
</ul>
<p>以上三点还不是最严重的，最严重的在下面：</p>
<ul>
<li>明白需求是什么的也不知道怎么实现：怎么去培养现代IT企业真正需要的人才？特别地，实战能力怎么培养？代码素养怎么培养？协作沟通能力怎么培养？学习能力怎么培养？就算这些都知道怎么培养，又怎么给在象牙塔里头，离催命之日还遥遥无期的学生提供足够的动力呢？而学生自己就算知道该学哪些技能，又怎么知道具体怎么着手？什么是最有效率的学习方法？又如何让自己保持学习的热情？ </li>
</ul>
<p>以上这些问题，就是当下人才培养/招聘的惨淡现状。简而言之，在雇主和学生之间，横梗着一条巨大的鸿沟，两头都很着急，两头都有动力，但就是没有方法，君住长江头妾住长江尾。像微软谷歌这样的，干脆和高校合作，直接插手本科或硕士的教育，从而保证到时有足够强的候选，某种程度上，这的确是根本解决之道，可一来这代价太大了，非一般企业承受得起，二来这影响面也太小了。</p>
<p><em>这一切，也许将在未来的5年发生根本的变化。</em></p>
<p><a href="http://www.amazon.com/Switch-Change-Things-When-Hard/dp/0385528752/">《Switch: How to Change Things When Change Is Hard》</a>（中译《瞬变》）里面指出，表面上看来非常困难的改变，也许是因为根本就没有抓住要害。在书中作者通过大量案例分析和心理学研究，雄辩地指出以下几点促成改变的关键之处：</p>
<ul>
<li>触动内心的大象：要改变的人必须要有情感层面的动力。有一些特定的方法能够比另一些方法更能对人的情感产生触动。 </li>
<li>给出清晰、明确的目标：目标一定不能含糊，模棱两口的目标让人无所适从，导致<a href="http://www.amazon.com/Paradox-Choice-Why-More-Less/dp/0060005696/">决策瘫痪</a>。例如最近我们组在招实习生，我在微博上发了一条招聘信息，其中提到“扎实”的系统底层知识，有同学就写信来问，怎么叫“扎实”。我傻眼了。比尔·盖茨就以目标清晰明确著称，不仅在战略制定上，“每个人桌面上都有一台PC”，而且居然还体现在招聘上——“如果你读完了TAOCP，那么就给我投简历吧”。多么清晰，明确的目标啊——虽然高了点，也许这就是比尔·盖茨至今还没被应聘邮件淹没的原因:) </li>
<li>给前进的道路扫清障碍：人是懒惰的，只要有借口就会不想往前。如果既有明确的目标，同时道路又直直指向目标，一览无余，只等你开始往前走，那么便没有借口，一往无前。 </li>
</ul>
<p>那么让我们对照上面看看，可以做什么？</p>
<p>首先，内心的大象不需要触动，中国有足够多的人足够早就开始焦虑就业的事情，只是不知道往哪使劲，这部分人如果把劲头用到正确的事情上面也许足以满足现在的IT企业人才饥渴了。至于其他人，好吧，也许身边的人开始动起来他们也会被触动。</p>
<p>然后是清晰、明确的目标。这一点上目前雇主们的做法可谓好坏参半，好的一点是大家都强调要有实践经验，要有团队协作精神，坏的一点就在基础知识和技能的要求方面，可谓再含糊不过了：“精通XX语言”，“扎实的XX功底”，“熟悉XX技术”，甚至看上去最具量化感的描述“X年YY经验”其实都根本说明不了多少东西，在信息量方面还不如我家门口菜市场上一家卖酥油饼的店门口挂的横幅——“<b>三天不硬、至少六层！</b>”。</p>
<p>很多朋友也许注意到一个现象，<strong>现在企业对招聘者简历的要求也在变得越来越灵活变通</strong>，例如<a href="http://gigix.thoughtworkers.org/2011/6/8/show-me-your-blog">ThoughtWorks在招聘的时候就希望招聘者能给出自己的博客地址</a>，博客对IT行业的意义也许胜过其他所有行业，<a href="http://mindhacks.cn/2009/02/15/why-you-should-start-blogging-now/">一个积累多年的技术博客比任何简历都更能说明问题</a>。台湾的<a href="http://www.weibo.com/oiionet">郭安定</a>也说“<a href="http://blog.csdn.net/oiio/article/details/6913156">为什么写技术博客对新人如此重要</a>”。可惜这个做法也有一个弊端：并不是所有技术牛人都写博客，有人就是<em>只干不说型</em>的，而就算写博客，乃至动手写过一阵子的，写一个常年的博客，<em>也远比你想象的更为困难</em>，因为很多时候，<a href="http://www.weibo.com/1882579600/xjtiRCGk5">写（说）得靠谱比做得靠谱更难</a>。所以这个过滤器很多时候用不上。</p>
<p>但是这的确表明了一个思考的方向，就是寻找更具鉴别力的过滤器，<a href="http://careers.stackoverflow.com/">Stackoverflow Careers 2.0</a>之所以强大，是因为Joel Spolsky和<a href="http://www.codinghorror.com/blog/">Jeff Atwood</a>这两位常年混社区的资深博主创造性地将一个人在社区的活动历史浓缩成为一系列的量化数值，由于这个历史很长期，所以鉴别力非常高。但它同样也有问题，就是对于应聘者来讲相当花费时间，而且并不是花时间（在Stackoverflow上回答问题）就一定能花到点子上。</p>
<p>到底什么特征才是既通用，又能够有效地鉴别高低应聘者的特征呢？<strong>这个特征必须不像博客那样难以实现，同时又必须有足够的区分度</strong>。</p>
<p>有的地方在要求填写简历的时候必须填上<em>平时都访问哪些技术网站</em>。恩，很不错的尝试，可区分度仍然还是不够，因为上网站上查东西毕竟只占现阶段大多数应届生的少数信息来源，特别是当我们看重得更多的是应届应聘者的<em>系统性的知识基础</em>的时候，网上的东西虽然丰富，但属于提高班，也更为琐碎，什么是更系统的知识来源呢？答案其实大家都知道——</p>
<p>书。</p>
<p>我一向认为，<strong>很多时候，是否好好看完一本好书，对一个人的提升往往能达到质的区别</strong>。就算不好好看完一本好书，马马虎虎看完，只要书是真的好书，也肯定会有很大的提高。<em>我在面试的时候就经常询问对方看过哪些技术书籍</em>，经常上哪些网站，订哪些博客。这里头尤其数书籍这一项的区分度最高。此外，<strong>好书和坏书的差别，从本质上，就是学习效率和大方向的差别</strong>。一本烂书可以浪费你半年的时间，但一本好书却可以为你带来真正扎实的基础和开阔的视野。人们常常用“内功”来形容扎实的基础，认为学好了内功以后学什么都快，其实一点没错，好的“内功”书不仅讲清楚深刻的原理，而且指明技术的本质，刻画领域的地图。<em>好的书抓住不变量</em>，让人能够触类旁通。好的书不仅介绍知识，而且阐释原则，介绍那些万变不离其宗的东西。<strong>读烂书浪费时间，但读好书却节省时间</strong>。</p>
<p>象牙塔内的学生受到视野的限制，往往择书不慎，事倍功半，<em>烂书不仅浪费时间，还会打击人的积极性，让人对知识心生恐惧，认为很难掌握，殊不知只是作者没有讲好（或者没有翻译好）</em>。因此，为招聘头疼的公司完全可以给出“<strong>应聘俺们公司前必读的十本书</strong>”，也不一定要每个公司都不一样，在某个技术子领域有影响力的人，或者创始人们，可以来定义具有代表性的书单。</p>
<p>我们姑且把这个计划叫做“书单计划”，容易看到“书单计划”具备以下几个卓越的优点：</p>
<ol>
<li>清晰、明确。完全可度量。 </li>
<li>防伪：读没读过，随便一问便知。而正因为应聘者也知道这事不像实习经验可以忽悠，所以也不敢乱往简历上捅词。 </li>
<li>不在乎是否“泄题”：书单完全公开的，无所谓，本来就是要你去读的。想背题？背书吧。真能背下来说明认真看了。 </li>
<li>管你用心不用心读，只要读了，读完了，就有区别。真正的好书，你想不被吸引都难。据我观察很多人就是不知道该去读什么书。 </li>
<li>不存在“怎么做”的障碍：所有人都知道怎么读书——一页一页读。 </li>
<li>不需要招聘者投入精力：书单在此，就这么简单，您看着办。 </li>
<li>评估的负担很大程度转移到了应聘者的身上：是不是认真看完了，有没有心得体会，您自己掂量。没看完别来找我们。 </li>
</ol>
<p>“书单计划”能很大程度上起到<strong>强鉴别器</strong>的作用，看了就是看了，必然能学到东西，没看就是没看。<strong>知道和不知道，区别是本质的</strong>。<strong>其实很多企业内部培训，根本上其实还不就是叫员工去看之前没看过的书或者资料嘛</strong>。最后，除了鉴别作用之外，它还是一个清晰促进的目标，是<strong>完全不花精力的培养</strong>。</p>
<p>当然，“书单计划”的背后是另一个悲剧的现实，如果不是因为这个现实，这个计划也完全没有必要，那就是，中国IT大学教育当中要求要学的书，和企业真正需要你去读的书相比，不是<em>完全不够用</em>，就是<em>写的不够好</em>，或者更悲剧的就是<em>根本用不上</em>，所以在这个大背景下出来的牛人都是<a href="http://www.weibo.com/1400229064/xoEps5Imk">自己淘书自己学的</a>。微软高级开发测试工程师，<a href="http://book.douban.com/subject/2302201/">《Windows用户态程序高效排错》</a>作者<a href="http://www.weibo.com/grapef">熊力</a>就在微博上说过：<a href="http://www.weibo.com/1709648133/xoEQmBmDg">“我当年毕业的时候总结了一个公式：第一份工作的月薪=大学四年买过的技术书籍价格的总和。”</a></p>
<p>但是光有“书单计划”还不够，因为<strong>书籍只能管基础知识这一块，一些更难以量化衡量的实战“能力”又怎么办呢？</strong>至少目前为止，除了“练”之外好像还没有特别好的办法。可是在象牙塔里面做的项目，或大作业，真的能起到练的作用吗？前面说了，学生会知道自己最终要交差的不是雇主，而是老师，于是就以老师能够评判的标准来默认要求自己了，老师能够评判编码素养？代码风格？文档？设计？协作？甚至连著名的<a href="http://www.joelonsoftware.com/articles/fog0000000043.html">Joel 12条</a>的第一条“是否用源代码管理系统”都没法通过。所以大多数时候，大作业能起到的作用近乎0。</p>
<p>但是如果这一切是由雇主来评判的，这个“作业”是由雇主来给出的，就完全不一样了。一想到作业是要作为简历的一部分的，能不紧张嘛。能不好好做嘛。能不学到点东西嘛？</p>
<p>可是这事儿能实现吗？雇主能给学生出大作业吗？也许一两个关系好的高校可以，可是中国那么多学生呢？</p>
<p>为什么不能呢？如果像书单那样，列出各个技术领域“推荐在学校期间尝试的项目”，至于动不动手做，那是学生自己的问题。做的，自然能够得到锻炼，面试的时候自然能得到更大的优势。</p>
<p>可问题是，面试的人又怎么来评估呢？这不又回到了没法有效评估的怪圈了吗？答案很简单，但<em>这个答案，直到最近几年，才真正成为现实</em>——</p>
<p><a href="http://en.wikipedia.org/wiki/Github"><strong>GitHub</strong></a></p>
<p>GitHub诞生于08年春天，第一年便产生了4万6千个公共项目，大约一年半之后用户就已经达到10万用户之巨。而到今年九月份，GitHub已经迎来了百万级用户。Host超过两百万个项目。</p>
<p>增长的太快了！就像Twitter一样。这样疯了一般的增长只能说明一个事实——<strong>人们等待这个产品太久了</strong>。</p>
<p><strong>Social Coding</strong>。</p>
<p>真实的项目，真实的流程，真实的人名，一切代码review, check-in, test, build, document, 甚至讨论，计划，brianstorming，流程，一切的一切，都是项目历史的一部分，都可以像棋局那样复盘。有经验的面试者只要稍稍扫两眼一个人的GitHub历史，挑出几个check-in历史看一看，便完全能够迅速判断这个人是否满足他的要求。不再需要费劲心机地去想题目，去观察，去揣测，去花费大量的时间的同时还只能采样到几个极为有限的点。</p>
<p>不像象牙塔里面大作业，这里有源代码管理系统，自动化build，有check-in，有review，有分工，有合作，最重要的是——这是一个<a href="http://wenku.baidu.com/view/ce92d9eef8c75fbfc77db28a.html">集市</a>，一个超出象牙塔的集市，牛人相互吸引，<strong>你可以在互联网上找到和自己拥有共同兴趣的一帮人，真正做起一点事情，而不是交差，不需要受限于几十个人的一个小班级。</strong><a href="http://www.amazon.com/Here-Comes-Everybody-Organizing-Organizations/dp/1594201536"><strong>Here Comes Everybody</strong></a>。</p>
<p>为什么我这么有信心？因为这事儿已经发生了。<strong>这个想法也完全不是我原创的</strong>。</p>
<p>正如很多事情一样，现在在国内发生的事情，往往是美国那头的历史。今年7月中旬，纽约一家公司的工程师老大发了一篇博客文章：<a href="http://code.dblock.org/github-is-your-new-resume">Github is Your New Resume</a>。指出一个惊人但再合理不过的事实：越来越多的IT公司在招聘的时候要求应聘者给出GitHub账号。甚至已经有人为GitHub写了<a href="http://resume.github.com/">根据GitHub上的历史自动生成简历的工具</a>。</p>
<p>仔细想想，这是必然的趋势，没有比这个再合理的事情了，既然StackOverflow的历史能够作为简历，GitHub的历史不本该就是更好的简历吗：你想要具有实战经验，懂check-in懂review懂test和代码质量的重要性，懂交流和沟通的重要性，你本就应该在一个真实的项目当中去锻炼这些东西，而这些在目前已经完全可以办到。正如<a href="http://www.weibo.com/sdxinz">邹欣</a>老师所说，<em>你的工作就是最好的面试</em>。</p>
<p><strong>这件事情放在早几年，是完全没法做到的，因为我们那时候还没有GitHub</strong>。正如没有Twitter，没有微博之前，很多事情都不会成为可能一样，你有千钧之力，缺乏一个合适的支点，也没法撬动一整个社群。无组织中的组织，具有强大的杠杆效应。</p>
<p>这个事情里面，我唯一提出的东西就是：在目前国内这个现状下，苦闷的招聘者应该主动行动，给出一些建议项目，正如前面提到的书单计划一样，招聘者需要给出的只是引导和<strong>清晰明确的目标</strong>，剩下的事情，应聘者自然会去完成，这些项目可以是实验项目，也可以是完全能做出点卖钱的东西的项目（如果好好做的话），唯一的不可或缺的前提是，项目不能太小，单人就能完成的项目不理想，一两个月就能完成的项目不理想，最好足够大到能够锻炼到方方面面，偏大一点倒是无所谓的，因为一个尚未完成的项目完全可以作为简历。当然，可以想见的是，<em>真到了那个时候，学生们肯定又是不会满足于仅去做那些已经有许多人做过的项目了</em><strong>。</strong>所以这里企业们一开始所建议的项目只是一个<a href="http://www.amazon.com/Nudge-Improving-Decisions-Health-Happiness/dp/0300122233">《Nudge》</a>，是滚雪球之前需要的一点初始动能。后面的事情，他们自己会完成。</p>
<p>“GitHub计划”同样有一些明显的、甚至不可替代的优点：</p>
<ol>
<li>清晰、明确，完全可度量。 </li>
<li>防伪：同样不担心“泄题”。你伪造不了GitHub历史，伪造不了check-in历史，review comments，文档，交流记录&#8230; </li>
<li>它不但是招聘，也是不花精力的培养。善哉善哉。 </li>
<li>评估的责任很大程度上交给了应聘者自己。 </li>
</ol>
<p><strong>从你的GitHub旅程开始，你就已经一脚踏进了真正的企业，而企业的面试也已经开始。</strong></p>
<p>书单+GitHub，就相当于一个两年左右的面试。</p>
<p><strong>没有什么面试比持续两年的面试更具有信息量。</strong></p>
<p>书单，加上项目，已经基本上覆盖了所需的全部技能。最妙的是，有太多的人在焦急的等待着他们未来的雇主给出明确的信号，他们想投入精力，去学习和实践，去成为企业需要的人，但是他们就是不知道往什么方向走，所谓<strong>有动力没方向</strong>。所以，雇主给出了清晰明确的要求，相信对于很多人来说<em>反倒是一个解脱</em>：“终于知道该干什么了”。<a href="http://book.douban.com/subject/3004255/">《编程之美》</a>为什么常居畅销榜？因为它透露了雇主眼中的需求，明确、清晰的需求，可以实现，并且知道怎么去实现的需求。</p>
<p>你提前两年就开始面试和培养未来的候选者，而且还不需要你花出一分精力，而且人家还很乐意，没有比这更完美的面试了。</p>
<p>想一想，以后那些没见过世面的公司看见你拿出GitHub账号给他看，该是多么惊讶同时又觉得多么合理。</p>
<p>而这一切，只是因为两个小小的改变：</p>
<ol>
<li>由需求方（雇主）给出了清晰、明确的目标。 </li>
<li>GitHub这样的平台。 </li>
</ol>
<p>那么，学校/老师在这个事情当中的位置呢？说实话我不知道。没有哪个行业像IT行业这样特殊：没有什么东西不能够（应该）在互联网上学到的。自组织的力量完全大过传统的教育方式。而且，既然雇主都当了领路人了，我不知道还有中间开发商什么事儿。（注：<em>这里说的是软件开发，并非计算机科学研究，后者另当别论</em>）</p>
<p>那么，这个改变会发生吗？多久会发生呢？当然，它在国外已经发生了，所以问这个问题多少有点无趣。但我还是预计很快就会在国内发生，毕竟，不是已经有人要求出示博客，和经常浏览的网站了吗？也许5年左右（4年本科和6年硕士的中间值？））就会深刻改变整个人才培养/招聘的格局。当然，我并不是预言家，所以不要把我的时间估计当真，我能肯定的是，这种方式是必然的大势所趋。</p>
<p>刚才我就收到一位同学邀请我上知乎回答一个问题“找工作的首要原则是什么？”，当然，这个问题的答案是：“<strong>弄清雇主的需求到底是什么</strong>”。</p>
<hr />
<p>列一下我所认为的，你面试微软前必须要读的十本书：</p>
<ol>
<li>Code: The Hidden Language of Computer Hardware and Software （《编码的奥秘》） </li>
<li>Computer System: A Programmer’s Perspective （《深入理解计算机系统》） / Windows via C/C++ （《Windows核心编程》 / 《程序员的自我修养》 </li>
<li>Code Complete 2（《代码大全》）/ The Pragmatic Programmer （《程序员修炼之道》，我也把这本书称为《代码小全》） </li>
<li>Programming Pearls （《编程珠玑》） / Algorithms / Algorithm Design / 《编程之美》 </li>
<li>The C Programming Language </li>
<li>The C++ Programming Language / Programming: Principles and Practice Using C++ / Accelerated C++ </li>
<li>The Structure and Interpretation of Computer Programs （《计算机程序的构造和解释》） </li>
<li>Clean Code / Implementation Patterns </li>
<li>Design Patterns （《设计模式》） / Agile Software Development, Principles, Patterns, and Practices </li>
<li>Refactoring （《重构》） </li>
</ol>
<p>（注：1. 以上同一条目下用“/”隔开的表示任选，当然你也可以都读了，相信我，时间是足够的。2. 读这些书并不意味着逐字逐句从第一页读到最后一页——当然你也可以这么做。怎么是聪明高效的读法，可以参考我之前写的关于如何<a href="http://mindhacks.cn/2008/09/17/learning-habits-part3/">阅读和查找/鉴别书籍/资料的博文</a>）</p>
<p>注意：以上是我<em>个人</em>认为你面试微软<em>开发</em>职位前必须要读的10本书，它不代表我的雇主的观点。它也只是一个初步的书单，肯定会受到我个人经验和眼界的限制。欢迎大家提意见。</p>
<p>此外，IT不同子领域的必读书单可能千差万别，所以在发布之前我把这篇文章发给了一些朋友，他们给出了自己的书单（你是不是能看到一些有趣的共同点呢）：</p>
<p><a href="http://blog.codingnow.com/"><strong>云风</strong></a><strong>（中国游戏编程先行者，前网易游戏部门资深程序员，简悦创始人）：</strong></p>
<p>如果面试，我会挑以下的我自己读过的书，让人选择他也读过的部分，再了解他对这些书的理解。这些书其实本质上就是两类，对所面对的东西（程序语言也好，操作系统也好，底层设施也好）本身的理解程度。以及另一类：对设计思想和原则的理解：</p>
<ol>
<li>C++编程思想 </li>
<li>Effective C++ </li>
<li>深度探索C++对象模型 </li>
<li>C++语言的设计和演化 </li>
<li>C专家编程 </li>
<li>C陷阱与缺陷 </li>
<li>C语言接口与实现 </li>
<li>Lua程序设计 </li>
<li>Linkers and Loaders </li>
<li>COM本质论 </li>
<li>Windows核心编程 </li>
<li>深入解析Windows操作系统 </li>
<li>程序员修炼之道 </li>
<li>代码大全 </li>
<li>UNIX编程艺术 </li>
<li>设计模式 </li>
<li>代码优化：有效使用内存 </li>
<li>深入理解计算机系统 </li>
<li>深入理解LINUX内核 </li>
<li>TCP/IP 详解 </li>
</ol>
<p><a href="http://www.dbanotes.net/"><strong>冯大辉</strong></a><strong>（丁香园CTO，贝塔咖啡创始人）：</strong></p>
<ol>
<li>软件随想录 </li>
<li>黑客与画家 </li>
<li>重来 </li>
<li>UNIX编程艺术 </li>
<li>编程人生 </li>
</ol>
<p><a href="http://www.douban.com/people/hongqn/"><strong>洪强宁</strong></a><strong>（豆瓣技术总监）：</strong></p>
<p>StackOverflow上有一个<a href="http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read">程序员必读书单</a>帖子，这里仅列出top10，更多参考<a href="http://book.douban.com/doulist/995723/">这里</a>。</p>
<ol>
<li>Code Complete 2 </li>
<li>The Mythical Man-Month （《人月神话》） </li>
<li>Code: The Hidden Language of Computer Hardware and Software （《编码的奥秘》） </li>
<li>TAOCP （不解释） </li>
<li>The Pragmatic Programmer （《程序员修炼之道》） </li>
<li>Design Patterns （《设计模式》） </li>
<li>The Structure and Interpretation of Computer Programs （《计算机程序的构造和解释》） </li>
<li>Refactoring （《重构》） </li>
<li>The C Programming Language </li>
<li>Introduction to Algorithms （《算法导论》） </li>
</ol>
<p><a href="http://weibo.com/yunzheng"><strong>郑昀</strong></a><strong>（窝窝团研发副总裁）：</strong></p>
<ol>
<li>工程师入门：
<ol>
<li>Code Complete 2 </li>
<li>程序员修炼之道 </li>
<li>深入理解计算机系统 </li>
</ol>
</li>
<li>工程师升级：
<ol>
<li>设计模式 </li>
<li>重构——改善既有代码的设计 </li>
</ol>
</li>
<li>工程师转型：
<ol>
<li>快速软件开发——有效控制与完成进度计划 </li>
<li>人月神话 </li>
<li>IT项目管理那些事儿 </li>
<li>软件随想录 </li>
<li>最后期限 </li>
<li>走出软件作坊 </li>
<li>你的灯亮着吗?——发现问题的真正所在 </li>
</ol>
</li>
</ol>
<p><a href="http://www.weibo.com/bambooman"><strong>张峥</strong></a><strong>（微软亚洲研究院副院长）：</strong></p>
<ol>
<li>Algorithms (by Sanjoy Dasgupta, Christos Papadimitriou and Umesh Vazirani) </li>
<li>Data Structure and Algorithms </li>
<li>The C Programming Language </li>
<li>The Design of the UNIX Operating System </li>
<li>Compilers （龙书） </li>
<li>Computer Architecture: A Quantitative Approach </li>
<li>Flow </li>
<li>Outliers (why hard work and luck are both important) </li>
</ol>
<p><a href="http://weibo.com/sdxinz"><strong>邹欣</strong></a><strong>（MSRA创新工程中心首席研发经理）：</strong></p>
<p>关于创新的书籍(<a href="http://book.douban.com/doulist/1253169/">http://book.douban.com/doulist/1253169/</a>):</p>
<ol>
<li>The Myths of Innovation </li>
<li>The Innovator’s Dilemma </li>
<li>The Innovator’s Solution </li>
<li>Crossing the Chasm </li>
<li>Inside Intuit </li>
<li>盛田昭夫 </li>
<li>杰克·韦尔奇自传 </li>
<li>梦断代码 </li>
<li>Innovation </li>
<li>浪潮之巅 </li>
</ol>
<p>关于“精通”的一篇博客《技能的反面：魔方和模仿》：</p>
<p><a href="http://www.cnblogs.com/xinz/archive/2011/08/07/2129751.html">http://www.cnblogs.com/xinz/archive/2011/08/07/2129751.html</a></p>
<p>在我教的《现代软件工程》课上，除了教科书，每个学生要看另一本相关的书籍并写读书分析。这个博客有一些同学的读书报告:    <br /><a href="http://www.cnblogs.com/OMG-Team/archive/2011/10/25/2223247.html">http://www.cnblogs.com/OMG-Team/archive/2011/10/25/2223247.html</a> </p>
<hr />
<p><em>读好书是如此的重要，因为好书往往带领你去到更好的书，更大的世界。</em></p>
<h3  class="related_post_title">找不到与本文内容相关的文章。随便逛逛？</h3><ul class="related_post"><li><a href="http://mindhacks.cn/2010/03/18/escape-from-your-shawshank-part3/" title="逃出你的肖申克（三）：遇见20万年前的自己">逃出你的肖申克（三）：遇见20万年前的自己</a> (113)</li><li><a href="http://mindhacks.cn/2009/05/17/seven-years-in-nju/" title="我在南大的七年">我在南大的七年</a> (149)</li><li><a href="http://mindhacks.cn/2008/09/11/machine-learning-and-ai-resources/" title="机器学习与人工智能学习资源导引">机器学习与人工智能学习资源导引</a> (10)</li><li><a href="http://mindhacks.cn/2009/02/07/independence-day/" title="独立日">独立日</a> (23)</li><li><a href="http://mindhacks.cn/2008/09/17/learning-habits-part3/" title="一直以来伴随我的一些学习习惯(三)：阅读方法">一直以来伴随我的一些学习习惯(三)：阅读方法</a> (23)</li><li><a href="http://mindhacks.cn/2010/11/14/the-importance-of-knowing-why-part2/" title="知其所以然（续）">知其所以然（续）</a> (42)</li><li><a href="http://mindhacks.cn/2009/03/15/preconception-explained/" title="逃出你的肖申克（二）：仁者见仁智者见智？从视觉错觉到偏见">逃出你的肖申克（二）：仁者见仁智者见智？从视觉错觉到偏见</a> (148)</li><li><a href="http://mindhacks.cn/2009/10/05/im-a-tiny-bird-book-review/" title="不是书评 ：《我是一只IT小小鸟》">不是书评 ：《我是一只IT小小鸟》</a> (57)</li><li><a href="http://mindhacks.cn/2008/10/29/methodology-for-programmers/" title="方法论、方法论&mdash;&mdash;程序员的阿喀琉斯之踵">方法论、方法论&mdash;&mdash;程序员的阿喀琉斯之踵</a> (19)</li><li><a href="http://mindhacks.cn/2009/03/09/first-principles-of-programming/" title="编程的首要原则(s)是什么？">编程的首要原则(s)是什么？</a> (51)</li></ul><hr />
<h3>订阅 Mind Hacks</h3>
<a title="用Google Reader订阅" href="http://fusion.google.com/add?feedurl=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_google.gif" style="border:0" alt="订阅到 | Google" /></a> 
<a title="用鲜果订阅" href="http://www.xianguo.com/subscribe.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_xianguo.gif" style="border:0" alt="订阅到 | 鲜果" /></a>
<br/> 
<a title="用抓虾订阅" href="http://www.zhuaxia.com/add_channel.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_zhuaxia.gif" style="border:0" alt="订阅到 | 抓虾" /></a> 
<a title="用有道订阅" href="http://reader.youdao.com/b.do?keyfrom=mindhacks&url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_yodao1.gif" style="border:0" alt="订阅到 | 有道" /></a> 
<hr />
<h3>我是你的信息过滤器</h3>
想了解作者最近在关注什么，欢迎 Follow <a href="http://weibo.com/pongba">刘未鹏pongba@微博</a>
<br/>
程序员朋友请到作者发起的 <a href="https://groups.google.com/group/pongba">TopLanguage</a> (<a href="http://mindhacks.cn/about-toplanguage/">about</a>) 社群逛逛，定有收获 :)
<br/>
想了解作者在阅读哪些书，请到 <a href="http://www.douban.com/people/pongba/">pongba@豆瓣</a>，或者直接访问以下四个豆列：<a href="http://www.douban.com/doulist/46003/">[只读经典]思维改变生活</a> | <a href="http://www.douban.com/doulist/127649/">[只读经典]思考的技术与艺术</a> | <a href="http://www.douban.com/doulist/197706/">决策与判断</a> | <a href="http://www.douban.com/doulist/176513/">机器学习与人工智能书籍资源导引</a> 。
<hr />
<p><small>
本文由 刘未鹏 发布在 <a href="http://mindhacks.cn">刘未鹏 | Mind Hacks</a>, 2011. | <a href="http://mindhacks.cn/2011/11/04/how-to-interview-a-person-for-two-years/#commenting">108 条评论</a> | 标签: <a href="http://mindhacks.cn/tags/%e6%9d%82%e6%84%9f/" rel="tag">杂感</a>
<br/>
转载请注明作者，出处，以及<a href="http://mindhacks.cn/2011/11/04/how-to-interview-a-person-for-two-years/">原始超链接</a>: http://mindhacks.cn/2011/11/04/how-to-interview-a-person-for-two-years/
</small></p>]]></content:encoded>
			<wfw:commentRss>http://mindhacks.cn/2011/11/04/how-to-interview-a-person-for-two-years/feed/</wfw:commentRss>
		<slash:comments>108</slash:comments>
		</item>
		<item>
		<title>知其所以然（三）：为什么算法这么难？</title>
		<link>http://mindhacks.cn/2011/07/10/the-importance-of-knowing-why-part3/</link>
		<comments>http://mindhacks.cn/2011/07/10/the-importance-of-knowing-why-part3/#comments</comments>
		<pubDate>Sat, 09 Jul 2011 16:24:32 +0000</pubDate>
		<dc:creator>刘未鹏</dc:creator>
				<category><![CDATA[算法]]></category>

		<guid isPermaLink="false">http://mindhacks.cn/2011/07/10/the-importance-of-knowing-why-part3/</guid>
		<description><![CDATA[广大码农同学们大多都有个共识，认为算法是个硬骨头，很难啃，悲剧的是啃完了还未必有用——除了面试的时候。实际工程中一般都是用现成的模块，一般只需了解算法的目的和时空复杂度即可。

不过话说回来，面试的时候面算法，包括面项目中几乎不大可能用到的算法，其实并不能说是毫无道理的。算法往往是对学习和理解能力的一块试金石，难的都能掌握，往往容易的事情不在话下。志于高者得于中。反之则不成立。另一方面，虽说教科书算法大多数都是那些即便用到也是直接拿模块用的，但不幸的是，我们这群搬砖头的有时候还非得做些发明家的事情：要么是得把算法当白盒加以改进以满足手头的特定需求；要么干脆就是要发明轮子。所以，虽说面试的算法本身未必用得到，但熟悉各种算法的人通常更可能熟悉算法的思想，从而更可能具备这里说的两种能力。

那么，为什么说算法很难呢？这个问题只有两种可能的原因：

算法本身就很难。也就是说，算法这个东西对于人类的大脑来说本身就是个困难的事儿。 
讲得太烂。 
下面会说明，算法之所以被绝大多数人认为很难，以上两个原因兼具。

我们说算法难的时候，有两种情况：一种是学算法难。第二种是设计算法难。对于前者，大多数人（至少我当年如此）学习算法几乎是在背算法，就跟背菜谱似的（“Cookbook”是深受广大码农喜爱的一类书），然而算法和菜谱的区别在于，算法包含的细节复杂度是菜谱的无数倍，算法的问题描述千变万化，逻辑过程百转千回，往往看得人愁肠百结，而相较之下任何菜谱涉及到的基本元素也就那么些（所以程序员肯定都具有成为好厨师的潜力:D）注意，即便你看了算法的证明，某种程度上还是“背”（为什么这么说，后面会详述）。我自己遇到新算法基本是会看证明的，但是发现没多久还是会忘掉，这是死记硬背的标准症状。如果你也啃过算法书，我相信很大可能性你会有同感：为什么当时明明懂了，但没多久就忘掉了呢？为什么当时明明非常理解其证明，但没过多久想要自己去证明时却发现怎么都没法补上证明中缺失的一环呢？]]></description>
			<content:encoded><![CDATA[<p><font color="#a5a5a5">不知不觉《知其所以然》系列竟然也写到第三篇了，虽然前面两篇也说了不少，但是总觉得还有东西没有说“透”，或者说没有说“好”。所以这篇试图从不同的角度用更好的例子来继续深入阐述。（感谢<a href="http://www.douban.com/people/silwile/">silwile</a>对本文的review和意见）</font></p>
<hr />
<p>广大码农同学们大多都有个共识，认为算法是个硬骨头，很难啃，悲剧的是啃完了还未必有用——除了面试的时候。实际工程中一般都是用现成的模块，一般只需了解算法的目的和时空复杂度即可。</p>
<p>不过话说回来，面试的时候面算法，包括面项目中几乎不大可能用到的算法，其实并不能说是毫无道理的。<strong>算法往往是对学习和理解能力的一块试金石</strong>，难的都能掌握，往往容易的事情不在话下。志于高者得于中。反之则不成立。另一方面，虽说教科书算法大多数都是那些即便用到也是直接拿模块用的，但不幸的是，我们这群搬砖头的有时候还非得做些发明家的事情：要么是得把算法当白盒加以改进以满足手头的特定需求；要么干脆就是要发明轮子。所以，虽说面试的算法本身未必用得到，但熟悉各种算法的人通常更可能熟悉算法的思想，从而更可能具备这里说的两种能力。</p>
<p>那么，为什么说算法很难呢？这个问题只有两种可能的原因：</p>
<ol>
<li>算法本身就很难。也就是说，算法这个东西对于人类的大脑来说本身就是个困难的事儿。 </li>
<li>讲得太烂。 </li>
</ol>
<p>下面会说明，算法之所以被绝大多数人认为很难，以上两个原因兼具。</p>
<p>我们说算法难的时候，有两种情况：<strong>一种是学算法难。第二种是设计算法难</strong>。对于前者，大多数人（至少我当年如此）学习算法几乎是在背算法，就跟背菜谱似的（“Cookbook”是深受广大码农喜爱的一类书），然而算法和菜谱的区别在于，算法包含的细节复杂度是菜谱的无数倍，算法的问题描述千变万化，逻辑过程百转千回，往往看得人愁肠百结，而相较之下任何菜谱涉及到的基本元素也就那么些（所以程序员肯定都具有成为好厨师的潜力:D）注意，即便你看了算法的证明，某种程度上还是“背”（为什么这么说，后面会详述）。我自己遇到新算法基本是会看证明的，但是发现没多久还是会忘掉，这是死记硬背的标准症状。如果你也啃过算法书，我相信很大可能性你会有同感：<em>为什么当时明明懂了，但没多久就忘掉了呢？为什么当时明明非常理解其证明，但没过多久想要自己去证明时却发现怎么都没法补上证明中缺失的一环呢？</em></p>
<p>初中学习几何证明的时候，你会不会傻到去背一个定理的证明？不会。你只会背结论。为什么？一方面，因为证明过程包含大量的细节。另一方面，证明的过程环环相扣，往往只需要注意其中关键的一两步，便能够自行推导出来。算法逻辑描述就好比定理，算法的证明的过程就好比定理的证明过程。但不幸的是，与数学里面大量简洁的基本结论不同，算法这个“结论”可不是那么好背的，许多时候，<strong>算法本身的逻辑就几乎包含了与其证明过程等同的信息量</strong>，甚至算法逻辑本身就是证明过程（随便翻开一本经典的算法书，看几个经典的教科书算法，你会发现算法逻辑和算法证明的联系有多紧密）。于是我们又回到刚才那个问题：你会去背数学证明么？<strong>既然没人会傻到去背整个证明，又为什么要生硬地去背算法呢</strong>？</p>
<p>那么，不背就不背，去理解算法的证明如何？理解了算法的证明过程，便更有可能记住算法的逻辑细节，理解记忆嘛。然而，仍然不幸的是，绝大多数算法书在这方面做的实在糟糕，证明倒是给全了，逻辑也倒是挺严谨的，可是似乎没有作者能真正还原算法发明者本身如何得到算法以及算法证明的思维过程，按理说，证明的过程应该反映了这个思维过程，但是在下文关于霍夫曼编码的例子中你会看到，其实饱受赞誉的<a href="http://www.amazon.com/Introduction-Algorithms-International-Thomas-Cormen/dp/0262533057">CLRS</a>和<a href="http://www.amazon.com/Algorithms-Sanjoy-Dasgupta/dp/0073523402">《Algorithms》</a><em>不仅没能还原这个过程，反而掩盖了这个过程</em>。</p>
<p>必须说明的是，没有哪位作者是故意这样做的，但任何人在讲解一个自己已经理解了的东西的时候，往往会无意识地对自己的讲解进行“线性化”，例如证明题，如果你回忆一下高中做平面几何证明题的经历，就会意识到，其实证明的过程是一个充满了试错，联想，反推，特例，修改问题条件，穷举等等一干“非线性”思维的，混乱不堪的过程，而并不像写在课本上那样——引理1，引理2，定理1，定理2，一口气直到最终结论。这样的证明过程也许容易理解，但绝对不容易记忆。过几天你就会忘记其中一个或几个引理，其中的一步或几步关键的手法，然后当你想要回过头来自己试着去证明的时候，就会发现卡在某个关键的地方，为什么会这样？因为证明当中并没有告诉你为什么作者当时会想到证明算法需要那么一个引理或手法，所以，<strong>虽说看完证明之后，对算法这个结论而言你是知其所以然了，但对于算法的证明过程你却还没知其所以然</strong>。在我们大脑的记忆系统当中，<strong>新的知识必须要和既有的知识建立联系，才容易被回忆起来</strong>（<a href="http://mindhacks.cn/2009/03/28/effective-learning-and-memorization/">《如何有效地学习与记忆》</a>）<strong>，联系越多，越容易回忆，而一个天外飞仙似地引理，和我们既有的知识没有半毛钱联系，没娘的孩子没人疼，自然容易被遗忘。</strong>（为什么还原思维过程如此困难呢？我曾经在<a href="http://mindhacks.cn/2008/07/07/the-importance-of-knowing-why/">知其所以然（一）</a>里详述）</p>
<p>正因为绝大多数算法书上悲剧的算法证明过程，很多人发现证明本身也不好记，于是宁可选择直接记结论。当年我在数学系，考试会考证明过程，但似乎计算机系的考试考算法证明过程就是荒谬的？作为“工程”性质的程序设计，似乎更注重使用和结果。但是如果是你需要在项目中自己设计一个算法呢？这种时候最起码需要做的就是证明算法的正确性吧。我们面试的时候往往都会遇到一些算法设计问题，我总是会让应聘者去证明算法的正确性，因为即便是<b>一个“看上去”正确的算法，真正需要证明起来往往发现并不是那么容易</b>。</p>
<p>所以说，绝大多数算法书在作为培养算法设计者的角度来说是失败的，比数学教育更失败。大多数人学完了初中平面几何都会做证明题（数学书不会要求你记住几何所有的定理），但很多人看完了一本算法书还是一团浆糊，不会证明一些起码的算法，我们背了一坨又一坨结论，非但这些结论许多根本用不上，就连用上的那些也不会证明。为什么会出现这样的差异？因为数学教育的理想目的是为了让你成为能够发现新定理的科学家，而码农系的算法教育的目的却更现实，是为了让你成为能够使用算法做事情的工程师。然而，事情真的如此简单么？如果真是这样的话干脆连算法结论都不要背了，只要知道算法做的是什么事情，时空复杂度各是多少即可。</p>
<p>如果说以上提到的算法难度（讲解和记忆的难度）属于<a href="http://en.wikipedia.org/wiki/Accidental_complexity">Accidental Complexity</a>的话，算法的另一个难处便是Essential Complexity了：算法设计。还是拿数学证明来类比（如果你看过《Introduction to Algorithms：A Creative Approach》就知道算法和数学证明是多么类似。），与单单只需证明相比，<strong>设计算法的难处在于，定理和证明都需要你去探索，尤其是前者</strong>——你需要去自行发现关键的那（几）个定理，跟证明已知结论相比（已经确定知道结论是正确的了，你只需要用逻辑来连接结论和条件），<strong>这件事情的复杂度往往又难上一个数量级。</strong></p>
<p>一个有趣的事实是，<b>算法的探索过程往往蕴含算法的证明过程</b>，理想的算法书应该通过还原算法的探索过程，从而让读者不仅能够自行推导出证明过程，同时还能够具备探索新算法的能力。之所以这么说，皆因为我是个懒人，懒人总梦想学点东西能够实现以下两个目的：</p>
<ol>
<li><strong>一劳永逸</strong>：程序员都知道“<a href="http://en.wikipedia.org/wiki/Write_once,_run_anywhere">一次编写到处运行</a>”的好处，多省事啊。学了就忘，忘了又得学，翻来覆去浪费生命。为什么不能看了一遍就再也不会忘掉呢？到底是教的不好，还是学得不好？ </li>
<li><strong>事半功倍</strong>：事实上，程序员不仅讲究一次编写到处运行，更讲究“一次编写到处使用”（也就是俗称的“复用”）。如果学一个算法所得到的经验可以到处使用，学一当十，推而广之，时间的利用效率便会大大提高。究竟怎样学习，才能够使得经验的外推（extrapolate）效率达到最大呢？ </li>
</ol>
<p>想要做到这两点就必须<b>尽量从知识树的“根节点”入手</b>，虽然这是一个美梦，例如数学界寻找“根节点”的<a href="http://mindhacks.cn/2008/04/18/learning-from-polya/">美梦由来已久</a>（《跟波利亚学解题》的“一点历史”小节），但哥德尔一个证明就<a href="http://mindhacks.cn/2006/10/15/cantor-godel-turing-an-eternal-golden-diagonal/">让美梦成了泡影</a>（《永恒的金色对角线》））；但是，这并不阻止我们去寻找更高层的节点——<a href="http://mindhacks.cn/2008/04/18/learning-from-polya/">更具普适性的解题原则和方法</a>。所以，理想的算法书或者算法讲解应该是从最具一般性的思维法则开始，顺理成章地推导出算法，这个过程应该尽量还原一个”普通人“思考的过程，而不是让人看了之后觉得”这怎么可能想到呢？</p>
<p>以本文上篇提到的霍夫曼编码为例，第一遍看霍夫曼编码的时候是在本科，只看了算法描述，觉得挺直观的，过了两年，忘了，因为不知道为什么要把两个节点的频率加在一起看做单个节点——一件事情不知道“为什么”就会记不牢，知道了“为什么”的话便给这件事情提供了必然性。不知道“为什么”这件事情便可此可彼，<b>我们的大脑对于可此可彼的事情经常会弄混，它更容易记住有理有据的事情</b>（<em>从信息论的角度来说，一件必然的事情概率为1，信息量为0，而一件可此可彼的事情信息量则是大于0的</em>）。第二遍看是在工作之后，终于知道要看证明了，拿出著名的《Algorithms》来看，边看边点头，觉得讲得真好，一看就理解了为什么要那样来构造最优编码树。可是没多久，又给忘了！这次忘了倒不是忘了要把两个节点的频率加起来算一个，而是忘了为什么要这么做，因为当时没有弄清霍夫曼为什么能够想到为什么应该那样来构造最优编码树。结果<em>只知其一不知其二</em>。</p>
<p>必须说明的是，如果只关心算法的结论（即算法逻辑），那么理解算法的证明就够了，光背算法逻辑难记住，理解了证明会容易记忆得多。但如果也想不忘算法的证明，那么不仅要理解证明，还要理解证明背后的思维，也就是<em>为什么背后的为什么</em>。后者一般很难在书和资料上找到，唯有自己多加揣摩。为什么要费这个神？只要不会忘记结论不就结了吗？取决于你想做什么，如果你想真正弄清算法设计背后的思想，不去揣摩算法原作者是怎么想出来的是不行的。</p>
<p>回到霍夫曼编码问题，我们首先看一看《Algorithms》上是怎么讲的：</p>
<p>首先它给出了一棵编码树的cost function：</p>
<p>cost of tree = Σ freq(i) * depth(i)</p>
<p>这个cost function很直白，就是把编码的定义复述了一遍。但是接下来就说了：</p>
<p><em>There is another way to write this cost function that is very helpful.</em> Although we are only given frequencies for the leaves, we can define the frequency of any internal node to be the sum of the frequencies of its descendant leaves; this is, after all, the number of times the internal node is visited during encoding or decoding&#8230;</p>
<p>接着就按照这个思路把cost function转换了一下：</p>
<p>The cost of a tree is the sum of the frequencies of all leaves and internal nodes, except the root.</p>
<p>然后就开始得出算法逻辑了：</p>
<p>The <em>first formulation</em> of the cost function tells us that the <em>two symbols with the smallest frequencies must be at the bottom of the optimal tree</em>, as children of the lowest internal node (this internal node has two children since the tree is full). Otherwise, swapping these two symbols with whatever is lowest in the tree would improve the encoding.</p>
<p>This suggests that we start constructing the tree greedily: find the two symbols with the smallest frequencies, say i and j, and make them children of a new node, which then has frequency fi + fj. To keep the notation simple, let&#8217;s just assume these are f1 and f2. By the <em>second formulation</em> of the cost function, any tree in which f1 and f2 are sibling-leaves has cost f1 + f2 plus the cost for a tree with n &#8211; 1 leaves of frequencies (f1 + f2), f3, f4, .., fn. <em>The latter problem is just a smaller version of the one we started with</em>.</p>
<p>读到这里我想大多数人有两种反应：</p>
<ol>
<li>觉得理所当然。 </li>
<li>觉得恍然大悟。 </li>
</ol>
<p>因为我当时也是这么觉得的。可是后来当我发现自己无法从头证明一遍的时候，我知道肯定是理解的不够深刻。如果理解的够深刻，那么基本上是不会忘掉的。</p>
<p>如果看完霍夫曼编码这样一个简短证明你觉得顺理成章，一切都挺显然，<em>那就坏了</em>，即便是看上去最基本的性质也往往实际上没那么显然。“逢山开路，遇水架桥”在我们今天看来是无比显然的事实，但是试想在没有桥的远古时代，一个原始人走到一条湍急的河流前，他会怎么想，他又能有什么法子呢？这是个他从来没有遇见过的问题。如果后来有一天，他路过另外一条小溪，看到小溪上有一截被闪电劈断的枯树，于是他踏着树干走过了小溪，并意识到“树横过河面”可以达到“过河”这个目的，这就将条件和目的建立了直接的联系（事实上，是自然界展示了这个联系，我们的原始人只是记住了这个联系）。后来他又路过那条河流，他寻思如何达到“过河”这个目的的时候，忽然意识到在他的记忆中已经遇到过需要达成同样目的的时候了，那个时候的条件是“树横过河面”，于是问题便归结为如何满足这个“树横过河面”的条件，而后一个问题就简单多了。（事实上波利亚在他的著作《How to Solve it》中举的正是这么个例子）</p>
<p>为什么那么多的算法书，就看不到有一本讲得好的？因为我们求解问题过程中的思维步骤太容易被自己当作“显然”的了，但除了我们天生就会的认知模式（联系，类比），没有什么是应该觉得显然的，试错是我们天生就会的思维法则么？是的，但是可供尝试的方案究竟又是怎么来的呢？就拿上面的例子来说，一个从没有见过枯树干架在小溪上的原始人，怎么知道用树架桥是一种可选的方案呢？俗话说巧妇难为无米之炊啊。我们大脑的神经系统会的是将目的和条件联系起来，第一次原始人遇到小溪过不去，大脑中留下了一个未实现的目的，后来见到小溪上的树干，忽然意识到树干是实现这个目的的条件，两者便联系起来了，因此问题就规约为如何架树干了。</p>
<p>回到《Algorithms》中的证明上，这个看似简洁明了的证明其实有几处非常不显然的地方，甚至不严谨的地方，这些地方也正是你过段时间之后试图自己证明的话会发现卡住的地方：</p>
<ol>
<li>作者轻飘飘地就给出了cost function的另外一种关键的描述，而对于如何发现这种描述却只是一语带过：&quot;<em>There is another way to write this cost function that is very helpful.. </em>we can define the frequency of any internal node to be the sum of the frequencies of its descendant leaves“这其实就是我常常痛恨的“<em>我们考虑</em>&#8230;”，这里作者其实就是在说”让<em>我们考虑</em>下面这样一种<em>奇妙</em>的转换“，可是怎么来的却不说。但必须承认，《Algorithms》的作者还是算厚道的，因为后面他又稍微解释了一下：“this is, after all, the number of times the internal node is visited during encoding or decoding&#8230;”这个解释就有点让人恍然大悟了，但是千万别忘了，这种恍然大悟是一种错觉，你还是没明白为什么他会想到这一点。这就像是作者对你说“<em>仔细观察</em>问题条件，我们<em>容易发现</em>这样一种奇妙的性质..”，怎么个“仔细”法？凭什么我自己“观察”半天就是发现不了呢？霍夫曼本人难道也是死死盯着问题<a href="http://en.wikipedia.org/wiki/Huffman_tree#History">“观察”了一学期</a>然后就“发现”了么？我们有理由相信霍夫曼肯定尝试了各种各样的方法，作出了各种各样的努力，否则当年Shannon都没搞定的这个问题花了他一学期，难道他在这个学期里面大脑就一片空白（或者所有的尝试全都是完全不相干的徒劳），然后到学期末尾忽然“灵光一现”吗？ </li>
<li>如果“仔细观察”:)，我们会发现两个cost function表达中frequency的概念有微妙的差异，在第一个cost function中，只有叶子节点有frequency，而这个frequency必须和叶子节点的深度相乘。而在第二个cost function中，内部节点也具有了frequency，可是所有节点的“frequency”忽然全都不跟深度相乘了。frequency的不同含义令人困惑。 </li>
<li>作者提到：第一个cost function告诉我们频率最低的两个节点必然处于最优编码树的底端，作为最低内部节点的两个子节点。这是一个不严谨的说法，从前文给出的条件和性质，只能推导出编码树的最底层必然能找到频率最低的两个节点，但<em>它们未必一定要是兄弟节点</em>，如果树的最底层不止能容纳两个节点的话它们就可以有不同的父节点。“我们不妨考虑”这样一个例子：对A,B,C,D四个字母进行编码，假设它们的频率分别是1， 1， 2， 2。这个时候我们可以构造如下图所示的两棵树，两棵树的cost都是12，都是最优的。但其中一棵树中，两个频率最低的节点并非兄弟。       <br /><a href="http://mindhacks.cn/wp-content/uploads/2011/07/tree2.jpg"><img style="background-image: none; border-right-width: 0px; margin: 5px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="tree2" border="0" alt="tree2" src="http://mindhacks.cn/wp-content/uploads/2011/07/tree2_thumb.jpg" width="434" height="246" /></a> </li>
</ol>
<p>为什么要提到上面这几点不显然和不严谨的地方，因为只要当你看到算法书上出现不显然和不严谨的地方，基本上就意味着作者其实跳过了关键的思维步骤。</p>
<p>不幸的是《Algorithms》这本书里面讲霍夫曼编码已经算是讲的好的了，如果你翻开著名的CLRS，看一看当中是怎么证明的，你就知道我说的什么意思了。有时候这些证明是如此的企图追求formal和严谨，一上来就定义符号一大摞，让人看了就想吐。</p>
<p>说了这么多，<em>有没有可能把霍夫曼编码讲的更好呢</em>？前面说过，霍夫曼编码我记了又忘，忘了又记，好几次了，有一次终于烦了，心想如果要自己去证明，会怎么去证，那个时候我已经忘了《Algorithms》里面怎么讲的了。所以我得从头来起，首先，对于算法问题，有一个一般性原则是，<strong>先看一看解空间的构成</strong>。尤其是对于搜索问题（最优化问题可以看做搜索问题的一个特例），这一点尤其重要。霍夫曼编码的可能的编码树是有穷的，如果穷举所有的编码树，然后找到那棵代价最小的，这种方法至少是可行的，有了可行的方法（即便是穷举）至少让我们内心感到踏实。</p>
<p>接下来便是提高搜寻效率的问题。而提高搜寻效率的关键（同样也是一个一般性原则），便是<strong>尽量去寻找问题条件能够推导出来的性质，</strong><strong>然后利用这些性质去避免不必要的搜寻</strong>，只要你学过二分搜索就应该理解这个一般性原则：二分搜索的效率之所以高于“穷搜”（O(n)），便是因为它利用了问题中的性质（有序）来避免了不必要的搜寻。有时候这个性质甚至可以直接将时间降为O(1)，例如在一个有序数组中寻找出现次数大于n/2的数（假设该数存在），利用“该数一定出现在数组正中间”这个性质，我们直接就避免了所有的计算。</p>
<p>不过，话虽如此，有时候这些性质并不是那么“显然”的，需要对问题进行深入的折腾才能有可能发现。第三个一般原则：如果你要搜寻的元素是某个满足特定条件的元素（例如寻找最优解的时候，“最优”的定义就是这个“特定条件”），那么可以“<strong>倒过来推</strong>”（数学证明常用手法，结论当条件使），即假设你已经找到了你要找的元素，那么能得出哪些结论，每一个结论都是最优解的一个必要条件，而<em>每一个必要条件都能够帮助你避免不必要的搜寻</em>，因为你<em>只要发现某个候选解不满足某个必要条件，就可以立即将其丢弃</em>，前面提到的寻找出现次数大于n/2的例子是一个极端情况，我们得出的必要条件导致我们可以直接丢弃除中点元素之外的一切其他元素，再例如如果有人叫你寻找有序数组中最小元素，你会毫不犹豫地把该数组头尾元素中较小的那个给他，因为你知道“如果那个最小元素存在，那么它<em>必然</em>位于头尾”——这个必要条件直接允许你丢弃掉n-2个候选解。</p>
<p>回到霍夫曼编码问题，按照这个原则，我们会去<em>假设已经得到了最优编码树</em>，那么我们能够发现关于它的什么性质呢？这里又要提到另一个适用于很多最优化问题的原则（前面提到的原则适用于一般性搜索问题），<strong>所谓最优解，就是说比其他所有解都要更好</strong>，虽然这句话听上去像是废话，但是它的一个直接推论——<strong>比与它邻近的所有候选解都要好</strong>——就是一个非常有用的，不是废话的性质了。学过微积分的都知道，光滑函数的最值点必然是大（小）于其邻域内的所有点的，然后再根据这个就自然推出该点的一阶导数（切线斜率）必然为0的性质，这个性质（必要条件）让我们直接省掉了去整个区间内搜索的麻烦，从而可以直接锁定有限几个候选解。那么，既然我们说最优霍夫曼树一定比它“附近”的树更好，我们就想看看，怎么来找到它附近的树。我们知道要从一个点到它附近，往往是对这个点进行一些调整，例如N+1是到达附近的另一个整数。霍夫曼树是一棵树，所以对这棵树的所有的一次“改动”（或“折腾”）都能够到达与它的“改动”距离为1的点（是不是想起“编辑距离”这个概念），怎么改动呢？最符合直觉的（虽然并不是唯一的）改动便是把叶子节点进行互换。</p>
<p>于是我们得到一个重要的推论：</p>
<ul>
<li><em>在最优霍夫曼树中，无论互换哪两个叶子节点，得到的树都变得更“差”。（严格来说是不会变得更“好”，因为最优树未必唯一）</em> </li>
</ul>
<p>这个性质看上去有点像废话，值得费这么多事么？值得。因为虽然前文说了很多，但都是大多数人大脑里面既有的，一般性的法则，前面说过，如果我们能够从我们已经掌握的一般法则出发来推导出问题的解，那么记忆负担是最小的，因为这里面用到的所有法则我们都很清楚，也知道怎么一步步往下走。</p>
<p>上面这个性质究竟意味着什么呢？如果你假设这两个叶子节点的频率为f1和f2，深度为d1和d2，互换它们的时候，其他叶子节点的cost保持不变，令为常量C，那么互换前总cost为C+f1d1+f2d2，互换后为C+f1d2+f2d1，既然互换之后的树一定更”差“那么就是说f1d1+f2d2 &lt; f1d2 + f2d1，简单变换一下就得到结论：f1(d1-d2)&lt;f2(d1-d2)，也就是说如果d1&lt;d2，那么f1必然&gt;f2，如果d1&gt;d2，那么f1必然&lt;f2。换言之就是<em>叶子节点的深度越高，频率必须越低</em>，否则就不可能是最优霍夫曼树。那么，之前我们觉得不那么显然的结论便呼之欲出了：频率最低的叶子节点必然位于树的最底层，频率最高的叶子节点必然位于树的最高层。</p>
<p>有了这个结论之后，我们便能够对最优霍夫曼树的构建走出确定性的一步，即，将频率最低的两个叶子节点放在最底层。别小看这一步，这一步已经排除了大量的可能性。这里，我们容易一开始天真地觉得最底层只有这两个叶子节点，于是它们拥有共同父节点，<em>这样一来霍夫曼树的整个拼图便已经拼好了一个小小的角落</em>。</p>
<p>然后我们会发现，要是它们不是兄弟怎么办呢？这里提到另一个一般原则——<strong>归约</strong>。不是兄弟的情况能否归约为是兄弟的情况？反正我们要求的是<em>一个</em>最优解，而不是<em>所有的</em>最优解，我们只需证明，如果当这两个最低频率的叶子不是兄弟的时候的确存在着某棵最优霍夫曼树，那么通过交换它们各自的兄弟，从而让这两个叶子团聚之后，修改后的树仍然是最优的就可以了。事实情况也的确如此，证明非常直接——既然这里涉及到的所有4个节点都在最底层同一个高度上，那么互相交换的时候不会改变他们任何一个人的深度值，所以总cost不会改变。</p>
<p>但是接下来我们犯了难，整个树的一个小小的樱桃状的局部是确定下来了，接下来怎么办呢？一个最自然的思路就是考虑第三小的叶子，因为前面说了，元素频率越低就越位于树的底部嘛。第三小的叶子有两种可能的归属，一是跟最小的两个叶子同样位于最底层（这不会违反我们前面得到的推论），这个时候第三小的叶子的兄弟叶子肯定是第四小的叶子，如下图：</p>
<p><a href="http://mindhacks.cn/wp-content/uploads/2011/07/tree3.jpg"><img style="background-image: none; border-right-width: 0px; margin: 5px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="tree3" border="0" alt="tree3" src="http://mindhacks.cn/wp-content/uploads/2011/07/tree3_thumb.jpg" width="244" height="106" /></a></p>
<p>另一种归属就是往上一层去（注意，一旦第三小的叶子往上去了一层，那么剩下的所有叶子都必须至少在这个层以上），往上一层去了之后，它的兄弟是谁呢？不妨将它和刚才第一第二叶子的父节点结为兄弟（前面证明过，同层之前节点互换不会改变编码的cost），如下图：</p>
<p><a href="http://mindhacks.cn/wp-content/uploads/2011/07/tree5.jpg"><img style="background-image: none; border-right-width: 0px; margin: 5px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="tree5" border="0" alt="tree5" src="http://mindhacks.cn/wp-content/uploads/2011/07/tree5_thumb.jpg" width="181" height="244" /></a></p>
<p>可是现在问题出现了：虽然第一步构建（最小的两个叶子）是确定的，但是到了第二步摆在我们面前的就有两个选择了，到底选择哪个呢？一个办法就是把两种选择都记下来，然后继续往下走。可是别小看两种选择，接下去每一步都有两种选择的话就变成指数复杂度了。所以现在我们便有了动机<em>回头看一看</em>，<em>看问题中是否有什么没有发现的性质能够帮助我们再排除掉其中一个选择</em>。理想情况下如果每一步都是必然的，确定的，那么N步我们就可以构建出整棵树，这是我们希望看到的，抱着这个良好的愿望，我们仔细观察上面两种构型，一个自然而然的问题是：这两种构型都有潜质成为最优解吗？如果我们能够证明其中一种构型不能成为最优解那该多好？就省事多了嘛。这里引入另一个一般性的解题法则：<strong>特例</strong>。我们的<strong>大脑喜欢具体的东西，在特例中折腾和观察会方便的多</strong>。</p>
<p>上面这个{1, 2, 3, 4}的例子就是个很好的特例，如图（注：图中节点旁的数字一概为<em>频率值，</em>而非编号）：</p>
<p><a href="http://mindhacks.cn/wp-content/uploads/2011/07/tree31.jpg"><img style="background-image: none; border-right-width: 0px; margin: 5px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="tree3" border="0" alt="tree3" src="http://mindhacks.cn/wp-content/uploads/2011/07/tree3_thumb1.jpg" width="277" height="126" /></a></p>
<p>多加折腾一番<em>也许</em>我们不难发现，如果将1，2及其父节点跟叶子4进行交换（注意：<em>交换的时候1，2也被一同带走了</em>，因为反正1，2两个节点已确定是好兄弟永远不会分家了，折腾的时候只能作为一个整体移动，所以这里也可以说是<strong>交换子树</strong>），那么树的编码将会变得更优，因为这样一次交换会将1和2的深度+1，意味着整棵树的代价+3，而同时会将叶子4的深度-1，也就是说整棵树的代价-4，总体上整棵树的代价就是+3-4=-1（注意，在计算的时候我们只需考虑被交换的局部，因为树的其他部分的代价保持不变）。如下图：</p>
<p><a href="http://mindhacks.cn/wp-content/uploads/2011/07/tree4.jpg"><img style="background-image: none; border-right-width: 0px; margin: 5px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="tree4" border="0" alt="tree4" src="http://mindhacks.cn/wp-content/uploads/2011/07/tree4_thumb.jpg" width="244" height="227" /></a></p>
<p>这个交换启发了我们，其实前面一开始说的交换两个叶子节点<em>可以推广为交换内部节点和叶子节点</em>，然后很快我们就会意识到其实可以推广到交换任意两个节点。（注意，<em>当我们说交换内部节点的时候，其实是连同该内部节点作为局部根节点的整个子树都交换过去</em>）于是前面我们的推论就可以推广为：</p>
<ul>
<li><em>在最优霍夫曼树中，无论互换哪两个节点，得到的树都变得更“差”（交换内部节点则是连同该内部节点作为局部根的子树一同带走）</em> </li>
</ul>
<p>这个推论很容易理解，只不过是多增加了一种“编辑”最优霍夫曼树的方法罢了（记住<em>最优霍夫曼树无论怎么“编辑”都不会变得更“好”，包括“交换子树”这种“编辑”</em>），我们前面没有想到这种“编辑”方法是因为它不那么显然，而且当时我们已经想到一种最直接的“编辑”方法了，即交换叶子，就容易顺着那个思路一直走下去，直到我们发现必须寻找新的性质，才回过头来看看有没有其他法子。</p>
<p>当然，并不排除一开始就想到这种推广的可能性，问题求解的过程并不是这么线性的，如果我们习惯了推而广之的思维，也许一下就能想到这个推广来。类似的，也不排除从另一种思路出发想到这种推广的可能性。所以这里只是可能的思维轨迹中的一种，重点在于其中并没有某处忽然出现一个不知从哪里冒出来的，神启一般的结论。</p>
<p>刚才提到，构造最优树的第二步是考虑第三小的叶子，但也有另一种常见的思维：考虑到第一步（即选取频率最小的两个叶子）所做的事情是从N个叶子中选择两个黏在一起作为兄弟，那么也许对于一些人来说自然而然的第二步就是试图继续选取两个节点黏在一起作为兄弟（注意这里不仅可以选择叶子，也可以选择已经生成的内部节点），然后依次类推来拼完整棵树。按照这一思路，第二步的选项仍然还是集中在第三小的叶子上，因为这个选择要么是让第三第四小的叶子结拜为兄弟，要么是让最小两个叶子的父节点和第三小的叶子结拜。</p>
<p>回到刚才我们的推论：在最优霍夫曼树中，无论互换哪两个节点，得到的树都变得更“差”（交换内部节点则是连同该内部节点作为局部根的子树一同带走） 。根据这个推论我们容易计算出，<em>在最优霍夫曼树当中，两个内部节点n1和n2，如果n1比n2更深，那么n1下面的所有叶子的频率之和必然要小于n2下面所有叶子的频率之和</em>。如果交换的是一个内部节点和一个叶子节点，则道理是类似的。这个性质的证明和上面的类似，就不赘述了。</p>
<p>这个性质暗示了一个重要的推广结论：<em>如果我们把每个内部节点的所有叶子的频率之和标在它旁边，那么整棵树的每个节点便都有了一个数值，这个数值遵循统一的规律：即越往深层越小</em>。这就意味着，我们刚才的二选一困境有办法了！当我们将最小的两个叶子f1和f2合并的时候，生成了一个新的节点M，这个节点有一个数字（为两个叶子的频率之和f1+f2），根据上面的推论，<em>这个数字f1+f2跟所有频率一同，遵循最小的在最底层的原则</em>，所以我们下一步必须在剩下的那些互相之间关系待确定的节点（叶子节点和内部节点）之中，即{(f1 + f2), f3, f4}里面选择最小的两个数字结合成兄弟（由于f1和f2这两个节点已经铁板钉钉结为整体了，所以从集合里面可以看做移除）。到这里，我们就发现递归已经出现了，接下去的过程对于绝大多数人应该就真的很显然了。</p>
<p>以上的解释，比《Algorithms》更简短吗？显然不是。反而要长得多（其实真正的思维过程比这要更长，因为中间还会涉及各种不成功的尝试）。但是它比《Algorithms》当中的版本更不容易被忘记，因为其中关键的思维拐点并不是毫无来由的，而是从你已经熟知的，或者说虽然不知道，但容易理解的一般性解题法则出发自然推导出来的，所以你基本上不需要记忆什么东西，因为你需要记的已经在你脑海中了。</p>
<p>在上面的证明过程中，还有一个不像看上去那么显然的事情：在我们寻找最优霍夫曼树的时候，我们曾经试图去比较假想的最优树和它的“临近”的树，从而去探索最优树的性质。但是，究竟什么是临近的树？在前面的讲解中，我们说如果交换A和B这两个叶子节点，便得到一颗不同的树，可以看做和原树的“编辑距离”为1的树。但是，真的这么显然么？难道除了交换叶子的位置，就没有其他办法去“折腾”这棵树了？后来我们看到，可以<em>交换子树</em>而不仅仅是叶子，而交换子树让我们得到了至关重要的推论。此外，如果不是交换，而是像AVL树那样“旋转”呢？说到底，二叉树是一个离散的东西，并不像连续值那样，天生就有“距离”这个概念，如果我们离散而孤立地去看待所有的树，那么没有什么临近不临近的，临近本是一个距离的概念，除非我们定义树和树之间的距离函数，才能说临近与否，而距离函数怎么定义才是“显然”的呢？</p>
<p>还有，其实以上只是试图给出最优霍夫曼树的<em>证明</em>的一个更自然的过程，而<em>当年霍夫曼面临这个问题的时候根本还没有人想到要用二叉树呢！更不要说在二叉树的前提之下进行证明了</em>。根据wikipedia的介绍，霍夫曼同学（当年还在读Ph.D，所以的确是“同学”，而这个问题是坑爹的导师Robert M. Fano<a href="http://www.huffmancoding.com/my-family/my-uncle">给他们作为大作业的</a>，Fano自己和Shannon合作给出了一个suboptimal的编码方案，为得不到optimal的方案而寝食难安，情急之下便死马当活马医扔给他的学生们了）当年为这个问题憔悴了一个学期，最后就快到deadline的时候“忽然”想到二叉树这个等价模型，然后在这个模型下三下五除二就搞定了一篇流芳千古的论文，超越了其导师。</p>
<p>最后说两个有趣的现象：也许很多人会觉得，越是大师来写入门教科书越是好，其实很多时候并非如此，尤其是在算法设计和数学领域，往往越是在其中浸淫久了越是难写出贴近初学者的书，因为大量对初学者来说一点都不显然的事情在他看来已经是“不假思索”了，成了他的内隐记忆，尤其是当他想要和你解释一个复杂的东西的时候你就会发现他会常常逻辑跳跃，满嘴跑术语，根本没有意识到别人对有些术语和隐含的逻辑根本没有像他那样的理解。</p>
<p><strong>最适合将一个东西讲给别人听的时候并不是等懂了很多年以后，而是刚刚弄懂的时候</strong>，这个时候从不懂到懂的差别记忆还非常鲜明，能够清清楚楚地记得到底是哪些关键的地方是最折磨人的，也最能够站在不懂者的角度来思考问题。像波利亚这样，成了大师还能够站在不懂者角度去换位思考的，可以说是凤毛麟角。所以说前Amazon CAO（首席算法官）的<a href="http://www.amazon.com/Introduction-Algorithms-Creative-Udi-Manber/dp/0201120372/">《Introduction to Algorithms: a Creative Approach》</a>绝对是本罕见的好算法书）</p>
<p><a href="http://mindhacks.cn/2008/07/07/the-importance-of-knowing-why/">知其所以然（一）</a>里面曾经提到，要弄清来龙去脉，最好去看看原始作者是怎么想的，可是正如上文所说，即便是最初的发明者，在讲述的时候也会有意无意地“线性化”，我就去查看了霍夫曼最初的论文，那叫一个费解，不信你可以自己看看(<a href="http://compression.ru/download/articles/huff/huffman_1952_minimum-redundancy-codes.pdf">PDF</a>)。</p>
<p>可以归约为搜索算法的问题（非常多）一般来说相对还是有一些头绪的，因为搜索空间一般还比较容易界定，难点在于要从问题的条件中推导出用于节省搜索的性质。而策略设计问题则完全是另一个世界，因为策略的设计空间貌似是可列无穷的，常常让人感觉无从下手，摸不着头绪，许多让人挠头的智力问题就有这个特点（例如著名的100个囚徒和1个灯泡的房间就让很多人有这种感觉），策略设计问题也有一些较通用的法则，以后再说。</p>
<p>怎么才能在学算法的时候学到背后的东西呢？有以下几点很重要：</p>
<ol>
<li><strong>不要觉得每个步骤都很显然</strong>，每个nontrivial的算法背后都有一段艰辛的探索经历，觉得显然的话必然是一种幻觉。<strong>Stay foolish</strong>，才能发现某些环节其实并不是那么显然的。 </li>
<li>检验是否真正理解的最佳方法就是<strong>过一段时间之后，自己试着证明一次</strong>。如果真正理解了的话，你的证明便会比较顺畅。如果当时没有真正理解，那么凡是那些你当时觉得显然但其实不显然的地方，都会成为你证明里面缺失的环节。 </li>
<li>对于一个算法，<strong>多寻找各种来源的资料</strong>，也许能够找到一个讲的比较深刻的。我在<a href="http://mindhacks.cn/2008/06/13/why-is-quicksort-so-quick/">《数学之美番外篇：快排为什么那么快》</a>和<a href="http://mindhacks.cn/2008/07/07/the-importance-of-knowing-why/">《知其所以然（一）》</a>里面都举到了这样的例子。 </li>
<li><strong>多试着去抽象背后的一般性法则</strong>，即便后来发现抽象得是错的，也比不去抽象要好。<a href="http://mindhacks.cn/2009/03/28/effective-learning-and-memorization/">抽象是推广的基础</a>。只有抽象出更深层的法则，才能让你事半功倍，触类旁通，否则一个萝卜永远是一个坑。（注意，其实我们的下意识是会进行一定程度的抽象的，例如前面提到的原始人的例子，小溪和小河（或者小沟）细节上是不同的，但本质上是一样的，我们的大脑会自动进行这种简单抽象，提出事物的共性。正因此，即便你不去有意识地总结一般规律，只要你看的足够多，练的足够多，必然就会越来越谙熟。） </li>
</ol>
<p>最后留个问题：虽然按照上文的方式来构造霍夫曼树一定能够得到<em>一个</em>最优树，但是怎么证明一定能得到呢？乍一看这个问题似乎很多余，因为证明很简单：我们拼装整棵树的每一步都没得选，而且每一步都必然拼凑出最优树的一个小小局部，如果最终还没有得到最优树的话，只能说最优树是不存在的了，然而最优树是一定存在的，因为所有树的集合是有穷的，有穷集必有最值，因此证毕。这个证明固然是没问题的，但它其实是一个间接证明，换句话说，我们在构建树的过程中的逻辑是这样的：“之所以我们选择粘结n1和n2，是因为其他粘法必然违反最优树的两个性质。所以我们别无选择。”但是，这并没有说，我们选择了粘结n1和n2，一定就<em>符合</em>了最优树的性质。（也就是说“其他做法都是错”并不能推出“这种做法必然对”，这就像是你在一大堆豆子当中寻找一个特殊的豆子，你拿起一个，看看不是，扔掉，又拿起一个，还不是，扔掉，排除到最后只剩一个豆子了，假设你又知道这个特殊的豆子必然存在，那么这个时候你根本不用看就知道这个豆子一定就是你要找的）那么，你能否直接证明，拼装最优树的过程每一步都<em>符合</em>最优树的性质呢？</p>
<hr />
<p>P.S.</p>
<p>[1] 《逃出你的肖申克》和《BetterExplained》是我喜欢的两个系列，还会继续写，我有很多问题，也在Evernote里面记了不少零碎的思考和资料，但只有当我觉得理解的足够深入，系统，以及手头有足够的有意思和有说服力的例子的时候，我才会把整条线串起来成文，所以这事慢慢来不着急，反正这个博客也不会关掉。</p>
<p>[2] 工作之后可用业余时间急剧减少，已经陆续基本把GReader砍掉了，时间再往前推，砍掉邮件列表，再往前是Twitter，再往前是BBS。现在基本就只剩邮件了。越来越发现当时间有限的时候，看书比看网要有效得多，也不会那么信息焦虑，网络上的那些消息当中真正重要的会自己来找你，不用每天去刷屏。不过有个例外，我过一阵子就会去逛一下Amazon的个性化推荐项目。如果你已经工作，苦于时间有限，我建议你这么做。最近看过的几本值得好好推荐的书有：《Number Sense》，《Reading in the Brain》，《The Vision Revolution》，《The Tell-Tale Brain》，《Kluge》。</p>
<p>[3] 顺便吐槽国内出版社引进Pop Science类书籍的效率和质量，就我观察，台湾引进Pop Science类书籍需要延迟两年左右，大陆则从三四年到无限期不等（某种程度上，一个国家的出版方的认识水平，决定了这个国家大众的认识水平。你去看下我在豆瓣的书单就知道有多少好书与国内读者失之交臂了），例如《Number Sense》这本好书，到现在还没有引进，99年出版的书啊。《Kluge》更是译为《乱乱脑》这种坑爹的书名，封面搞得跟少儿读物一样。《Reading in the Brain》引入的算较快的，但也延迟了一年半了，而且翻译质量也不是很上乘（算是不功不过吧），说到这里要赞中信出版社，最近一年引入了很多给力的Pop Science畅销书，眼光还算不错。最近在Amazon上搜一些好的发展心理学的书，通过Amazon的推荐引擎看到了<a href="http://www.amazon.com/Pink-Brain-Blue-Differences-Troublesome/dp/0618393110">《Pink Brain，Blue Brain》</a>，这本受到因研究大脑记忆的分子机制而获诺奖的Eric Kandel盛赞的科普09年就出了，到现在国内影子都见不着，还好在卓越上买到了原版。虽然基本还没开始看，但可以郑重推荐给初为父母的同学们:)</p>
<h3  class="related_post_title">你可能也会喜欢以下文章</h3><ul class="related_post"><li><a href="http://mindhacks.cn/2010/11/14/the-importance-of-knowing-why-part2/" title="知其所以然（续）">知其所以然（续）</a> (42)</li><li><a href="http://mindhacks.cn/2008/07/07/the-importance-of-knowing-why/" title="知其所以然（以算法学习为例）">知其所以然（以算法学习为例）</a> (36)</li><li><a href="http://mindhacks.cn/2008/06/13/why-is-quicksort-so-quick/" title="数学之美番外篇：快排为什么那样快">数学之美番外篇：快排为什么那样快</a> (25)</li><li><a href="http://mindhacks.cn/2008/04/18/learning-from-polya/" title="跟波利亚学解题(rev#3)">跟波利亚学解题(rev#3)</a> (23)</li><li><a href="http://mindhacks.cn/2007/12/02/probability-theory-in-evolution/" title="数学之美番外篇：进化论中的概率论">数学之美番外篇：进化论中的概率论</a> (13)</li></ul><hr />
<h3>订阅 Mind Hacks</h3>
<a title="用Google Reader订阅" href="http://fusion.google.com/add?feedurl=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_google.gif" style="border:0" alt="订阅到 | Google" /></a> 
<a title="用鲜果订阅" href="http://www.xianguo.com/subscribe.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_xianguo.gif" style="border:0" alt="订阅到 | 鲜果" /></a>
<br/> 
<a title="用抓虾订阅" href="http://www.zhuaxia.com/add_channel.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_zhuaxia.gif" style="border:0" alt="订阅到 | 抓虾" /></a> 
<a title="用有道订阅" href="http://reader.youdao.com/b.do?keyfrom=mindhacks&url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_yodao1.gif" style="border:0" alt="订阅到 | 有道" /></a> 
<hr />
<h3>我是你的信息过滤器</h3>
想了解作者最近在关注什么，欢迎 Follow <a href="http://weibo.com/pongba">刘未鹏pongba@微博</a>
<br/>
程序员朋友请到作者发起的 <a href="https://groups.google.com/group/pongba">TopLanguage</a> (<a href="http://mindhacks.cn/about-toplanguage/">about</a>) 社群逛逛，定有收获 :)
<br/>
想了解作者在阅读哪些书，请到 <a href="http://www.douban.com/people/pongba/">pongba@豆瓣</a>，或者直接访问以下四个豆列：<a href="http://www.douban.com/doulist/46003/">[只读经典]思维改变生活</a> | <a href="http://www.douban.com/doulist/127649/">[只读经典]思考的技术与艺术</a> | <a href="http://www.douban.com/doulist/197706/">决策与判断</a> | <a href="http://www.douban.com/doulist/176513/">机器学习与人工智能书籍资源导引</a> 。
<hr />
<p><small>
本文由 刘未鹏 发布在 <a href="http://mindhacks.cn">刘未鹏 | Mind Hacks</a>, 2011. | <a href="http://mindhacks.cn/2011/07/10/the-importance-of-knowing-why-part3/#commenting">57 条评论</a> | 标签: <a href="http://mindhacks.cn/tags/%e7%ae%97%e6%b3%95/" rel="tag">算法</a>
<br/>
转载请注明作者，出处，以及<a href="http://mindhacks.cn/2011/07/10/the-importance-of-knowing-why-part3/">原始超链接</a>: http://mindhacks.cn/2011/07/10/the-importance-of-knowing-why-part3/
</small></p>]]></content:encoded>
			<wfw:commentRss>http://mindhacks.cn/2011/07/10/the-importance-of-knowing-why-part3/feed/</wfw:commentRss>
		<slash:comments>57</slash:comments>
		</item>
		<item>
		<title>逃出你的肖申克（四）：理智与情感</title>
		<link>http://mindhacks.cn/2011/01/23/escape-from-your-shawshank-4/</link>
		<comments>http://mindhacks.cn/2011/01/23/escape-from-your-shawshank-4/#comments</comments>
		<pubDate>Sun, 23 Jan 2011 12:28:34 +0000</pubDate>
		<dc:creator>刘未鹏</dc:creator>
				<category><![CDATA[思维改变生活]]></category>

		<guid isPermaLink="false">http://mindhacks.cn/2011/01/23/escape-from-your-shawshank-4/</guid>
		<description><![CDATA[医学上，对于一些罹患严重癫痫症的病人，一种万不得已但颇为有效的方法是切断其大脑的胼胝体。胼胝体是两个脑半球之间的信息高速通道，含有2亿多条神经纤维，一旦切断之后，两脑半球之间的沟通也就相当于从信息时代回到了石器时代。经过这类手术的不幸的病人被称为“裂脑人”。对裂脑人的研究发现了关于人类大脑的一些非常重要的性质，例如《改变心理学的40项研究》第一章“一个脑还是两个脑”里面提到的研究揭示出左右脑在空间感，视觉触觉，语言方面的一些深刻而有趣的差异。

《How We Know What Isn't So》里面则提到另一则非常有趣的有关裂脑人的研究：我们知道，语言能力主要在左脑。对于裂脑人，我们将两幅不同的图画分别呈现给裂脑人的左脑和右脑，呈现给左脑的图画上面是一只鸡爪，而呈现给右脑的则是覆盖着皑皑白雪的牧场。这之后，让他从一堆图片中寻找能跟他看到的图片相匹配的图片。结果非常耐人寻味：裂脑人的左手（右脑控制）会去选择一把铁锹（铁锹铲除牧场上的白雪），而其右手（左脑控制）则会去选择一只小鸡（小鸡和鸡爪配对）。两个脑半球分别根据自己所掌握的信息选择了最匹配的图片。然而，最有趣的地方在于当实验者询问被试为什么选择这两幅图片的时候。裂脑人会说：“哦，很简单啊，小鸡有鸡爪，而铁锹用来铲鸡屎”。]]></description>
			<content:encoded><![CDATA[<p>医学上，对于一些罹患严重癫痫症的病人，一种万不得已但颇为有效的方法是切断其大脑的胼胝体。胼胝体是两个脑半球之间的信息高速通道，含有2亿多条神经纤维，一旦切断之后，两脑半球之间的沟通也就相当于从信息时代回到了石器时代。经过这类手术的不幸的病人被称为“裂脑人”。对裂脑人的研究发现了关于人类大脑的一些非常重要的性质，例如《改变心理学的40项研究》第一章“一个脑还是两个脑”里面提到的研究揭示出左右脑在空间感，视觉触觉，语言方面的一些深刻而有趣的差异。</p>
<p>《How We Know What Isn&#8217;t So》里面则提到另一则非常有趣的有关裂脑人的研究：我们知道，语言能力主要在左脑。对于裂脑人，我们将两幅不同的图画分别呈现给裂脑人的左脑和右脑，呈现给左脑的图画上面是一只鸡爪，而呈现给右脑的则是覆盖着皑皑白雪的牧场。这之后，让他从一堆图片中寻找能跟他看到的图片相匹配的图片。结果非常耐人寻味：裂脑人的左手（右脑控制）会去选择一把铁锹（铁锹铲除牧场上的白雪），而其右手（左脑控制）则会去选择一只小鸡（小鸡和鸡爪配对）。两个脑半球分别根据自己所掌握的信息选择了最匹配的图片。然而，最有趣的地方在于当实验者询问被试为什么选择这两幅图片的时候。裂脑人会说：“哦，很简单啊，小鸡有鸡爪，而铁锹用来铲鸡屎”。</p>
<p>我们不妨停下来，想一想这个实验所揭示的一个令人深思的事实：铁锹之所以被选择，其实际的原因是为了和雪场匹配——铲雪。然而，铁锹和雪场的这个联系仅仅只有右脑清楚，而右脑是没有语言能力的。语言能力在左脑。当被试被要求对他的选择用语言进行解释的时候，是左脑的Broca区域在说话，而左脑没法和右脑沟通，所以不知道铁锹实际是用来铲雪的，但是，左脑仍然还是不假思索的给出了解释，而且病人真心<b>相信</b>这个解释“很显然”，“很简单”。可见<b>我们的理性大脑非常善于对自己的行为作出立即的，看上去合理的解释。</b></p>
<p>类似的一则关于超市购物的研究表明，人们倾向于购买货架上靠最右侧的袜子，尽管在实验中袜子是一样的。当被询问到选择的原因时人们会给出各种看似合理的解释，颜色质地什么的。可关键是，袜子是一样的！</p>
<p>以下这则经典实验（Maier的双绳实验（two-cord experiment））则被很多心理学书籍所引用，包括著名的《心理学与生活》：</p>
<p>实验者将两根绳子拴在房间的顶上，两根绳子相隔较远，一个人站在中间往两边伸出双臂是没法子同时够到两根绳子的，同样也别指望拽着其中一根去够另一根。而受试者的任务就是要将这两根绳子的末端拴在一起。房间里有钳子，镊子，杆子，加长绳子这些工具。</p>
<p>许多被试很快想出用加长绳子的方法，但是Maier要求他们继续想更好的办法。绝大多数被试在Maier的要求之下都会最终黔驴技穷一筹莫展。就在他们一筹莫展几分钟之后，Maier会在房间里走动并偷偷貌似“无意”地碰到其中一根绳子，使得绳子晃荡起来。在这之后，一般45秒钟之后便会有受试者表示想到办法了——他们迅速地将一个重物绑到其中一根绳子上，让它像秋千一样荡起来，然后跑到另一根绳子那，抓住它，然后等那根绳子荡过来。Maier在他们“想出”解决方案之后立即就询问他们怎么想到的，超过2/3的被试给出了各种解释：“就是一瞬间，答案出现在脑海里了”，“这是唯一的可能了，要不还能怎样呢？”，“我忽然意识到可以把东西拴在绳子上让它荡起来”&#8230; 其中一位心理学教授的答案最具创意：“在排除了所有可能之后，把绳子荡起来是剩下的唯一可能了，我脑子里想到通过绳子荡过河的场面，还有猴子从一棵树荡到另一棵。这个意象和答案在我脑中一同闪现。”</p>
<p>剩下的不到1/3的被试表示是看到Maier把绳子碰动了才得到启发的。然而，即便是这1/3被试，他们真的是因为能够感知到大脑解决问题过程中的认知过程所以才这么说的么？为此Maier做了另一个实验，唯一的区别在于，在原来触动绳子的暗示之前，Maier会先给另一个暗示（当然，被试不知道这是Maier的提示）：将一个重物绑在绳子末端。结果是令人吃惊的：这个暗示毫无效果，被试依然一筹莫展。接着Maier才给出原先那个暗示。并对解决问题后的被试作采访，这次，他发现所有被试都认为是Maier绑重物那个举动提醒了他们，并且他们都不认为是原先真正有用的那个暗示的功劳。可见这1/3的被试也并不知道在他们大脑中到底发生了什么。<b>我们知道答案，却往往不知道真正的求解思维过程。</b></p>
<p>如果有人问你，你最好的朋友叫什么名字？一瞬间，他/她的名字便会“蹦入”你的脑海，毫不费力，你脱口而出。可是如果我问你，你是怎么得到这个答案的？你的回答无非只能是：“很简单，我记得啊”。可是你又是怎么记起来的呢？从你的耳蜗感受到“你最好的朋友叫什么名字”这句话所产生的空气振动，并将其转化为神经电信号传入你大脑的听觉中枢，经过Wernicke区域，直到你的大脑从茫茫记忆中检索出这个唯一正确的答案，中间发生了何等复杂的过程，又岂是简简单单的“蹦出来了”可以解释的？<b>我们的意识就像是一个等着老师给出答案的小学生，只能眼巴巴的在那等着，至于老师是怎么想出答案的，老师不告诉你。</b></p>
<p>我们的生活中面临很多或小或大的决策：和谁吃饭，什么时候去超市，买这款衣服还是那款，要不要去看那部电影，晚上是学习呢还是玩游戏，该不该主动接下一个有挑战性的工作，买房还是不买，抛掉还是持有，出国还是留下，等等等等。很多人可能会认为自己的决策是有充分的理性考虑的，是有充分的“理由”的，如果你事后问他/她，他/她会告诉你很多很多听上去很有道理的理由：“我今天需要休息一下，所以玩会游戏”，“政府不会让房价下跌的，所以我打算买了”，“现在神马股份还在亏钱，所以不能卖”。如果你问另一些人，他们也同样会告诉另一些听上去同样很有道理的道理：“玩游戏没意思，还是学点东西好”，“不想拿父母多年的积蓄一下花掉，感觉自己在啃老”，“神马股份还不知道会跌到哪呢，还是撤了吧”。</p>
<p>这些听起来很有道理的道理，真的是驱使我们内心作出决定的理由么？很遗憾的是，很多时候答案是否定的。说要休息一下才玩游戏，其实真正原因也许是受到游戏中那些在现实中找不到的成就感的驱使。说玩游戏没意思，其实真正原因也许是最近现实生活中受了打击想要天天向上一把。说政府不会让房价下跌所以买房，也许真正原因是周围的人买了房而女朋友也在嚷嚷。说不想啃老所以不买房，真正理由可能是厌恶风险。说股票还在亏所以不能卖，真正理由可能是侥幸加贪婪心理，说股票还不知道跌到哪呢赶紧卖，真正理由可能是损失规避心理。</p>
<p>真正的理由有时候往往隐藏在意识触及不到的地方，由我们的情绪大脑所掌控，当它引导我们的情绪大脑作出决定之后，才发个红头文件通知我们的理性大脑，我们的理性大脑于是便像文章开头提到的实验中描述的那样，迅速而果断地给出各种听上去很合理的解释，让我们的决定和行为看上去无懈可击。</p>
<p>晚上是玩游戏呢还是看书呢？你的情绪大脑果断给出答复——玩游戏。你其实理智上希望自己能够看看书，但在你强大的情绪大脑面前，你的理性大脑只能屈服，但你又不能让自己处于天人交战的纠结状态，所以你的理性大脑便用各种理由来搪塞自己：“就玩一小会”，“人也要有休息嘛”，“今天玩，明天一定加倍学习补偿今天的时间”。</p>
<p>为什么投降的一方反而是代表着更高级认知能力的理性大脑？从进化角度来说，我们原始的情绪大脑早在远古的远古就已经存在并且为物种的生存繁衍作出卓越的贡献了（虽然大脑中的这一部分系统只能进行很简单的判断和条件反射，但他们无疑把守了对物种的持续存在而言最为基本且重要的一些功能——食物，性，自然环境中的危险，社会交互行为，道德感等等（《欲望之源》，《进化心理学》））。它们的进化年代要比理性大脑深远的多，它们就像漫长岁月中伴随着生物一路进化走过来的老功臣，拥有强大的权力和力量，却没有意识到世界已经在最近的5百年发生了迅速和巨大的变化，这种变化对于几十上百万年的漫漫进化路来说只仿佛一瞬，然而就在这一瞬间，整个世界完全不一样了，可老功臣还没有来得及退休，还在掌管着我们的大脑，引导着我们作出各种跟不上时代的决策。（<a href="http://mindhacks.cn/2010/03/18/escape-from-your-shawshank-part3/">《逃出你的肖申克（三）：遇见20万年前的自己》</a>）</p>
<p>人的大脑并不是一个一蹴而就的整体设计，而是随着漫长的岁月在进化中被不断地添添补补，<b>就像一台7拼8凑攒出来的电脑，CPU是新的，主板却是老的，老的主板不能很好的兼容新的CPU，结果CPU的性能便不能很好的发挥出来</b>。可怜我们在进化上比较新近的新皮质（neocortex），拥有强大的计划能力和认知能力，但在一些原始诱惑面前却总是无法做到淡定。因为大脑中的这些原始模块还没有很好的和新模块兼容。如果你面前有一条毒牙被拔掉了的小蛇，你敢用手去抓么，抓的时候你能不汗毛倒竖么？漫长的进化在我们的基因中刻下了一些“硬编码”的特性，比如对滑不溜丢游来游去的东西感到本能的害怕，因为自然环境中这些动物往往是有剧毒的，它们是生活在野外的先祖们主要的生命威胁之一。虽然你的理性大脑的强大认知能力让你确信你面前的这条蛇是没有毒的，完全不用担心，但是你的原始大脑却根本不理会。你的理性大脑能够运用语言，能够理解公式，而你的原始大脑却只懂条件反射，如果你多接触这些无毒的蛇，你多抓他们几次，久而久之你就会不怕了，这叫去敏感化，去敏感化是你的原始大脑所懂得的语言，只有这种方式才能较容易地说服你的原始大脑。同样的道理，我们常说不到黄河心不死，不见棺材不落泪。别人说破了嘴皮子的道理也没用，非要吃个大亏载个大跟头，跌得头破血流，才印象深刻从此不敢越雷池一步，为什么？因为你的原始大脑根本不懂那么多道理，它就是要遇到吃亏之后巨大的负面反馈才能习得一个条件反射。</p>
<p>只要我们的情绪大脑首先认定了一件事情，我们那点可怜的理性思维便很容易屈从于情绪大脑发下的命令——<b>把事情往利于自己的方向解释</b>。</p>
<p>《谁会认错》里面便引用了一位社会心理学家在宣扬末日论组织里面“卧底”的见闻，该组织的成员为了能够在末日到来的时候被UFO接走，抛家弃子，放弃财富。而当那个被预言的时刻到来的时候，一切没有发生，心理学家发现，预言的破灭却并没有影响信徒们的信念一分一毫，他们的领头人解释道：因为那些相信者的诚意打动了上帝，所以毁灭没有发生。那些原本相信的，反而变得更相信，他们相信是他们的诚意避免了灾难，并努力地劝说更多的人加入。也有那些原本就不大信的，自然是更不相信。</p>
<p>类似的，《决策与判断》上提到过一个有趣的真实故事：1980年的某一天，美国空战司令部的计算机突然发出警报——苏联的一枚核弹正在向美国本土飞来。司令部立即调兵遣将，迅速为一场核战做好了准备，然而3分钟之后，工程人员发现是计算机的一个小零部件故障造成的。然而，这场虚惊之后，大众的反应才是真正有意思的：原先支持核武装的，认为现在感觉更加安全了（因为“事实证明这类的故障是完全可克服的”）；而原先反对核武装的则认为更不安全了（因为“这类错误信号 可能导致苏联过度反应，引发真正的核战”）。类似的情况也发生在三里岛核泄露事件之后，同样的，反对者认为（“这表明管理部门没有办法安全管理核能”）， 支持者认为（“这正表明这样的危险没有想像得那么严重，是可克服的”）。</p>
<p>只要一件事情尚存在对自己有利的解释，我们的大脑便会毫不犹豫地掩耳盗铃地认为那就是唯一的解释。</p>
<p>慕容雪村在《中国，少了一味药》当中记录了自己在传销窝中待了近1个月的见闻。令人匪夷所思的是，传销者真正相信他们正在做的是一项国家暗中支持的事业。根据书中描述，典型论据有三：一，要不是国家暗中支持，怎么会有内部通话免费的集团号码。二，要不是国家支持，他们通过银行转账的操作怎么不被国家查封。三，要不是国家支持，当地怎么那么多住房租给他们。再加上亲友说服，从众压力等各种手段之下，他们逐渐相信这是件大好事。在外界对传销的印象和事实的差别之中，也许最大的差别就是，和人们想象的不同，传销者并不挟持人生自由和财物，相反，他们想尽办法鼓励你去自己思考和判断！例如以上关于“国家支持”的论证，对于有常识的人来说漏洞很多，对于没有常识的人来说，只要有警惕心理，肯去调查，总能发现另一种解释。但是，对于内心希望这一切都是“国家支持”的所以自己就能真的赚几百万大钱的人来说，这些“有利”的证据便不会被过分深究和审查。所以传销窝中各色人等都有，包括见过世面的老江湖，甚至还有专门报导传销的新闻记者。人类心理的弱点之强大可见一斑。更匪夷所思的是，他们竟能把外面铺垫盖地的反传销宣传解释为是“国家宏观调控”，目的是为了不让人涌到这个行业中来，保证行业中的人的利益。“要不然，他们突击抓完人之后怎么给你买张票送你上火车之后就不管了呢——做做样子嘛”，他们相信这所谓“宏观调控”么？相信，而且无比相信。<b>只要一种解释是对自己有利的，我们便不想去推敲和反驳，再漏洞百出的事情看上去也不无可能，而且只要一种解释是有可能的，我们就认定其一定是的，</b>强大的情绪大脑会阻止理性大脑去往深入了想<b>。而对于对自己不利的解释，我们或者忽略，或者则会异常仔细去推敲，抓住一个漏洞则相信已完全推翻了该解释。</b></p>
<p>尤其是当人们为一件事情付出了金钱，社会关系，很多很多之后（这在宗教末世论组织和传销组织中何其相似），这些既有付出便会对他们的思维产生越来越强大的影响（经济学中的“<a href="http://en.wikipedia.org/wiki/Sunk_costs">沉没成本</a>”便是如此），我们的思想被迫对自己的行为作出合理的解释（这就是著名的“<a href="http://en.wikipedia.org/wiki/Cognitive_dissonance">认知失调</a>”——这个心理学词汇已经如此有名，以至于出现在了呆伯特漫画中了），因为谁也不希望自己那么大的付出是愚蠢而错误的，为了让自己不是愚蠢且错误的，理性大脑不再是客观的代名词，而是一个唯唯诺诺为了维护自己情感的下属系统——“因为我们的信念感动了上帝，所以毁灭没有发生，这是唯一的解释”，至于那个另一种解释，因为会不可避免地涉及到“我很愚蠢”这个结论，被人们的情绪大脑无情地驳回了。</p>
<p>一件事情总是有两个解释：一个平凡的解释和一个疯狂的解释（<a href="http://mindhacks.cn/2009/03/15/preconception-explained/">《逃出你的肖申克（二）：从视觉错觉到偏见》</a>。而从自我辩护的角度看，一件事情总是有两种解释：一种对自己有利的解释，和一种对自己不利的解释。只要选择前者，我们便能够自欺欺人地将自己蒙混过关。</p>
<p>刘慈欣在《三体II》里面提到“思想钢印”和“钢印族”，其实何必去设想那样一种能够改变人类大脑中神经元连接方式的机器。<b>我们每个人大脑中都有思想钢印。这道钢印由经验打造，用自尊来维护，牢不可破，比钻石的硬度还要高。</b></p>
<p>社会心理学研究发现，我们会<b>对那些对自己有利的证据不加细查，而对那些对自己不利的证据则死抠烂打</b>揪住一点小辫子就不放；同样，我们还会倾向于<b>勤劳收集有利证据，并忽视不利证据</b>。事实是，当我们内心的天平早已经倾斜了之后，看来荒谬无比的理由也变得光辉灿烂，别人很有道理的反驳也能被抠出“致命”漏洞。</p>
<p>因此，当你觉得自己想的很有道理，无懈可击，客观公正的时候，你是否真正像你认为的那样客观呢？Artemus Ward曾经说过：并不是那些我们不知道的事情让我们陷入麻烦，而是那些我们认定自己知道，却实际上是错误的知识，让我们陷入麻烦。<b>客观意味着承认存在未知信息的可能性，理性意味着能够从对立面的视角去看问题和思考</b>。学会质疑自己的判断，假设自己是站在对立面的立场上帮他说话，往往能够发现很多意料之外的东西；即便别人是错的，自己是对的，试着去理解错误的一方为什么会错，为什么会有那样的看法和认识，也往往能够得到很多有益的东西，你也许会发现自己的正确其实常常也是碰巧站对了队伍，而不像自己所认为的那样，来自于严密的逻辑和不可辩驳的证据。最后，<b>与其让别人指出自己的错误，不如自己试着去发现自己的错误</b>。</p>
<p>难道没有办法克服人类心理的天生漏洞么？有。大脑符合用进废退的原理，越经常使用的区域会越来越强大。如果你总是情绪用事，不假思索，那么这种思维习惯便会越来越强大；如果你总是理性思考，反省自己的判断，能换立场去看问题，那么这样的思维习惯逐渐也会越来越强大。习惯之所以难以改变，<strong>就是因为习惯是自我巩固的</strong>，越用越强，越强越用。要想从既有习惯中跳出来，必然要依赖于外界的力量——<strong>对于心理机制的知识</strong>。仅仅是知道一些常见的行为陷阱和心理弱点的存在（《别做正常的傻瓜》，《决策与判断》，《Predictably Irrational》，《How We Know What Isn’t So》等等）便已经可以帮我们避免很多的决策失误。而如果能够进一步理解这些陷阱和弱点的深层原因（《Kludge》，《进化心理学》，《追寻记忆的痕迹》，《Simple Heuristics that Makes Us Smart》，《欲望之源》，《自私的基因》等等），则更可能说服自己做正确的事情。<strong>能够改变既有的习惯，依靠的不是自制力，而是知识</strong>。单纯的自制是一件非常痛苦的事情，你理智上知道应该怎么做，但是你的情绪大脑却就是不买账，一些比较坚定的人能够不管三七二十一就强迫自己去做正确的事情，这殊为不易，不是像我这样的一般人能够做到的。但是，无论任何人，都有一个共同的倾向，就是去做正确的事情，不去做错误的事情。<strong>很多时候我们无法自制是因为情绪大脑并不知道也并不承认这件事情是错误的</strong>。举个最稀松平常的例子，去学习还是去玩游戏（并不是提倡不玩游戏，这里只是说在你希望自己能够不玩游戏做点别的事情的那些时候，你能够成功地实现自己的愿望而不是纠结半天并败下阵来。），理智上我们倾向于认为学习是件“好”事情，游戏则常常是件“不好”的事情，然而情感上，我们认为学习是痛苦的，游戏是开心的。而开心的的确确就是一件好事情，痛苦就是一件不好的事情。两个大脑模块的声音完全相反。如果你无法说服你的情绪大脑，那么所谓的自制就是强迫和纠结，天人交战，正如前文所说，最后败下阵来的也往往是理性大脑。然而如果你意识到对于游戏的热爱其实是完全正常的，我们玩游戏是为了获得群体认同感和成就感，对它们的追求早在几十万年以前就刻在了我们的基因上，获得群体认同和成就是非常重要的优势。然而，由于这部分动机来源于我们相对原始的大脑，而后者的进化年代早在几十万年之前，在那个时候还没有网络，电脑，虚拟世界，虚拟货币这些东西，尽管我们的理性大脑能够认识到虚拟世界中的成就往往并不能转化为现实世界中的成就（电子竞技是一个反例），然而我们的原始大脑却无法区分虚拟和现实。意识到这一点之后，至少你就理解了为什么我们会受到这样那样的诱惑（我们对于高脂肪和高热量的无穷热爱也是如此——在先祖生存的贫瘠环境中，脂肪和热量是稀缺的，因而“尽量吃了存起来”几乎总是正确的），而当你进一步意识到自己无法自制的原因是因为你大脑原始的那部分仍然天真地认为你还处在石器时代的时候，你就会觉得任其驱使自己是愚蠢的事情，而我们的情绪大脑自然不希望自己是愚蠢的；而另一方面，认识到以上这些知识，认识到大脑的局限性，并最终摆脱它的错误驱使，则让人情绪上感到聪明和愉悦。于是我们就以彼之矛攻彼之盾，<strong>利用情绪大脑本身的动力来推动了它本身</strong>。</p>
<p>另一个类似的例子则来自于一项著名的心理学实验，该实验被称为“<a href="http://news.163.com/09/0524/08/5A2M36NP000120GR.html">棉花糖实验</a>”，其目的是建立儿童在延迟满足方面的自我约束力与日后取得个人成就之间的联系，但我想说的是实验当中那些成功地抵制住了棉花糖诱惑的儿童，这里有意思的地方在于为什么他们最终成功了，成功的原因并不在于棉花糖对他们的诱惑较小，对于这部分儿童而言，棉花糖的诱惑同样巨大，他们在抵制诱惑的时候显得异常痛苦，但他们的能耐在于他们通过各种各样的方法和技巧来分散自己的注意力，不让自己盯着棉花糖，让自己忙于干其他事情，通过这样的技巧，他们成功地将强大的刺激源从原始大脑面前移开，并且通过让自己忙于干一些其他事情来让大脑处于“忙碌”“被占用”的状态，阻止原始大脑老去往棉花糖上想。但是这跟学习心理学的好处又有什么关系呢？难道这些小孩在实验之前系统学习了进化心理学不成？他们显然没有。但他们所使用的方法恰恰是能够克服这些缺陷的方法。殊途同归的是，即便我们并非像一些有天分的人那样一开始就知道怎么对付自己内心的另一个声音，通过学习一些基本的心理学知识，我们也能够后天地获得这些方法，而通过这些方法，我们便更可能成功地绕过甚至克服我们大脑天生的缺陷。这就是为什么我相信<a href="http://blog.sina.com.cn/s/blog_4caedc7a0100j20h.html">人人都该学点心理学</a>的原因。</p>
<h3  class="related_post_title">你可能也会喜欢以下文章</h3><ul class="related_post"><li><a href="http://mindhacks.cn/2010/03/18/escape-from-your-shawshank-part3/" title="逃出你的肖申克（三）：遇见20万年前的自己">逃出你的肖申克（三）：遇见20万年前的自己</a> (113)</li><li><a href="http://mindhacks.cn/2009/03/28/effective-learning-and-memorization/" title="[BetterExplained]如何有效地记忆与学习">[BetterExplained]如何有效地记忆与学习</a> (104)</li><li><a href="http://mindhacks.cn/2009/03/15/preconception-explained/" title="逃出你的肖申克（二）：仁者见仁智者见智？从视觉错觉到偏见">逃出你的肖申克（二）：仁者见仁智者见智？从视觉错觉到偏见</a> (148)</li><li><a href="http://mindhacks.cn/2009/02/15/why-you-should-start-blogging-now/" title="[BetterExplained]为什么你应该（从现在开始就）写博客">[BetterExplained]为什么你应该（从现在开始就）写博客</a> (206)</li><li><a href="http://mindhacks.cn/2009/02/09/writing-is-better-thinking/" title="[BetterExplained]书写是为了更好的思考">[BetterExplained]书写是为了更好的思考</a> (96)</li><li><a href="http://mindhacks.cn/2009/02/07/better-explained-conflicts-in-intimate-relationship/" title="[BetterExplained]亲密关系中的冲突解决">[BetterExplained]亲密关系中的冲突解决</a> (50)</li><li><a href="http://mindhacks.cn/2009/01/18/escape-from-your-shawshank-part1/" title="逃出你的肖申克（一）：为什么一定要亲身经历了之后才能明白？">逃出你的肖申克（一）：为什么一定要亲身经历了之后才能明白？</a> (64)</li><li><a href="http://mindhacks.cn/2009/01/16/hammers-and-nails/" title="锤子和钉子">锤子和钉子</a> (19)</li><li><a href="http://mindhacks.cn/2008/12/18/how-to-think-straight/" title="如何清晰地思考（近一年来业余阅读的关于思维方面的知识结构整理）">如何清晰地思考（近一年来业余阅读的关于思维方面的知识结构整理）</a> (23)</li><li><a href="http://mindhacks.cn/2008/10/29/methodology-for-programmers/" title="方法论、方法论&mdash;&mdash;程序员的阿喀琉斯之踵">方法论、方法论&mdash;&mdash;程序员的阿喀琉斯之踵</a> (19)</li></ul><hr />
<h3>订阅 Mind Hacks</h3>
<a title="用Google Reader订阅" href="http://fusion.google.com/add?feedurl=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_google.gif" style="border:0" alt="订阅到 | Google" /></a> 
<a title="用鲜果订阅" href="http://www.xianguo.com/subscribe.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_xianguo.gif" style="border:0" alt="订阅到 | 鲜果" /></a>
<br/> 
<a title="用抓虾订阅" href="http://www.zhuaxia.com/add_channel.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_zhuaxia.gif" style="border:0" alt="订阅到 | 抓虾" /></a> 
<a title="用有道订阅" href="http://reader.youdao.com/b.do?keyfrom=mindhacks&url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_yodao1.gif" style="border:0" alt="订阅到 | 有道" /></a> 
<hr />
<h3>我是你的信息过滤器</h3>
想了解作者最近在关注什么，欢迎 Follow <a href="http://weibo.com/pongba">刘未鹏pongba@微博</a>
<br/>
程序员朋友请到作者发起的 <a href="https://groups.google.com/group/pongba">TopLanguage</a> (<a href="http://mindhacks.cn/about-toplanguage/">about</a>) 社群逛逛，定有收获 :)
<br/>
想了解作者在阅读哪些书，请到 <a href="http://www.douban.com/people/pongba/">pongba@豆瓣</a>，或者直接访问以下四个豆列：<a href="http://www.douban.com/doulist/46003/">[只读经典]思维改变生活</a> | <a href="http://www.douban.com/doulist/127649/">[只读经典]思考的技术与艺术</a> | <a href="http://www.douban.com/doulist/197706/">决策与判断</a> | <a href="http://www.douban.com/doulist/176513/">机器学习与人工智能书籍资源导引</a> 。
<hr />
<p><small>
本文由 刘未鹏 发布在 <a href="http://mindhacks.cn">刘未鹏 | Mind Hacks</a>, 2011. | <a href="http://mindhacks.cn/2011/01/23/escape-from-your-shawshank-4/#commenting">127 条评论</a> | 标签: <a href="http://mindhacks.cn/tags/%e6%80%9d%e7%bb%b4%e6%94%b9%e5%8f%98%e7%94%9f%e6%b4%bb/" rel="tag">思维改变生活</a>
<br/>
转载请注明作者，出处，以及<a href="http://mindhacks.cn/2011/01/23/escape-from-your-shawshank-4/">原始超链接</a>: http://mindhacks.cn/2011/01/23/escape-from-your-shawshank-4/
</small></p>]]></content:encoded>
			<wfw:commentRss>http://mindhacks.cn/2011/01/23/escape-from-your-shawshank-4/feed/</wfw:commentRss>
		<slash:comments>127</slash:comments>
		</item>
		<item>
		<title>知其所以然（续）</title>
		<link>http://mindhacks.cn/2010/11/14/the-importance-of-knowing-why-part2/</link>
		<comments>http://mindhacks.cn/2010/11/14/the-importance-of-knowing-why-part2/#comments</comments>
		<pubDate>Sun, 14 Nov 2010 09:41:00 +0000</pubDate>
		<dc:creator>刘未鹏</dc:creator>
				<category><![CDATA[学习方法]]></category>
		<category><![CDATA[算法]]></category>

		<guid isPermaLink="false">http://mindhacks.cn/2010/11/14/%e7%9f%a5%e5%85%b6%e6%89%80%e4%bb%a5%e7%84%b6%ef%bc%88%e7%bb%ad%ef%bc%89/</guid>
		<description><![CDATA[我有一个习惯，看定理必看证明。一个你不明白其证明的定理在我看来比不知道这个定理还要糟糕，因它给你造成一种懂了的错觉。在没有明白背后的证明之前，任何一个定理对你来说都是等价的——等价于背乘法口诀（只不过有的长一点有的短一点）。一个原本美妙的定理，把其证明扔掉就是真正的买椟还珠，暴殄天物。 

从现实意义来说，去理解一个定理的证明会带来巨大的好处，首当其冲的好处就是你很难再忘掉它。这一点其实很容易解释——在理解一个定理的证明之前，定理对你而言是一堆没有内在联系的词句，而在理解了证明之后，定理就归约为证明它所需的条件加上逻辑...这是一个树状的知识结构，越往上层走，需要记忆的节点就越少。]]></description>
			<content:encoded><![CDATA[<p>查了一下，上篇<a href="http://mindhacks.cn/2008/07/07/the-importance-of-knowing-why/">知其所以然（以学习算法为例）</a>是08年7月写的，现在已经是10年11月，过去了两年零4个月，这说明了三件事情：1，一个问题其实你可以一直放在脑子里面，利用<a href="http://mindhacks.cn/2009/12/20/dark-time/">暗时间</a>对其软泡硬磨，时间足够久你总会有一点新的感悟，问题其实就像那句老话说的那样，不怕贼偷就怕贼惦记，聚精会神的思考一天，也许比不上惦记一个星期（据说<a href="http://blog.csdn.net/pongba/archive/2008/07/24/2705151.aspx">数学家庞加莱就特别会惦记问题</a>）。2，事实上，当你感觉懂了的时候，你至少得反问自己一句，真的懂了吗？当你确信自己真的懂了的时候，你至少得讲给别人听，别人听懂了吗？考察你自己是否真懂了的一个很好的依据是，你是否有一种“哦，原来是这样啊，这下再也不可能忘记了”的感觉。3，我其实没有忘记这个博客。如我之前说的，<a href="http://mindhacks.cn/2009/02/15/why-you-should-start-blogging-now/">记录只是学习和思考的副作用</a>，只要还在学习和思考，就必然会有新的记录。 </p>
<p>我有一个习惯，看定理必看证明。一个你不明白其证明的定理在我看来比不知道这个定理还要糟糕，因它给你造成一种懂了的错觉。<strong>在没有明白背后的证明之前，任何一个定理对你来说都是等价的——等价于背乘法口诀</strong>（只不过有的长一点有的短一点）。一个原本美妙的定理，把其证明扔掉就是真正的买椟还珠，暴殄天物。 </p>
<p>从现实意义来说，<strong>去理解一个定理的证明会带来巨大的好处，首当其冲的好处就是你很难再忘掉它</strong>。这一点其实很容易解释——在理解一个定理的证明之前，定理对你而言是一堆没有内在联系的词句，而在理解了证明之后，定理就<strong>归约为</strong>证明它所需的条件加上逻辑，“逻辑”本来就存在于你的大脑里面，而证明的过程中除了公理和用到的常见定理（往往没几条）之外，宽泛地说，需要你去记的，一般来说也只有一个或两个关键的insights，也就是我们常说的证明中的神来之笔，比如几何证明里面的某条看上去莫名其妙的辅助线，一旦你知道了这条辅助线，那么整个证明就毫无难处，那么该定理的信息量便直接缩减为一条辅助线的信息量；虽然看上去这一步信息并没有缩减多少，但是如果你考虑到类似的辅助线不仅会用在这个特定的定理上，往往会在很多地方用到。很多关键的证明手法是通用的。那么其实你就是把所有以这个辅助线为关键证明手法的定理的集合的信息量归约为了这条辅助线。如果你进而甚至能够理解了作这条辅助线的思想精髓，那就更牛逼了，因为解决问题的思路更具有一般性，理解了寻找正确的辅助线的思路，你就根本不需要去记得某条特定辅助线的作法，你就把所有以作一条或几条辅助线为证明核心的定理的集合的信息量归约为了这个“寻找辅助线的思路”。 </p>
<p><strong>这是一个树状的知识结构，越往上层走，需要记忆的节点就越少</strong>。所谓触类旁通者，其实便是因为他擅长去理解解法背后的更具一般性的东西。所以我还有一个习惯，就是看到美妙的证明和解法总是会去一遍又一遍的去反复揣摩，试图理解想出这个证明的人到底是怎么想出来的，有没有什么一般性的方法可循，很多时候，在这样揣摩的过程中，你会理解到更深刻的东西，对问题性质更深刻的认识，对解决问题的思路更深刻的认识，这些认识不仅对于你理解当前这个定理或问题有极大的帮助，同时也有助于你解决以后会遇到的表面不同但本质一样的问题。 </p>
<p>与看定理必看证明类似，看一个问题的解法，必然要看解法所诞生的过程，背后是否隐藏着更具一般性的解决问题的思路和原则。否则一个解法就只是一个问题的解法，跟背口诀一样。即便记住了也无法推广，即便当时记住了也容易遗忘。 </p>
<p>举个经典的例子：每本算法书都会讲动态规划，每本讲动态规划的书都会讲背包问题，每次讲背包问题都会讲可重复背包和01背包，我们就拿《Algorithms》这本<a href="http://book.douban.com/review/1325850/">还算不错</a>的算法书对背包问题的讲解来说吧，重复背包问题的递归公式是这样的： </p>
<p>K(W) = max { K(W-Wi) + Vi : Wi &lt;= W } </p>
<p>这个公式的理解倒是很简单：为了把问题降阶，我们在最终的最优解里面去掉一个元素，对这个元素的可能性进行讨论，它必然是任何Vi之一（前提是Wi &lt;= W，否则就装不下），而在去掉这个元素之后，剩下的元素肯定构成问题 K(W-Wi) 的最优解，于是递归关系出现了。 </p>
<p>此外也可以这样来理解：要拿一组最优元素，那么总得开始一个个拿吧，对第一个拿的元素进行讨论，而问题的最优解等于讨论的各个分支的最优解中的最优者；如果拿掉Vi之后，剩下来要怎么拿才能最优呢？这就是一个 K(W-Wi) 的问题了。 </p>
<p>01背包问题就大不一样了——每个物品都只有一件，拿掉之后就不能再拿了。我们不妨看看重复背包问题的解法是不是能用到01背包上呢？还是讨论第一个拿的元素，设被拿掉的是第i个元素，问题就归结为把剩下的物品（注意，可拿的物品少了一件）最优地装入容量为 W-Wi 的包里，所以，问题的参数便变成了两个，一个是背包剩余容量 W-Wi，另一个是剩余可拿的物品集合 S\{i} （表示去掉i之后的子集），显而易见第二个参数是物品集合的各种可能的子集，那么其可能性个数就是 2^n ，这就导致子问题的个数是 2^n， 由于要依次计算每个子问题，那么算法复杂度显然也是 2^n ，是不可接受的。 </p>
<p>那么，《Algorithms》上又是怎么来讲解01背包问题的解法的呢？以下是原文： </p>
<p>Our earlier subproblems now become completely useless. We must therefore refine our concept of a subproblem to carry additional information about the items being used. We add a second parameter, 0 &lt;= j &lt;= n: K(W, j) = maximum value achievable using a knapsack of capacity w and items 1..j: The answer we seek is K(W, n). </p>
<p>首先作者说了，之前重复背包问题的解法在这里完全废掉了，所以我们必须重新定义子问题，并且子问题的条件必须要包含目前拿剩下的物品。以上这些都还不错，关键是接下来就让人吐血了。作者接着说道，<strong>我们</strong>给子问题加上一个新的参数j&#8230; </p>
<p>凭什么啊？ </p>
<p>还是让我们回顾一下<a href="http://images.google.com/images?hl=en&amp;source=imghp&amp;biw=1024&amp;bih=620&amp;q=then+a+miracle+occurs&amp;gbv=2&amp;aq=f&amp;aqi=g3g-m6&amp;aql=&amp;oq=&amp;gs_rfai=">这样一幅经典的漫画</a>吧： </p>
<p><img style="margin: 5px 0px 10px" src="http://mindhacks.cn/wp-content/uploads/2009/02/clip-image003.gif" /> </p>
<p>“我们给子问题加上一个参数j”，这就像你在看数学证明时看到无比邪恶的“<strong>我们考虑</strong>…“一样，一看到这样的句子，你就知道，这个问题的证明远远不像看上去那么简单，之所以你一路看下去理解上全无困难，那完全是因为作者直接把最重要的一个insight告诉你了，举个很简单的例子，证明素数无最大，谁都会第一时间想到去反证：假设存在一个最大的素数P，那么找到比P大的素数就是证明中最关键的一步，怎么找的？一般书上是不会说的，你会看到书上这样说：假设P是最大的素数，那么我们考虑P’ = 小于等于P的所有素数的乘积+1。那么P’一来显然大于P，二来不能被小于它的所有素数整除，那么P&#8217;就成了大于P的素数。 </p>
<p>如果你经常注意反证法，你会发现一个有趣的现象，反证法里面经常会有这样一句“我们考虑”，而“我们考虑”后面几乎肯定接着一个天外飞仙一般的insight。素数无最大这个古老的证明里面的“我们考虑”尚算是比较有迹可循的（我们想要构造一个更大的素数，而素数的等价定义就是“不能被小于它的所有素数整除，为了达到这个目的，构造的方法就较明显了）。但是有非常非常多的证明，其中关键的一步就跟嗑药磕出来做梦做出来走路跌跟头跌出来的一样（不信去翻一翻《<a href="http://www.amazon.com/Proofs-BOOK-Martin-Aigner/dp/3540404600">Proofs from THE Book</a>》），让你完全不知道他怎么想到的。 </p>
<p>话说回来，虽然有很多数学证明的关键步骤是很难逆向工程的（因为很多时候想出那个关键步骤的本人其实也是尝试了各种方法，撞了无数堵墙，在寻求证法的尝试空间中作了N次回溯才“妙手偶得”，与其说是妙手偶得，不如说是绞尽脑汁），但并非全无章法可循，否则陶哲轩也不会写出《<a href="http://www.amazon.com/Solving-Mathematical-Problems-Personal-Perspective/dp/0199205604">Solving Mathematical Problems</a>》这样的著作来，而求解问题也就成了真正的Black Art了。</p>
<p>算法的解法则比精妙的数学证明稍加更容易逆向工程一点。只要你有耐心仔细地去琢磨算法的关键步骤和本质，总能从中窥探到一些更general的思想和思路来。 </p>
<p>此外，很多经典问题，算法书上的讲法虽然时时令我们失望，但如果去网上一搜，则通常会发现更优秀的解释来。比如<a href="http://www.google.com/webhp?hl=en#sclient=psy&amp;hl=en&amp;site=webhp&amp;source=hp&amp;q=%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%98+%E8%A7%A3%E7%A9%BA%E9%97%B4&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=&amp;gs_rfai=&amp;pbx=1&amp;fp=ab43752bbefd1914">背包问题就是如此</a>。</p>
<p>简单地说，如果你对于每个问题都能真正弄清以下这几个问题的答案，那么可以肯定的是，你的理解，记忆，以及学习的效率都会得到质的提高： </p>
<ul>
<li>为什么这种解法是对的？ </li>
<li>为什么那种解法是错的？ </li>
<li>为什么这种解法不是最优的？ </li>
<li>证明为什么没有更优的解法。 </li>
</ul>
<p>回到人民群众喜闻乐见的经典例子：背包问题。为什么01背包问题的正确（高效）算法是正确（高效）的。表面的解释是，因为01背包问题的子问题定义是 K(W, j)，其两个维度相乘的可能性一共有nW种，也就是说一共要计算nW个子问题，而计算每个子问题的复杂度是O(1)的。</p>
<p>但是如果仅仅满足于这样的解释，可以说是隔靴搔痒，并没有触及到本质。算法本质上可以看做是在一个解空间当中的搜索问题，所以要分析一个算法的好坏，首先弄清它的解空间的结构，然后分析它是怎么来探索这个解空间的。</p>
<p>弄清解空间的是第一步，例如排序算法，其解空间可以看做是所有可能的下标排列组合，其中有且仅有一个排列是正确的排序排列（简单起见假设元素各不相同）。那么一个算法在探索这个解空间方面的行为就决定了它的效率高低，最简单的，如果一个算法每次只能检查解空间中的一个点，那么这个算法的复杂度就是解空间的大小。对排序算法而言也就是n!。从这个角度来看，我们就会很容易的发现，所有基于比较的排序算法，其复杂度为什么是以O(nlogn)为下界的，因为一次比较操作最多有两个结果，a&gt;b或a&lt;b，既然只有两种结果，那么最多只能将解空间进行2分，如果每次都能完美的2分，那么找到那个唯一点最终需要的步骤就是log(n!) = O(nlogn)。如此就不难理解<a href="http://mindhacks.cn/2008/06/13/why-is-quicksort-so-quick/">什么基于比较的排序算法的复杂度最好不过如此了</a>。</p>
<p>回到01背包问题，01背包问题的解空间其实也是类似的。一次选取就是一个01数组，其中每个元素代表其所对应的物品要不要选取。很显然，这个解空间的大小是2^n。在01背包的算法里面，每当我们解出K(W, j)（需要O(W)次计算）之后，解空间就会被折半（排除掉1/2的可能性），一共如此做n次，就能得到最终解。由于每次折半的代价是O(W)，便不难理解为什么算法复杂度是O(nW)了。</p>
<p>那么，为什么每次计算出K(W,j)就能使解空间折半呢？那就需要来看看这个算法是如何探索解空间的，算法探索解空间的方式在其递归公式里面：</p>
<p>K(W, j) = max { K(W, j-1), K(W-Wj, j &#8211; 1)&#160; + Vj }</p>
<p>也就是说，首先看你要不要选取第一个物品，有两种可能性（两个分支），每个分支都是一个更低阶的子问题，即在其中的任意一个分支下都要决定要不要选取第二个物品（又是两个分支），如此下递归去，可以构建出一棵有2^n方个叶子节点的树，每条从根结点到叶子节点的路径“01..101”就对应一个解，其中每个分叉代表“选”或“不选”当前的物品。</p>
<p>建立在对这个解空间的理解上，我们再来看为什么01背包问题的正确解法能做到O(nW)。（首先你最好将这棵树画在纸上，其中每个节点都是一个子问题K(W,j)，每条分叉都是0或1。）当我们计算出所有的K(W, 1)（需要O(W)次操作）之后，我们容易注意到，所有离叶子节点的距离为1的内部节点K(W, 2)到叶子节点的两个分支都必然只能取其一了，也就是说，有一半的叶子节点被排除掉了（对解空间折半）。当我们进而计算出K(W,2)之后，同样的道理，我们容易看到，到叶子节点距离为2的内部节点的两个分支也只能取其一了，这就进而再次将解空间折半。由于每次折半需要O(W)的复杂度，所以就不难理解算法的总复杂度为O(nW)了。另一种理解的方法是，当我们计算出K(W,j)的时候，从内部节点K(W,j)到根节点的唯一路径便确定了。经过O(nW)次计算，从根节点到那个唯一解（叶子节点）的路径便完全确定了。</p>
<p><strong>知道怎么做是从正确（高效）解法得到的，而知道为什么必须得那样做则往往是从错误（低效）的解法当中得到的。</strong></p>
<p>然而遗憾的是，绝大多数算法书或教程都只顾一上来就告诉你正确的做法是什么，对于一些常见的错误解法，或者常见的低效解法，却根本不加分析。经验告诉我们，理解错误的做法为什么错误同样甚至更为重要，往往是在理解了错误的解法为什么错误之后，我们才能深刻的体会到为什么正确的解法是如此正确。</p>
<p>还是拿经典的背包问题来作例子，你几乎看不到哪本书会告诉你一个典型的低效解法为什么低效的深刻原因。我们都知道动态规划的核心在于子问题的划分，同样的问题，不同的划分办法得到的复杂度完全不一样。前面已经提到了，重复背包问题的思路在01背包问题上会带来指数级的复杂度，但是为什么呢？如果你满足于说：因为如果拿重复背包问题的思路来解01背包问题，那么子问题定义的第二个维度（物品的子集）（见前文）是指数级的，那么要计算所有子问题，当然是指数级的。那么你只是看到这个问题的表象。</p>
<p>如果从对解空间的探索方式来说，可以容易看出这个现象的本质，我们回顾一下01背包问题的正确（高效）算法：</p>
<p>K(W, j) = max { K(W, j-1), K(W-Wj, j &#8211; 1)&#160; + Vj }</p>
<p>这个算法讨论的是两种情况，“要”或者“不要”选取第j个物品，这两种情况所对应的解空间是完全不交的，这就有效地将解空间划分为了不重复的两个部分。</p>
<p>而再来看利用重复背包问题思路的解法：</p>
<p>K(W, S) = max { K(W-Wi, S\{i}) + Vi : Wi &lt;= W } </p>
<p>这里讨论的是首先拿掉哪一个物品，还是那句话，讨论的每一个分支都对应了算法对解空间的一个切分，我们容易看出，在“先拿物品i”和”先拿物品j“这两个分支里面，存在大量的重复，因为先拿物品i再拿j，和先拿物品j再拿i对应的是完全一样的一组选取。事实上，如果你将这个递归公式画成树状结构，会发现有n!个叶子节点。n!是什么概念？01背包问题的解空间大小本质上就只有2^n次方，穷举也不过O(2^n)的复杂度，结果这样一切分却变成了n!，可见这种对解空间的切分方法的冗余度是多么高了。你不妨看看，每一次计算K(W, S)子问题能对解空间排查多少呢？是否能像前面正确的算法那样，每次都能有效排查一半情况？理解了这一点之后，我们便注意到在划分解空间，也就是定义子问题的时候的一个原则，就是在建立递归公式的时候，尽量将解空间进行不交的切分。同时我们便有了趁手的工具去分析一个动态规划的解法的效率。</p>
<p>最后再举一个例子：算法书上几乎必讲的霍夫曼树。你所看的算法书在讲霍夫曼树的时候给了证明吗？讲过霍夫曼树的<a href="http://en.wikipedia.org/wiki/Huffman_tree#History">历史八卦</a>吗？也许你看了霍夫曼树的构造方法之后觉得：“哦，这样啊，显然”。但是你可曾想到，在最优编码这个问题上，连<a href="http://en.wikipedia.org/wiki/Shannon-Fano_coding">香农本人之前给出的解法</a>都只是suboptimal的，而且霍夫曼本人在得到这个算法之前也是绞尽脑汁几近放弃。<strong>如果你10分钟就“理解”了，那么百分之百只是背了课文而已。</strong></p>
<h3  class="related_post_title">你可能也会喜欢以下文章</h3><ul class="related_post"><li><a href="http://mindhacks.cn/2008/07/07/the-importance-of-knowing-why/" title="知其所以然（以算法学习为例）">知其所以然（以算法学习为例）</a> (36)</li><li><a href="http://mindhacks.cn/2011/07/10/the-importance-of-knowing-why-part3/" title="知其所以然（三）：为什么算法这么难？">知其所以然（三）：为什么算法这么难？</a> (57)</li><li><a href="http://mindhacks.cn/2009/12/20/dark-time/" title="暗时间">暗时间</a> (143)</li><li><a href="http://mindhacks.cn/2009/10/05/im-a-tiny-bird-book-review/" title="不是书评 ：《我是一只IT小小鸟》">不是书评 ：《我是一只IT小小鸟》</a> (57)</li><li><a href="http://mindhacks.cn/2009/07/06/why-you-should-do-it-yourself/" title="[BetterExplained]遇到问题为什么应该自己动手">[BetterExplained]遇到问题为什么应该自己动手</a> (62)</li><li><a href="http://mindhacks.cn/2009/05/17/seven-years-in-nju/" title="我在南大的七年">我在南大的七年</a> (149)</li><li><a href="http://mindhacks.cn/2009/03/28/effective-learning-and-memorization/" title="[BetterExplained]如何有效地记忆与学习">[BetterExplained]如何有效地记忆与学习</a> (104)</li><li><a href="http://mindhacks.cn/2009/02/15/why-you-should-start-blogging-now/" title="[BetterExplained]为什么你应该（从现在开始就）写博客">[BetterExplained]为什么你应该（从现在开始就）写博客</a> (206)</li><li><a href="http://mindhacks.cn/2009/02/09/writing-is-better-thinking/" title="[BetterExplained]书写是为了更好的思考">[BetterExplained]书写是为了更好的思考</a> (96)</li><li><a href="http://mindhacks.cn/2009/01/14/make-yourself-irreplacable/" title="什么才是你的不可替代性和核心竞争力">什么才是你的不可替代性和核心竞争力</a> (25)</li></ul><hr />
<h3>订阅 Mind Hacks</h3>
<a title="用Google Reader订阅" href="http://fusion.google.com/add?feedurl=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_google.gif" style="border:0" alt="订阅到 | Google" /></a> 
<a title="用鲜果订阅" href="http://www.xianguo.com/subscribe.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_xianguo.gif" style="border:0" alt="订阅到 | 鲜果" /></a>
<br/> 
<a title="用抓虾订阅" href="http://www.zhuaxia.com/add_channel.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_zhuaxia.gif" style="border:0" alt="订阅到 | 抓虾" /></a> 
<a title="用有道订阅" href="http://reader.youdao.com/b.do?keyfrom=mindhacks&url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_yodao1.gif" style="border:0" alt="订阅到 | 有道" /></a> 
<hr />
<h3>我是你的信息过滤器</h3>
想了解作者最近在关注什么，欢迎 Follow <a href="http://weibo.com/pongba">刘未鹏pongba@微博</a>
<br/>
程序员朋友请到作者发起的 <a href="https://groups.google.com/group/pongba">TopLanguage</a> (<a href="http://mindhacks.cn/about-toplanguage/">about</a>) 社群逛逛，定有收获 :)
<br/>
想了解作者在阅读哪些书，请到 <a href="http://www.douban.com/people/pongba/">pongba@豆瓣</a>，或者直接访问以下四个豆列：<a href="http://www.douban.com/doulist/46003/">[只读经典]思维改变生活</a> | <a href="http://www.douban.com/doulist/127649/">[只读经典]思考的技术与艺术</a> | <a href="http://www.douban.com/doulist/197706/">决策与判断</a> | <a href="http://www.douban.com/doulist/176513/">机器学习与人工智能书籍资源导引</a> 。
<hr />
<p><small>
本文由 刘未鹏 发布在 <a href="http://mindhacks.cn">刘未鹏 | Mind Hacks</a>, 2010. | <a href="http://mindhacks.cn/2010/11/14/the-importance-of-knowing-why-part2/#commenting">42 条评论</a> | 标签: <a href="http://mindhacks.cn/tags/%e5%ad%a6%e4%b9%a0%e6%96%b9%e6%b3%95/" rel="tag">学习方法</a>, <a href="http://mindhacks.cn/tags/%e7%ae%97%e6%b3%95/" rel="tag">算法</a>
<br/>
转载请注明作者，出处，以及<a href="http://mindhacks.cn/2010/11/14/the-importance-of-knowing-why-part2/">原始超链接</a>: http://mindhacks.cn/2010/11/14/the-importance-of-knowing-why-part2/
</small></p>]]></content:encoded>
			<wfw:commentRss>http://mindhacks.cn/2010/11/14/the-importance-of-knowing-why-part2/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>逃出你的肖申克（三）：遇见20万年前的自己</title>
		<link>http://mindhacks.cn/2010/03/18/escape-from-your-shawshank-part3/</link>
		<comments>http://mindhacks.cn/2010/03/18/escape-from-your-shawshank-part3/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 16:28:14 +0000</pubDate>
		<dc:creator>刘未鹏</dc:creator>
				<category><![CDATA[思维改变生活]]></category>

		<guid isPermaLink="false">http://mindhacks.cn/2010/03/18/%e9%80%83%e5%87%ba%e4%bd%a0%e7%9a%84%e8%82%96%e7%94%b3%e5%85%8b%ef%bc%88%e4%b8%89%ef%bc%89%ef%bc%9a%e9%81%87%e8%a7%8120%e4%b8%87%e5%b9%b4%e5%89%8d%e7%9a%84%e8%87%aa%e5%b7%b1/</guid>
		<description><![CDATA[《Synaptic Self》中曾提出一个发人深省的观点：由于人的大脑是经过漫长的进化年代“堆积”起来的，也就是说，从爬行动物到哺乳动物到高级灵长类这些进化阶段，我们的大脑从只有原始的反射模块，到拥有初步的情感区域，一直到神奇的具有6层结构的“新皮质”所支撑的高级认知能力，一步步走来。这个过程并非上帝预先编程架构好的，而更像是在既有结构上“叠床架屋”，比如，大脑从内到外基本上是按照进化年代来排序的，比如啮齿类等一些小型哺乳动物的新皮质是光滑的，这是新皮质在进化出高级灵长类之前的样子，后来为了解决大脑中空间不够的问题，进化之手发明了大脑皮层沟回，通过这些褶皱，在不增加太多占用体积的前提下使得大脑皮层表面积暴涨，正是这些褶皱使得灵长类进化出独特的高级认知活动，如工作记忆，语言。这种“堆砌式”的进化有它节省和复用的好处（《Kludge》），然而另一方面也带来了奇特的“进化时滞”效应——进化年代较近的大脑模块和较久远的模块之间要达成完美沟通需要一定的时间，在这之前便会造成多个模块之间面对同一个问题决策不一致的问题。

我们的高级认知模块明明知道有些事情很重要，必须提前准备并持之以恒，然而我们内心的另一个小声音却在万般阻挠我们把屁股从床上挪开或者把眼睛从网页上挪开；我们明明知道赌博，烟酒，犯罪是不对的，然而内心的一个小声音却在喋喋不休地催我们动手去做。我们明明知道高糖高脂肪的食物不宜多吃，但内心的一个小声音却总是怂恿着再吃最后一勺（不禁让人想起《傀儡人生》）。令人感到遗憾的是，很多时候在这个争端中败下阵来的却是代表更先进生产力的高级认知模块，更令人感到遗憾的是，在大多数时候我们的高级认知模块似乎根本就没有启用，而是凭借着本能或直觉“自动驾驶”自己的身体（《Gut Feelings》）。]]></description>
			<content:encoded><![CDATA[<p><a href="http://book.douban.com/subject/2345245/">《Synaptic Self》</a>中曾提出一个发人深省的观点：由于人的大脑是经过漫长的进化年代“堆积”起来的，也就是说，从爬行动物到哺乳动物到高级灵长类这些进化阶段，我们的大脑从只有原始的反射模块，到拥有初步的情感区域，一直到神奇的具有6层结构的“<a href="http://en.wikipedia.org/wiki/Neocortex">新皮质</a>”所支撑的高级认知能力，一步步走来。这个过程并非上帝预先编程架构好的，而更像是在既有结构上“叠床架屋”，比如，大脑从内到外基本上是按照进化年代来排序的，比如啮齿类等一些小型哺乳动物的新皮质是光滑的，这是新皮质在进化出高级灵长类之前的样子，后来为了解决大脑中空间不够的问题，进化之手发明了大脑皮层沟回，通过这些褶皱，在不增加太多占用<strike>面积</strike>体积的前提下使得大脑皮层表面积暴涨，正是这些褶皱使得灵长类进化出独特的高级认知活动，如工作记忆，语言。这种“堆砌式”的进化有它节省和复用的好处（<a href="http://book.douban.com/subject/4198063/">《Kluge》</a>），然而另一方面也带来了奇特的“进化时滞”效应——进化年代较近的大脑模块和较久远的模块之间要达成完美沟通需要一定的时间，在这之前便会造成多个模块之间面对同一个问题决策不一致的问题。</p>
<p>我们的高级认知模块明明知道有些事情很重要，必须提前准备并持之以恒，然而我们内心的另一个小声音却在万般阻挠我们把屁股从床上挪开或者把眼睛从网页上挪开；我们明明知道赌博，烟酒，犯罪是不对的，然而内心的一个小声音却在喋喋不休地催我们动手去做。我们明明知道高糖高脂肪的食物不宜多吃，但内心的一个小声音却总是怂恿着再吃最后一勺（不禁让人想起《傀儡人生》）。令人感到遗憾的是，很多时候在这个争端中败下阵来的却是代表更先进生产力的高级认知模块，更令人感到遗憾的是，在大多数时候我们的高级认知模块似乎根本就没有启用，而是凭借着本能或直觉“自动驾驶”自己的身体（<a href="http://book.douban.com/subject/2252432/">《Gut Feelings》</a>）。</p>
<p>这里的原因是明显的：设想一下，人类的高级认知模块是在相对较近的进化年代出现的，然而原始的情感和条件反射模块却在千万年的进化长河中忠实地保护着我们在自然环境中生存下来并努力繁衍后代（<a href="http://book.douban.com/subject/4010184/">《Mean Genes》</a>），这些模块似乎“理应”拥有更强大的力量，然而工业时代的到来将人类生存的环境极大的改变了，我们大脑的原始模块适应的是远古时期的生活，以采集狩猎为主题的社会构成，这跟现代工业文明相差颇大，举个例子，我们的社会交往本能令我们非常顾及自己的面子（面子不仅是一个东方文化中的东西， 在全球都存在），面子可以与很多东西关联——与异性的交往成败，在对手面前是否挺身而出，在困难的任务面前是否完成得很好，这里的逻辑是很明显的：一次糟糕的社会性事件会降低我们的声誉，在远古社会，聚居群体较小，成员之间依赖性很高，糟糕的声誉会导致被赖以生存的群体排挤出去，危机自身的一切，所以我们往往有着不顾一切捍卫自己的面子原始冲动，<a href="http://book.douban.com/subject/2374426/">《Bounded Rationality》</a>里面曾经提到这样的一个例子：两个男人因为酒吧里面的一点小争执最终大打出手乃至一方杀了另一方。在类似酒吧这样的一个众目睽睽的社会场所，人们往往会为面子而恼羞成怒，作出过激行为，而我们的大脑同时又会认为我们仍然处在没有法制的远古社会，所以杀人便有了可能，事实上我们不难想象在远古社会杀人可以转化为力量和能力的声誉，由于进化的钝刀还没有来得及磨平我们远古时期的“棱角”，所以只有少部分“理性大脑”强大的人才能够作出适应现代工业社会的行为；《Mean Genes》上面说了这么个例子：在远古社会我们在向姑娘求爱的时候会小心谨慎，因为一次洋相会很快被传递开来从而使得我们变成整个群落的笑柄，然而在现代社会，尤其是人口流动剧烈，人际关系变动频繁的大城市，社交失败的成本近乎于0，所以正确而理性的做法却是永远都勇敢地迈出第一步。</p>
<p>因为我们的大脑中同时存在着远古的自我，和现代的自我，并且两者并没有完美协调，所以才会出现“如著作等身的教授，聪明的数学家，艺术家同样有可能成为性引诱的牺牲品，同样可能犯七宗罪，同样可能成为焦虑和忧郁症的患者”（《Synaptic Self》）（不禁让人想起前阵子著名的泰格伍兹事件）。</p>
<p>然而除了这些极端情况之外，普通人也常常受到困扰——明知正确的事情就是没法去做。仔细想想这简直是一句类似悖论的话：既然你的大脑认可某种做法是正确的，而同样又是你的大脑主管你的行为，那为什么偏偏你没法执行呢？这就说明主管行为的并不仅仅是你的“认知”模块，认知模块发完话之后自会有更强大的情绪模块藐视“上级”的决定。所以我们常常哀叹“说起来容易做起来难”。世界上最痛苦的事情不是和别人作斗争，而是和自己作斗争。</p>
<p><a href="http://book.douban.com/subject/1868282/">《Phantoms in the Brain》</a>提到这么一个有趣的例子：我们看到老朋友时会自然微笑，然而站在摄影师面前我们却经常“挤”出难看而别扭的微笑。我们常常说第一种微笑是发自内心的，第二种笑则是有意做出来的。事实上这两种微笑的确涉及到两种不同的机制，只不过不是心脏和面部肌肉，而是两个不同的大脑模块。自然、下意识的微笑来自于大脑中位于进化年代较古老的丘脑和进化年代较新近的大脑皮层之间的一个叫做“基底核”（basal ganglia）的结构，而有意识的笑则是由大脑中的动作皮层控制的。而这两者只有前者具有正版的微笑神经回路，当我们看到朋友的时候，朋友的脸庞的视觉映像通过视觉神经传导到我们的情绪模块（边缘系统），并进而被转发到基底核，后者的微笑回路负责调动面部肌肉生成一个真正自然的微笑，整个过程在不到一秒内完成，在这个时间里你的高级认知模块根本还没来得及活动呢。</p>
<p>有些时候一些人会因为中风而导致一侧运动皮层受损，如果你叫他对着摄影师笑，你会发现他挤出的是半边脸的山寨微笑，另一边脸（对应受损的运动皮层的那一边）则不笑。然而神奇的是如果他见到老朋友，则会发出两边对称的、自然的微笑，因为控制自然微笑的基底核没有受到损伤。</p>
<p>而在极少数情况下，则会出现一种恰好相反的情况：中风损伤了一个人的基底核，影响了半边脸的微笑回路，一开始这个人自己也注意不到，直到他对妻子自然微笑，妻子会惊讶地发现他脸上只有“一半”微笑。然而，如果摄影师叫他微笑，他却能够做出对称的微笑，虽然是不自然的那种，因为控制有意识微笑的运动皮层并没有损伤。</p>
<p>就像两种微笑一样，我们的大脑在同一个决策上经常有不同模块的参与，有的人更偏向使用直觉进行决策（<a href="http://book.douban.com/subject/2990015/">《Predictably Irrational》</a>），有的人则更偏向于理性分析，而事实上这两者并没有孰优孰劣之分，只是在不同的场合适用，无法驾驭这两种决策引擎的人要么一方压倒另一方，要么就是陷入纠结。</p>
<p>我们在选择职业的时候“听从内心的召唤”，因为我们对事物的热情来自于我们的情感系统，没有这个系统的支持，我们很难在一件事情上持之以恒的专注投入，emotion（情绪）和motion（动力）本就是同根生，说明人们很早就了解到情绪和动力的关系。对此有这么一个真实事件（记不得在哪本心理学书上看到的了，记得的朋友请留言。），一个事业顺利的中年男人，原本过着典型的美国中产阶级的生活，但有一天不幸遭遇了车祸，车祸损伤了他的头部，他的情绪大脑遭到了损坏，后来虽然他健康方面痊愈了，然而却从此对任何事情都无动于衷，再没有动力去发展他的事业，照顾他的家庭，对他来说发生什么都是无所谓的。事实上，我们所谓的生活的意义便来源于情感系统。</p>
<p>我们在面对道德问题的时候听从“良知的召唤”，因为漫长的进化给了我们一套非常优秀的天生道德判断神经回路（<a href="http://book.douban.com/subject/2328458/">《社会性动物》</a>），只要听从良知的召唤我们便能在道德的平衡木上走得稳稳当当。</p>
<p>我们对于很多事情的决策判断都刻画在天性里面，然而同样也正是这些天性在很多时候会让我们陷入困境，我们“能存储能量就尽量存储能量”的食物摄取天性虽然适合远古社会，然而在能量充裕的现代社会却导致大量人的超重。<a href="http://book.douban.com/subject/3440613/">《How We Decide》</a>上有这么一个有意思的实验：让一群人走过一个屋子，屋子的中间放着一个桌子，上面有诱人的巧克力蛋糕，也有水果沙拉，让其中一部分人默记某个7位数字序列，另一部分人则只默记2位数（当然，实验者会为默记数字的原因编造一个谎言，例如测试记忆能力），实验结果是，那些默记7位数字的人更可能选择巧克力蛋糕，因为记忆数字过载了我们的高级认知模块，使得它无暇和原始大脑的决定作抗争。</p>
<p>我们对于未来的惩罚和收益都估计不足，倾向于就眼下的损益进行决策。这就导致我们天性在决策方面目光短浅，一个典型的例子是我们会在大学阶段花费大量的时间去进行学习之外的娱乐，这些娱乐都有一个典型的特点，就是能够立即获得愉悦，并且并不会导致立即的损失。毕业看似遥遥无期，我们很难提前几年就设想几年后的危机，毕竟，未来的事情谁说得清呢？也许我们的远古生活告诉我们的真理就是，几年后的潜在收益跟眼下唾手可得的好处无法相比。</p>
<p>我们的原始大脑同样也分不清什么是虚拟什么是真实，在获得社会成就和声望的动机的驱使下，即便是虚拟的网络游戏社会，我们也会投入大量精力，某种意义上我们的大脑并没有错，我们的确应该去获得声望，只不过它还没有聪明到跟得上工业文明，它并不明白虚拟世界里面的生存能力和地位并没有办法转化为现实世界的生存能力和地位。</p>
<p>如你所见，很多时候我们只是生活在信息社会的远古人，如果上帝要为我们目前生出的时代设计人类，我们将会是身体上适合长期久坐不见阳光，眼睛尤其适合长久盯着30厘米以内的物体看，我们情绪上会偏好有节制而健康的饮食，我们的身体发育将不会在肌肉上浪费太多不必要的能量，青少年也不会在青春期强烈渴望冒险和建立小部落内的声望并为之做出各种危险或可怕的事情，而在执行力上我们则会偏好于执行能够积累知识和技能的长远计划，正如geeks们所崇尚的一句话所言：smart is the new sexy。</p>
<p>然而人类进入工业文明才短短数百年，英特网的历史则更是短的几十年，和漫长的进化长河相比仿佛一瞬，我们匆匆忙忙把自己推入了一个完全不一样的世界，而进化的齿轮转动得却慢了很多拍，于是我们都成了进化时滞的牺牲品，我们用远古的双眼打量着这个世界，关在笼子里的老虎完全不必害怕，但我们还是会汗毛倒竖，汽车酿成的交通事故每天无数，而我们过马路却置若罔闻。一句话：我们的情绪大脑仍然停留在20万年前，而20万年前是没有汽车这种物种的。</p>
<p>然而，我们毕竟拥有所有动物中神经元和突触数量最多，结构最复杂的新皮层。我们拥有神奇的认识自身的能力，这种能力使我们能够利用情绪系统本身的特点来克服它自身的缺点。</p>
<p>我们做事情难以持之以恒地专注，因为任何一个新鲜刺激的外部信号都足以激活我们强大的情绪大脑，情绪大脑一旦被激活，其神经信号往往轻而易举地抢占我们的注意力，结果就是我们发现在这个纷繁的世界里很难维护内心的宁静和专注，于是我们发明各种隔绝干扰的方法来保护我们脆弱的理性大脑，从而能够让自己做应该做的事情。</p>
<p>我们的大脑喜欢事情往积极方向发展，有这样一个实验：研究者让被试将手放在冰水中一段时间，有两个选项可供选择，一是将手放在非常冷的冰水中60秒并取出，另一是将手放在非常冷的冰水中60秒，然后再在逐渐变得不那么冰的冷水中放30秒再取出。绝大多数人认为第二种选择更为不那么痛苦。然而从经历的“客观”痛苦上讲，很明显第二种情况下人要受更多的罪。但是那种“情形正在变得越来越好”可以带来明显的正面情绪，于是第二种情况下的主观痛苦要小于第一种情况。而GTD的原理正是如此：通过提供不断的进展，让执行者意识到事情正在朝向完成不断迈进，这种正面趋势所带来的积极情感能够进一步激励个体把事情执行到底。</p>
<p>总之我们发明各种认知方法来“诱使”或“要挟”我们的情绪大脑同意去执行一件事情：我们向朋友承诺我们要做的事情，于是我们的情绪大脑会迫于信誉受损的压力而去主动完成这件事情。而加入互助学习小组则本质上是利用大脑的从众本能和同侪压力。<a href="http://book.douban.com/subject/4022709/">《Nudge》</a>上提到很多这样的例子，比如“一百美元的论文催缴金”：为了“逼迫”自己在计划时间内完成论文，戴维将三张100美元的支票预先交给泰勒，戴维每延迟一个月完成论文，泰勒便可以提取其中一张支票并将钱用于开聚会（而且还不邀请戴维参加:)），显然，戴维的情绪大脑很难容忍这样吃亏的冤枉事，所以为了避免它，便忠实地督促戴维把论文按时搞定了。此外还有“减肥违约金”，“夏令时”，“圣诞节省钱俱乐部”以及著名的<a href="http://faculty.chicagobooth.edu/richard.thaler/research/SMarTJPE.pdf">“Save more tomorrow”</a>等很多有意思的例子。</p>
<p>最后，经常动用理性思考也能够锻炼理性大脑的“实力”，在更多的决策场合获得压倒性优势。神经科学显示，大脑的模块的确遵循用进废退的原则（<a href="http://book.douban.com/subject/2370985/">《The Brain That Changes Itself》</a>），一个经典的证据是钢琴家的大脑中对应手指的神经回路占用面积要比正常人大很多。另一个有意思的证据是，如果一个人失明了，那么负责接受视觉信号的神经回路往往会被听觉所侵占（人们常说瞎子的听觉格外灵敏难道便是这个原因？）</p>
<p>上帝给了我们一个过了时的原始大脑，但同样也更新了我们的新皮层，能否不被20万年前的自己绑架，取决于你是否认识到关于大脑的进化历史，和能否正确使用你的理性大脑。</p>
<h3  class="related_post_title">你可能也会喜欢以下文章</h3><ul class="related_post"><li><a href="http://mindhacks.cn/2011/01/23/escape-from-your-shawshank-4/" title="逃出你的肖申克（四）：理智与情感">逃出你的肖申克（四）：理智与情感</a> (127)</li><li><a href="http://mindhacks.cn/2009/03/28/effective-learning-and-memorization/" title="[BetterExplained]如何有效地记忆与学习">[BetterExplained]如何有效地记忆与学习</a> (104)</li><li><a href="http://mindhacks.cn/2009/03/15/preconception-explained/" title="逃出你的肖申克（二）：仁者见仁智者见智？从视觉错觉到偏见">逃出你的肖申克（二）：仁者见仁智者见智？从视觉错觉到偏见</a> (148)</li><li><a href="http://mindhacks.cn/2009/02/15/why-you-should-start-blogging-now/" title="[BetterExplained]为什么你应该（从现在开始就）写博客">[BetterExplained]为什么你应该（从现在开始就）写博客</a> (206)</li><li><a href="http://mindhacks.cn/2009/02/09/writing-is-better-thinking/" title="[BetterExplained]书写是为了更好的思考">[BetterExplained]书写是为了更好的思考</a> (96)</li><li><a href="http://mindhacks.cn/2009/02/07/better-explained-conflicts-in-intimate-relationship/" title="[BetterExplained]亲密关系中的冲突解决">[BetterExplained]亲密关系中的冲突解决</a> (50)</li><li><a href="http://mindhacks.cn/2009/01/18/escape-from-your-shawshank-part1/" title="逃出你的肖申克（一）：为什么一定要亲身经历了之后才能明白？">逃出你的肖申克（一）：为什么一定要亲身经历了之后才能明白？</a> (64)</li><li><a href="http://mindhacks.cn/2009/01/16/hammers-and-nails/" title="锤子和钉子">锤子和钉子</a> (19)</li><li><a href="http://mindhacks.cn/2008/12/18/how-to-think-straight/" title="如何清晰地思考（近一年来业余阅读的关于思维方面的知识结构整理）">如何清晰地思考（近一年来业余阅读的关于思维方面的知识结构整理）</a> (23)</li><li><a href="http://mindhacks.cn/2008/10/29/methodology-for-programmers/" title="方法论、方法论&mdash;&mdash;程序员的阿喀琉斯之踵">方法论、方法论&mdash;&mdash;程序员的阿喀琉斯之踵</a> (19)</li></ul><hr />
<h3>订阅 Mind Hacks</h3>
<a title="用Google Reader订阅" href="http://fusion.google.com/add?feedurl=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_google.gif" style="border:0" alt="订阅到 | Google" /></a> 
<a title="用鲜果订阅" href="http://www.xianguo.com/subscribe.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_xianguo.gif" style="border:0" alt="订阅到 | 鲜果" /></a>
<br/> 
<a title="用抓虾订阅" href="http://www.zhuaxia.com/add_channel.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_zhuaxia.gif" style="border:0" alt="订阅到 | 抓虾" /></a> 
<a title="用有道订阅" href="http://reader.youdao.com/b.do?keyfrom=mindhacks&url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_yodao1.gif" style="border:0" alt="订阅到 | 有道" /></a> 
<hr />
<h3>我是你的信息过滤器</h3>
想了解作者最近在关注什么，欢迎 Follow <a href="http://weibo.com/pongba">刘未鹏pongba@微博</a>
<br/>
程序员朋友请到作者发起的 <a href="https://groups.google.com/group/pongba">TopLanguage</a> (<a href="http://mindhacks.cn/about-toplanguage/">about</a>) 社群逛逛，定有收获 :)
<br/>
想了解作者在阅读哪些书，请到 <a href="http://www.douban.com/people/pongba/">pongba@豆瓣</a>，或者直接访问以下四个豆列：<a href="http://www.douban.com/doulist/46003/">[只读经典]思维改变生活</a> | <a href="http://www.douban.com/doulist/127649/">[只读经典]思考的技术与艺术</a> | <a href="http://www.douban.com/doulist/197706/">决策与判断</a> | <a href="http://www.douban.com/doulist/176513/">机器学习与人工智能书籍资源导引</a> 。
<hr />
<p><small>
本文由 刘未鹏 发布在 <a href="http://mindhacks.cn">刘未鹏 | Mind Hacks</a>, 2010. | <a href="http://mindhacks.cn/2010/03/18/escape-from-your-shawshank-part3/#commenting">113 条评论</a> | 标签: <a href="http://mindhacks.cn/tags/%e6%80%9d%e7%bb%b4%e6%94%b9%e5%8f%98%e7%94%9f%e6%b4%bb/" rel="tag">思维改变生活</a>
<br/>
转载请注明作者，出处，以及<a href="http://mindhacks.cn/2010/03/18/escape-from-your-shawshank-part3/">原始超链接</a>: http://mindhacks.cn/2010/03/18/escape-from-your-shawshank-part3/
</small></p>]]></content:encoded>
			<wfw:commentRss>http://mindhacks.cn/2010/03/18/escape-from-your-shawshank-part3/feed/</wfw:commentRss>
		<slash:comments>113</slash:comments>
		</item>
		<item>
		<title>暗时间</title>
		<link>http://mindhacks.cn/2009/12/20/dark-time/</link>
		<comments>http://mindhacks.cn/2009/12/20/dark-time/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 05:39:00 +0000</pubDate>
		<dc:creator>刘未鹏</dc:creator>
				<category><![CDATA[学习方法]]></category>

		<guid isPermaLink="false">http://mindhacks.cn/2009/12/20/dark-time/</guid>
		<description><![CDATA[如果你有做总结的习惯，你在度过一段时间之后总结自己在某某领域投入了多少时间，建议千万不要粗略地去计算有多少天下班后拿起书来翻看过，因为这样你也许会发现书倒是常翻，但领悟却不见得多深，表面上花的时间不少，收益却不见得那么大。因为看书并记住书中的东西只是记忆，并没有涉及推理，只有靠推理才能深入理解一个事物，看到别人看不到的地方，这部分推理的过程就是你的思维时间，也是人一生中占据一个显著比例的“暗时间”，你走路、买菜、洗脸洗手、坐公车、逛街、出游、吃饭、睡觉，所有这些时间都可以成为“暗时间”，你可以充分利用这些时间进行思考，反刍和消化平时看和读的东西，让你的认识能够脱离照本宣科的层面。这段时间看起来微不足道，但日积月累将会产生庞大的效应。能够充分利用暗时间的人将无形中多出一大块生命。你也许会发现这样的人似乎玩得不比你少，看得不比你多，但不知怎么的就是比你走得更远。比如我就经常发现一些国外的牛人们为什么不仅学习牛逼，连“业余”玩儿的东东也都搞得特牛逼，一点都不业余（上次在《How We Decide》上看到斯坦福的一个牛人，理论物理学博士，同时是世界扑克大赛的前六名保持者，迄今累计奖金拿了六百多万刀），你会奇怪，这些家伙到底哪来的时间，居然可以在不止一个领域做到卓越？]]></description>
			<content:encoded><![CDATA[<p>如果你有一台计算机，你装了一个系统之后就整天把它搁置在那里，你觉得这台计算机被实际使用了吗？没有。因为CPU整天运行的就是空闲进程。运行空闲进程也是一天，运行大数据量计算的程序也是一天，对于CPU来说同样的一天，价值却是完全不一样的。</p>
<p>大脑也是如此。</p>
<p>善于利用思维时间的人，可以无形中比别人多出很多时间，从而实际意义上能比别人多活很多年。我们经常听说“心理年龄”这个词，思考得多的人，往往心理年龄更大。有人用10年才能领悟一个道理，因为他们是被动领悟——只有在现实撞到他脸上的时候才感到疼，疼完了之后还是不记得时时提醒自己，结果很快时过境迁抛之脑后，等到第二次遇到同一个坑的时候早忘了曾经跌过跟头了，像这样的效率，除非天天摔坑里，否则遗忘的效率总是大过吃亏长的记性。善于利用思维时间的人则能够在重要的事情上时时主动提醒自己，将临时的记忆变成硬编码的行为习惯。</p>
<p>每个人的手表都走得一样快，但每个人的生命却不是。衡量一个人生活了多少年，应该用思维时间来计算。举一个极端的例子，如果一个人从生下来开始就呆在一个为他特殊建造的无菌保护室里，没有社会交往，没有知识获取，度过了18年，你会不会认为他成年了？</p>
<p>认为时间对每个人是均等的是一个错觉，认为别人有一天，我也有一天，其实根本不是这样。如果你正在学习一门专业，你使用自己所投入的天数来衡量，很容易会产生一种错觉，认为投入了不少时间，然而其实，“投入时间”这个说法本身就是荒唐的，实际投入的是时间和效率的乘积。你可以“投入”很多时间在一件事情上面，却发现毫无进展，因为你没有整天把你要做的事情，要学习的东西常驻在你的大脑中，时刻给予它最高的优先级。你走路的时候吃饭的时候，做梦的时候心心念念想的就是这件事情，你的CPU总是分配给它，这个时候你的思维时间就被利用到了极致，你投入的时间就真正等于了实际流逝的时间，因为你的CPU是满载的。</p>
<p>如果你有做总结的习惯，你在度过一段时间之后总结自己在某某领域投入了多少时间，建议千万不要粗略地去计算有多少天下班后拿起书来翻看过，因为这样你也许会发现书倒是常翻，但领悟却不见得多深，表面上花的时间不少，收益却不见得那么大。因为看书并记住书中的东西只是记忆，并没有涉及推理，只有靠推理才能深入理解一个事物，看到别人看不到的地方，这部分推理的过程就是你的思维时间，也是人一生中占据一个显著比例的“<strong>暗时间</strong>”，你走路、买菜、洗脸洗手、坐公车、逛街、出游、吃饭、睡觉，所有这些时间都可以成为“暗时间”，你可以充分利用这些时间进行思考，反刍和消化平时看和读的东西，让你的认识能够脱离照本宣科的层面。这段时间看起来微不足道，但日积月累将会产生庞大的效应。</p>
<p>能够充分利用暗时间的人将无形中多出一大块生命，你也许会发现这样的人似乎玩得不比你少，看得不比你多，但不知怎么的就是比你走得更远。比如我就经常发现一些国外的牛人们为什么不仅学习牛逼，连“业余”玩儿的东东也都搞得特牛逼，一点都不业余（上次在<a href="http://www.douban.com/subject/3440613/" target="_blank">《How We Decide》</a>上看到<a href="http://en.wikipedia.org/wiki/Michael_Binger">斯坦福的一个牛人</a>，理论物理学博士，同时是世界扑克大赛的前六名保持者，迄今累计奖金拿了六百多万刀），你会奇怪，<strong>这些家伙到底哪来的时间，居然可以在不止一个领域做到卓越</strong>？</p>
<p>程序员们都知道，任务切换需要耗费许多额外的花销，通俗地来讲，首先需要保存当前上下文以便下次能够顺利切换回来，然后要加载目标任务的上下文。如果一个系统不停地在多个任务之间来回倒腾，就会耗费大量的时间在上下文切换上，无形中浪费很多的时间。</p>
<p>相比之下，如果只做一件任务，就不会有此损失。这就是为什么专注的人比不专注的人时间利用效率高得多的原因。任务切换的暗时间看似非常不明显，甚至很多人认为“多任务”是件很好的事情（有时候的确是），但日积月累起来就会发现，消耗在切换上的时间越来越多。</p>
<p>另外，大脑开始一件任务的时候必须要有一定时间来“热身”，这个时间因人而异，并且可以通过练习来改变。举个例子，你看了一会书之后，忽然感到一阵无聊，忍不住打开浏览器，十分钟后你想起来还要继续看书，但要回复到当时理想的状态，却需要一段时间来努力去集中精力，把记忆中相关的知识全都激活起来，从而才能进入“状态”，因为你上了十分钟网之后这些记忆已经被抑制了。如果这个“热身”状态需要一刻钟，那么看似十分钟的上网闲逛其实就花费了二十五分钟。</p>
<p>如果阅读的例子还不够生动，对于程序员来说其实有更好的例子：你写程序写得正high，忽然被叫去开了一通会，写到一半的代码搁在那儿。等你开完会回来你需要多久能够重新进入状态？又或者，你正在调试程序，你已经花了二十分钟的时间把与这个bug可能相关的代码前前后后都理解了一遍，心中构建了一个大致的地图，就在这时，呃，你又被叫去开了个会(:D)，开完会回来，可想而知，得花上一些时间来回想一下刚刚弄清的东西了。</p>
<p>迅速进入状态的能力是可以锻炼的，根据我个人的经验，至少可以缩短到3-5分钟。但要想完全进入状态，却是很难在这么短的时间实现的。所谓完全进入状态，举个例子：你看了3个小时的书，或者调试了半个小时的程序之后，往往满脑子都是相关的东西，所有这些知识都处在活跃状态，换言之你大脑中所有相关的记忆神经网络都被激活了，要达到这样一种忘记时间流逝的“沉浸”状态（心理学上叫做“<a href="http://en.wikipedia.org/wiki/Flow_%28psychology%29">流体验</a>”），不是三两分钟的事情。而一旦这种状态被破坏，无形间效率就会大打折扣。这也是为什么我总是倾向于创造大块的时间来阅读重要的东西，因为这样有利于“沉浸”进去，使得新知识可以和大脑中与其相关的各种既有的知识充分融合，关联起来，<a href="http://mindhacks.cn/2009/03/28/effective-learning-and-memorization/">后者对于深刻的记忆非常有帮助</a>。</p>
<p>要充分利用暗时间，不仅要能够迅速进入状态，另一个很重要的习惯就是能够保持状态多久（<a href="http://www.douban.com/subject/1867455/">思维体力</a>）。《<a href="http://www.douban.com/subject/1770012/">The Psychology of Invention in the Mathematical Field</a>》上有一段关于庞加莱的思考习惯的介绍，很有代表性。庞加莱经常在去海边休假或者在路上走的时候在脑海中思索数学问题，很多时候解答就在这些时候忽然闪现。虽然我和庞加莱是没法比的，但是常常也在路上想出答案，这真是一种愉悦的体验。</p>
<p><strong>能够迅速进入专注状态，以及能够长期保持专注状态，是高效学习的两个最重要习惯。</strong></p>
<p>很多人都有这样的体验（包括我自己），工作了之后，要处理的事情一下多出了很多，不像在校园，环境简单，生活单纯，能够心无旁骛地做一件事情而不被打扰。工作之后的状况就是，首先需要处理的事情变多，导致时不时需要在多个任务之间切换；另一方面，即便能够把任务的优先级分配得比较合理，也难免在做一件事情的时候心中忽然想起另一件事还没做的焦虑来，因为没做完的事情会在大脑中留下一个“隐藏的进程”，时不时地发个消息提醒你一下，中断你正在做的事情。</p>
<p>因此这里就涉及到最后一个高效的习惯：抗干扰。只有具备超强的抗干扰能力，才能有效地利用起前面提到的种种暗时间。抗干扰能力也是可以练习出来的，上本科那会经常坐车，所以我就常常拿着本大部头在车上看，坐着看或者站着看都可，事实证明在有干扰的环境中看书是非常锻炼专注能力的一个办法:D 另外，经常利用各种碎片时间阅读和思考，对迅速集中注意力和保持注意力都非常有帮助。记得很久以前TopLanguage上大伙曾经有次饶有兴趣地讨论<a href="http://groups.google.com/group/pongba/browse_thread/thread/388640d8d07f81f/">“马桶时间”的利用</a>，包括<a href="http://groups.google.com/group/pongba/msg/2ba79504a3062a10">在卫生间放个小书柜</a>。（估计很多同学心有戚戚焉吧:D）</p>
<h3  class="related_post_title">你可能也会喜欢以下文章</h3><ul class="related_post"><li><a href="http://mindhacks.cn/2010/11/14/the-importance-of-knowing-why-part2/" title="知其所以然（续）">知其所以然（续）</a> (42)</li><li><a href="http://mindhacks.cn/2009/10/05/im-a-tiny-bird-book-review/" title="不是书评 ：《我是一只IT小小鸟》">不是书评 ：《我是一只IT小小鸟》</a> (57)</li><li><a href="http://mindhacks.cn/2009/07/06/why-you-should-do-it-yourself/" title="[BetterExplained]遇到问题为什么应该自己动手">[BetterExplained]遇到问题为什么应该自己动手</a> (62)</li><li><a href="http://mindhacks.cn/2009/05/17/seven-years-in-nju/" title="我在南大的七年">我在南大的七年</a> (149)</li><li><a href="http://mindhacks.cn/2009/03/28/effective-learning-and-memorization/" title="[BetterExplained]如何有效地记忆与学习">[BetterExplained]如何有效地记忆与学习</a> (104)</li><li><a href="http://mindhacks.cn/2009/02/15/why-you-should-start-blogging-now/" title="[BetterExplained]为什么你应该（从现在开始就）写博客">[BetterExplained]为什么你应该（从现在开始就）写博客</a> (206)</li><li><a href="http://mindhacks.cn/2009/02/09/writing-is-better-thinking/" title="[BetterExplained]书写是为了更好的思考">[BetterExplained]书写是为了更好的思考</a> (96)</li><li><a href="http://mindhacks.cn/2009/01/14/make-yourself-irreplacable/" title="什么才是你的不可替代性和核心竞争力">什么才是你的不可替代性和核心竞争力</a> (25)</li><li><a href="http://mindhacks.cn/2008/12/05/learning-habits-part4/" title="一直以来伴随我的一些学习习惯(四)：知识结构">一直以来伴随我的一些学习习惯(四)：知识结构</a> (13)</li><li><a href="http://mindhacks.cn/2008/10/29/methodology-for-programmers/" title="方法论、方法论&mdash;&mdash;程序员的阿喀琉斯之踵">方法论、方法论&mdash;&mdash;程序员的阿喀琉斯之踵</a> (19)</li></ul><hr />
<h3>订阅 Mind Hacks</h3>
<a title="用Google Reader订阅" href="http://fusion.google.com/add?feedurl=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_google.gif" style="border:0" alt="订阅到 | Google" /></a> 
<a title="用鲜果订阅" href="http://www.xianguo.com/subscribe.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_xianguo.gif" style="border:0" alt="订阅到 | 鲜果" /></a>
<br/> 
<a title="用抓虾订阅" href="http://www.zhuaxia.com/add_channel.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_zhuaxia.gif" style="border:0" alt="订阅到 | 抓虾" /></a> 
<a title="用有道订阅" href="http://reader.youdao.com/b.do?keyfrom=mindhacks&url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_yodao1.gif" style="border:0" alt="订阅到 | 有道" /></a> 
<hr />
<h3>我是你的信息过滤器</h3>
想了解作者最近在关注什么，欢迎 Follow <a href="http://weibo.com/pongba">刘未鹏pongba@微博</a>
<br/>
程序员朋友请到作者发起的 <a href="https://groups.google.com/group/pongba">TopLanguage</a> (<a href="http://mindhacks.cn/about-toplanguage/">about</a>) 社群逛逛，定有收获 :)
<br/>
想了解作者在阅读哪些书，请到 <a href="http://www.douban.com/people/pongba/">pongba@豆瓣</a>，或者直接访问以下四个豆列：<a href="http://www.douban.com/doulist/46003/">[只读经典]思维改变生活</a> | <a href="http://www.douban.com/doulist/127649/">[只读经典]思考的技术与艺术</a> | <a href="http://www.douban.com/doulist/197706/">决策与判断</a> | <a href="http://www.douban.com/doulist/176513/">机器学习与人工智能书籍资源导引</a> 。
<hr />
<p><small>
本文由 刘未鹏 发布在 <a href="http://mindhacks.cn">刘未鹏 | Mind Hacks</a>, 2009. | <a href="http://mindhacks.cn/2009/12/20/dark-time/#commenting">143 条评论</a> | 标签: <a href="http://mindhacks.cn/tags/%e5%ad%a6%e4%b9%a0%e6%96%b9%e6%b3%95/" rel="tag">学习方法</a>
<br/>
转载请注明作者，出处，以及<a href="http://mindhacks.cn/2009/12/20/dark-time/">原始超链接</a>: http://mindhacks.cn/2009/12/20/dark-time/
</small></p>]]></content:encoded>
			<wfw:commentRss>http://mindhacks.cn/2009/12/20/dark-time/feed/</wfw:commentRss>
		<slash:comments>143</slash:comments>
		</item>
		<item>
		<title>不是书评 ：《我是一只IT小小鸟》</title>
		<link>http://mindhacks.cn/2009/10/05/im-a-tiny-bird-book-review/</link>
		<comments>http://mindhacks.cn/2009/10/05/im-a-tiny-bird-book-review/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 17:18:30 +0000</pubDate>
		<dc:creator>刘未鹏</dc:creator>
				<category><![CDATA[学习方法]]></category>

		<guid isPermaLink="false">http://mindhacks.cn/2009/10/05/im-a-tiny-bird-book-review/</guid>
		<description><![CDATA[设计你自己的进度条

进度条的设计是一个很多人都知道的故事：同样的耗时，如果不给任何进度提示，只是在完成之后才弹出一个完成消息，中间没有任何动态变化，那么整个过程就会让人等得非常焦急，导致一些人干脆把程序关了了事。如果有进度不断更新，那么对整个过程耗时的心理感受就会远低于实际值，用户也不会郁闷到把程序关了。（你有多少次在银行处理手续的时候，看着工作人员把一堆材料不停地倒腾来去，心里多希望他们可以在柜台小窗口上投影一个进度条？）

这里的原因在于，没有进度提示的话，我们无法判断这个等待什么时候才是个尽头。如果有不断增长的进度条，那么我们对于什么时候会达到100%就会有一个粗略的估计，这个估计是一剂定心丸，让我们知道这事情总会并且会在不久的将来完成。

做事情也是同样的道理，善于规划的人，会将目标分割成一个个的里程碑，再将里程碑分割成TODO列表。前阵子流行的GTD方法学，核心的理念就在于，如果你把任务分割了，你就有了进度条，你就知道，事情在不断的进展，你总会完成任务或到达你的目标，你会有一个时间估计。反之如果没有这个分割，整个的任务或目标对你来说就只有两种状态——“完成”和“未完成”，如果不幸是一个比较漫长的目标，那么你会发现你的进度条总是“未完成”，一次又一次的等待未果会耗尽你的耐心，让你下意识的产生“这事什么时候才能完呢？”的疑惑，没有分而治之，你就不知道未来还需要付出多少努力才能达到目的，这就会让你心生怯意，不敢进一步投入时间，免得血本无归。在这样的心理下，不少人就会选择保守策略——退出，以免到头来花了时间还一事无成。]]></description>
			<content:encoded><![CDATA[<p><b><a href="http://www.douban.com/subject/4006425/"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="i&#39;m a tiny bird" border="0" alt="i&#39;m a tiny bird" src="http://mindhacks.cn/wp-content/uploads/2009/10/s3958139.jpg" width="180" height="244" /></a> </b></p>
<p><b>设计你自己的进度条</b><b></b></p>
<p>进度条的设计是一个很多人都知道的故事：同样的耗时，如果不给任何进度提示，只是在完成之后才弹出一个完成消息，中间没有任何动态变化，那么整个过程就会让人等得非常焦急，导致一些人干脆把程序关了了事。如果有进度不断更新，那么对整个过程耗时的心理感受就会远低于实际值，用户也不会郁闷到把程序关了。（你有多少次在银行处理手续的时候，看着工作人员把一堆材料不停地倒腾来去，心里多希望他们可以在柜台小窗口上投影一个进度条？）</p>
<p>这里的原因在于，没有进度提示的话，我们无法判断这个等待什么时候才是个尽头。如果有不断增长的进度条，那么我们对于什么时候会达到100%就会有一个粗略的估计，这个估计是一剂定心丸，让我们知道这事情总会并且会在不久的将来完成。</p>
<p>做事情也是同样的道理，善于规划的人，会将目标分割成一个个的里程碑，再将里程碑分割成TODO列表。前阵子流行的GTD方法学，核心的理念就在于，如果你把任务分割了，你就有了进度条，你就知道，事情在不断的进展，你总会完成任务或到达你的目标，你会有一个时间估计。反之如果没有这个分割，整个的任务或目标对你来说就只有两种状态——“完成”和“未完成”，如果不幸是一个比较漫长的目标，那么你会发现你的进度条总是“未完成”，一次又一次的等待未果会耗尽你的耐心，让你下意识的产生“这事什么时候才能完呢？”的疑惑，没有分而治之，你就不知道未来还需要付出多少努力才能达到目的，这就会让你心生怯意，不敢进一步投入时间，免得血本无归。在这样的心理下，不少人就会选择保守策略——退出，以免到头来花了时间还一事无成。</p>
<p>而所谓的规划其实就是针对这种心理弱点的做事方法。如果你对整个目标的几个重大步骤有清晰的界定，能够对每个步骤的耗时作出靠谱的上界估计，你就不会被不确定的未来，不确定的时间投入感到恐惧，就不会被这种不确定感压迫到过早退出。</p>
<p><b>不要过早退出循环</b><b></b></p>
<p>我们在尝试新的事物的时候，总是会遇到各种各样的困难，不同的人会在碰壁不同的次数之后退出。用程序员喜欢的话来说就是，我们都在for循环，区别在于你是什么情况下break;的。有的人退出阈值高，这是能坚持的一类人，有的人退出阈值低，这类人很可能遇到一些障碍就退出了。</p>
<p>过早退出的原因往往在于对于未来的不确定性，对于投资时间最终无法收到回报的恐惧，感受到的困难越大，这种恐惧越大，因为越大的困难往往暗示着这个任务需要投资的时间越大。所以其实我们都是直觉经济学家，当我们说“畏难”的时候，其实我们畏惧的不是困难本身，而是困难所暗示的时间经济学意义。</p>
<p>然而，我们的情绪大脑毕竟比较原始，仅根据碰壁的次数或硬度来判断事情的难易并不一定靠谱，如果你遇到困难，不妨用一用互联网，用一用群体的智慧，看看别人当时是怎么想怎么办的，绝大多数情况下你并不孤单，你遇到的问题早就有人遇到过，你踩过的坑里面尽是前人的脚印，不要仅仅因为一时摸不着头绪，找不着出路就退出，这不是informed decision，问一问自己作出退出的决策是否基于足够的信息，我是否进行了足够的调查，至少，是否去简单用了用搜索引擎。</p>
<p>模仿高德纳先生的名言：<b>过早退出是一切失败的根源</b>。</p>
<p><b></b></p>
<p><b>兴趣遍地都是，专注和持之以恒才是真正稀缺的。</b><b></b></p>
<p>很多人看了书中的故事之后得出这样的结论：兴趣最重要。然而，我觉得区别他们和其他人的，并不是他们拥有超过常人的兴趣，而是他们拥有超过常人的毅力。</p>
<p>其实人天生就对新事物怀有好奇心，难以找出谁没有对任何事物或领域产生过兴趣，然而不同的是，有些人的兴趣只能持续几天，当遇到第一个困难，第一道坎的时候，他们就熄灭了，然而另一些人的兴趣火花会变成火苗，火苗会变成火种，一直稳定的燃烧很多年。<b>区别他们的并不是兴趣的有无，而是他们的性格里面有没有维持兴趣的火种一直燃烧下去的燃料</b>。</p>
<p>一个人有专注和持之以恒的性格，即便在一个没有多大兴趣的领域也能成为专家（更何况，兴趣的很大一类来源就是“我擅长做这件事情”）；反之就算有兴趣也很快会被一些冷水泼灭。</p>
<p><b>生活中的选择远比我们想象得要多，细微的选择差异造就了不同的人生</b><b></b></p>
<p>唐雅薇同学的故事中，有这么一个细节吸引了我的注意：当时她正在找工作阶段，对女生在IT行业的发展很迷茫，恰逢微软的郭蓓菁女士到他们学校演讲，演讲完了之后她立即就奔上讲台拦住郭女士询问女生与IT的问题。</p>
<p>这是一个细节，但我相信不是所有人都有勇气上去拦住名人问普通问题的，我们会给自己找很多很多的理由和接口，我想最常见的应该是两个原因：1. 如果被批评了自尊心会受到打击。2.认为问了也问不出特别的信息。然而事实却是相反：1. 自尊心受到打击算不上实质性的损失。2. 你想不出能问出什么特别的信息并不代表就真的问不到重要的信息。<b>别把不知道当成没有</b>。</p>
<p>一个小小的思维差异，可能导致很多人在遇到困惑的时候原地打转，冲突不出，而另一些人则取经得到宝贵的经验，站在别人的肩膀上越过了障碍。唐雅薇从郭女士那儿得到了最宝贵的信息：女生在IT行业也能有很好的发展。信心，是这样一种奇怪的东西，就算你没有确切的证明未来会更好，你也会坚持下去，你不会过早退出循环；而来源于过来人的信息则是信心最靠谱的保障。</p>
<p>你是不是意识到，在平常的生活中，你所作出的选择比你想象的要多得多呢？有没有想过有一些看似细小的选择可能会产生巨大的影响？</p>
<p>想想看，试一下，是不是真的没什么损失，还有可能得到巨大的回报呢？</p>
<p><b>靠专业技能的成功是最具可复制性的</b><b></b></p>
<p>它需要的只是你在一个领域坚持不懈地专注下去，只需要选择一个不算太不靠谱的方向，然后专心致志的专下去，最后必然能成为高手或者绝顶高手。世上有很多成功带有偶然因素和运气成分或出身环境，但至少这一样，被无数人复制了无数遍，否则就不会存在学校和教育了。</p>
<p><b>反思是让人得以改进自己的最重要的思维品质</b><b></b></p>
<p>很多人在成年之后甚至未及成年，性格就难以再发生大的变化。性格是这样一种自我实现和强化的陷阱：如果你是不容易专注的人，你会发现生活中处处都是分散你注意力的东西，你的思维难以在一个事情上停留半小时，于是你的时间变得琐碎，你很难在一个领域有长久的积累和深入的思考，这样的现实可能会让你感到沮丧，后者让你更加无法专心，这样的现实可能会让你感到焦虑，为了避开焦虑你又会去寻求其他的刺激，结果是恶性循环。</p>
<p>反思是改变自己的第一步，我们常常容易发现别人的问题，别人的错误，却难以发现自己思维中的问题，因为我们很少会把自己的思维当成目标去思考。</p>
<p>作为程序员，相信没有人不知道能修改自身的程序，而能修改自身的程序的前提就是，首先这个程序必须有法子能够指向自身。</p>
<p><b>饿死在干草堆之间的驴子</b><b></b></p>
<p>有很多在迷茫期的同学，迷茫都是相似的：面前有两条路，到底选哪一条？“转行还是不转行？”“学C++还是学Java。？“做管理还是做程序员？”有些问题其实不是问题：比如“学C++还是学Java。”答案是都学而且还不仅学两个。有些问题不是一个泛泛的答案能够适合的，比如转行还是不转行，需要考虑很多自身因素。</p>
<p>但更重要的是，有人会因为无法作出决定就推迟决定，然而实际上推迟决定是最差的决定，在推迟决定期间，时间悄悄流逝，你却没有任何一条路上的积累，白白浪费了时间。</p>
<p>如果你有一些钱不知道花在A还是B上，你先不作决定，没问题，因为钱还是你的，但如果你有一些时间，不知道花在A上还是B上，不行，因为过了这段时间，这段时间就不是你的了。</p>
<p>所以，不管有多纠结，也不要从纠结中逃离，试图推延决定，既然终究是个痛苦的决定，就痛一回，好好思考和调查之后作出一个决定并坚持下去，只要不是太不靠谱的行业（相信也没谁会在纠结了之后却选了一个不靠谱的行业的），经过你的积累总会成为高手。</p>
<p><b>一生的知识积累，自学的起码占</b><b>90%</b></p>
<p>你会在这本书当中看到的一个重复出现的现象就是自学，大规模的自学，逃课自学，上网找书自学，程序员行业是最适合自学的行业，网络是程序员的天堂，需要的资源、工具，比课堂上的多出何止百倍，如果说还有一个学科，并不需要传统的教育就可以成才，估计非程序员莫属了。作为程序员如果没有查过wikipedia，没有看过几本原版电子书，没有在国内外主要邮件列表里面提过问题吵过架，没有用技术博客记录学习的独特体会，没有订阅技术牛人们的博客，怎么好意思说身在这个行业呢？</p>
<p>最后，看完了书还是说“说起来容易做起来难”的，<b>怪自己，不怪书</b>。</p>
<h3  class="related_post_title">你可能也会喜欢以下文章</h3><ul class="related_post"><li><a href="http://mindhacks.cn/2010/11/14/the-importance-of-knowing-why-part2/" title="知其所以然（续）">知其所以然（续）</a> (42)</li><li><a href="http://mindhacks.cn/2009/12/20/dark-time/" title="暗时间">暗时间</a> (143)</li><li><a href="http://mindhacks.cn/2009/07/06/why-you-should-do-it-yourself/" title="[BetterExplained]遇到问题为什么应该自己动手">[BetterExplained]遇到问题为什么应该自己动手</a> (62)</li><li><a href="http://mindhacks.cn/2009/05/17/seven-years-in-nju/" title="我在南大的七年">我在南大的七年</a> (149)</li><li><a href="http://mindhacks.cn/2009/03/28/effective-learning-and-memorization/" title="[BetterExplained]如何有效地记忆与学习">[BetterExplained]如何有效地记忆与学习</a> (104)</li><li><a href="http://mindhacks.cn/2009/02/15/why-you-should-start-blogging-now/" title="[BetterExplained]为什么你应该（从现在开始就）写博客">[BetterExplained]为什么你应该（从现在开始就）写博客</a> (206)</li><li><a href="http://mindhacks.cn/2009/02/09/writing-is-better-thinking/" title="[BetterExplained]书写是为了更好的思考">[BetterExplained]书写是为了更好的思考</a> (96)</li><li><a href="http://mindhacks.cn/2009/01/14/make-yourself-irreplacable/" title="什么才是你的不可替代性和核心竞争力">什么才是你的不可替代性和核心竞争力</a> (25)</li><li><a href="http://mindhacks.cn/2008/12/05/learning-habits-part4/" title="一直以来伴随我的一些学习习惯(四)：知识结构">一直以来伴随我的一些学习习惯(四)：知识结构</a> (13)</li><li><a href="http://mindhacks.cn/2008/10/29/methodology-for-programmers/" title="方法论、方法论&mdash;&mdash;程序员的阿喀琉斯之踵">方法论、方法论&mdash;&mdash;程序员的阿喀琉斯之踵</a> (19)</li></ul><hr />
<h3>订阅 Mind Hacks</h3>
<a title="用Google Reader订阅" href="http://fusion.google.com/add?feedurl=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_google.gif" style="border:0" alt="订阅到 | Google" /></a> 
<a title="用鲜果订阅" href="http://www.xianguo.com/subscribe.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_xianguo.gif" style="border:0" alt="订阅到 | 鲜果" /></a>
<br/> 
<a title="用抓虾订阅" href="http://www.zhuaxia.com/add_channel.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_zhuaxia.gif" style="border:0" alt="订阅到 | 抓虾" /></a> 
<a title="用有道订阅" href="http://reader.youdao.com/b.do?keyfrom=mindhacks&url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_yodao1.gif" style="border:0" alt="订阅到 | 有道" /></a> 
<hr />
<h3>我是你的信息过滤器</h3>
想了解作者最近在关注什么，欢迎 Follow <a href="http://weibo.com/pongba">刘未鹏pongba@微博</a>
<br/>
程序员朋友请到作者发起的 <a href="https://groups.google.com/group/pongba">TopLanguage</a> (<a href="http://mindhacks.cn/about-toplanguage/">about</a>) 社群逛逛，定有收获 :)
<br/>
想了解作者在阅读哪些书，请到 <a href="http://www.douban.com/people/pongba/">pongba@豆瓣</a>，或者直接访问以下四个豆列：<a href="http://www.douban.com/doulist/46003/">[只读经典]思维改变生活</a> | <a href="http://www.douban.com/doulist/127649/">[只读经典]思考的技术与艺术</a> | <a href="http://www.douban.com/doulist/197706/">决策与判断</a> | <a href="http://www.douban.com/doulist/176513/">机器学习与人工智能书籍资源导引</a> 。
<hr />
<p><small>
本文由 刘未鹏 发布在 <a href="http://mindhacks.cn">刘未鹏 | Mind Hacks</a>, 2009. | <a href="http://mindhacks.cn/2009/10/05/im-a-tiny-bird-book-review/#commenting">57 条评论</a> | 标签: <a href="http://mindhacks.cn/tags/%e5%ad%a6%e4%b9%a0%e6%96%b9%e6%b3%95/" rel="tag">学习方法</a>
<br/>
转载请注明作者，出处，以及<a href="http://mindhacks.cn/2009/10/05/im-a-tiny-bird-book-review/">原始超链接</a>: http://mindhacks.cn/2009/10/05/im-a-tiny-bird-book-review/
</small></p>]]></content:encoded>
			<wfw:commentRss>http://mindhacks.cn/2009/10/05/im-a-tiny-bird-book-review/feed/</wfw:commentRss>
		<slash:comments>57</slash:comments>
		</item>
		<item>
		<title>[BetterExplained]遇到问题为什么应该自己动手</title>
		<link>http://mindhacks.cn/2009/07/06/why-you-should-do-it-yourself/</link>
		<comments>http://mindhacks.cn/2009/07/06/why-you-should-do-it-yourself/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 13:48:07 +0000</pubDate>
		<dc:creator>刘未鹏</dc:creator>
				<category><![CDATA[学习方法]]></category>

		<guid isPermaLink="false">http://mindhacks.cn/2009/07/06/why-you-should-do-it-yourself/</guid>
		<description><![CDATA[我们在生活中总是在不停地试图做最优经济决策，只不过很多时候我们为适应远古社会而进化的大脑未必适用于现代工业社会（《Mean Genes》，《进化心理学》，《How We Decide》），所以很多时候我们可以在超市为选择哪一卷卫生纸斟酌半天（《Predictably Irrational》），却在面对生活中重大抉择的时候轻易就随波逐流（《Paradox Of Choice》）。

我们的很多决策依赖于情绪系统的输出（从进化时间上比较“旧”的大脑部分）（《How We Decide》，《Synaptic Self》），这部分大脑属于典型的经过了漫长进化时间所雕琢过的，决策机制严重适应远古社会的模块（《Mean Genes》），比如在物质贫乏的远古时期，不管什么时候遇到富含热量的食物是必吃无误的，所以我们的情绪大脑只要闻到美食是绝对不去克制诱惑的，长出脂肪又如何？有的是饥寒交迫的时候去燃烧这些脂肪。然而这条规则到了现代这个物质充裕的社会却成了灾难（去查一下美国的肥胖比例？），可谓成也萧何败萧何。这样的例子在《Mean Genes》中还有不少。

我们在学习新东西，遇到困难的时候，为什么会放弃？因为我们下意识中会对所面临的困难以及成功后所得的收益作一个评估（经典的cost/return分析），这里特别重要的是对面临的困难的评估：我们都知道学习任何一门技能，一开始可能还兴趣浓厚，捋袖子上阵，过了一阵子便会遇到一个典型的分水岭，你会发现未知的东西比你想象得要多，困难重重，似乎一眼看过去没法确信什么时候才能掌握，甚至觉得有点Mission Impossible，当觉知到的困难到一定程度之后，我们的大脑便会想：既然很大可能最终失败，甚至看不到成功的可能，为什么要白费力气去学一通呢？还不如省省呢。这是一个聪明的经济决策，去权衡性价比应该是每个经济个体的原则。然而，这个决策笨就笨在，它把困难评估得过高了，因此决策的前提就弄错了。为什么这么说呢？]]></description>
			<content:encoded><![CDATA[<p><strong>1. 遇到问题寻找捷径为什么是很聪明的做法</strong></p>
<p>我们在生活中总是在不停地试图做最优经济决策，只不过很多时候我们为适应远古社会而进化的大脑未必适用于现代工业社会（《Mean Genes》，《进化心理学》，《How We Decide》），所以很多时候我们可以在超市为选择哪一卷卫生纸斟酌半天（《Predictably Irrational》），却在面对生活中重大抉择的时候轻易就随波逐流（《Paradox Of Choice》）。</p>
<p>我们的很多决策依赖于情绪系统的输出（从进化时间上比较“旧”的大脑部分）（《How We Decide》，《Synaptic Self》），这部分大脑属于典型的经过了漫长进化时间所雕琢过的，决策机制严重适应远古社会的模块（《Mean Genes》），比如在物质贫乏的远古时期，不管什么时候遇到富含热量的食物是必吃无误的，所以我们的情绪大脑只要闻到美食是绝对不去克制诱惑的，长出脂肪又如何？有的是饥寒交迫的时候去燃烧这些脂肪。然而这条规则到了现代这个物质充裕的社会却成了灾难（去查一下美国的肥胖比例？），可谓成也萧何败萧何。这样的例子在《Mean Genes》中还有不少。</p>
<p>我们在学习新东西，遇到困难的时候，为什么会放弃？因为我们下意识中会对所面临的困难以及成功后所得的收益作一个评估（经典的cost/return分析），这里特别重要的是对面临的困难的评估：我们都知道学习任何一门技能，一开始可能还兴趣浓厚，捋袖子上阵，过了一阵子便会遇到一个典型的分水岭，你会发现未知的东西比你想象得要多，困难重重，似乎一眼看过去没法确信什么时候才能掌握，甚至觉得有点Mission Impossible，当觉知到的困难到一定程度之后，我们的大脑便会想：既然很大可能最终失败，甚至看不到成功的可能，为什么要白费力气去学一通呢？还不如省省呢。这是一个聪明的经济决策，去权衡性价比应该是每个经济个体的原则。然而，这个决策笨就笨在，它把困难评估得过高了，因此决策的前提就弄错了。为什么这么说呢？现代社会很多新东西是知识密集型的，而不像我们祖先生活的远古社会可能绝大部分是体力活。对体力活的评估我们很在行，大约能知道困难有多大，需要耗时多久，有没有可能完成。然而对学习新知识的困难程度的评估，我们却很不在行，因为大部分知识都是需要等你掌握了之<strong>后</strong>才会“豁然开朗”、“柳暗花明的”，而在这之前你会觉得这东西太难了，完全没有头绪，摸不着门道，觉得山重水复疑无路，你会想“既然无路，就别去碰得满头是包了吧？何苦呢？”。</p>
<p>有一个很不错的概念叫做“<a href="http://en.wikipedia.org/wiki/Unknown_unknown">Unknown Unknown</a>”，大意是如果你不知道一个东西的话，你也不会知道你自己不知道它。很多时候新知识就有这个特性——掌握了之<strong>后</strong>觉得很明白，掌握之前却觉得“不可能啊”、“这简直没有解嘛”。在这样的认知之下，你自然会高估前方的困难、风险和不确定性，因为你不知道什么样的知识才能解决你的困惑。然而事实上呢？只要智商没有根本的差别，别人的大脑能够掌握的知识，你的大脑也能掌握，你所感觉到的巨大困难只不过是因为Unknown Unknown，你所需要的只是<strong>耐心地</strong>踏遍这块知识版图，当你掌握了那些你该掌握的知识之后自然会柳暗花明。</p>
<p><strong>2. 遇到问题寻找捷径为什么只是小聪明</strong></p>
<p>我们在遇到困难的时候会试图去寻找捷径，心里的想法大概是：既然我自己解决可能需要耗费极大的精力，甚至连最终能否解决都无法判断，那么为什么要冒风险花费大量的时间去尝试呢？还不如想想其他法子。比如绕过问题，或者将问题外包给别人。</p>
<p>这很聪明，很经济：用最小的代价解决手头的问题。看上去是一个寻求经济上最优解的法子。</p>
<p>不过到底是局部最优还是全局最优呢？</p>
<p>“用最小的代价解决手头的问题”——这里的问题在于，难道我们计算收益的时候仅仅考虑是否解决了手头的问题吗？如果解决的过程中得到了其他的收益呢？</p>
<p><a href="http://mindhacks.cn/wp-content/uploads/2009/07/paradoxoflearning.jpg"><img title="paradox-of-learning" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="233" alt="paradox-of-learning" src="http://mindhacks.cn/wp-content/uploads/2009/07/paradoxoflearning-thumb.jpg" width="384" border="0" /></a> </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; （图片注：荣耀属于indexed）</p>
<p>为了解决一个技术问题，你踏遍互联网，翻了若干教程、网站、书籍，最终解决了这个问题的同时还知道了以后遇到类似的问题该到哪儿最快最有效地找到参考，你还知道了哪些网站是寻找这个领域最有价值信息的地方，你还知道了哪些书是领域内最经典的书，说不定你在到处乱撞的过程中还会遇到其他若干意想不到的收益。</p>
<p>为了解决一个内存泄漏的bug，你学习了一堆底层知识、了解了一堆调试工具、学习了若干wikipedia页面，表面上看来，仅仅为了解决这一个小bug你的时间花销未免太大了点，然而关键就在于，它的收益远远不止于解决了这一个小bug，下次你遇到任何类似的bug的时候就能够哐当两下就解决之了。</p>
<p>生活或工作中，<strong>很大程度上你遇到的每个问题都不是孤立的，既然你遇到了某问题，那么很大的可能性你以后还会遇到类似的问题。</strong>当然，这个说法的另一面是，也有一些问题是一锤子买卖，即以后不会遇到类似的问题，因此只求速解决。不过按照我的经验这样的问题实在太少了，此外，你觉得你真的能够分辨你面对的问题是否属于这类问题吗？底线是，就算是这样的问题，你自己动手解决也能培养学习能力和思考能力。如果你判断它是一锤子问题，外包给别人解决，那么你就永远没机会发现这个问题背后蕴藏着哪些知识，这就成了一个<a href="http://en.wikipedia.org/wiki/Self-fulfilling_prophecy">自我实现的预言</a>。</p>
<p>如果选择总是问别人的话，下次你还得继续问别人，每次直接问到问题的答案的同时意味着你永远都要靠别人的大脑来获得答案。</p>
<p><strong>困难的路越走越容易，容易的路越走越难。</strong></p>
<p>&#160;</p>
<p>&#8211;</p>
<p><a href="http://www.chedong.com/">车东</a>提到我的博客读者群非常适合搜狗的需要，这里帮车东转发一则搜狗的招聘信息，有兴趣的同学可以参考<a href="http://job.sogou.com/position.php?classid=19">这里（研究类）</a>和<a href="http://job.sogou.com/position.php?classid=1">这里（开发类）</a>。</p>
<h3  class="related_post_title">你可能也会喜欢以下文章</h3><ul class="related_post"><li><a href="http://mindhacks.cn/2010/11/14/the-importance-of-knowing-why-part2/" title="知其所以然（续）">知其所以然（续）</a> (42)</li><li><a href="http://mindhacks.cn/2009/12/20/dark-time/" title="暗时间">暗时间</a> (143)</li><li><a href="http://mindhacks.cn/2009/10/05/im-a-tiny-bird-book-review/" title="不是书评 ：《我是一只IT小小鸟》">不是书评 ：《我是一只IT小小鸟》</a> (57)</li><li><a href="http://mindhacks.cn/2009/05/17/seven-years-in-nju/" title="我在南大的七年">我在南大的七年</a> (149)</li><li><a href="http://mindhacks.cn/2009/03/28/effective-learning-and-memorization/" title="[BetterExplained]如何有效地记忆与学习">[BetterExplained]如何有效地记忆与学习</a> (104)</li><li><a href="http://mindhacks.cn/2009/02/15/why-you-should-start-blogging-now/" title="[BetterExplained]为什么你应该（从现在开始就）写博客">[BetterExplained]为什么你应该（从现在开始就）写博客</a> (206)</li><li><a href="http://mindhacks.cn/2009/02/09/writing-is-better-thinking/" title="[BetterExplained]书写是为了更好的思考">[BetterExplained]书写是为了更好的思考</a> (96)</li><li><a href="http://mindhacks.cn/2009/01/14/make-yourself-irreplacable/" title="什么才是你的不可替代性和核心竞争力">什么才是你的不可替代性和核心竞争力</a> (25)</li><li><a href="http://mindhacks.cn/2008/12/05/learning-habits-part4/" title="一直以来伴随我的一些学习习惯(四)：知识结构">一直以来伴随我的一些学习习惯(四)：知识结构</a> (13)</li><li><a href="http://mindhacks.cn/2008/10/29/methodology-for-programmers/" title="方法论、方法论&mdash;&mdash;程序员的阿喀琉斯之踵">方法论、方法论&mdash;&mdash;程序员的阿喀琉斯之踵</a> (19)</li></ul><hr />
<h3>订阅 Mind Hacks</h3>
<a title="用Google Reader订阅" href="http://fusion.google.com/add?feedurl=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_google.gif" style="border:0" alt="订阅到 | Google" /></a> 
<a title="用鲜果订阅" href="http://www.xianguo.com/subscribe.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_xianguo.gif" style="border:0" alt="订阅到 | 鲜果" /></a>
<br/> 
<a title="用抓虾订阅" href="http://www.zhuaxia.com/add_channel.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_zhuaxia.gif" style="border:0" alt="订阅到 | 抓虾" /></a> 
<a title="用有道订阅" href="http://reader.youdao.com/b.do?keyfrom=mindhacks&url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_yodao1.gif" style="border:0" alt="订阅到 | 有道" /></a> 
<hr />
<h3>我是你的信息过滤器</h3>
想了解作者最近在关注什么，欢迎 Follow <a href="http://weibo.com/pongba">刘未鹏pongba@微博</a>
<br/>
程序员朋友请到作者发起的 <a href="https://groups.google.com/group/pongba">TopLanguage</a> (<a href="http://mindhacks.cn/about-toplanguage/">about</a>) 社群逛逛，定有收获 :)
<br/>
想了解作者在阅读哪些书，请到 <a href="http://www.douban.com/people/pongba/">pongba@豆瓣</a>，或者直接访问以下四个豆列：<a href="http://www.douban.com/doulist/46003/">[只读经典]思维改变生活</a> | <a href="http://www.douban.com/doulist/127649/">[只读经典]思考的技术与艺术</a> | <a href="http://www.douban.com/doulist/197706/">决策与判断</a> | <a href="http://www.douban.com/doulist/176513/">机器学习与人工智能书籍资源导引</a> 。
<hr />
<p><small>
本文由 刘未鹏 发布在 <a href="http://mindhacks.cn">刘未鹏 | Mind Hacks</a>, 2009. | <a href="http://mindhacks.cn/2009/07/06/why-you-should-do-it-yourself/#commenting">62 条评论</a> | 标签: <a href="http://mindhacks.cn/tags/%e5%ad%a6%e4%b9%a0%e6%96%b9%e6%b3%95/" rel="tag">学习方法</a>
<br/>
转载请注明作者，出处，以及<a href="http://mindhacks.cn/2009/07/06/why-you-should-do-it-yourself/">原始超链接</a>: http://mindhacks.cn/2009/07/06/why-you-should-do-it-yourself/
</small></p>]]></content:encoded>
			<wfw:commentRss>http://mindhacks.cn/2009/07/06/why-you-should-do-it-yourself/feed/</wfw:commentRss>
		<slash:comments>62</slash:comments>
		</item>
		<item>
		<title>我在南大的七年</title>
		<link>http://mindhacks.cn/2009/05/17/seven-years-in-nju/</link>
		<comments>http://mindhacks.cn/2009/05/17/seven-years-in-nju/#comments</comments>
		<pubDate>Sun, 17 May 2009 15:57:30 +0000</pubDate>
		<dc:creator>刘未鹏</dc:creator>
				<category><![CDATA[学习方法]]></category>

		<guid isPermaLink="false">http://mindhacks.cn/2009/05/17/seven-years-in-nju/</guid>
		<description><![CDATA[—— 跨进南大校门的第一天，我知道，我自由了。

父亲是个对新事物有强烈兴趣的人，村里第一台电视机是他自己组装的，当时全村人都跑过去看，电视机只能收到一个台，CCTV。座机电话是第一个装的。大哥大刚出现的时候，他也是第一个买来用的，那个时候的移动电话真是贵得离谱。

父亲告诉我的第二件最重要的事情是：遇到任何问题，找书去就行。他在自己的专业中完全是自学的。在不属于自己的专业中（后来买了电脑之后需要学习如何架设公司网站，如何网上营销，如何进行电子财务管理，如何使用各种作图软件制图等等）也全都是靠买书自学。

为什么说到这两件事情，因为这是对我一生影响最重大的两个习惯。第一个习惯给了我学习新东西的强烈动机，有了热忱和兴趣，做事情就不觉得累，就自得其乐。第二个习惯则给了我学习任何新东西的方法——不会么？查书去。（当然，学习一门专业并不完全通过看书就行，但这毫无疑问是至关重要的一个途径。）

高三的时候，父亲买了电脑，我立时对这个神奇的事物产生了强烈的兴趣，每期的《电脑爱好者》和《电脑报》都会买来细细看，有时看到各种小工具、技巧还会摘抄下来，回去在自己家里的机器上捣鼓。那个时候我并不知道这样单纯的兴趣会把我引向一条专业的程序员道路。]]></description>
			<content:encoded><![CDATA[<p>—— 跨进南大校门的第一天，我知道，我自由了。</p>
<p>父亲是个对新事物有强烈兴趣的人，村里第一台电视机是他自己组装的，当时全村人都跑过去看，电视机只能收到一个台，CCTV。座机电话是第一个装的。大哥大刚出现的时候，他也是第一个买来用的，那个时候的移动电话真是贵得离谱。</p>
<p>父亲告诉我的第二件最重要的事情是：遇到任何问题，找书去就行。他在自己的专业中完全是自学的。在不属于自己的专业中（后来买了电脑之后需要学习如何架设公司网站，如何网上营销，如何进行电子财务管理，如何使用各种作图软件制图等等）也全都是靠买书自学。</p>
<p>为什么说到这两件事情，因为这是对我一生影响最重大的两个习惯。第一个习惯给了我学习新东西的强烈动机，有了热忱和兴趣，做事情就不觉得累，就自得其乐。第二个习惯则给了我学习任何新东西的方法——不会么？查书去。（当然，学习一门专业并不完全通过看书就行，但这毫无疑问是至关重要的一个途径。）</p>
<p>高三的时候，父亲买了电脑，我立时对这个神奇的事物产生了强烈的兴趣，每期的《电脑爱好者》和《电脑报》都会买来细细看，有时看到各种小工具、技巧还会摘抄下来，回去在自己家里的机器上捣鼓。那个时候我并不知道这样单纯的兴趣会把我引向一条专业的程序员道路。</p>
<p>高三时间变得越来越紧，分配给兴趣的时间越来越少，但兴趣的火花一直都没有熄灭。</p>
<p>跨进南大校门的第一天，我知道，我自由了。</p>
<p>这个自由并不是说我可以做任何事情了，而是我得到了一个重要的决策的自由权，即关于如何利用我的时间。</p>
<p>高考的时候我报了计算机系，但分数差了几分，失之交臂，被调到第二志愿专业——信息与计算科学。当时以为这个专业跟计算机相关的，结果发现是数学系，后来听不少同学提到都上了同样的当。</p>
<p>这里出现了一个歪打正着的事情：我本意并不是上数学系，如果当时知道这个专业是数学系，我可能就不会填报了。但正是因为这个错误，我在数学系好歹也受了一些数学基本功的训练（尽管这个训练的基础是大一上的不多的几节数学分析课，以及每次临考前宿舍哥们例行的“包夜”看书），回过头来看这个基本功在后来还是帮了不少的忙，甚至有一阵子我对数学本身到了很感兴趣的程度。不得不说，这段学习的经历是很锻炼抽象和逻辑思维的。另一方面，困难如数学都学了，对其他学科就不觉得难，不会望而却步。</p>
<p>这是我成长过程中的幸运之一。后面还会提到，还有好几次更大的幸运。</p>
<p>大一上学期很快过去，应该是在大一下学期的时候，学校要开一门C++课程。我利用假期先把课本基本啃掉了，当时动机也很简单，先啃掉，就不用上课了嘛。</p>
<p>另一件事情是我经常喜欢去逛书店，看到侯捷的《深入浅出MFC》上面很多人说这本书好，我当时也对C++有一些基础认识和好感，所以就买下来啃了。一方面侯捷先生写的书的确图文并茂，深入浅出，有意思，另一方面理解一样复杂的东西是个智力挑战。所以看着看着倒是觉得兴致盎然。却不知就这么和C++结下了不解之缘。</p>
<p>这是另一个歪打正着：为什么说是“歪打”呢？因为MFC的设计也并不能说就是C++的Best Practice，另一方面若是以用为本的话也未必就要把MFC的原理摸个透。所以搞不好现在看来我就不会细看这本书。为什么说是“正着”呢？因为理解一个费解的东西本身需要长时间投入注意力，无形中练了理解能力和思维体力（专注），另一方面虽然MFC不是最佳设计，但理解里面的代码却加强了对C++本身的认识，这是基本功；也加强了对C++的兴趣，这是动力，后来这个动力驱使了我去看了大量的系统底层知识，从操作系统代码一直看到硬件体系结构。</p>
<p>大二发生了几件重要的事情：一是我在程序员上发表了第一篇技术文章，是剖析Boost源码的。我已经不记得什么时候、通过什么途径知道Boost这个库的了，总之是知道了，然后也是由于受到侯捷先生源码剖析的影响，也去看源代码，发现很难，越是难就越是觉得有趣，跟踪代码到临晨四点居然越看越精神了，后来火速写了一篇源码剖析。发给《程序员》杂志的技术主编孟岩先生，孟岩先生给了很大的鼓励，于是我很来劲。后来一鼓作气分析了N个库，写了一系列的Boost源码剖析的文章，在网上随处可以搜到这个系列。</p>
<p>这是第二个歪打正着，按理来说，研究语言技巧并不是程序员最佳的时间投入方法。所以现在我可能不会去做这件事情，会认为有更好的时间投入途径。但当时就一头扎了进去。为什么说也是正着呢？因为虽然这也许不是最佳的投入时间的办法，但总归比什么都不专注要强得多，至少这么一深入，对语言的缺陷和陷阱有了更深刻的认识、也锻炼了对代码的亲切感、跟踪调试的耐心（是的，耐心，而不是技巧）。</p>
<p>所以后来我在博客上总结自己学习编程中走过的弯路，孟岩先生说到，是不是弯路，不是那么容易界定的。</p>
<p>的确，也许真的有更好的路，但事前真的很难判断哪条路是最优的，我们能做到的，是把一条路走透了、走深了，只要不是一条太不靠谱的路，深入的过程中总会有很多的收获。只要不是太顽固，善于反省，总有一天也会逐渐意识到越来越靠谱的路。</p>
<p>除了发表第一篇技术文章之外，大二我还用业余时间做了一些技术翻译，寒假里我坐在家里每天晚上翻译半章《Effective C++》，当然，后来我把译稿提交给出版社的编辑时被告知文笔还显生硬。</p>
<p>同一时间，我继续啃N多C++以及底层知识的书，一段时间我的书架上全是这类书，根本不像数学系的学生。非典那阵子，把饭钱都拿来买了书，为什么买得这么疯，也是因为受父亲的一个影响，他告诉我买书不用心疼，因为是长远投资，收益远远大于这点金钱投入。那段时间我边看边写一些代码玩，有模仿Windows核心编程的小程序，也有尝试并失败的小游戏，也有拿来对宿舍玩的游戏文件分析的工具，还有为上机考试写的库，总之玩得不亦乐乎；不像很多知名的程序员在学校里面就写了被广为使用的工具，那个时候我完全没有这个意识，也不知道什么是开源，自己自娱自乐而已，所以没有系统训练编码量和编码素养，比较盲目。</p>
<p>大二下半年还发生了一件重要的事情，我在CSDN上开了一个博客，开始写学习C++和编程的过程中的一些总结。这个博客我一直写到今天，伴随了我整个7年的学习和成长，回过头去看就像时光机一样，能够看到一路过来我都关注了些什么东西，是怎么想的，以及对一些事情的看法是怎么改变的。这些东西如果不记录下来，就会逐渐忘掉，也就无法参照过去的自己，对未来提供更好的借鉴了。所以我一直把记录当做一个很重要的工具。另外我也通过这个博客认识了很多朋友，得到了很多的帮助。</p>
<p>后来，学校提供了转系到软件学院的机会，我立即报名了。后来的两年在软件学院度过。但其实反正我也是自己安排时间，所以无甚区别。</p>
<p>大三大四发生了几件重要的事情：一是荣耀先生邀我合译《Imperfect C++》，我很乐意的接了下来，可没想到这本书比我想象得要密度大得多，六百页，而且排版也很密，我给自己安排了每天6、7页纸的量，大概花了半年多译完。中间有一段时间停滞，荣耀先生给我鼓劲，告诉我一个重要的方法：如果觉得做不下去了，就硬着头皮坚持做，然后就类似于麻木了，适应了，那种望而却步的感觉会逐渐自动退去。惊人的简单，但事实就是如此，硬着头皮，过了那个情绪上最艰难的时候，也就适应了。这本书译完之后，还是有不少的收获，但我总觉得对性格上的磨练才是最有价值的收获。</p>
<p>二是我开始看英文版的书。之前，由于高中不靠谱的英语教育的原因，我恨死了英语，大二的校内四级课程还挂了科，直到大四才补考。但对技术本身的热爱压过了对英语的反感，我还是硬把一整本影印版啃下来了，而且津津有味，这本书就是Jeffrey Richter的《Applied .NET Framework Programming》。这个事情的重要性在于，后来我就不再反感和恐惧英语了，这是其一，其二是我开始意识到英文世界的技术资料有多么丰富，所以虽然本身看上去不是一个太起眼的事件，但却是我获取信息方式的一个Tipping Point，一旦熟练掌握了语言这个平台，背后就是一扇大门，通向一个海量的信息源，后来我的信息获取绝大多数便来自于英文，其中尤数wikipedia和英文版的书为多。另外还有一个收益后面会提到。</p>
<p>大四快毕业的时候又发生了一件事情，微软的Eric Jiang通过我的博客找到我，推荐我去微软面试，我随随便便就把粗糙的简历给发过去了，差点因为简历太粗糙被HR直接过滤掉。远程电话面了两轮，远程Coding一轮，然后记得就是飞到北京面试，住在北航招待所。北京的面试又面了好几轮，有考察底层知识的、有考察C/C++的、.Net的，还有考察算法的，编码素养的。总之就是公认的基本功考察。最终我还是没能通过面试。个人自己后来总结的结论是算法基本功太差，连什么是动态规划都不知道，编码素养也不够。这部分也是因为本科的学习方法太业余，什么好玩干什么，倒不是说兴趣驱动不好，只是缺乏系统的规划，不清楚也不关心这个领域的蓝图，也弄不清什么是重点。后来在读研的时候恶补了一把算法，好歹弄清了一些基本的概念和思考方法。编码素养的问题也是到了读研的时候才开始思考和学习，现在仍在学习。</p>
<p>另外，在本科阶段，其实我也浪费了很多时间，事实上，是只花了很小一部分时间来学习。之所以还多少学了点东西，完全是仰赖了专注的习惯。而这个专注的习惯其实又是从小受父亲耳濡目染的，父亲会花一整天揣摩一个问题，父亲跟我说过他以前组装电视机时的故事——一切都似乎组装正确，但电视机就是不工作。他苦思冥想，不得其解，当晚，半夜从睡梦中醒来，想到了问题的症结所在。所以，我在啃一些底层知识时如果弄不懂，也会一遍遍读，然后用走路吃饭坐车的时间在脑子里一遍遍去琢磨。我有很多重要的习惯受到父亲的影响，这些习惯自己一般觉察不到，但却默默影响了平时的一点一滴的时间分配和学习轨迹，这些习惯从纸上很难学到，但耳濡目染却会自然而然地学会。</p>
<p>每当有人觉得我本科就做了不少事情的时候，我就会说其实我本科真的浪费了很多时间，而另一方面，这也说明，要掌握一门专业知识，其实每天一点时间，专注、积累和持之以恒也就够了。后来研究生阶段才算真正开始惜时了，于是经历了两年密度很高的学习和思考，心智才成熟了不少。</p>
<p>大四的时候，和很多人一样，我也考研，因为一来也很茫然，二来也希望能够继续有一个宽松的环境继续沉浸在自己的兴趣中。但四年来我都是自己安排时间，逃掉了无数的课，已经对模式化的做题考试产生了抵触，所以考研的复习也没怎么认真准备，那年考研的数学题又偏难，一下慌了神，结果居然把一整页题压在稿纸下忘了做了，心理准备有多不充分可见一斑。考完数学我很沮丧，那么大分值的题目没做，数学肯定过不了了，接下来的专业课就没去考了。后来想想其实还是应该去考一考，多少能为下一年积攒经验。</p>
<p>后来就工作了，没去成微软，经同学张振推荐，就去了南京西门子。心里的打算还是边工作边考研，为什么考研，动机也简单，我心理还没准备好，本科只顾着埋头学好玩的，也不看路，不知道自己想要什么样的工作，想做什么样的事情。去西门子之后更加觉得如此，觉得效率很低，做的事情也并不是我乐意的，每天还要在班车上浪费两个小时，于是没过多久就辞掉了工作。打算复习考研。那个时候大概还有半年多的时间才到考研，所以我中途不紧不慢地又翻译了《Exceptional C++ Style》，占用了不少时间，到最后时间很紧了，就剩两三个月，我才开始认起真来，回想起来这是糟糕的时间管理。结果我不得不作了最坏的打算：顶多调剂去软件学院读研（我报的是计算机系），考虑到我反正是自己安排时间，差别应该不大。幸运的是，最终一分不差地过了线，算是蹭到了计算机系里。虽然如此，还是觉得这种惊险不要发生的好，以后或者其他事情上就不会有这么幸运了，及早准备总是很重要的。</p>
<p>读研期间的两年半，是我自己觉得心智年龄成长最迅速的一段时间。这里也有几个很幸运的事情。一个事情是我的导师陈家骏先生给了我很大的自主，于是我得以有时间安排一些重要的学习，这段时间对我来说很重要，我学习和思考了很多东西，为个人以后的发展作了很多准备，倒是没帮导师做什么事情。所以，硕士毕业离开的时候是既感激也愧疚。</p>
<p>另一个事情是认识同实验室的师兄陈怀兴，严格来说是他先来找我聊天，可见那个时候我仍然还是没有意识到与人交流的重要性的，后来，建立了TopLanguage讨论组之后越发意识到与他人交流的重要性，也开始主动寻找和参与交流，希望以后自己也能组织交流。陈怀兴对算法很有造诣，也是TopCoder上的常客和牛人，那个时候我也正在为以后的工作面试准备一些算法基础，所以经常找他讨论，获益很多。有一句话说：看一个人，只要看他读的书和见的人。还是很有道理的，这两者是一个人成长中最有价值的信息来源。</p>
<p>研一下半年，女朋友找工作的时候需要用到营销方面的知识，于是我去替她找书，偶遇《影响力》这本书，这本书打开了我的视野，让我开始关注一个很有价值的领域：我们如何思考，如何正确地思考。这个领域有很多有意思和有价值的书，我利用近一年的时间，陆陆续续看了近40本相关的书（我把这些书整理了之后以豆列的形式放在豆瓣上），对思维的特点和缺陷，以及如何思考有了很多的了解，这些知识后来很大程度上使我更清晰地认识自己，和自己在学习和生活中面临的各种问题。</p>
<p>也是研一下半年，我建立了一个Google Groups，起名TopLanguage，一开始的时候是因为平常没人讨论问题，憋得难受，希望有人能够说两句，无心插柳柳成荫，后来这个讨论组的交流越来越多，如今已经近两年，组内成员超过了4,000人，两年里我也从中收益颇多，其中最大的收益有两个：一是和人讨论能够激发自己进一步的思考，也促使自己更清晰地表述自己的观点或问题。倒不是说别人就一定告诉你什么新东西，而是讨论对你自己的思维的刺激。二是交流中认识了不少朋友，后来快毕业的时候也受帮助颇多。我一直把TopLanguage的创建看作研究生阶段做得最有意义的事情之一。</p>
<p>此外，我有意识地提前准备了英语，因为我相信如果想要去好的外企，口语不过关很可能成为一块短板（当然，英语作为承载最多技术知识的平台语言还有更大的价值），包括阅读、书写和口语。我想了一个方案，可以不用额外花时间来学习英语：阅读的训练蕴含在平时的英文技术资料的阅读中，尽量读英文的，一来英文资料更一手和全面，二来也顺便练阅读。书写的训练蕴含在去国外邮件列表发技术贴和自己写的英文博客文章中。口语的训练则蕴含在平时的娱乐中——美剧，有一个暑假我几乎天天开着Friends睡觉，另外学校有国外过来的团队演讲我不再错过，而是主动参加，有一次还带他们出去逛南京，说了一天英语，回头在路上听中文都像英文。虽然和外国友人交流的次数不多，但似乎对口语感觉的提高还挺大。后来在微软亚洲研究院的面试最后一轮就是英语的，而且是偏技术的，好在提前准备了，所以毕竟还是顺利地表达出了想表达的意思。</p>
<p>去微软亚洲研究院面试，是因为幸运地认识了微软亚洲研究院技术创新组项目主管邹欣先生。邹欣先生和他组织的团队在那段时间写了《编程之美》，书中有很多很有意思的题目，而我那段时间恰和陈怀兴讨论算法，在讨论组上也组织了专题的讨论，有了一点粗浅的思考，于是和邹欣先生邮件交流，由于对邹欣先生的技术创新组做的事情很有兴趣，所以找工作的时候便向他毛遂自荐。</p>
<p>承蒙邹欣先生推荐，时隔三年，我再次获得了去微软面试的机会。这一次，由于研究生期间作了一些长远准备，所以心里有底了很多，也就比较冷静了，由于当年知识体系的漏洞被我花功夫补了补，所以面试比较顺利。面试的时候邹欣先生更为详细地介绍了技术创新组的工作，我更加感兴趣了，所以尽管已经有另外几个也不错的选择，但心里还是迅速地做了决定。大约一周后，HR通知Offer，我毫不犹豫就接受了。</p>
<p>我想，虽然有很多人本科就明白自己想做什么，我多花了两年多，总还不算太晚。</p>
<p>&#8211;</p>
<p>前些天<a href="https://groups.google.com/group/pongba/browse_frm/thread/e66bd172df7828b0">贴在讨论组上的</a>。</p>
<h3  class="related_post_title">你可能也会喜欢以下文章</h3><ul class="related_post"><li><a href="http://mindhacks.cn/2010/11/14/the-importance-of-knowing-why-part2/" title="知其所以然（续）">知其所以然（续）</a> (42)</li><li><a href="http://mindhacks.cn/2009/12/20/dark-time/" title="暗时间">暗时间</a> (143)</li><li><a href="http://mindhacks.cn/2009/10/05/im-a-tiny-bird-book-review/" title="不是书评 ：《我是一只IT小小鸟》">不是书评 ：《我是一只IT小小鸟》</a> (57)</li><li><a href="http://mindhacks.cn/2009/07/06/why-you-should-do-it-yourself/" title="[BetterExplained]遇到问题为什么应该自己动手">[BetterExplained]遇到问题为什么应该自己动手</a> (62)</li><li><a href="http://mindhacks.cn/2009/03/28/effective-learning-and-memorization/" title="[BetterExplained]如何有效地记忆与学习">[BetterExplained]如何有效地记忆与学习</a> (104)</li><li><a href="http://mindhacks.cn/2009/02/15/why-you-should-start-blogging-now/" title="[BetterExplained]为什么你应该（从现在开始就）写博客">[BetterExplained]为什么你应该（从现在开始就）写博客</a> (206)</li><li><a href="http://mindhacks.cn/2009/02/09/writing-is-better-thinking/" title="[BetterExplained]书写是为了更好的思考">[BetterExplained]书写是为了更好的思考</a> (96)</li><li><a href="http://mindhacks.cn/2009/01/14/make-yourself-irreplacable/" title="什么才是你的不可替代性和核心竞争力">什么才是你的不可替代性和核心竞争力</a> (25)</li><li><a href="http://mindhacks.cn/2008/12/05/learning-habits-part4/" title="一直以来伴随我的一些学习习惯(四)：知识结构">一直以来伴随我的一些学习习惯(四)：知识结构</a> (13)</li><li><a href="http://mindhacks.cn/2008/10/29/methodology-for-programmers/" title="方法论、方法论&mdash;&mdash;程序员的阿喀琉斯之踵">方法论、方法论&mdash;&mdash;程序员的阿喀琉斯之踵</a> (19)</li></ul><hr />
<h3>订阅 Mind Hacks</h3>
<a title="用Google Reader订阅" href="http://fusion.google.com/add?feedurl=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_google.gif" style="border:0" alt="订阅到 | Google" /></a> 
<a title="用鲜果订阅" href="http://www.xianguo.com/subscribe.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_xianguo.gif" style="border:0" alt="订阅到 | 鲜果" /></a>
<br/> 
<a title="用抓虾订阅" href="http://www.zhuaxia.com/add_channel.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_zhuaxia.gif" style="border:0" alt="订阅到 | 抓虾" /></a> 
<a title="用有道订阅" href="http://reader.youdao.com/b.do?keyfrom=mindhacks&url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_yodao1.gif" style="border:0" alt="订阅到 | 有道" /></a> 
<hr />
<h3>我是你的信息过滤器</h3>
想了解作者最近在关注什么，欢迎 Follow <a href="http://weibo.com/pongba">刘未鹏pongba@微博</a>
<br/>
程序员朋友请到作者发起的 <a href="https://groups.google.com/group/pongba">TopLanguage</a> (<a href="http://mindhacks.cn/about-toplanguage/">about</a>) 社群逛逛，定有收获 :)
<br/>
想了解作者在阅读哪些书，请到 <a href="http://www.douban.com/people/pongba/">pongba@豆瓣</a>，或者直接访问以下四个豆列：<a href="http://www.douban.com/doulist/46003/">[只读经典]思维改变生活</a> | <a href="http://www.douban.com/doulist/127649/">[只读经典]思考的技术与艺术</a> | <a href="http://www.douban.com/doulist/197706/">决策与判断</a> | <a href="http://www.douban.com/doulist/176513/">机器学习与人工智能书籍资源导引</a> 。
<hr />
<p><small>
本文由 刘未鹏 发布在 <a href="http://mindhacks.cn">刘未鹏 | Mind Hacks</a>, 2009. | <a href="http://mindhacks.cn/2009/05/17/seven-years-in-nju/#commenting">149 条评论</a> | 标签: <a href="http://mindhacks.cn/tags/%e5%ad%a6%e4%b9%a0%e6%96%b9%e6%b3%95/" rel="tag">学习方法</a>
<br/>
转载请注明作者，出处，以及<a href="http://mindhacks.cn/2009/05/17/seven-years-in-nju/">原始超链接</a>: http://mindhacks.cn/2009/05/17/seven-years-in-nju/
</small></p>]]></content:encoded>
			<wfw:commentRss>http://mindhacks.cn/2009/05/17/seven-years-in-nju/feed/</wfw:commentRss>
		<slash:comments>149</slash:comments>
		</item>
		<item>
		<title>[BetterExplained]如何有效地记忆与学习</title>
		<link>http://mindhacks.cn/2009/03/28/effective-learning-and-memorization/</link>
		<comments>http://mindhacks.cn/2009/03/28/effective-learning-and-memorization/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 11:23:02 +0000</pubDate>
		<dc:creator>刘未鹏</dc:creator>
				<category><![CDATA[学习方法]]></category>
		<category><![CDATA[思维改变生活]]></category>

		<guid isPermaLink="false">http://mindhacks.cn/2009/03/28/effective-learning-and-memorization/</guid>
		<description><![CDATA[你所拥有的知识并不取决于你记得多少，而在于它们能否在恰当的时候被回忆起来。

让我稍微说得更详细一点：学习新知识并将其存放于大脑中，最终的目的是要在恰当的时候能够想得起来去使用。因此，学习的有效性显然应该这样来衡量：当遇到需要用到学过的知识的时候，相关的知识是否会自动从你脑海中“蹦”出来，最起码——能否通过有意识的搜索将它们提取出来。

这可不像它听上去那么简单，否则就不会有“掉书袋”、“读死书”这种修辞手法了。

为了更深入地说明这一点，以下是几个著名的关于学习与记忆机制的实验：

《找寻逝去的自我》上提到这样一个例子：

假设这样一个任务：给你一个单词（如brain），要你寻找它的押韵单词（如train）。一段时间之后问你记不记得当时给你的单词是什么了。你可能会不大记得了。现在，如果当时不是要你寻找押韵单词，而是要你联想该单词的含义或功能（如brain的功能），那么你事后回忆起来当时是什么单词的可能性就大大增加了。

对此一个靠谱的解释是：后一种记忆编码方式（称为精细编码）提供了更多的提取线索。所谓条条大路通罗马，任何一个线索被触发都可能顺藤摸瓜地拎出整条鱼记忆来。

一个非常类似的实验是这样进行的（忘了出处了，顺便请教知道的同学:)）：

给出同样一组单词，让一组被试数一数每个单词有多少个音节，让另一组被试阅读单词的含义（或者设想单词可以被使用在哪些场景中），之后让两组被试回忆列表上的单词，猜哪一组能够回忆出更多？

这是一个被广为认可的记忆机制，即：我们在记忆的时候将许多线索（例如当时的场景、问题的背景，甚至所处的语言环境、空间位置）一并编码进了记忆，事后能否提取出这段记忆严重取决于提取线索是否丰富、以及在回忆的时候是否重现了记忆时的线索。]]></description>
			<content:encoded><![CDATA[<p><strong>你所拥有的知识并不取决于你记得多少，而在于它们能否在恰当的时候被回忆起来。</strong></p>
<p>让我稍微说得更详细一点：学习新知识并将其存放于大脑中，<strong>最终的目的是要在恰当的时候能够想得起来去使用</strong>。因此，学习的有效性<strong>显然应该这样来衡量</strong>：当遇到需要用到学过的知识的时候，相关的知识<strong>是否会自动从你脑海中“蹦”出来</strong>，最起码——能否通过有意识的搜索将它们提取出来。</p>
<p>这可不像它听上去那么简单，否则就不会有“掉书袋”、“读死书”这种修辞手法了。</p>
<p>为了更深入地说明这一点，以下是几个著名的关于学习与记忆机制的实验：</p>
<p>《找寻逝去的自我》上提到这样一个例子：</p>
<blockquote><p>假设这样一个任务：给你一个单词（如brain），要你寻找它的押韵单词（如train）。一段时间之后问你记不记得当时给你的单词是什么了。你可能会不大记得了。现在，如果当时不是要你寻找押韵单词，而是要你联想该单词的含义或功能（如brain的功能），那么你事后回忆起来当时是什么单词的可能性就大大增加了。</p>
</blockquote>
<p>对此一个靠谱的解释是：<strong>后一种记忆编码方式（称为精细编码）提供了更多的提取线索</strong>。所谓条条大路通罗马，<strong>任何一个线索被触发都可能顺藤摸瓜地拎出整条<strike>鱼</strike>记忆来</strong>。</p>
<p>一个非常类似的实验是这样进行的（只记了实验，忘了出处了，顺便请教知道的同学:) <strong>Update</strong>：感谢 <a href="http://mindhacks.cn/2009/03/28/effective-learning-and-memorization/comment-page-1/#comment-311">Leeve 指教</a>，这是 Craik&amp;Tulving 于 1975 年做的一个关于记忆的浅层深层加工的经典实验，参考<a href="http://www.psychologistworld.com/memory/levels_processing.php">这里</a>，论文原文可参考<a href="http://scholar.google.com/scholar?q=Depth+of+processing+and+the+retention+of+words+in+episodic+memory">这里</a>）：</p>
<blockquote><p>给出同样一组单词，让一组被试数一数每个单词有多少个音节，让另一组被试阅读单词的含义（或者设想单词可以被使用在哪些场景中），之后让两组被试回忆列表上的单词，猜哪一组能够回忆出更多？</p>
</blockquote>
<p>这是一个被广为认可的记忆机制，即：<strong>我们在记忆的时候将许多线索（例如当时的场景、问题的背景，甚至所处的语言环境、空间位置）一并编码进了记忆，事后能否提取出这段记忆严重取决于提取线索是否丰富、以及在回忆的时候是否重现了记忆时的线索。</strong></p>
<p>原则上，在上面提到的两个实验中，两组被试都接触到了同样的单词，都记忆了同样的知识，但取决于在记忆的时候将哪些线索，多少线索和该记忆进行了挂钩，就决定了事后回忆（提取）该记忆的成功与否。</p>
<p>联系我们日常的经验，不难注意到，死板的记忆方式和我们常说的“理解记忆”正对应了不同的编码方式。书呆子记忆就是死记硬背，到最后如果你问他某书某章节讲了什么内容他能倒背如流，问他哪个例题怎么解也能倒背如流，但遇到具体的问题或问题的变种就傻眼了，因为他记忆的时候根本没有深入理解知识，在他眼中的解题过程其实和电话号码簿也没啥区别，也许他唯一编码了的提取线索就是这个答案来自哪一章、哪一节或者哪一个问题。</p>
<p>然而<strong>对于理解记忆的人来说，知识中包含了精细的概念、逻辑、一般的解题原则、通用的解题手法、背景知识、类似的问题等等无数的记忆和提取线索</strong>，而不是某段孤立的、任意的文本序列。（当然，众所周知理解记忆的另一个重要特点则是记住一般性原理之后，其他细节即便遗忘了也可以自然推导出来，从而无需费力去记忆。有一个广为流传的《数学牛人们的轶事》（荣耀属于ukim）里面讲了希尔伯特的一个故事：一次在Hilbert的讨论班上，一个年轻人报告，其中用了一个很漂亮的定理，Hilbert说“这真是一个妙不可言（wunderbaschon）的定理呀,是谁发现的？”那个年轻人茫然的站了很久，对 Hilbert说：“是你.……”。）</p>
<p><strong>缺乏线索的记忆就像记忆海洋中的孤岛，虽然在那里，但是难以访问。而富含线索的记忆则是罗马，条条大路通罗马。</strong></p>
<p>古希腊（或者古罗马）有一种著名的记忆法就是利用空间位置线索来辅助记忆，我曾经用过类似的手法，在小规模临时记忆任务中似乎相当好用，具体是这样的：我有一个习惯，经常跑到实体书店看看有没有新书，浏览之后觉得不错的再考虑从网店购买。有时候我会一下看到好几本书，手头又没有带纸笔，怎么有效地记住几本书的书名呢？我发现要记4本书以上就比较困难了（具体数目可能因人而异），至少回头要想好久才可能想全。但我发现通过回忆当时手拿这本书翻看时所站的位置、面朝的方向等信息能够有效地帮助将记忆“拉出来”。</p>
<p>事实上，不仅是位置，有研究表明<strong>就连当时的环境、味道、声音都被作为提取线索和记忆编码在一块了</strong>。例如，考试环境和学习环境不一致可能会影响发挥（记忆的提取）。</p>
<p>科学松鼠会上有一篇科普<a href="http://songshuhui.net/archives/7025.html">《气味与记忆——非一般的亲密》</a>中提到：</p>
<blockquote><p>我们的回忆很多都是和气味连接在一起的。当闻到某一种味道时会突然想起以前的一些事情，比如端起一杯香热的巧克力饮料，想起了最初品尝巧克力的情景，将一块黑褐色的糖放入嘴中，浓浓的滑滑的，有一些甜蜜和温馨；再比如，夏天在暴雨来临之前，浓郁的泥土和小草味道，会不会让你回忆起小时候因为没有拿伞被大雨淋透的感觉，甚至串联起回家挨揍的记忆，屁股上还有点火辣辣的痛。而当我们想起过年，鼻腔里是不是也会有厚厚的爆竹烟火味道，仿佛立马置身于热闹的大年夜。尤其是在社交活动中，我们经常会因为某一种味道想起一个熟悉的人，甚至是几十年没见的老朋友。</p>
</blockquote>
<p>的确如此，我有时候会在看小说的时候放上一段背景音乐，之后每当听到这段音乐就想到当时看到的那段情节。</p>
<p>我们<strong>甚至会把语言背景作为线索编码进记忆</strong>。一项有趣的研究使用双语询问有多个答案的问题，例如：</p>
<blockquote><p>“说出一个举起一只手并遥望远方的雕像”(“name a statue of someone standing with a raised arm while looking into the distance”)，或者“在一个著名的悲剧爱情故事中，双方因为家庭不同意最终双双殉情，故事的主角是..？”(“In a famous love story, what were the names of two lovers who died because of family disapproval?”)，被询问的人皆是熟练的双语使用者。</p>
</blockquote>
<p>结果显示提问所用的语言能够影响答案，例如第一个答案可能是“毛泽东雕像”或者“自由女神像”，第二个的答案则可能是“梁山伯和祝英台”或者“罗密欧与朱丽叶”。用英语询问能够导致被试更可能给出英文环境中的答案，中文同理——当然，是相对于基线而言，而非绝对，具体可参考这篇(<a href="http://www.communication.northwestern.edu/departments/csd/research/bilingualism_psycholinguistics/docs/context.pdf">PDF Paper</a>)</p>
<p>另一方面，在回忆的时候如果不能呈现当初记忆的时候某些关键线索，就可能导致所谓的<a href="http://en.wikipedia.org/wiki/Cue-dependent_forgetting">线索依赖性遗忘</a>( cue-dependent forgetting )，在<strong>线索依赖性遗忘</strong>中，你的大脑中并非没有存放目标记忆，只是线索不对，无法提取出来而已。</p>
<p>对此有<strong>一个生动的比方</strong>是：你要到图书馆去找书，如果你不知道索引号、作者名、书名等信息，你是无法找到你要的那本书的，尽管书就大摇大摆地站在图书馆里的某排书架上（注：严格来说你是可以找到的——一本一本翻看，看到那本书你自然会注意到是你想要的，不过很可惜对于我们的记忆系统来说似乎并没有这么一个方便的线性遍历机制——如果我问你，“对于数学你都记得哪些东西？”你能有次序地一个不漏地告诉我吗？）。</p>
<p>我有记笔记的习惯，我的电子笔记本里面有大量的文本片段，我按照主题组织他们，方便检索。然而总有那么一些时候，我记得有某段材料，记得它的主题和大致说什么，但是缺乏某个关键字，结果就是遍寻不着，往往只能到处翻，同时提醒自己下次在上面多加几个<strong>自己熟悉的</strong>关键字，比如<strong>用自己的话</strong>来概括一下主旨，<strong>因为</strong>自己的习惯用词和作者的习惯用词往往不一样，在阅读作者的文字的时候，你也许下意识里会用自己的习惯词汇来重新表述这段文本，并存放在记忆中，结果一段时间之后当要寻找的时候大脑中只记得自己的说法，却不记得作者原话了，然而为了检索到原始文本你必须要知道作者是用什么词汇来表述的。为了弥补这个问题，可以在存放文本的时候加上自己的一段概述，这似乎是一个不错的方案——我们平时在学习和记忆的时候也经常听到类似的提倡：用自己的话复述一遍之后理解得更深刻（实际上是更容易记住和提取出来——知识还是那些知识；此外用自己的话复述也常常触发与自己的知识体系中其他知识的联系，进而编码进更多的记忆提取线索，这也是另一个好处（<a href="http://mindhacks.cn/2009/02/09/writing-is-better-thinking/">《书写是为了更好的思考》</a>））。</p>
<p><strong>另一个经典实验</strong>则是关于抽象在知识的学习和提取中的作用的：</p>
<blockquote><p>（其实这个实验我已经在博客里用过两次了）先让被试（皆为大学生）阅读一段军事材料，这个材料是说一小撮军队如何通过同时从几个不同方向小规模攻击来击溃一个防守严实的军事堡垒的。事实上这个例子的本质是对一个点的同时的弱攻击能够集聚成强大的力量。然后被试被要求解决一个问题：一个医生想要用X射线杀死一个恶性肿瘤，这个肿瘤只可以通过高强度的X射线杀死，然而那样的话就会伤及周围的良好组织。医生应该怎么办呢？在没有给出先前的军队的例子的被试中只有10%想到答案，这是控制基线。然后，在先前学习了军队例子的被试中，这个比例也仅仅只增加到30%，也就是说只有额外20%的人“自动”地将知识进行了转移（自己就能触类旁通）。最后一组是在提醒之下做的，达到了75%，即比“自动”转移组增加了45%之多（需要别人提醒）。</p>
</blockquote>
<p>这个实验说明，知识的表象细节会迷惑我们的眼睛，阻碍我们对知识的转移运用（推广），在这个例子中，两个问题领域表面上是不相似的，但本质上是一样的。然而就是因为表面上不相似，而我们的记忆提取又是很大程度上依赖于一些表象上的线索来提取的，因此这些表面不相似性便阻碍了我们在问题之间进行的类比，阻碍了我们将在一个情境下掌握的道理运用到另一个情境下。 </p>
<p>这就意味着，我们<strong>在从既有经验中总结知识的时候，应利用适当的抽象来得出适用范围更广的知识</strong>（而不仅仅是一个萝卜一个坑）；另一方面，<strong>在遇到新问题的时候，同样应该对问题进行抽象，触及其本质，去除不相干因素避免干扰，从而有效提取之前抽象出来的知识</strong>。</p>
<p>通俗的来说，这就是举一反三，触类旁通的解释。</p>
<p>前文说的是记忆的机制、为何记忆的质量有高低、什么样的记忆和学习是更有效的。下文是一些具体的实践方法，关于<strong>如何更有效地从日常经验中总结知识，以及如何能够真正学以致用——使知识能够在你需要它们的时候自动从大脑中“蹦”出来，而不是搜肠刮肚半天还是没有头绪。</strong></p>
<p>1) 养成习惯，<strong>经常主动回顾</strong>一段时间学到的东西（老生长谈了）：这不仅有利于巩固长时记忆，而且一段时间之后的回顾你可能已经因为新的知识学习从而对原先的认识有了进一步的看法，通过回顾，可以整合新旧知识，得到新的启发。</p>
<p>2) <strong>创造回忆的机会</strong>：<strong>我知道第一条不顶用</strong>，没有人（好吧，很少有人）能够真正坚持执行。所以有了第二条——创造回忆既有知识的机会。具体来说就是通过：     <br />&#160;&#160;&#160; 2.1) <strong>经常与别人讨论，或者讲给别人听</strong>。经常和朋友讨论交流，说说一段时间总结的东西，这样别人也学到新东西，你也从别人那里学到新东西，并且彼此在表达的过程中都强化了自己的记忆和理解，双赢的事情。除了面对面的交流之外，一个好的邮件列表和BBS也是不错的途径。（详细解释可以参考<a href="http://mindhacks.cn/2009/02/15/why-you-should-start-blogging-now/">《为什么你应该（从现在开始就）写博客》</a>第三节：”教是最好的学“）     <br />&#160;&#160;&#160; 2.2) <strong>整理笔记</strong>：经常整理你的笔记——如果你没有做笔记，现在就开始——整理之前的笔记一来巩固已经淡化的记忆，二来给你重新审视知识的机会。我常常发现对知识的首次记忆往往是有偏颇的，或者只看到了一个方面，或者只关注了一个点，一段时间之后再回来看往往能够和这段时间以来的一些新思考和知识结合起来，得到更多的东西。留心一下你会发现记忆实际上是很脆弱的东西，而且我们对事物的首次理解几乎肯定是不深入的。Tip：我知道你懒（我也是），所以为了更好地创造整理笔记的机会，你可以使用一个不整理就难以检索的电子笔记软件，这虽然乍看上去是麻烦了一点，但他迫使你对知识隔一段时间就进行重读，并分类——你的记忆同样如此：良好分类的信息更容易提取。     <br />&#160;&#160;&#160; 2.3) <strong>书写</strong>：将一段时间学习的知识按照一个主题系统地“串”起来大大地丰富了知识之间的关联，<strong>平添无数提取线索</strong>。我经常做这个事情，这个博客上的文章几乎都是此类文章，例如我始终关注一个主题：<strong>学习思维相关的科学（认知科学、心理学、行为经济学等等）如何能帮助我们进行更好的判断、决策、学习、记忆和生活</strong>，我将这个大的主题分为一些小的主题，例如“<a href="http://mindhacks.cn/2009/03/15/preconception-explained/">逃出你的肖申克</a>”主要是总结思维中的盲点，以及如何避免这些盲点从而成为更好的独立思考者，作出更好的判断与决策。“BetterExplained”系列则是按照小主题总结一些思维相关的知识，目的仍然是如何成为更好的独立思考者，对事物进行更理性的判断；这些小主题都归结在“<a href="http://mindhacks.cn/topics/mind/">思维改变生活</a>”这个大的主题之下。（关于书写的好处，详细解释可参考<a href="http://mindhacks.cn/2009/02/09/writing-is-better-thinking/">《书写是更好的思考》</a>）</p>
<p>3) <strong>设身处地地“虚拟经历”别人经历过的事情</strong>：我们的自传式记忆似乎是有某种单独存储机制的，一个证据是一些因基因上其他缺陷而导致所谓“天才综合症”的家伙具有超强的自传式记忆（注意，不是超强的一般记忆，而是自传式记忆）。另外我们在日常经验中也知道，我们的记忆中关于哪些是自己的性格或做事方式，哪些是我们所了解的朋友的性格或做事方式，我们可是分得清清楚楚的。我们可以在不同场景中非常快速地揣测“某某在这种情况下会怎么想”（这被称为 <a href="http://en.wikipedia.org/wiki/Theory_of_mind">theory of mind</a> ），却不会将其与“我自己会怎么想”混淆起来，证明在我们的记忆中，关于自己的知识和关于别人的知识是泾渭分明的。</p>
<p>对于经验知识的学习来说，光是看着别人做或者听着别人说还不够，<strong>往往到了自己就想不起来</strong>，结果就是你<strong>虽然学到了知识，它却不会在恰当的时候从你大脑中蹦出来</strong>，属于“死”的知识。为什么会这样，可能的原因是很多的，其中一个关键的原因也许是“别人的事情”和“自己的事情”在大脑中的加工方式是不一样的，别人撞墙你也许不仅不疼还会幸灾乐祸，自己擦破皮就龇牙咧嘴了；别人的糟糕事情似乎永远不会发生到自己身上。所以我们总是难以从别人的经验中获得自己的教训。一个弥补的办法在于<strong>努力设想自己处于别人的境地</strong>，经历别人所经历的事情，感受它们，<strong>使它们和你的情绪记忆挂钩</strong>（进化赋予我们的情绪是提取的绝佳线索，也是强化记忆的最佳催化剂），虽然仍然不够亲身经历那么深刻，但似乎已经是我们能做到的最好的办法了。由于我们真切地设想了自己处于这些场景中，<strong>在我们设想的场景中我们是第一人称视角</strong>，所以当以后遇到类似场景的时候就更容易回忆起当时的感受。</p>
<p>当然，另一个经常被号召的方法就是实践，比起刚才提到的“虚拟实践”而言，实际实践的印象自然要深刻得多。不过并不是所有的时候实际实践都是必须或者可能的。例如你并不需要自己去倾家荡产一次才能领会到什么是金融市场中正确的风险控制——你甚至只需要在纸上演算一番就有数了。<a href="http://neurophilosophy.wordpress.com/2007/01/25/fish-use-simple-logic-to-infer-their-social-status/">有证据表明非洲的一种鱼甚至都能使用简单的推理来替代实际经历</a>，例如，如果它和鱼B有过一次冲突并失败了，如果它观察到鱼B和鱼C有一次冲突，鱼B失败了，它就能直接意识到它自己不是鱼C的对手，从而避免所谓“直接去经历一下”而可能导致的灾难性后果（这里的进化价值是显而易见的）。</p>
<p>此外，很多时候你也无法真正遍历每条人生路径看看会发生什么，你没有这样的时间资源，取而代之的是你只能通过别人的“替代经验”，自己的“虚拟经历”，来获得尽量多的信息。</p>
<p>4) <strong>抽象和推广</strong>：如果一件事情就是一件事情，那么我们永远也无法学习到“未来”的知识，结果就是每堵墙都要去自己撞一遍试试硬度。人类大脑最杰出的能力之一就是强大的归纳推理（inductive reasoning），或者我们常说的：泛化、推广、举一反三、抽象。意思都差不多，都是将特例中得到的规律推广到一般情况。前面关于激光杀死肿瘤的那个实验充分说明了抽象的价值所在，不加抽象的话，知识总是会和无关紧要（irrelevant）的细节挂钩，被约束在狭窄的一个特定场景中，无法传播，抽象使其在知识树（for non-geeks：设想一颗倒长的树，根在上）上上升一个或多个层次，从而能够被运用到更多的分枝上。同样，在遇到具体问题的时候也别忘了将问题也抽象一下，剔除不相关细节，使问题也从一个特定的分枝往上抽象，从而碰到之前泛化过的结论。</p>
<p>以上这段介绍本身就有点抽象，不妨<strong>举一个例子</strong>：我们从大量的经济决策中得到一条适用范围很广的规律——经济决策可以抽象为对投入/回报比例的考量。这是知识获取阶段的抽象；而在问题求解阶段，我们遇到决策问题就可以从投入/回报这个维度上来考量，而不是没头苍蝇一样这边看着想想也对，一忽儿又觉得那个选项看看也对。如果不懂得看到问题的本质（如：经济决策），便很难利用之前推广出来的结论（如：投入/回报，风险估计等等），而是会被我们的原始大脑的一些<a href="http://www.douban.com/subject/3223711/?i=0">可预期的非理性</a>所控制（例如从众、从权威、甚至最可怕的行为陷阱——“推迟决策”），成为<a href="http://www.douban.com/subject/1874488/?i=0">正常的傻瓜</a>。</p>
<p>5) <strong>联系/比较自身的经历</strong>：将别人的经历或者通过阅读和观察得来的经历和自身的经历进行比较，常常能够得到非常有价值的结论。“观察”和“比较”本身就是获得知识的一个重要途径，例如：我之前做过某件事情，但不知道什么原因失败了；有一天我看到或阅读到某个人做类似或同样的事情，他成功了。我通过比较两人的差别，可以比较靠谱地推测到底是什么导致了我们的成功概率的差异。</p>
<p>值得注意的是：1) 样本大小很关键：比较的个体样本越少越容易产生错误归因，最好多多观察，多多比较和总结。2) 警惕“沉默的证据”、事后偏见、自利归因：读他人的传记的时候，不管传记是本人写的还是传记作家通过访谈写的，都会有意无意地犯事后偏见，例如最常见的将成功归因为个人能力，忽略机遇因素。将偶然看作必然。</p>
<p>有一天我在书店看巴菲特的那本最近很火的自传《滚雪球》，开篇就提到巴菲特小时候第一次滚雪球的场景，“1939午的冬天，9岁的巴菲特在院子里玩雪。他把少量的积雪铲到一块，揉成一个雪球，然后把它放在地上慢慢滚动，雪球越滚越大.. 从此，巴菲特再也没有停下脚步，目光投向白雪皑皑的整个世界.. ” （虽然你可以说这只是一种修辞或衬托，但不可否认的是它背后隐藏的是一种无法抗拒的归因倾向）这种手法读来令人倍感深沉，仿佛冥冥之中有一条强大而确定的因果之线，穿越60年光阴，将人一生所有的事情穿在一起。令人肃然起敬。然而这并不是事实，从一个单个个体的观察角度来说，外界的不确定性因素实在太多了，机缘巧合的事情太多了。然而无论是作者本人还是“客观”作家都很难抵抗这种演绎手法的诱惑，可叹的是这已经是我们能够了解他人的经历，拥有“虚拟”的多重经历的唯一途径。</p>
<p>观察、阅读，并别忘带着你的理性去审视（包括本文），弄清娱乐是娱乐，知识是知识，<strong>如果你想真正得到一些知识，最好过滤一下你的信息。否则你只是在别人的思考中得意着</strong>。</p>
<h3  class="related_post_title">你可能也会喜欢以下文章</h3><ul class="related_post"><li><a href="http://mindhacks.cn/2009/02/15/why-you-should-start-blogging-now/" title="[BetterExplained]为什么你应该（从现在开始就）写博客">[BetterExplained]为什么你应该（从现在开始就）写博客</a> (206)</li><li><a href="http://mindhacks.cn/2009/02/09/writing-is-better-thinking/" title="[BetterExplained]书写是为了更好的思考">[BetterExplained]书写是为了更好的思考</a> (96)</li><li><a href="http://mindhacks.cn/2008/10/29/methodology-for-programmers/" title="方法论、方法论&mdash;&mdash;程序员的阿喀琉斯之踵">方法论、方法论&mdash;&mdash;程序员的阿喀琉斯之踵</a> (19)</li><li><a href="http://mindhacks.cn/2008/07/20/learning-habits-part2/" title="一直以来伴随我的一些学习习惯(二)：时间管理">一直以来伴随我的一些学习习惯(二)：时间管理</a> (11)</li><li><a href="http://mindhacks.cn/2008/07/08/learning-habits-part1/" title="一直以来伴随我的一些学习习惯(一)：学习与思考">一直以来伴随我的一些学习习惯(一)：学习与思考</a> (24)</li><li><a href="http://mindhacks.cn/2008/06/05/how-memory-works/" title="学习与记忆">学习与记忆</a> (8)</li><li><a href="http://mindhacks.cn/2007/05/24/learn-to-focus/" title="学习密度与专注力">学习密度与专注力</a> (35)</li><li><a href="http://mindhacks.cn/2011/01/23/escape-from-your-shawshank-4/" title="逃出你的肖申克（四）：理智与情感">逃出你的肖申克（四）：理智与情感</a> (127)</li><li><a href="http://mindhacks.cn/2010/11/14/the-importance-of-knowing-why-part2/" title="知其所以然（续）">知其所以然（续）</a> (42)</li><li><a href="http://mindhacks.cn/2010/03/18/escape-from-your-shawshank-part3/" title="逃出你的肖申克（三）：遇见20万年前的自己">逃出你的肖申克（三）：遇见20万年前的自己</a> (113)</li></ul><hr />
<h3>订阅 Mind Hacks</h3>
<a title="用Google Reader订阅" href="http://fusion.google.com/add?feedurl=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_google.gif" style="border:0" alt="订阅到 | Google" /></a> 
<a title="用鲜果订阅" href="http://www.xianguo.com/subscribe.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_xianguo.gif" style="border:0" alt="订阅到 | 鲜果" /></a>
<br/> 
<a title="用抓虾订阅" href="http://www.zhuaxia.com/add_channel.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_zhuaxia.gif" style="border:0" alt="订阅到 | 抓虾" /></a> 
<a title="用有道订阅" href="http://reader.youdao.com/b.do?keyfrom=mindhacks&url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_yodao1.gif" style="border:0" alt="订阅到 | 有道" /></a> 
<hr />
<h3>我是你的信息过滤器</h3>
想了解作者最近在关注什么，欢迎 Follow <a href="http://weibo.com/pongba">刘未鹏pongba@微博</a>
<br/>
程序员朋友请到作者发起的 <a href="https://groups.google.com/group/pongba">TopLanguage</a> (<a href="http://mindhacks.cn/about-toplanguage/">about</a>) 社群逛逛，定有收获 :)
<br/>
想了解作者在阅读哪些书，请到 <a href="http://www.douban.com/people/pongba/">pongba@豆瓣</a>，或者直接访问以下四个豆列：<a href="http://www.douban.com/doulist/46003/">[只读经典]思维改变生活</a> | <a href="http://www.douban.com/doulist/127649/">[只读经典]思考的技术与艺术</a> | <a href="http://www.douban.com/doulist/197706/">决策与判断</a> | <a href="http://www.douban.com/doulist/176513/">机器学习与人工智能书籍资源导引</a> 。
<hr />
<p><small>
本文由 刘未鹏 发布在 <a href="http://mindhacks.cn">刘未鹏 | Mind Hacks</a>, 2009. | <a href="http://mindhacks.cn/2009/03/28/effective-learning-and-memorization/#commenting">104 条评论</a> | 标签: <a href="http://mindhacks.cn/tags/%e5%ad%a6%e4%b9%a0%e6%96%b9%e6%b3%95/" rel="tag">学习方法</a>, <a href="http://mindhacks.cn/tags/%e6%80%9d%e7%bb%b4%e6%94%b9%e5%8f%98%e7%94%9f%e6%b4%bb/" rel="tag">思维改变生活</a>
<br/>
转载请注明作者，出处，以及<a href="http://mindhacks.cn/2009/03/28/effective-learning-and-memorization/">原始超链接</a>: http://mindhacks.cn/2009/03/28/effective-learning-and-memorization/
</small></p>]]></content:encoded>
			<wfw:commentRss>http://mindhacks.cn/2009/03/28/effective-learning-and-memorization/feed/</wfw:commentRss>
		<slash:comments>104</slash:comments>
		</item>
	</channel>
</rss>

