也说读书

常去周筠老师的博客上看,有时候便感叹啊:找到一个好的博客,比找到一个好的书店更有价值。因为什么呢?因为好的博客不但有好的文章,也有好的推荐。

我自己的博客里,少有推荐,便是自认没有荐者的眼光。所谓千里马常有,伯乐不常有。我做不成伯乐,便不去随便指认马的好劣。但周老师显然是好伯乐,因为我常常在她那里读到好文章。

今天读到的,是关于读书的文字。有文有荐。

读的时候,我却在想了,我实在不是读书人。周老师上千本的书是读了的,我呢,不算课本的话,百本怕也不到。要算完整读过的,可能三、四十本罢。关于这点,我以前跟人讨论起过,若有兴趣的话,不妨再去看看

记性不好,读书不记书名,看故事不记人名。所以至今记得的,少之又少了。学过的知识不用,不久便也忘掉,前两天跟同事说到三角函数,我都忘了有几个、该怎么写;这两天写书中谈到数字,我却发现我都忘了实数数轴和投影。

这种状态我在一篇文字里写过:我常常会机械地认为我的脑袋是一块容量不大的内存,无关的东西必须先放在外面,需要的时候再来一个“mov”指令。所以我的电脑桌上总会有很多的书,我最多对这些书的目录有印象;所以书上总会有很多的备注,我差不多翻过三页就要回头来看看这些已经被看明白的东西,然后再看下去;所以window桌面上总会有很多小文本,记着各式各样的名字、密码以及一些工作表……

所以我以前的同事说我聪明,我却常说我笨。我的学习与聪明与否无关,与记忆力强弱无关。但正是这样的学习法使我得益。而这里,便要趁着周老师的这篇文章,来说说些法子。

一、多定义,并学会否定

我习惯用自己的方法去说明事物。对文,称为评论;对理,称为定义。以前读文学的书,开始是专读一人的,读几本之后,知道他的文风了,便评道如何如何(当然是自言自语,不敢拿出来讲的)。读了几多大家之后,便不喜欢专读一人了,而喜欢读合集、评论集。读到这个阶段,一两段文字也可以看出一个人的风格、背景与素养来了。

我习惯定义我所思考的东西。例如很早我就在想“什么是程序”、“什么是面向对象”这样的一些概念性的东西。我在以前的书中,曾经对“对象”做过一个定义,说“对象是有继承关系的记录”。这在很长的时间里帮助我理解了面向对象的开发。

对一个事物下定义,便使得你可以很快地发现它与这个定义的相同与不同之处。于是,你总得面对对这个“定义”的挑战。如果你不学会否定它,那么就很容易走进死胡同。所以多定义的同时,也要学会否定。不破不立,只有否定它,才会精化出更准确的定义。

一旦你得到了一个“更准确的定义”,一本书拿来,它讲的与你所想的一样,就不必看了。你永远在找一本与你想的不一样的书,重新定义并否定更多的书(中的观点),于是你可以看的书便越来越少。

二、多思考

能读的书渐少,思考的时间便渐多了。

“多定义”训练的是一个人抽象的能力,而思考则训练人的逻辑的能力。抽象是逻辑的一个部分但不是全部。例如刚才说“‘多定义’训练的是一个人抽象的能力”本身就是一个定义,但这并不是逻辑。而后面这些讨论的文字,才是逻辑化的叙述。

思考是逻辑的过程。我们做出假设,然后找到论据肯定之、否定之,不断地、不同观察面地肯否,必然产生更多的知识需求。——我们总在对自己的观点寻求论据。

我读书的动力大多来源于思考。我读佛家道家的论著,读儒家法家的学说,大多数时候只是为了给自己的观点找到论据。我在写书的过程中力求“不出错”,为了搞清楚《山海经》中说的太行山的位置,我大概翻过二、三十本地理学的著述;为了搞清楚道家中“道”这个字的思想,我甚至找到在战国时期记有《老子》原文的郭店楚墓的竹简(影印本),从简文中逐字核对它的句读。

思考产生了太多的需求,但是思考的目的并不是去寻求这些需求的解,而是产生这些需求的“原始的问题”的解。所以读书到为思考而读的阶段,便是立论著述的阶段了。

读了,便是为了忘掉;忘掉,便是为了得到。

三、多读、多整理,学会分类

我们读书,就是为了求“道理”。

所谓“理”,是可以学来的。书上讲的都是“理”,但每每互相有别,公说公有理,婆说婆有理。所以“理”尽管可以学来,但如果不会辨识,不会分析,不会思考,那么听来的全是“理”,到真用的时候,便全然无理了。

