编程的首要原则是什么?

Posted on

编程的首要原则是什么?

半年前,JoelOnSoftware和CodingHorror合搞的stackoverflow.com刚上线不久,我兴冲冲地跑过去扔了一个问题:

你们认为编程的首要原则是什么?

作为我的学习原则的一个实践:

  1. 学习一项知识,必须问自己三个重要问题:1. 它的本质是什么。2. 它的第一原则是什么。3. 它的知识结构是怎样的。

5个月过去了,这个问题到现在还有人回复,我得到了一大堆有意思的答案,忍不住翻译过来与大家分享:

  1. 获得最多认同的答案KISS – Keep It Simple Stupid

DRY – Don’t Repeat Yourself

一点不感到意外吧?

注:DRY原则倒是比较好理解和实践的。但KISS原则则是看上去直白,其实实践起来不那么容易的一个原则,因为simple和stupid的定义并不是每个人、在每个场景下都是一致且明显的,一个人的simple可能是另一个人的stupid,一个人的stupid可能是另一个人的unnecessary。一旦一个标准取决于具体场景,事情就不那么简单了。所以我们经常要说“It depends”。

知其所以然(以算法学习为例)

Posted on

知其所以然(以算法学习为例)

其实下文的绝大部分内容对所有学习都是同理的。只不过最近在正儿巴经地学算法,而后者又不是好啃的骨头,所以平时思考总结得就自然要比学其它东西要多一些。

问题:目前几乎所有的算法书的讲解方式都是欧几里德式的、瀑布式的、自上而下的、每一个推导步骤都是精准制导直接面向目标的。由因到果,定义、引理、定理、证明一样不少,井井有条一丝不乱毫无赘肉。而实际上,这完全把人类大脑创造发明的步骤给反过来了。看起来是阳关大道,实际上车马不通。

而对读者来说,这就等于直接告诉你答案&做法了,然后让你去验证这个答案&做法是可行&成立的。而关于答案&做法到底是怎么来的,从问题到答案之间经历了怎样的思维过程。却鲜有书能够很好的阐释。就我有限的阅(算法)书经验,除了波利亚的《怎样解题》还算合格之外(也并非最理想),其它的(包括有名的《算法导论》、《如何解题:现代启发式方法》、《Algorithms》、《编程珠玑》,甚至TAOCP——公平地说由于高老大对算法领域历史了解得非常通透,所以许多地方能够从原始脉络来讲述一个问题,譬如令人印象深刻的从竞赛树到堆的讲解就寥寥一页纸道出了堆这个数据结构的本质来,而像刚才列的几本有名的书却都没有做到),在思维的讲述上都算不上合格(当然不是说这些书没有价值,作为知识性的参考书籍,它们将知识整理出系统结构,极大的便利了知识的掌握,就像《什么是数学》所做的工作一样),为什么我这么说呢,因为我发现每每需要寻找对一个算法的解释的时候,翻开这些书,总是直接就看到关于算法逻辑的描述,却看不到整个算法的诞生过程背后的思想。

我们要的不是相对论,而是诞生相对论的那个大脑。我们要的不是金蛋,而是下金蛋的那只鸡。

