You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
10 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 春节特别放送(三)| 我的学习资料和工具
你好,我是胜辉。今天是正月初二,过年好啊,春节玩得还开心吗?
在之前的课程中,我发现有不少同学啊,都在问我学习相关的话题,比如说:
* 能不能介绍下老师是怎么学习的?
* 老师你有没有推荐学习TCP/IP的书单
* 我是Java工程师怎样可以在网络排查方面快速入门呢
所以趁着这个机会呢,我想来跟你聊聊“学习”这个老生常谈的话题。
其实,极客时间上的牛人太多了,在学习上呢,可能都比我更有经验,也更有成就,那我这里就抛砖引玉吧,一点小小的总结和回顾。如果能帮到你一点点,让你在这个新春时节里觉得有一丝收获,那我会跟你一样开心。
## 做笔记:形成理论体系
你有没有发现,当你刚读完一本书的时候,印象还是挺深的,也觉得在这块领域里学到了不少。但是随着时间的推移,对这些知识的印象逐渐模糊,最好笑的是,有时候自己甚至会怀疑:这个技术挺难懂的,也没什么印象了,难道真的是我以前学过的东西吗?
造成这个问题的原因有很多,我觉得其中比较重要的原因,是没有做好笔记。人接收信息的渠道有很多种,比如听说读写,比如实践操作等等。那其中,写应该是比较容易做到的,所以我也挺早就养成了记笔记的习惯。
最早我是在笔记本电脑上直接记录文档比如用Windows的记事本或者Word文档。当然它们的缺点也显而易见在这个移动办公的时代文档不能在手机等移动设备上查看和编辑真是一大缺憾。
所以这几年,我就以**在线笔记类App** 为主了我也用了好几种App包括印象笔记、有道云笔记、石墨笔记等等。这些App都支持电脑端和手机端基本上到哪儿都能看笔记或者编辑笔记十分方便。可以说是让学习深度“侵入”到我的生活中了但我也乐在其中。看一点笔记又多懂了一点以后也可以忘得少一点这个投入值得。
就以印象笔记国外版叫Evernote为例你可以在笔记本、手机、iPad等终端上安装它然后多设备同步。出门在外只要你手机上有印象笔记就可以继续学习。特别是它的Markdown笔记支持代码格式在阅读一些片段代码的时候很有用。另外它还有个浏览器插件当你看到感兴趣的网页时你就用这个插件把内容给保存为笔记非常实用。比如像下面这样我可以把网页中的文稿部分单独保存为一篇笔记以后就可以在印象笔记中查看它了
![图片](https://static001.geekbang.org/resource/image/7e/7f/7ec201e39ba79bd3d0d67ded7723e87f.jpg?wh=1096x343)
**思维导图**也是一类比较有用的学习工具。很多知识未必适合用文档或者表格来做精确的整理但用思维导图来概括和记录却更加随性、灵活。我一般在电脑上用XMind。比如下面就是我学习Envoy时候梳理的思维导图
![图片](https://static001.geekbang.org/resource/image/c4/0c/c400d165f183db6f2c129a246a27510c.jpg?wh=1673x782)
我觉得,用思维导图的好处之一就是,如果要找某个知识点,很容易从中心点“顺藤摸瓜”找到它。当然好处也不止于此,思维导图的本质,是利用了人的大脑在接收信息方面的特点:**大脑对图形的记忆效率远远超过文字**,通过思维导图,这些知识从文字变成了“树枝图像”,可以更加深刻地印到大脑里。
我在学习一个新领域的知识的时候经常会新建一个思维导图文件然后不断往里添加知识的枝干之后要复习的时候一眼就能看到这个体系的脉络确实很有帮助。除了XMind国内有个叫MindMaster的思维导图产品也不错。
当然,你在工作中同样可以使用思维导图。比如我几年前做的一个比较大的项目,涉及因素众多,一开始我就是用思维导图把各个方面摸清楚的。对着思维导图,我比较容易地抓到了问题的关键,之后推进起来就比较容易了。推荐你也可以试试。
## 用正确的方法找学习资料
现在这个时代,知识爆炸乃至泛滥,我们在网上随便一搜,可能正确的和错误的知识各占一半,这种惊人的比例,让我们不得不认真审视学习资料来源的问题。有时候找不到信息还算好的,就怕找到的是错误的信息,浪费时间不说,还让错误的知识占据了大脑,那正确的知识就进不来了。所以,在寻找学习资料方面,我的建议有这么几个:
* **英文原版**
咱们最好加强一下英文,然后阅读原版书籍。这倒不是否认国内翻译者的贡献,而是相对来说,原版的意思会更加贴近原意,然后时效性也更强一点。甚至有些不错的书,未必会有中文译本,特别是一些技术论文,那你要等待中译版几乎是不可能了。你不能总是期望有“野生翻译君”来帮你。
其实,技术类的英文不是太复杂,一旦熟悉了技术名词就会容易许多。再加上我们学习的编程语言也都是英文的,我想你基础再差也不会差到哪里去,所以还是要多一点信心,只要你愿意去尝试,阅读英文技术文章或者书籍都不是难事。从它的收效来说,你的“投资”绝对值得。
* **要读经典**
现在知识碎片化的趋势越来越明显,不可否认,有时候一小段文字也能给我们不少启迪。不过,要在自己头脑里构建一个扎实并且全面的技术蓝图,还是离不开对经典的研读。
就拿TCP/IP来说我还是推荐经典的Richard Stevens等人写就的[《TCP/IP详解》](https://book.douban.com/series/12438),开发的同学可以看[《UNIX网络编程》](https://book.douban.com/subject/1500149)。在大多数情况下读《TCP/IP详解》第一卷应该就满足日常排查的需求了。在操作系统方面你也可以读一下[《Linux系统编程》](https://book.douban.com/subject/3907181)作者是写过多本技术畅销书的Robert Love他本人也还年轻是一名八零后。
不过,如果你平时开发任务很忙,或者网络基础比较薄弱一点,一下子读大部头确实相对困难,那么你可以选择稍微简单一点的入门书。比如[《图解HTTP》](https://book.douban.com/subject/25863515)和[《图解TCP/IP》](https://book.douban.com/subject/24737674),这两本书的作者都来自日本,用了比较多的示意图来展示知识点。这跟我前面谈到的思维导图就很类似,图形会给大脑留下更加深刻的印象,所以用这两本来入门也是不错的选择。
![图片](https://static001.geekbang.org/resource/image/6d/cd/6d029a0d239bb393a13975478bfa9bcd.jpg?wh=872x447)
* **要找权威来源**
如果我们随便去网上搜索可能出来很多个人博客不少内容是抄来抄去良莠不齐。我建议你直接到比较权威的站点去查看。比如以HTTP协议来说要了解各种header和返回码的规范细节我建议可以去这里看[HTTP | MDN (mozilla.org)](https://developer.mozilla.org/en-US/docs/Web/HTTP) 。
* **要读RFC**
另外一块很大的内容同时也是很容易把你和其他人拉开差距的地方就是RFC文档。我经常看到很多人会为了一个技术点争论不休事实上这个东西就在RFC上清清楚楚地写着只要用心的话去找到文档仔细读一下就行。也就花一点时间读一下文档就能收获一个“专业”的对外形象你应该更有动力了吧
另外RFC文档一般不是太长内容精练基本上没什么废话所以阅读的投入产出比还是挺高的这也是我推荐你阅读它的另一个很重要的原因。
* **要读源码**
最后一块内容,就是内核源码。这是因为,书相对来说更新起来不是那么及时,看源码可以知道最新的行为。另外,还有两个问题你不得不考虑:
* 有些情况没有在RFC里面规定那这些情况在现实世界里又是如何运作的呢
* RFC的这些规范在代码层面是如何具体落实的呢
比如我们最近遇到的一个小困惑。我们发现TCP三次握手里面第二个报文也就是SYN+ACK它的IP ID居然是0。
![图片](https://static001.geekbang.org/resource/image/b1/a7/b1c76b580c70b24f9d537154f5df27a7.jpg?wh=374x167)
我们就直接查Linux内核源代码确认是对端Linux自身的行为了。这样的例子有很多。总之脱离了代码谈网络总还是会有盲区。
## 做中学,学中做
“纸上得来终觉浅”我们可以在测试环境中不断把自己学到的知识通过实验进行验证加深印象。比如对于TCP/IP的各种行为你就可以一边curl一边tcpdump观察输出的报文细节再结合自己学到的理论看看是否能解释通了如果还有疑问那么恭喜你又可以进步了人学习的过程不就是一个不断发现漏洞不断弥补的过程吗
如果在实际工作中遇到网络问题或者你怀疑是网络引起的问题那么也是很好的机会。你可以参考我在课程里介绍的步骤比如做抓包然后Wireshark打开做分析。对着看得见的报文来学习网络协议这个体验确实比单纯看书或者RFC有趣得多也更容易坚持。这也是我的一个小秘诀分享给你。
另外你也可以参考这么一条学习和实践路线来逐步深入掌握TCP/IP网络知识
![图片](https://static001.geekbang.org/resource/image/5f/cb/5f5203c9cc875bef70d44484699264cb.jpg?wh=1920x538)
好了,我的学习资料和学习工具,大概就介绍到这里。欢迎你畅所欲言,在留言区里分享出你认为好用的学习方法,相信我们都可以学到一大筐非常好用的工具和资料,我也很期待!