Vim Substitute and Global  • • •  WWDC16       all posts in Archive

如何读书?

这几天看了两本书,第一本是《怎样读书》 虽然不见新东西,温故而知新吧。还有《代码之髓》 ,介绍了一下学习编程的方法论,很基础也不算特别深入,不过还真是切中了要点,很有意思。

于是,胡乱杂糅一些review和自己的想法,也写上几个字:

首先,为什么读书?

这,没有讨论的必要 … 什么目的都好

那么,该如何读书?

埃及塔

从小时候开始,我们就已经开始从老师父母那儿,学习各种如何读书的方法论,大道理都是差不多的。胡适一句话就说明白了,“为学当如埃及塔,要能博大要能高”。简单的说就是 “博” 和 “精”,道理其实很浅显,可并不简单,博和精并不是矛盾,而是对立统一的。

就我自己的读书经验来看,经常会碰到内容能够理解,却总不够透彻的情况。换句话说,就是听别人讲解或者翻看时,感觉一目了然,可关上书后似乎又说不出所以来,不能明晰地给别人讲解。西尾泰和在《代码之髓》中说这是因为,“新学的知识和自身经验以及原来掌握的知识尚未很好结合的时候,往往会出现这种似懂非懂的状态”。

如何解决这个问题呢?这需要找到他们的关联键,让知识产生化学反应了。可一味地往深处专研,并不见得有很好的效果。就像迷宫里,总有走不通的死胡同,你硬是要把墙给凿穿,费力不讨好。可如果能换个视角,站到高处观察地形,破解之法就简单了。所以说,“读一书而已,则不足以知其书“。比如要读《诗经》,最好先去研究一点社会学、文字学、音韵学、考古学等等以后,就能比以前读懂更多,轻松更多。

拿编程来说,比如你只学过Java,是无法透彻理解面向对象,垃圾回收… 到底优在何处,掣肘何在的?要理解这一切,不能不去了解一点编程语言的历史,C、Lisp、C++、Java的演变过程,还需要看看更新一代的语言 Python, Ruby… 看看原始的问题在哪儿?大家用什么思路来解决问题?如果不用面相对象,垃圾回收,如何解决?… 只有贯通知识,才能融汇为自己的东西。

如何扩展“博”?

要做到博,我们需要在 :

  • 历史中学习
  • 比较中学习
  • 我再加一条,问题中学习。所谓,于不疑处有疑方是进以。

用这样的思路,慢慢扩充的背景和详细信息,犹如在绘制全息地图,自然更能明了全局,掌握进退。

如何求“精”呢?

具体到方法上来说,是 “眼到、口到、心到和手到”。

  • 眼到,是个个字都要认得。
  • 口到,是重要的文字和思想,还是值得背下来反刍回味的。
  • 心到,是要懂得每一句每一字的意思。可以用参考书,作文法分析,有时需比较,以便融会贯通。
  • 手到, 是指查阅资料,记录心得,做系统文章。把零碎模糊的知识,整理综合存入脑中。

再补充两个实践

  • 第一是要“尅期”,意思是要作计划,限定时间读完。做学问,是不能过于散漫,随意为之的。
  • 第二,兴趣大于方法。如果兴趣使然,一定能侵染其中,不能自拔,自然便能摸索出知识网络拓扑图来。这个时候完全不用拘泥于方法。方法论本来就只是作为强化兴趣的工具而已。如果已然感兴趣,那已经是走上了捷径了。

对于程序员来说,还值得坚守传说中的

优秀程序员的三大美德:

  • Laziness 懒惰
  • Impatience 急躁
  • Hubris 傲慢
    当然,你要从正面的思维来解释这三个词,如果真能务实,求真,并技术性的展现这三个美德,可以大成。

最后还有一个更重要的问题,该学什么?读什么书呢?

这个问题,不同行业,不同兴趣,不同目标的差别就大了去了,仅来看看程序员该学什么。

就像前面说的,我们要在历史中,比较中学习。寻找共性和本质的东西,自然就是值得投入精力认真研究的,而那些个性的东西,用好了会增色而已。

左耳朵耗子在博文 软件开发 “三重门”里说:

  • 第一重门 是业务功能。会编程就可以了。当然“会编程”也是有层次的。
  • 第二重门 是业务性能。技术基础很重要,操作系统的文件管理,进程调度,内存管理,网络七层模型,TCP/UCP的协议,语言用法,编译和类库的实现,数据结构,算法 ……
  • 第三重门 是业务智能。更多学院派的东西,搜索算法,推荐算法,预测,统计,机器学习,图像识别,分布式构架和算法 …..

其实,这里的说法,不完全赞同,什么是“会编程”就是可以严肃讨论的话题。不过,不论这个总结是否正确,应该是有些启发的。