Update(2008-7-24):* 收到不少同学的批评,想来这个开头对一些著作的语气过重了,实际上,注意,*我完全不否认这些著作的价值,我自己也在通过阅读它们来学习算法,并且有很多收获。这篇文章更多的只是建议除了阅读这些著作之外还需要做的功课。此外,对于这类知识讲述(欧几里德)方式的批判西方(尤其是在数学领域)早就有了,早在欧拉和庞加莱的时候,他们俩就极其强调思维的传授,欧拉认为如果不能传授思维,那数学教学是没意义的。而庞加莱本人则更是对数学思维有极大的兴趣和研究(我前阵子在讨论组上还转载了一篇庞加莱的著名演讲,就是说这个的,参见[这里*](http://groups.google.com/group/pongba/browse_frm/thread/3dfc84e0506486cc))。我只是在说目前的算法书没有做到思维讲述的层面,因此建议阅读这些书之余应该寻找算法的原始出处,应该寻根究底,多做一些功课,知道算法到底是怎么诞生的,并且我说明了为什么应该知其所以然,有哪些好处(见下文),我还给了几个例子譬如红黑树作者讲红黑树的,g9讲后缀树的,以及Knuth讲heap的。唉,其实挺正统的观点,授人以渔,不管是东方西方都有类似的古老谚语。而我只是从认知科学的角度加了点解释,windstorm称之为“解释文”。而已。可惜被开头的语气搞砸了,算了,既发了也就不改了。*

为什么会这样,其实是有原因的。

我们在思考一个问题的过程中有两种思维形式:

  • 联想:这种思维某种程度上可以说是“混乱”的(虽然从一个更根本的层面上说是有规则的),所谓混乱是指很多时候并不确定联想到的做法最终是否可行,这些联想也许只是基于题目中的某个词语、语法结构、问题的某个切片、一些零星局部的信息。这个过程是试探性的。最后也许有很大一部分被证明是不可行的。很多时候我们解决问题用的都是这种思维,简言之就是首先枚举你关于这个问题能够想到的所有你学过的知识,然后一一往上套看看能否解决手头的问题。这种思维方式受限于人脑联想能力本身的局限性。我在《跟波利亚学解题》中就提到了几个例子。联想本身需要记忆提取的线索,所以受到记忆提取线索的制约,如果线索不足,那怎么也联想不起来。而提取线索的建立又取决于当初保存记忆的时候的加工方法(《找寻逝去的自我》里面有阐述),同时,面对一个问题,你能够从中抽取出来的联想线索又取决于你对问题的认识层度/抽象深度,表浅的线索很可能是无关的,导致无效的联想&试错(《Psychology of Problem Solving》里面有阐述)。总之,联想这个过程充满了错误的可能。
  • 演绎**&**归纳:演绎&归纳是另一种思维形式。它们远比联想有根据。其中演绎是严格的,必然的。归纳也是有一定根据的。在面对一个问题的时候,我们有意无意的对问题中的各个条件进行着演绎;譬如福尔摩斯著名的“狗叫”推理——狗+生人=>吠叫 & 昨晚狗没有叫 => 那个人是熟人。就是一个典型的对问题的各个条件进行演绎的推理过程。还有就是通过对一些特殊形式的观察来进行归纳,试图总结问题中的规律。然而,不幸的是,面对复杂的问题,演绎&归纳也并不总是“直奔”问题的解决方案的。人的思维毕竟只能一下子看到有限的几步逻辑结论,一条逻辑演绎路径是否直奔答案,不走到最后往往是不知道的,只要答案还未出现,我们大脑中的逻辑演绎之树的末端就始终隐藏在黑暗之中。而当最终答案出现了之后,我们会发现,这棵演绎之树的很多分支实际上都并不通往答案。所以,虽然演绎&归纳是一种“必然”的推理,然而却并不“必然”引向问题的结论,它也是试错的,只不过比联想要更为靠谱一些。

既然认识到,人类解决问题的两大思维方式实际上都是有很大的试错成分的(好听一点叫“探索”),那么就不难意识到,对一个问题的思考过程实际上是相当错综复杂的,而且充满了无效分支——在思考的过程中我们也会不断的对分支进行评估,做适当的剪枝——因此当我们找到问题的解之后,一来思维的漫长繁杂的过程已经在大脑里面淡化得差不多了,只有那些引向最终结论的过程会被加“高亮”——我们在思考的过程中本就会不断的抛弃无效的思路,只留下最有希望的思路。简而言之就是最后证明没用或者早先我们就不抱希望的一些想法就被从工作记忆中扔掉了。二来,思考过程是我们的空气和水,而“鱼是最后一个感觉到水的,我们感觉不到思维法则本身的存在,我们只是不知不觉运用它。三来,由于我们的目标是问题的解,解才是我们为之兴奋和狂喜的东西,而不是求解的过程,过程只是过程,目的才是目的。这就像一个寻宝者,在漫长曲折的寻宝历程之后,在找到宝藏的时候,他会对宝藏感到狂喜(记得阿基米德的“找到了!”吗?)而迫不及待地要展示出来,而漫长的思考本身却成了注脚。我们是有目的的动物,目的达到了,其它的就相对不那么重要了。最后,对于传授知识的人,也许还有其四:感到介绍思维过程是不相干的,毕竟思维过程并不是算法问题的解,算法问题的解才是算法问题的解。然而不幸的是,忽视到达解的那个过程实际上却变成了舍本逐末。我们看到的是寥寥数行精妙绝伦的算法,然后仰天长叹自己想不出来啊想不出来。为什么想不出来,因为你不知道那短短数行算法背后经历的事怎样漫长的思考过程,如果问题求解是一部侦探小说,那么算法只是结局而已,而思考过程才是情节

既然如此,也就难怪古往今来算法牛人们算法牛,但却没有几个能真正在讲述的时候还原自己的思维过程的(那个“ 渔”字),手把手的教学生走一遍推理的思路,就可以让学生获得思维过程的训练。金出武雄在《像外行一样思考,像专家一样实践》中说写论文应该写得像侦探小说一样,我很赞同。欧几里德式的介绍,除了提供枯燥的知识之外,并没有提供帮助人获得知识的东西——思维(关于对数学书籍的欧几里德式写法的批评其实也是由来已久了,并且有人呼吁了好几种其它的教学方法)。从这方面,我们所尊敬的一些“圣经”级书籍在传道授业上还不如侦探小说,前者是罗列一大堆知识,后者则是阐述获得知识的过程——推理&联想。

然而,我们都是人,人类该有的思维形式,我们难道不是都有吗。既然如此,思维本身又有什么需要一遍遍教的呢?

并非如此。

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

  • 内隐化:思维法则其实也是知识(只不过它是元知识——是帮助我们获得新知识的知识);是内隐的记忆。我们在思考的过程中觉察不到思维法则的作用,它们却在幕后实实在在的左右着我们的思维轨迹。要将思维方法内隐化,需要不断练习,就像需要不断练习才能无意识状态下就能骑自行车一样。
  • 跨情境运用:思维法则也是知识记忆,是问题解决策略。既然是记忆,就受到提取线索的制约,这就是为什么当波利亚告诉你要“注意未知数”之后你还是不能真正在所有需要你“注意未知数”的地方都能提醒自己“注意未知数”。很多时候未知数是很隐蔽的,未知数并不会总是头顶一个大帽子上面写着“我是未知数”。所以很多时候缺乏对这个策略的“提醒”线索,这也是为什么你学会了在解决数学问题的时候“**注意未知数”却不一定能在解决现实生活中的问题中时刻都能“注意你的未知数”《你的灯亮着吗?》整本书的价值便在于此),因为解数学题和解决生活中问题的场景不一样,不同的环境线索,在你大脑中激发的记忆也不一样。就连问题求解中,不同的问题之间的细小差别也可能导致思维轨迹很大的不同,有时你的注意力会被一个无关线索激发的联想吸引开去,忘记如“注意你的未知数”这样的重要法则。而一本从思维角度来讲问题求解的书则可以一遍遍将你置于不同的问题场景下然后在该提醒你的时候提醒你,让你醒悟到“哦,原来*这个*时候也应该想到*这个*啊。**”,做多了这样的思维演习你就会逐渐从中领悟到某种共性,并将一些思维习惯得到强化,于是终于能够在需要运用某策略的时候能适时的想起来了。
  • 对问题解的更多**记忆提取线索:我们平时学习算法时几乎仅止于“理解”,别人把一个方案放在你面前,你去验证一下,心说“哦,不错,这个的确可以工作”。然后就没了。稍微简单一点的算法还好,复杂一点的对于记忆的负担是很大的,这就是为什么有时候我们看到一个绝妙的解法,这个解法看上去不知道从哪里来的,但经过我们的理解,却发现是对的,我们感叹,真巧妙,结果一些天之后,别人问起这个问题,我们说:“唉,那是个多么巧妙的算法啊,但是我只记得它巧妙,却不记得它到底是怎样的了。” 为什么?因为在不知其所以然的情况下,算法只是一堆离散的机械步骤,缺少背后的思想的支撑,这些步骤之间就没有一个本质层面上的关联(先知亚里士多德早就指出:学习即联接)。所以就跟背历史书也没多大区别。然而,知道了算法是怎样一步步被推导出来的,我们就一下拥有了大量的记忆提取线索:对算法发现过程中的任何一个关键步骤(尤其是本质)的回忆都可能使我们能够自己动手推导出剩余的内容譬如你知道堆(heap)是怎样由朴素的决策树演化而来的,它又是为了解决什么问题的,你即便忘记了具体的细节,也可以自己推导出来。譬如你知道KMP算法的本质在于消除回溯,至于如何消除回溯却并不是那么难以推导的,所以即便忘了也可以借助于大脑的逻辑演绎能力再现出来。譬如你知道Tarjan算法其实只是从后序遍历经过两个优化调整而来的(其中并査集的使用其实只是优化手段——为了能够迅速判断祖先节点是谁——而非算法本质——当然,算法设计的主要任务本来就是通过问题条件中蕴含的知识来“消除冗余计算”和“避免不必要计算”,所以你也可以说并査集的使用是关乎本质的,只不过,知道了为什么需要引入并査集,就会强烈地感觉到一切是顺理成章的了),那这个出了名的绕人的算法也就不那么难以理解和记忆了。譬如**你知道排序的本质,就能够对什么是最优排序,为什么它是最优排序有深刻的认识。四两拨千斤。

  • 包含了多得多的知识记一个算法,就只有一个算法。一个萝卜一个坑。就好比背99**乘法表只能解决乘法问题一样。而记背后的思想,却有助于解决一类问题。思想所处的抽象层面往往比到处都是实现细节的算法本身要低,越是低的抽象层次,越是本质,涵盖范围越是广泛。数学的发展本身就体现了这个过程,抽象代数就是非常好的例子。算法诞生过程中的思路往往包含了比实际算法更本质得多的知识**,实际算法乃至算法的某个特定语言的实现包含了太多表面的不相干知识,它们会阻碍对本质的理解。
  • 重在分析推理,而不是联想:学了一大通算法和数据结构之后的一个副作用就是,看到一个问题之后,脑袋里立即不管三七二十一冒出一堆可能相干的数据结构和算法来。联想是强大的思维捷径,在任何时候都会抢占大脑的工作记忆,由不得你控制——比如我问你“如何寻找区间的最大值”,首先进入你的意识的肯定就是学过的那个算法,甚至算法的实现细节都一一跳了出来,也许最先跳出来的还是算法实现中某个最容易弄错的边界细节,或是某个比较tricky的实现技巧!然而这些其实根本不反映一个算法的本质,结果想来想去总是停留在问题的表层。而另一方面,重在思维的传授则可以让人养成从问题本质入手,逐步分析推理的习惯,而不是直接生搬硬套。当然,完全不可否认,联想本身也是极其重要的思维方法,甚至可以说是人类思维最重要的**特征**。很多时候我们并不知道问题的本质是什么,就需要靠联想、类比来领路探索。只不过,养成优先从问题的本质入手进行考察的好习惯绝对是有更大的好处的。

那到底什么样的才算是授人以渔的呢?波利亚的《如何解题》绝对算是一本,他的《数学的发现》也值得一看。具体到算法书,那就不是光看text book就足够的了,为了深入理解一个算法的来龙去脉前因后果,从一个算法中领悟尽量深刻的东西,则需要做到三件事情:

  • 寻找该算法的原始出处:TAOCP作为一个资料库是绝对优秀的,基础的算法只要你能想到的,几乎都可以在上面找到原始出处。查到原始出处之后(譬如一篇paper),就可以去网上搜来看了。因为最初的作者往往对一个方案的诞生过程最为了解。比如经典数据结构中的红黑树是出了名的令人费解的结构之一,但它的作者Sedgewick一张PPT,给你讲得通通透透,比算法导论上的讲法强上数倍。
  • 原始的出处其实也未必就都推心置腹地和你讲得那么到位:前面说过,算法设计出来了之后人们几乎是不会去回顾整个的思维过程细节的,只把直指目标的那些东西写出来。结果就又是一篇欧几里德式的文章了。于是你就迷失在一大堆“定义”、“引理”、“定理”之中了。这种文章看上去整个写得井井有条,其实是把发明的过程整个给颠倒过来了,我一直就想,如果作者们能够将整个的思路过程写出来,哪怕文字多上十倍,我也绝对会比看那一堆定义定理要容易理解得多。话说回来,怎么办?可以再去网上找找,牛人讲得未必比经典教材上的差。那倘若实在找不出好的介绍呢,就只能自己揣摩了。揣摩的重要性,是怎么说都不为过的。揣摩的一些指导性的问题有:为什么要这样(为什么这是好的)?为什么不是那样(有其它做法吗?有更好的做法吗?)?这样做是最好的吗?(为什么?能证明吗?)这个做法跟其它的什么做法有本质联系吗?这个这个的区别是什么?问题的本质是什么这个做法的本质又是什么?到底本质上是什么东西导致了这个做法如此..?与这个问题类似的还有其它问题吗?(同样或类似的做法也适用吗?)等等。
  • 不仅学习别人的思路,整理自己的思路也是极其重要的:详见《跟波利亚学解题》的“4. 一个好习惯”和“7. 总结的意义”。

前一段时间我们讨论组上有不少例子,见这里,或这里。 来源: [http://mindhacks.cn/2008/07/07/the-importance-of-knowing-why/](http://mindhacks.cn/2008/07/07/the-importance-of-knowing-why/)

如何清晰地思考:近一年来业余阅读的关于思维方面的知识结构整理

Posted on

如何清晰地思考:近一年来业余阅读的关于思维方面的知识结构整理

By 刘未鹏(pongba) C++ 的罗浮宫(http://blog.csdn.net/pongba) TopLanguage(https://groups.google.com/group/pongba)

一年前一个偶然的机会我遇到了一本书——《影响力》,看完这本书之后对我们如何思维产生了极大的兴趣,于是在一年的时间里面密集地阅读了以下一些方面的经典著作:社会心理学、认知科学、神经科学、进化心理学、行为经济学、机器学习、人工智能、自然语言处理、问题求解、辩论法(Argumentation Theory)、Critical Thinking、判断与决策。以及大量的 Wikipedia 条目。

这一年来,对以上这些领域的阅读和思考给我带来了极大的价值,我相信他们也会给你带来巨大的收益。

关于为什么我认为我们都需要学习这方面的知识,我曾在博客中写到: 另外还有一些我认为是 essential knowledge 的例子:分析问题解决问题的思维方法(这个东西很难读一两本书就掌握,需要很长时间的锻炼和反思)、判断与决策的方法(生活中需要进行判断与决策的地方远远多于我们的想象),波普尔曾经说过:All Life is Problem-Solving。而判断与决策又是其中最常见的一类Problem Solving。尽管生活中面临重大决策的时候并不多,但另一方面我们时时刻刻都在进行最重大的决策:如:决定自己的日常时间到底投入到什么地方去。如:你能想象有人宁可天天花时间剪报纸上的优惠券,却对于房价的1%的优惠无动于衷吗?(《别做正常的傻瓜》、《Predictably Irrational》)如:你知道为什么当手头股票的股价不可抑止地滑向深渊时我们却一边揪着头发一边愣是不肯撤出吗?(是的,我们适应远古时代的心理机制根本不适应金融市场。)糟糕的判断与决策令我们的生活变得糟糕,这还不是最关键的,最关键的是我们从来不会去质疑自己的判断,而是总是能“找到”其他为自己辩护的理由(《错不在我(Mistakes were made, but not by me)》)又,现在是一个信息泛滥的时代,于是另一个问题也出现:如何在海洋中有效筛选好的信息,以及避免被不好的信息左右我们的大脑(Critical Thinking)关于以上提到的几点我在豆瓣上有一个专门的豆列(“学会思考”),希望有一天我能够积累出足够多的认识对这个主题展开一些详细介绍。

人类的大脑和思维是目前已知最为复杂的系统,对这个系统的研究不仅自身是一件极其迷人的事情,对于像我们这样的芸芸众生来说即便不去做研究,学习一些这方面的科普知识,对于学会正确地思考有极大的益处。

你的大脑是你唯一的工具,要正确利用这个工具,唯一的途径就是去了解它。与很多人的直觉相反,实际上我们的思维有着各种各样的缺陷和陷阱(keyword: cognitive bias),我们解决日常问题的思维方式也并不总是最优的(keyword: bounded rationality),这里摘抄一段我在豆列上的导言: 我们的思维有很多很多的弱点,我一向认为,正确的思维方式,是一切高效学习的基础。比如参见如下2个例子,错误的思维方式得到的结论有大得多的可能性是谬误。

  • 人总喜欢沿袭以往习得的经验,并通过类比来进行外推。我第一次在一个地铁终点站坐地铁的时候,看着从远方开来的地铁,我心生疑惑——“这车每节车厢都这么长,待会怎么调头呢(我心说没看到铁轨终点有一个大大的供调头的 U 形弯啊)?”,当车开始开的时候我终于意识到原来车是可以往两头方向开的。
  • 人喜欢从关联当中寻找因果,有一次我我老婆去银行取款,到了 ATM 室的自动门口,我开玩笑地拿着手头的饭卡去刷了一下,然后——门居然开了。我顿时来了劲,立即得出一个结论:这个刷卡装置不安全,至少不是能够专门识别银联的卡的。我甚至飞快地泛化出了一个更具一般性的理论来解释这个现象:即可能所有带有磁性的卡都可以用来开门。老婆看我得意洋洋,就泼过来一盘冷水:不一定是你的卡刷开的啊,你不刷卡试试看。我不信,说怎么可能呢,心想我刷卡,门就开了,还有比这更明显的因果关系嘛。但出乎我意料的是,我走出门,这次没刷卡,门也开了——原来是感应门——原先这个 ATM 室的确是刷卡门,但后来改成了感应门,刷卡的那个装置只不过没拆掉残留在那里而已。

总的来说

  • 人类的思维充满着各种各样的捷径,每一条捷径都是一把双刃剑。一方面,它降低了大脑的认知复杂性(笼统的看一个问题要比细致的分析简单得多),有助于迅速做出绝大部分时候都正确的判断;但另一方面,它也常常导致人们把大部分情况下成立的法则当成了放之四海而皆准的。可以说,有多少捷径,就有多少条谬误。
  • 人类的情绪也在很大程度上影响着人的思考。比如,如果你憎恶一个人,你往往就会反对他的所有立场。反之亦成立。
  • 人类大脑经过长时间的进化,先天就具备一些特定的“思维定势”,以使得人类能够在面对进化过程中经常出现的适应性问题时能够不假思索的做出迅速的反应。然而,在现代社会,这类思维定势已经不适应了。
  • 人类不可避免的受着各种各样的偏见的影响,这些偏见有些是有一定适应价值的“思维定势”(如事后聪明式偏见),而有些则是大脑的认知机制的“缺陷”。

以上,构成了人类思维中的种种谬误。而学会思考,就是学会认识到这些谬误。

Critical-Thinking 在西方拥有悠久的历史,早到古希腊时代,亚里士多德就已经对人类语言中的各种各样的谬误有了一定的认识(譬如,“我们无法讨论不存在的东西,所以所有的事物都是真实的”),并对辩论之中存在的各种各样的谬误进行了归类。然而令人遗憾的是,在中国的文化里面,理性思维似乎是一直被抑制的,中国文人传统都是非理性思考者;所谓非理性思考,主要包括联想、比方等形式,这些思维方式作为人类天生具有的思维方式的一种,一方面当然有它的好处(比如在科研方面,联想往往能够启发新思路;类比也有助于用新颖的方式来解决既有问题),然而另一方面,这样的思维方式同样也充满了各种各样致命的谬误。在大众知识领域,自中国古代文人思维习惯流传下来的影响深刻地左右着人们的语言习惯,随处可见的不靠谱的类比和文字游戏就是证明(例如,严格来说,类比的一般形式是,A具有X、Y、Z三个属性,B具有X、Y属性(类似于A),所以B具有Z属性。这个类比要成立,必须要满足一个前提,即X、Y属性对于Z属性的有无必须是有关的。然而这个前提被根本忽视了,详见 False Analogy)。

这个豆列中的书,有一些是介绍人类思维工作的机制的,认识这些机制是正确思考的大前提;有许多是关于人类推理(Reasoning)过程中的形形色色的谬误的,因为唯有认识到 这些谬误,才能避免它们。唯有避免了思维的谬误,才能进行正确的思考。

注:

另:

  • 人类在思考问题的过程中,自身的思维习惯、性格、知识积累无不都在悄悄地影响着思维的过程,所以,一些心理学的知识也非常有助于帮助正确的思考。更多心理学方面的推荐,参考:http://www.douban.com/doulist/46003/

文章末尾将贴出的是我这一年来学习的知识结构总揽(用 XMind 画的思维导图)。注:这只是一个整体的知识结构,或者说“寻路图”,其中固然包含一些例子(用 “e.g.” 标出),但最重要的是从各个分支引申出去的延伸阅读,后者包含上百个很有价值的 wikipedia 条目,不下 50 本经典的著作(大部分我已经读过,小部分经过我的仔细考察,正在阅读中或者肯定是有价值的)。

如何获得这些延伸出去的阅读,有两个办法:

  1. 在总揽图中抽出关键字到 Wikipedia&Google 上查找,如:informal fallacycognitive biases, bounded rationality, critical thinking, argumentation theory, behavioral economics,problem solving 等等(以上这些关键字你都会在思维导图中看到)。注:阅读 Wikipedia 时要严重注意每个条目后面的 Reference ,一般来说这些参考资料本身也都非常经典,其价值不亚于 Wikipedia 条目本身。
  2. 查看我整理的四个豆列:

以上四个豆列中整理的绝大多数都是我阅读过的,你也可以参考我的整个“思维”标签下的书。如何获得这些书(尤其是其中包含大量的无中文翻译版的英文书)请参考李笑来老师的笔记

这个领域的新知识是如此的纷至沓来,以至于我只有时间不断地阅读和思考,以及不时在我的 Google Notebook 里做一些笔记,而完全没有时间一本书一本书,一个子领域一个子领域地写具体的 Introduction (目前具体的荐书只是在 TopLanguage 上零散的推荐了几本,还没有专题介绍)。既便如此,仍然还是在博客上写了很多相关的东西,它们就是这一年来的学习的收获的证明:-),因此如果你想快速判断上面列出的一些书籍是否对你有价值,有多大的价值,不妨参考一下我写的这些文章,这些文章很大程度上是在这一年的学习过程当中的感悟或总结。注:第 3 部分(关于学习、记忆与思考)的文章基本上是领域无关的:

  1. 关于 Problem Solving 的

好在我并不打算零星的一本一本推荐:D 所以我就花了点时间将整个的知识体系整理了一番,画了下面这张结构图,请按图索骥,如下(有三个版本,1. 至 xMind Share 的超链接,2. 内嵌在该页面中的幻灯片,如果无法载入请参考 1 。3. 图片版(注:图很大,请下载浏览或打印))

我在前面写学习习惯的时候曾经提到:

  1. 学习一项知识,必须问自己三个重要问题:1. 它的本质是什么。2. 它的第一原则是什么。3. 它的知识结构是怎样的。

有朋友问我具体的例子,好吧,那么这张思维导图便是第三点——知识结构——的一个很好的例子:)

  1. 至 XMind Share 的超链接:http://share.xmind.net/pongba/how-to-think-straight-4/

  2. 嵌入的幻灯片(如加载失败请直接点击上面的 XMind Share 超链接至 XMind 浏览):

  3. 图片版(此为缩略版,完整版请至相册下载:google picasa 的 ,或 csdn 相册的)(最后提醒一下,别忘了这幅图只是大量书籍和 Wikipedia 条目的“藏宝图”,如何延伸阅读请参考前文所述的方法 From XMind


消息:TopLanguage 最近经历了一次很大的管理策略修订,可以预期将彻底摆脱这两个月来的噪音问题,未来的讨论质量将会越来越高。详情可参见这里。 来源: [http://blog.csdn.net/pongba/article/details/3549560](http://blog.csdn.net/pongba/article/details/3549560)

【分享】警惕偷走时间的5大窃贼

Posted on

【分享】警惕偷走时间的5大窃贼

好的管理者都是好的时间管理者。而管理者时间管理的根本是抓大放小、果断决策、大胆授权、梳理系统、做好计划。只有这样,管理者才能防范偷走你宝贵时间的5大窃贼,才能让自己免于焦头烂额。

管理者管理什么?一是管事,二是管人,三是管时间。在这三个维度上,管事最容易,管人最困难,管时间不难却最容易被忽略。

程序算法与人生选择

Posted on

程序算法与人生选择

2012年12月28日 陈皓

每年一到要找工作的时候,我就能收到很多人给我发来的邮件,总是问我怎么选择他们的offer,去腾讯还是去豆瓣,去外企还是去国内的企业,去创业还是去考研,来北京还是回老家,该不该去创新工场?该不该去thoughtworks?……等等,等等。今年从7月份到现在,我收到并回复了60多封这样的邮件。我更多帮他们整理思路,帮他们明白自己最想要的是什么。(注:我以后不再回复类似的邮件了)。

我深深地发现,对于我国这样从小被父母和老师安排各种事情长大的人,当有一天,父母和老师都跟不上的时候,我们几乎完全不知道怎么去做选择。而我最近也离开了亚马逊,换了一个工作。又正值年底,就像去年的那篇《三个故事和三个问题》一样,让我想到写一篇这样的文章。