2018年接近尾声,我在此总结下自己读书的经验教训,希望对其他人有所帮助。
这篇文章的思路来自网络。主要讲如何读书学习。看书休闲不在讨论范围内。
为什么要避免碎片化学习
因为网上文章大多是经验总结,只摆事实,不讲逻辑。长此以往,习惯了“快餐”式学习,就淡化了自己的批判性思维和思维框架,或者说知识体系的建立。后患无穷。
见参考文章1.
接下来将如何读书。
明确目标,确定范围
首先必须明确读书的目标。问自己几个问题,为什么读书;是休闲,还是学习,学什么,学到什么程度,为什么学习,和自己的能力圈培养目标是否一致等等。
明确了目标,就可以少看书不看书,因为看书费眼睛花时间,没有好处的话,不看少看;还可以指导做读书计划,投入多少精力,读书范围等。
下面只谈为学习读书。
确定读书范围,要配合读书目的,也要兼顾知识联系的建立和兴趣。
建立知识地图
玩过游戏的人都知道地图的重要性,学习也一样。如果不能将书中的知识和自己的头脑建立起联系来,就是所谓的“读死书”,读书无用了。只有联系自身才能体会书中的好处,激发更多学习的动力。
我今年看过两本Netty网络开发的书(《Netty in Action》和《Netty权威指南》),也看了部分源码,时间花费不算多。之所以速度比较快,就是因为自己前期对Java的NIO编程,类似的libuv,twisted框架都有过一些了解,很多章节一扫而过。
另外读《Go programming language》的时候,前言里作者就明确说这书是给有其他编程语言基础的读者准备的,类似的基本语法都是轻描淡写,没有多少笔墨,读者读起来也顺利。
读书方法
强烈推荐看《高效读书的10种方法》。网上有摘要,看看也足够了。
另外《如何阅读一本书》也是经典,值得买来落灰。
简单整理下读书办法:
学习陌生领域用通读
如果时间足够,用通读办法,既尽可能地看所有的书。
优点是建立一个比较完整的知识体系,避免“老思路看新问题”的陷阱。敲门是先看综述一类的文章,起到提纲挈领的作用。
缺点就是耗时间,很难坚持下来。
我的专业是网络协议特别是网络安全协议的开发,对上层应用和业务安全,特别是他们的使用并不太熟悉。我今年在加强信息安全的学习过程里看了20~30本书,基本把金陵图书馆里能找到的和网上能下载的电子书都尽可能看了。范围包括系统,网络,应用,无线,云,区块链(这个不能算安全技术,只能算一个话题),测试,审计,管理,攻击,工具等。基本掌握了安全技术的全貌,再加上项目上的实践和源码学习,基本达到了自己提高专业水平的目的。
加强理解用树读——主题阅读
主题阅读在《如何阅读一本书》里有专门讲过,就是一段时间集中精力,深入阅读有关主题的几本书,评判吸收。
比如在网络编程框架的学习里面,如果平时项目使用过libevent,libuv,再去看twisted,Netty和Golang的goroutine,就可以对比学习,查找优缺点,看源码学习架构设计。
比如学南传佛教的禅修,如果不确定跟那个师傅的讲座,就大概多看看,找到主要问题,也好避免偏听偏信,迷信一端。
一本书不必从头都到尾——炼读,RIA读书法
读完一本书有时候不是目的,不要舍本逐末。而且很多书不是一次可以读完的,需要经验积累,所以要放弃贪念。一首歌最能感动你的可能只有一句,一本书如果有一句话点到你心里也就有收获了。
2014年到2015年,我投入了极大的热情学习禅修,曾经有过一段时间,认为生活里最重要的事情,莫过于获得心灵的平静和佛教许诺的长久的幸福。直到我读《万历十五年》的某一句(这本书是怎么和禅修联系起来的呢,只有我一个人吧),想到就算有王阳明和心学又如何——国家没有了,联系到自身上,就明白了——禅修只是生活的一部分,生活里还有很多问题是禅修无法解决——因此才扭转了我生活的重点。
程序化阅读,寻找洞见——框读
框读是我不熟悉的阅读办法, 我在这里只是点到为止。所谓框读,就是先列出一系列的问题,尽可能刨根问底,然后才开始阅读,力争把一个问题的前因后果搞清楚。
这种读书办法就是对治“碎片化学习“的。当下我们不缺信息,而是缺少对信息的辨识和加工。
类似的还有逆读,就是批判性思维,也叫深度阅读。可以看《如何阅读一本书》了解。
如何阅读帖子
- 大量订阅
- 用印象笔记或者其他云笔记收藏
- 重点:定期回顾,写总结,打标签,删掉不必要的帖子
笔记和分享
如何写读书笔记
大家可以自己了解下RIA读书法,康奈尔笔记法。我这里不重复。需要强调的是,笔记记的是自己的想法,不要简单摘抄。
要有输出要回馈——图读
看过之后,找到书里自己认为有价值的内容,制作思维导图,或者PPT,分享出来。这块我做的很不到位,以后还要多改进。
Show me the code
最后再说下程序员读书。编程是个手艺货,只看书不敲代码是不行的。书中很多道理你不用电脑验证下,总不会变成你自己的。不同意请站出来。
《The Art of Unix programming》里面,提到了一个小语言开发的问题,我在2008年读这本书的时候,只是很好奇,没有什么印象。后来2013年学习用Javascript开发前端,才第一次使用类似的思路解决了一个原计划需要太多人力开发的问题。
尝到第一次甜头,就一发不可收拾,学习了很多动态语言,特别是他们开发DSL的技术,但是又因为缺少实践机会,渐渐冷淡下来了。直到2017年,项目上要开发一个DAL(Data Access Layer)的模块,我在几次重构之后,再次使用了代码自动生成和DSL技术开发了一个XML和JSON的编解码库,还有一个自动生成URL路由和有效性验证的预编译器,一劳永逸的解决了这个问题。不但加强了自己对Python和AWK的技巧,还引申到对Spring框架的理解,软件架构的学习。
最后
希望能够收到大家的反馈,交流出新的知识火花。
参考: