怎样学习和阅读技术书籍?

技术的更新换代非常的迅速,作为一个技术人,需要持续不断地学习才能不被淘汰。但是学习没有速成的方法,只可能有一些技巧让我们事半功倍,本文是我对学习和读书的一点思考。

学习是一件「逆人性」的事,如果让你选择是学习枯燥的技术,还是躺在沙发上看电视或者打游戏,相信很多人都会选择后者,想要克服学习的困难和人的惰性,我们就需要给自己设定目标。

目标

  • 5年想要达到年薪50万,需要做些什么?
  • 3年要让自己具备架构师的能力,需要怎样去规划?
  • 想要管理一个团队,又该如何去提升自己?

总之先要定一个短期或长期的目标,如果是长期的,还可以再分解成一个个小的目标,通过目标一步步反推到当下,然后制定好计划,行动就可以了。当能够完成一个个小目标后,就不会觉得那么的「逆人性」了。

同学习一样,我觉得跑步也是件「逆人性」的事,我的方法是,我先报一个几个月之后的马拉松比赛,然后反推,要能完成这个比赛,我一个月大概要有多少跑量,多长时间要能完成5公里,多长时间能达到10公里,像这样跑步就持续下来了。有人会说,我报了马拉松比赛,也可以不去参加呀,这也需要我们自己去找一些不可抗拒的因素,比如:

  • 报名马拉松,是需要报名费的,总不能让钱打水漂吧
  • 马拉松是需要抽签的,如果能中签,这种幸运总不能浪费吧
  • 早早的就发个朋友圈,总不能等着放弃后打脸吧

同样的道理用在学习和读书中也是适用的。

主动学习和被动学习

现在获取知识的方法和途径越来越多了,视频、书籍、博客、公众号、官方文档等等,当我们要学习一门新的编程语言或技术时,我认为书籍是最系统的,一本好的书可以让我们知其然也知其所以然,主动系统地去学习某个知识领域,这是我所理解的主动学习。

而被动学习与之相反,常常是在工作中遇到问题,或者需要引入一个新的技术的时候,临时去网上查,然后进行各种尝试,以程序能跑通为终极目标,并没有理解背后的原理,这样临时找到的一些代码或方案极大可能不是最优解,也会给后人留下大坑。

我个人比较喜欢主动学习,在探究技术细节的时候,可以知道以什么方式来实现便于扩展和维护,又能性能最好;在技术选型的时候,可以不用盲目听网上的人云亦云,有自己的思考和判断。好的书籍和官方文档是我认为能比较好系统学习的方式。

技术书的分类

读技术方面的书籍,不能像看武侠小说一样,如果只是为了完成读书量的任务,囫囵吞枣的通读一遍,起不到任何作用,还浪费了时间。我把技术书籍分为了三类:原理型、实战型、和工具型。

原理型

不会随着时间的推移而过时的技术书籍,我归为原理型,像《设计模式》、《CLR via C#》、《重构》等都属于此类,这一类书籍需要反复多次的阅读,随着经验的增长,不同时期读,会有不同的体会,最终要达到的就是能将知识融会贯通。

实战型

实战型的书籍,随着时间的推移,技术的发展,书里的内容会过时,所以我更推荐的是看相关的官方文档,因为得到的是第一手资料。像In Action系列丛书就是属于实战性。

实战型的书通常章节的前后有较强的关联性,适合从前往后看,而且并不能只是看,要配合书中的讲解做相应的代码演练。

工具型

工具型的就比较简单了,目的型很强,用于查阅,我们可以先了解目录结构,然后泛读全书,没有必要去强行记忆,主要是要了解书中都提供了那些方面的知识结构,以便于在需要用到的时候,能够快速地检索到。熟能生巧,用到次数多了自然就记住了。

阅读方法

阅读技术书籍,目的是为了获取某方便专业的知识,我自己在读技术书籍的时候用到了下面的一些方法。

读前先提问

一本书拿到手后,我一般会先看目录和书结构的讲解,如果章节之间没有连续性,那就可以挑自己感兴趣的章节开始阅读。

阅读前,先可以问自己几个问题:

  • 如果是涉及过的内容,现在的理解是什么?
  • 如果是全新的知识和概念,那么通过这个章节的学习,要能达到什么目的?

然后在阅读的时候,就可以带着这些问题去阅读和思考。比如我们阅读《Javascript高级程序设计》的7.2小节,这一小节是讲闭包,假设我完全不懂闭包,那么我的问题如下:

  • 闭包的概念是什么?
  • 闭包用代码是如何实现的?
  • 什么场景下我们需要使用闭包?
  • 闭包有副作用吗?

然后带着问题去寻找答案。

读中做笔记

俗话说,好记性不如烂笔头,在阅读中根据自己的理解做一些记录,形成自己的知识脉络。这里我推荐使用思维导图来做笔记。

阅读完成时,一张适合你的知识图谱就同步绘制完成。再加以整理,就是一篇适合初学者的入门文章了。当我们能讲一个知识以口头或文字的方式表达出来的时候,说明真正的掌握了。

读后复盘

对于新的知识,读前的提问,可能你阅读完书籍中所有相关介绍,也没有能完全找到答案,没关系,我可以再通过网络搜索,或同类书籍交叉来作为补充,

对于接触过的知识,读完后,我们可以看看自己之前的理解和书中的介绍是相吻合还是有分歧,如果觉得书中介绍的还有欠缺,同样可以采用其他的方式来作为补充。

总之我们的目的是要获取知识,而不是「读完书籍」。