正儿巴经学习算法算起来也有快两个月了,之前作为计算机工科生虽然算法和数据结构是必修课,但实际上只是停留在“理解”的层面,相当肤浅,更遑论举一反三灵活运用了。因此,所谓“正儿巴经”学习算法,意即开始对算法思想的本质进行归根究底的过程、对思维方法论进行归纳抽象的过程、对各种解题技巧进行一般化的过程、通过不断练习来让记忆内隐化的过程..
在“正儿巴经”学习算法之前,我曾经有大半年时间都在用业余时间“正儿巴经”地学习心理学和认知神经科学。所以在开始正经思考算法问题之前做的第一件事情就是仔细琢磨一直令我困惑的问题——那些看似抓不到摸不着的灵感到底是怎么来的。
现代心理学的一个最伟大的原则就是:所有的心理活动同时都是生理活动。——实际上,“心理活动”只不过是“大脑神经活动”的通俗称呼。虽然大脑的结构极度复杂,然而许多人不知道的是,现代神经科学对大脑功能从高层原则上的认识已经可以说是相当完备了,而对于记忆和学习这块更加是因为Eric Kandel的突破性工作变得相当清晰。可以说剩下的工作主要就是补充细节了。于是乎,借助于三本关于记忆和学习的书,一本专门论述解题心理学的书,wikipedia,波利亚的三卷解题书,以及自己在思考有限多的问题的过程中对自己的思维过程的反省和总结,我试着对解题的心理学做了一个思考和总结(《跟波利亚学解题》)。——这听起来很奇怪,一个本身只会初级算法的人又如何去思考涵盖所有问题解决的思维过程呢?还是引用波利亚著名的发明者悖论吧:有时候,一个一般性的问题反而要比它的一个特例更好解决。
然而,一般性的问题思考清楚了,清楚解题思维的本质了,并不代表我就万能了,就立即擅长解决所有算法问题了。解题不是光靠思维的,巧妇难为无米之炊。事实上,在《跟波利亚学解题》中总结的一个非常关键的要点就是:启发法固然可贵,然而知识的重要性是不可替代的。不存在通用的、万能的知识,要不然我们也不必到今天还在不断探索物质世界的规律了。此外,获得知识的过程——学习——本质上是个体力活(尽管是有一定方法的体力活),这个体力活大致分为两步:
(关于什么是外显记忆什么是内隐记忆请参考wikipedia或者《跟波利亚学解题》)
而第二步又包含两个过程:
关于第一点有本不错的书——《学习的艺术》。
关于第二点有一个不错的例子,最初从李笑来老师的blog上读到的(《把时间当作朋友》):
我李敖看的书很少会忘掉,什么原因呢?方法好。什么方法?心狠手辣。剪刀美工刀全部下来,把书给分尸掉了,就是切开了。这一页我需要,这一段我需要,我把它分类分出来了。那背面有怎么办呢?把它影印出来,或者一开始就买两本书,把两本书都切开以后排出来,把要看的部分切开。结果一本书看完了,这本书也被分尸掉了。这就是我的看书方法。
那分类怎么分呢?我有很多自己做的夹子,夹子我写上字,把资料全部分类。一本书看完以后,全部进入我的夹子里面了。我可以分出几千个类来,分的很细。好比说按照图书馆的分类,哲学类,宗教类;宗教类再分佛教类、道教类、天主教类。我李敖分的更细了,天主教还可以分,神父算一类。神父还可以细分,神父同性恋就是一类,神父还俗又是一类。修女同性恋是一类,修女还俗这又是一类。
任何书里有关的内容都进入我的资料里来。进入干什么呢?当我要写小说的时候,需要这个资料,打开资料,只是写一下就好了。或者发生了一个什么事件,跟修女同性恋有关系,我要发表对新闻的感想,把新闻拿过来,我的资料打开,两个一合并,文章立刻就写出来了。
换句话说,我这本书看完之后,被我大卸八块,五马分尸。可是被我勾住了,这些资料我不凭记忆来记它,我凭用细部的很耐心的功夫把它勾紧,放在资料夹子里。我的记忆力只要记这些标题就好了。标题是按照我的习惯来分,基本上都翻译成英文字,用英文字母排出来,偶尔也有些中文的。
今天我把看家的本领告诉大家,李敖知道的那么多,博闻强记,记忆力那么好。我告诉大家,记忆力是可以训练的。记忆力一开始就是你不要偷懒,不要说躺在那里看书,看完了这本书还是干干净净的,整整齐齐的,这不对。看完了这本书,这本书就大卸八块,书进了资料夹,才算看完这本书。
今天我为大家特别亮一手,把如何看书的招告诉大家。不要以为这本书看完了,干干净净的新的算看过。那个不算看过,因为当时是看过,可是浪费了。你不能够有系统的扣住这些资料,跟资料挂钩。可是找我这个方法,可以把你看过的书,都把它的精华抓出来,扣在一起。这就是我的这种土法炼钢的治学方法。
恰恰运用了记忆最深刻的原理。
我们的大脑本质上是一个计算器,其物质基础是神经网络;而不断的练习则是对该网络节点间联系强度(神经细胞间的突触联系强度)的训练。——可惜的是像爱因斯坦大脑内的经过完美训练的神经网络参数不能直接导入到我大脑中,也许将来可以做到,但目前只有笨办法,实在是件郁闷的事。
所以,拿起书吧,训练你的神经网络,路漫漫其修远兮..