所谓“道”,则是学不来的。道是体悟,道是自得自省。当然,没有基础、没有识见的自得自省,差不多就是“自得其乐”。一些民间科学家总认为自己了解了多么多么伟大的知识、见解,然而放在相应的学科里一看,都是被否定或者肯定了很久的东西。这就是体悟者自身的素养不够的缘故了。

我并没有否定这些民间科学家的意思。相反,我认为他们的思想方法可能还是正确的。但是,问题可能在于基础不够。同样的思想方法,用在不同的基础上,结果并不相同。例如拔苗助长与牵引增高,前者被当成笑话,后者便成了科学。

所以,无论你的目的是什么,你得先补实你的基础。这又回到老的话题上来了,我们还得要“多读书”。

从书中得到知识的法门有两个,一个是精读。反复不断地读一本精品,把书从厚读到薄,读到最后,可能就只剩下一句两句。如果这本书真是精品,读到这一句两句的地步,你就是得其真味了。

于计算机,我第一本书专门学的书是《数据结构》(时隔多年了,我还每每讲起它的好处)。读这本书是为了自考,那时我周边的朋友们,往往一期报考三、四门之多。我第一次考,便只报了这一门,上课看、下课看,休息时也看,一本书读了四、五遍。初读的时候,便如钱穆所说“遇不易解处,约略读过”。到第二遍的时候,一些不解的地方便已然有解。到第三遍的时候,便已经算通读了。通读仍不算完,第四遍时,我在前三遍所作的注旁边重新作注,讲述第一、二遍所思考的正确与错误,以及这些正误的源由。第五遍的时候,书页中已经没有地方写字了,我便在每章的开头、结尾处写概要。等到我读第六遍的时候,已经临近考期,我只在书的目录的“……”处,用蝇头小字写每章、节的重点及概要。

进考场之前,拿来书一看目录处所写的东西,信心满满。一次考过。学《数据结构》的时候,我还不会pascal,所以基本上就靠理解过关。时隔了十余年,我现在想起这本书,大多数的内容的细节已经忘掉,但目录上的印象、章节中的概要却还了然。重要的是,十余年来,我所有的开发活动,都在时时印证着这本书被“精化到一句两句”时所余下的观点:程序=算法+结构。

从书中得到知识的法门之二,就是分类。精读是求深,分类则是求广。我以前的部门经理曾经说:他有1/3的时间不是在整理代码,就是在整理硬盘(上的文件)。我大概也是如此,我用FlashGet下载的东西大概有上百个G。但我总是记得大概有什么,在硬盘上的什么位置。无论这个软件是什么,我大概记得名字,甚至不同的版本迁升。前些日子一个同事说到一种C语言,但在官方网站上下载不到了,我说大概我在两年前下载过,连名字都记得。回去一找,果然如此。

但我记不住这些软件的注释,或者官方网站上那些吹嘘的言词。我对这些软件的记忆,来自于详细的分类。在一下软件被下载,并被归类到它的类属的同时,我就记住了它的关键字。而在记忆中查找时,只是简单地search一下就可以了。

这就如同看书只看目录和前言一样,大概知道是怎么一回事,然后这本书就被归类到记忆中去了。至于细节,用它的时候再来看罢。史书中说,诸葛亮与徐庶、石广元、孟公威等人一道游学读书,“三人务于精熟,而亮独观其大略”。
观其大略、不求甚解的读书法,是在一定的学识基础上,对书籍中的“理”作归类整理,以备时需。而绝不是随便翻翻的浏览。如果你没有分类整理的能力,也没有辨识知识的基础,那么读更多的书,只会让你的头脑更乱。

如同一堆公公婆婆没完没了的在吵架~~哈哈~

四、观察本质,而不是现象

我们大多数时候迷乱于现象,而远离其本质。但本质这个东西,对大多数人而言,即便是明明白白告诉你,也是听不懂的。

不是真听不懂,而是不觉得有什么用。比如还是那句“程序=算法+结构”,我十余年前便知道,从书上看来的。但是,我大概是两三年前,才渐渐开始领悟到他的含义,而且渐渐地走近程序的本质。我们所见到的开发语言,只是一种现象;所见到的这个定理,也只是一种现象。本质,是这些现象背后,产生现象的根源。我的第三本书《动态函数式语言精髓与编程实践》便想来讲这些本质、根源的东西,而第四本书的计划《Program》,便有打算脱离开任何特定的语言来讲编程体验——这第四本书还很远,有机会的话,大家会很快读到第三本的。哈哈。

而我很乐意承认,我所讲的还是大师们讲述过的“程序=算法+结构”。我相信你听过这句话,但是即便是这句话本身,也只是现象,而非本质。如果你说你理解了这句话,那可能仍只是迷乱于现象。

这好象很混乱。

这两天看到“江南白衣”的一份书单,叫“架构师书单”。大概“江南白衣”兄打算做架构师,或者在架构设计领域中让自己有所精进。这份书单分四类:

一、Software Architecture篇

二、Patterns篇

三、RUP/UML 篇

四、闲书篇

其中"Software Architecture篇"中列了六本:

  1. 《Software Architect Bootcamp--软件架构师教程》
  2. 《The Art of Software Architecture: Design
    Methods and Techniques--软件体系结构的艺术》
  3. 《Large-Scale Software Architecture-A Practical Guide using
    UML--大型软件体系结构:使用UML实践指南》
  4. 《Documenting Software Architectures: Views
    and Beyond--软件构架编档》
  5. 《A Practical Guide to Enterprise
    Architecture--企业架构实用指南》
  6. 《Domain-Specific Application Frameworks:
    Frameworks Experience by Industry--特定领域应用框架:行业的框架体验》

“江南白衣”兄在书单之外,写了一段文字:

“奇怪国外真正的好书来来去去也就那么几本,emule加上国内出版社的努力,我们看的东西和老外已差不多,为什么老外看完就那么生猛,我们看完就还是半桶水呢。”

其实这份书单就给出了答案,只是他不自觉而已。

这份书单是给一个“做架构”的人看的,如同架构领域的“C++技术手册”。但架构是什么,为什么做架构,架构做给谁用,架构的领域环境及相关影响,架构与决策的关系,架构与商业环境的关系……这些东西有没有讲过呢?

没有。因为上面的六本书,只是把架构当成一种“技艺”来讲,从“教程”到“指南”,从“体验”到“艺术”,无不是技艺之学。

我在《大道至简》的第二版里讲述了工具的本质,把这些东西理解成工具和技艺。“江南白衣”兄的四个分类中的书籍,无一不是在讲工具与技艺。

我们从国外引进的书籍,只见工具、技艺所做作之表象,而远离其所应用之本质。所以我们学完便只会用,学完便成各各独立的高手。

少林72绝学是大多数人梦寐以求的,但真正行家的眼里却只见《易筋经》、《洗髓经》,到了扫地僧眼里,连这《易筋经》、《洗髓经》也不算得,而是一部《法华经》、一部《杂阿含经》。所以,所谓武学,在老僧看来,无过形质,远非本实。

老僧有一段话,看来是说佛理,用在其它技法之事上,其实也一般无二:

“只是一人练到四五项绝技之后,在禅理上的领悟,自然而然的会受到障碍。在我少林派,那便叫做‘武学障’,与别宗别派的‘知见障’道理相同。须知佛法在求渡世,武功在于杀生,两者背道而驰,相互制。只有佛法越高,慈悲之念越盛,武功绝技才能练得越高,但修为上到了如此境界的高僧,却又不屑去多学各种厉害的杀人法门了。”

“江南白衣”兄所荐架构的书,六本之中,一二本翻翻即可。我手边架构的书,买时便只有《应用框架的设计与实现——.NET平台》一册,但却没有读过,大略地翻过目录。知道是怎么一回事了,后来再看EZ项目的后台实现框架的.NET代码,便心中了然。但做EZ项目的后台框架的设计时,这本书却是毫无作用的。

我细读的架构方面的书,大概只有这一册:

但我也只读了它的前三章,其它的章节,一是没时间看,二是耽于实践,用时再读罢。

“江南白衣”兄是用做程序的方法去学习做架构,但架构不是做的,而是设计。我曾说“理解决定设计”,真正有价值的东西,在于如何理解设计对象及目标。因此除了架构的一些基础知识之外,我建议学的,其实是需求分析方面的知识。例如:

但根本的建议只有一条:不要当技术书看,要当理论书看。

五、问题:两种读书法

写这篇文字的时候我就一直在想:为什么我跟周筠老师有两种截然不同的读书法。

周老师偏向文,我则偏理。文学讲究涵养、讲究熏陶,读得多了,心中自有所见。行于文字,则信任而为,自自然然地表现出来了。数理方面要求谨细论证,由具象而抽象,由现象归结原理,又以原理解释现象。所以,既然感性思维与理性思维有差异,其求学求知的法门有差异,便也是正常。

麦秸儿(joy)喜欢读周老师的文字,就曾跟我说:你的blog没人读,是因为干干瘦瘦,太过讲理;周老师的blog读来轻松,读完了你就知道她想说什么。

一个是潜移默化的叙述,一个是字句斟酌的论述。换作是我,也是喜欢读周老师的文章的。

哈俣。