关于读书
看到师弟蔡白银写的文章, 有所感, 写下几句不成文的心得体会.
大学读经典书, 能缩小自己和发达国家学生的差距. 我们国家的大学和发达国家相比, 差距大家也都能看到. 在理工科上, 或许中国大学唯一能和外国大学在同一起跑线的, 就是图书馆里面躺着的经典英文原版书了. 科学发展到今天, 每个领域都是枝丫茂盛, 都有经典的著作. 作为大学生, 如果没有读过(哪怕看看前言也行呀), 在我看来, 不算合格. 修身第一条, 就是读读经典.
要是上大学的时候只是全是靠课堂而不主动阅读, 这大学也和幼儿园没两样.
好书能帮你打通筋脉, 读了之后立即高屋建瓴, 建立起对一个领域的全盘认识. 我常常觉得, 好书大气磅礴, 就像武林名门正道功夫一样, 大开大阖, 读完以后人的气象都不一样. 读烂书, 或者上用烂教材的课, 会降低你的智商.不相信我这句话的人可以选择 TAoCP 读一下第一小节,再比较一下其他(本校)写数据结构和算法的书.
好的教材好比是心法, 提纲挈领. 先看心法是磨刀不误砍柴功的. 而可惜的是无论是市场还是实际, 砍柴的书都很受欢迎, 磨刀的书没人喜欢看. 很多做技术的都容易做到头, 就是因为没心法, 练不好72绝技的. 就计算机方面而言, 数据结构算法 (Intro. to Algorithm/TAoCP)看一本, 编程工具(TIJ/TIC++/SICP+Python)看一本, 离散数学(Concrete M/Discrete M)看一本, 足以秒杀大多数公司面试题了.
要善于利用中英对照, 好坏对照的比武看书法. 我并非崇洋媚外, 国内很多大学的教材, 存在很强的门户之见, 其教材主要内容囿于本校擅长的某些领域, 往往不能使人窥得一个体系的全貌. 因此最好的办法是找本英文的, 找本中文的. 英文书往往文字冗长, 实例繁多; 中文书往往讲空泛理论, 几乎无例子, 两者结合, 能够取长补短. 更有效的是想像两个作者在吵架, 并且将自己置于审稿人的地位, 跳出书本, 评点某处某书写得如何, 如果自己写该如何写等等. 如此一比武, 好书烂书高下立判, 而且能从一个更高的层次审视一本书. 一招一式学高手, 未必能成高手; 常看高手过招, 华山论剑, 你很快会变成高手.
书是要往厚处读的. 一本书, 哪怕只读一章, 也要保证从头读到尾. 如果没这个自信, 还是不要读了. 弱水三千, 只取一瓢, 与其说是走捷径, 不如说是纵容自己的浮躁和浅尝辄止. 这样读书, 基础不牢. 好比光看别人拳法打的好看, 自己不下功夫从头到尾把拳法演练几遍, 很快就会忘掉的. 我认识不少人, 书往往看得很多, 但考试面试或者实际运用的时候, 和没读过没两样. 结果如此, 那当年读了干啥?
–推而广之, 书上的程序和习题是要一条一条做的. 我认识一个高中朋友, 他说物理不好. 我给他出了个主意: 只做一本书上的习题, 而且一丝不苟, 从格式到步骤都要完美, 假想自己是写本能出版的习题解. 他尝试了几个星期, 单科成绩已经是年级第一了. 往往看上去最笨的方法, 实际上是最聪明的. 就我个人而言, 高年级小学生一笔一划写完初中平面几何只要一年半, 老师讲要三年; 完全不懂OO的大一新生一键一键敲完 Thinking in Java 上的所有程序只要半学期, 就能独步于10万行代码的中型项目. 而很多人学 4 年 Java 也不知道架构到底是什么样子的.
如果我没记错的话, 侯捷在 STL 源码剖析的序言中, 引用了老子的一句话: “天下大事,必作于细”. 我觉得, 能将这句心法读到, 又有什么不能剖析的源码呢. 纵使若干年后, STL 丢在历史某处, 你仍然能够在新的技术中”游刃有余”.
补充: 有很多辅助手段能帮人选书. 我的选法是: 互联网. 判断一本书(我特指数学或计算机方面的教材)是不是好书太简单了, 看看这本书作者如何, 这本书反馈如何. 如果有网页的话, 看看 Google 给这本书的 PageRank 是多少. 尽量选择国外一流大学的教材. 一般情况下, 国内出版的教材, 如果不是清华北大中科院或者这方面的杰出专家出的, 可直接略过. 少买几本庸书, 是为抵制全球变暖和保护森林做贡献.
当然, 说的这些, 都是一己之见. 我知道大家都很”快餐阅读”. 但愿看这篇文章的, 和能认真做到的比例, 能到10:1, 也就行了.