关于技术书籍,我是这么来选书和看书的

文章目录

    • 一、前言
    • 二、选书
        • 1. 重视选书的过程
        • 2. 如何选书
        • 3. 电子书 or 纸质书
    • 三、读书
        • 1. 不要怕弄脏书
        • 2. 消灭模糊性、不确定性
        • 3. 一定要做笔记
        • 4. 怎么确认自己真的懂了

一、前言

前几天有同事过来,让我推荐一本 Linux 系统的书籍。

我就问他 2 个问题:

  1. 你想学习 Linux 哪一个层次:内核层?驱动层?应用层?

  2. 你的目标是什么:是学习 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. 都说软件架构要分层、分模块,具体应该怎么做(二)

热门文章

暂无图片
编程学习 ·

exe4j详细使用教程(附下载安装链接)

一、exe4j介绍 ​ exe4j是一个帮助你集成Java应用程序到Windows操作环境的java可执行文件生成工具,无论这些应用是用于服务器,还是图形用户界面(GUI)或命令行的应用程序。如果你想在任务管理器中及Windows XP分组的用户友好任务栏…
暂无图片
编程学习 ·

AUTOSAR从入门到精通100讲(126)-浅谈车载充电系统通信方案

01 引言 本文深入研究车载充电系统策略,设计出一套基于电动汽车电池管理系统与车载充电机的CAN通信协议,可供电动汽车设计人员参考借鉴。 02 电动汽车充电系统通讯网络 电动汽车整车控制系统中采用的是CAN总线通信方式,由一个整车内部高速CAN网络、内部低速CAN网络和一个充电…
暂无图片
编程学习 ·

CMake(九):生成器表达式

当运行CMake时,开发人员倾向于认为它是一个简单的步骤,需要读取项目的CMakeLists.txt文件,并生成相关的特定于生成器的项目文件集(例如Visual Studio解决方案和项目文件,Xcode项目,Unix Makefiles或Ninja输入文件)。然…
暂无图片
编程学习 ·

47.第十章 网络协议和管理配置 -- 网络配置(八)

4.3.3 route 命令 路由表管理命令 路由表主要构成: Destination: 目标网络ID,表示可以到达的目标网络ID,0.0.0.0/0 表示所有未知网络,又称为默认路由,优先级最低Genmask:目标网络对应的netmaskIface: 到达对应网络,应该从当前主机哪个网卡发送出来Gateway: 到达非直连的网络,…
暂无图片
编程学习 ·

元宇宙技术基础

请看图: 1、通过AR、VR等交互技术提升游戏的沉浸感 回顾游戏的发展历程,沉浸感的提升一直是技术突破的主要方向。从《愤怒的小鸟》到CSGO,游戏建模方式从2D到3D的提升使游戏中的物体呈现立体感。玩家在游戏中可以只有切换视角,进而提升沉浸…
暂无图片
编程学习 ·

flink的伪分布式搭建

一 flink的伪分布式搭建 1.1 执行架构图 1.Flink程序需要提交给 Job Client2.Job Client将作业提交给 Job Manager3.Job Manager负责协调资源分配和作业执行。 资源分配完成后,任务将提交给相应的 Task Manage。4.Task Manager启动一个线程以开始执行。Task Manage…
暂无图片
编程学习 ·

十进制正整数与二进制字符串的转换(C++)

Function one: //十进制数字转成二进制字符串 string Binary(int x) {string s "";while(x){if(x % 2 0) s 0 s;else s 1 s;x / 2;}return s; } Function two: //二进制字符串变为十进制数字 int Decimal(string s) {int num 0, …
暂无图片
编程学习 ·

[含lw+源码等]微信小程序校园辩论管理平台+后台管理系统[包运行成功]Java毕业设计计算机毕设

项目功能简介: 《微信小程序校园辩论管理平台后台管理系统》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 本系统包含微信小程序做的辩论管理前台和Java做的后台管理系统: 微信小程序——辩论管理前台涉及技术:WXML 和 WXS…
暂无图片
编程学习 ·

树莓派驱动DHT11温湿度传感器

1,直接使用python库 代码如下 import RPi.GPIO as GPIO import dht11 import time import datetimeGPIO.setwarnings(True) GPIO.setmode(GPIO.BCM)instance dht11.DHT11(pin14)try:while True:result instance.read()if result.is_valid():print(ok)print(&quo…
暂无图片
编程学习 ·

ELK简介

ELK简介 ELK是三个开源软件的缩写,Elasticsearch、Logstash、Kibana。它们都是开源软件。不过现在还新增了一个 Beats,它是一个轻量级的日志收集处理工具(Agent),Beats 占用资源少,适合于在各个服务器上搜集日志后传输给 Logstas…
暂无图片
编程学习 ·

Linux 基础

通常大数据框架都部署在 Linux 服务器上,所以需要具备一定的 Linux 知识。Linux 书籍当中比较著名的是 《鸟哥私房菜》系列,这个系列很全面也很经典。但如果你希望能够快速地入门,这里推荐《Linux 就该这么学》,其网站上有免费的电…
暂无图片
编程学习 ·

Windows2022 无线网卡装不上驱动

想来 Windows2022 和 windows10/11 的驱动应该差不多通用的,但是死活装不上呢? 搜一下,有人提到 “默认安装时‘无线LAN服务’是关闭的,如果需要开启,只需要在“添加角色和功能”中,选择开启“无线LAN服务…
暂无图片
编程学习 ·

【嵌入式面试宝典】版本控制工具Git常用命令总结

目录 创建仓库 查看信息 版本回退 版本检出 远程库 Git 创建仓库 git initgit add <file> 可反复多次使用&#xff0c;添加多个文件git commit -m <message> 查看信息 git status 仓库当前的状态git diff 差异对比git log 历史记录&#xff0c;提交日志--pret…
暂无图片
编程学习 ·

用Postman生成测试报告

newman newman是一款基于nodejs开发的可以运行postman脚本的工具&#xff0c;使用Newman&#xff0c;可以直接从命令运行和测试postman集合。 安装nodejs 下载地址&#xff1a;https://nodejs.org/en/download/ 选择自己系统相对应的版本内容进行下载&#xff0c;然后傻瓜式安…
暂无图片
编程学习 ·

Java面向对象之多态、向上转型和向下转型

文章目录前言一、多态二、引用类型之间的转换Ⅰ.向上转型Ⅱ.向下转型总结前言 今天继续Java面向对象的学习&#xff0c;学习面向对象的第三大特征&#xff1a;多态&#xff0c;了解多态的意义&#xff0c;以及两种引用类型之间的转换&#xff1a;向上转型、向下转型。  希望能…