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