一、前言
二、选书
1. 重视选书的过程
2. 如何选书
3. 电子书 or 纸质书
三、读书
1. 不要怕弄脏书
2. 消灭模糊性、不确定性
3. 一定要做笔记
4. 怎么确认自己真的懂了
一、前言
前几天有同事过来,让我推荐一本 Linux 系统的书籍。
我就问他 2 个问题:
你想学习 Linux 哪一个层次:内核层?驱动层?应用层?
你的目标是什么:是学习 Linux 系统的设计架构?某个模块的驱动开发?还是仅仅想系统学习一下应用程序编程?
最后,给他推荐了下面这本书:
后来我又想了一下自己的选书、读书过程,索性总结一下,给需要的小伙伴参考一下。目的是抛砖引玉,如果您有更好的实践方法,还请多多分享!
二、选书
1. 重视选书的过程
在现在的市场上,无论是哪个领域的技术书籍,都是一抓一大把,其中就一定存在质量、讲解水平参差不齐的情况。
我们作为学习者来说,一定要擦亮眼睛,多花一点时间来选书,要重视选书这个过程。
如果随便选了一本书,学习到一半的时候才发现内容不对自己的胃口,那就是在浪费时间、浪费生命。
如果在刚开始就能够花点心思和时间,学习起来能进入心流的状态,对于个人的知识理解绝对是事半功倍的效果。
换句话说,选书的时间绝对不能节省。
2. 如何选书
我一般选书的途径有三个步骤:
Step1:广撒网
根据想看的技术主题,在 google 搜索引擎中,搜索相关的关键字。
有时候我会特意加上 CSDN、知乎等关键字,这两个平台中,推荐的技术性书籍质量都是比较高的。
另外,需要注意推荐者的一些背景资料,你可以浏览一下他的一些文章,从文章内容中如果能判断出作者的专业深度、广度都比较厉害,那么他的推荐权重就比较高。
基本上看了十几篇推荐文章,就可以梳理出这个技术主题排名靠前的几本书了。
Step2:看评价
针对梳理出来的几本书,到豆瓣、当当网上找一下对这几本书的评价。
咱们都知道,现在的购物网站上刷好评的比较多,但是好在对于书籍这样的商品,我感觉刷单的很少,也就是说别人对一本书的评价,基本上可以认为是客观的、基于事实的。
大家一般都会从书籍的覆盖范围、难易程度、自己从中的收获,这几个角度来对一本书进行评价。
在这个步骤中,我们就可以对基本候选的书籍在心中有个分数的排序。注意这个排序不是绝对的按照内容的深浅,而是根据自己的专业水平,来确定哪一本书与目前的自己最匹配。
这个时候千万不要高估自己,选择最难的那一本,如果这么做了,不仅仅是浪费时间的问题,更重要的是会导致自己一知半解、严重打击自信心。
经过这个步骤之后,其实已经能够决定要买哪一本书了。
如果排在第一和第二位置的这两本书,在我的心中评分差距比较大,我会直接选择评分最高的第一本书。
如果它俩感觉差不多,那么我会继续下一个步骤,翻一翻样张,看哪一本书的风格更适合自己的胃口。
我之前在学习 C++ 的时候,下面这两本书最后作为候选:
后来在搜索对它俩的评价时发现,第一本书的理论性更强一些,而当时我的主要目的就是系统的把 C++ 11 版本的语法掌握好,因为脑袋里理解的 C++ 已经快变成老古董了,11 版本中的很多语言让 C++ 几乎快变成一门新的语言了。第一本书与我的目的更匹配,所以我就选择了这一本。
Step3:对胃口
在很多卖书的网站上,都会提供目录以及一些样张;如果找不到,那就搜索一下是否可以找到 PDF 文件来浏览一下。
主要的目的就是看作者的写作风格是否对自己的胃口。两本难分伯仲的书籍中,选择自己喜欢的风格,学习起来也会更带劲一些,因为情绪的力量是无法估计的。
注意:不要贪多,只要以其中的一本作为精读的教程就可以了。如果两本你都喜欢,可以都买回来,以其中的一本为主要学习目标,其他作为交叉参考。
另外,我个人还有一个感觉比较不错的选书途径,那就是 B 站的视频评论区。
现在的 B 站,真的是如日中天,从中年油腻大叔到各种二次元,都可以在这里找到自己感兴趣的视频内容。而且 B 站也是我们技术开发人员的福地:越来越多的高质量视频课程都可以找得到,例如:李治军老师的操作系统,侯捷老师的 C++...
在看这些视频的时候,你不妨多看一眼后面的评论,与这个视频相关的其他视频、书籍、博客等等,都有可能被推荐,而且推荐的内容质量一般都比较高。
3. 电子书 or 纸质书
每个人的看书习惯都是不同的,有些人喜欢看视频教程,有些人喜欢看 PDF 电子书,有些人喜欢看纸质书籍,每一种都各有优缺点。
我看书比较喜欢做笔记,如果是 PDF,就在学习过程中画思维导图;如果是纸质书籍,我就会在书上写写画画、记录自己的理解。
根据个人的经验,如果是很厚的书籍(超过 500 页),我会尽量选择纸质书。
因为在学习的过程中,难免会回过头去参考前面的内容,用纸质书籍就比较方便了,只要记住页号,或者放一些书签,很快就可以找到。如果是 PDF 的话,那么得用鼠标下拉、滚动多次才能定位到前面的内容,很不方便,特别是需要多次来回参考的时候。
如果只能选择 PDF 的话,那么就推荐你多用一些屏幕截图工具来帮助你阅读,例如:Snipast、Quicker,我之前推荐过第一款软件,的确很好用,特别是在看文章、写代码的时候。
三、读书
1. 不要怕弄脏书
我是比较喜欢买二手书籍的,有的时候买回来一看,除了前几张有少许的划线和笔记之外,其他部分就跟新书一样,真的是糟蹋了一本好书。
但是到了我手里之后,如果是作为精读教材的,我大概率会把这本书弄得“满目疮痍”。这不是说不爱惜书本,只有做了大量笔记之后,才能记录下自己的学习过程。
如果认为某一本书是经典想收藏,那完全可以买 2 本,一本用来学习,另一本用来收藏。
下面这张图是 C++ Primer 里的涂鸦,这算是很整洁的了(请忽略丑陋的字体):
2. 消灭模糊性、不确定性
在学习的过程中,如果是已经理解的部分就快速读过去;如果是经过自己的思考之后,才理解的部分,就把思考过程中的关键节点信息记录下来;如果自己思考之后还是不理解,这时候千万不要放过自己,除了这本书之外,还可以求助谷歌、求助其他相关书籍。
我个人的经验是这样子:如果某一个知识点总是模棱两可,没有一个确定的理解,总是感觉如鲠在喉。如果经过查找其他资料之后,仍然不能得到让自己信服的理解,那么我就会按照其中可能性最大的那个方向去理解。
随着学习的深入,当发现这个强加给大脑的理解,与其他的知识点矛盾的时候,再回过头来对各种可能性进行再次梳理。经过这样的几个来回,就可以把那些模糊性彻底消灭掉。
3. 一定要做笔记
不知道你是否有这样的体验,在看书的时候,眼睛对大脑说:嗯,这部分内容我掌握了。但是如果让你立刻离开书本,你的手可能又会对大脑说:我写不出来。
做笔记就是强化自己的理解过程,某些知识点现在可能理解了,但是过一段时间极有可能又忘记了。
有些人说书要越读越薄,也有人说书要越读越厚,这其实是从不同的角度来看的。
对于我来说,做笔记就是一个让书越来越薄的过程。
在第一遍看书的时候,可能有 50% 的内容是已经理解的,剩下 40% 的内容是经过自己思考之后理解的(这部分的笔记是重点),余下的 10% 是仍然没有理解的。
那么在第二遍看书的时候,就可以重点看自己的笔记了,把 40% 经过思考后理解的部分再次复习一遍,加深印象,这样就相当于书本变薄了一半。
如果以后还想看第三遍,很可能就只剩下 1/3 -- 1/4 的内容是需要看的,这个时候,你就可以明显的感觉到自己在进步,有很强的成就感。
下面是在学习 Linux 内核内容时做的笔记,以后当我想再复习的时候,只要看这些小卡片就可以了。
4. 怎么确认自己真的懂了
首先,你可以参照解 bug 时的“小黄鸭调试法”,把书本上的内容讲给自己听。注意:是用嘴巴说出声音来给自己听,而不是在大脑里自言自语。
其次,把自己理解的过程总结成文章,这应该是更好的方式。别人通过阅读你的文章,从不理解变成理解了,那就说明你自己是真的懂了。
以上就是我个人的一些学习心得,希望能够对您有一丝丝的帮助。
最后还有一句话送给你:欲速则不达!
星标公众号,能更快找到我!
1. C语言指针-从底层原理到花式技巧,用图文和代码帮你讲解透彻
2. 原来gdb的底层调试原理这么简单
3. 一步步分析-如何用C实现面向对象编程
4. 都说软件架构要分层、分模块,具体应该怎么做(一)
5. 都说软件架构要分层、分模块,具体应该怎么做(二)