学好一类技术,需要掌握哪些前置知识?

答疑·限时优惠

如果,你想让我看见你的疑问并且百分之百的回答。可以加入我的知识星球。
AI悦创·进化岛
AI悦创·进化岛

img

你好,我是悦创。

写技术类文章已经有一段时间了,随着涉及的技术越来越深,很多同学觉得学习的难度也越来越大了,并私信我提出了一些问题。有些问题,是我之前学习也碰到过的或者我思考过的;也有些问题是我没想到的,但是这些问题归根结底其实就是一个,如何更好地去学习操作系统,学习这门课。所以,今天我就给你讲讲,我认为学习这个操作系统或者学习其它技术的一些好的方法和正确的态度。接下来,我将以学习操作系统为例,其他技术也可以用此方法。

1. 态度:不要等一切都准备好了再前行

很多人问到,“学习这个操作系统需要什么基础”,说实话,我在学习这个操作系统的时候,和小伙伴也专门讨论过这个问题。为此,我曾经专门研究过大学的课程设计。大学的操作系统前置课程有程序设计基础、数据结构与算法、计算机组成与体系结构、编译原理等。这几门前置课程,几乎每一门都非常“硬核”,学习难度和大多数人的掌握程度往往是成反比的。

你可能要问了,我是不是要把这些前置课程都搞定了才能学操作系统呢?当然不是。这些课程它们本身就很难,除此之外,它们也有前置课程。如果这样,你就会发现你永远开始不了。

如果把一切都准备好了再前行,那我们永远迈不出第一步。

你可能会说,没有这些基础知识,我每看一篇文章,知识就铺天盖地席卷过来,仿佛每一个知识点都准确地打在了自己的盲点上,这该怎么办呢?

我非常能理解这种心情,而我想说的是,你不需要对这几门前置课程有非常深入的理解,你其实就可以学好这门课。但如果你是编程零基础,学习起来的确比较困难。

毕竟我们不管是自学还是看视频都是可以说是大学的操作系统课,之后分享的一些内容也将更加面向真实的操作系统分析,因而更深入一步,加上操作系统这门课本身的技术深度和知识点琐碎程度,就是很高的,所以感觉就更加困难一些。

这有点像咱们平时玩游戏,作为主人公,你既不能完全没有任何装备和法术就开始,也不能等练级练到满,将整个地图都了解清楚才开始。

你只要有一个初始装备,例如一把木剑、一套基本的法术就可以开始了。先上路,之后在探险的路上,慢慢摸清地图,积累装备,训练法术,最终 PK 终极 Boss。

这么一来,想要学好操作系统,我们要解决的其实就是这样两个问题:第一是初始装备问题,也就是说前置知识应该掌握到什么程度;第二就是练级攻略问题,也就是掌握这些操作系统知识的方法。

2. 资料:C 语言 + 数据结构和算法 + 编译原理 + 计算机组成

学习操作系统需要对 C 语言基础知识、数据结构和算法、编译原理以及计算机组成原理有一些了解,这样学起来就会更轻松。

因为我个人是从 C 语言转向 Java 的,我觉得 Java 和 C 语言的基本语法没有太大的差别。

仅仅就学习这个操作系统来讲,其实你只要有计算机二级的那些 C 语言基础知识基本就够了。如果你要严肃地学好 C 语言,几乎每个前辈都会建议你从《C 程序设计语言》这本书学起。这是一本很薄很薄的书。如果你有编程基础,但是之前没有学过 C 语言,稍微翻一翻它,了解一下 C 语言的基本编程方法也就足够用了。

这本书里,第 1 章到第 3 章涉及类型、运算符、表达式、控制流,这些和其他语言区别不大,你应该很容易理解。你重点看第 4 章函数与程序结构、第 5 章指针与数组、第 6 章结构,这样基本就可以了。

对于数据结构和算法,业界有大量砖头一样厚的书籍。如果从头学起,你可能会比较崩溃。其实你只要了解表、栈、队列、树,这些基本的内容就够用了。现在学习资料这么多,想学会这些内容不是难事,关键看你是不是用心,是不是真心想要学习。既然是基于 C 语言的数据结构和算法,我这里给你推荐一本书《数据结构与算法分析:C 语言描述》。在这本书里,你重点看第 3 章表、栈和队列和第 4 章树,基本就可以了。

编译原理和计算机组成,这些都是操作系统的基础。在之后的文章里面我也有简单的阐述,你只要掌握我平时说的那些,基本上足够了。计算机组成与系统原理的书,相对来说都比较复杂。

一般的汇编语言的书都会简单介绍 x86 的机制,以及简单的汇编语言。例如,《汇编语言:基于 x86 处理器》这本书里,你可以重点看第 2 章 x86 处理器架构和第 3 章汇编语言基础,掌握这些基本就可以了。

所有基础知识,本是一家。如果有精力,推荐你认真学习《数据结构与算法》《计算机组成原理》这两个知识,对我们这门课会非常有帮助。

3. 方法:三遍学习法 +PPT 笔记法

读书有一个理念,是先把书读厚,再把书读薄,这往往是针对有一定基础的同学的学习方法,如果你原来没有研究过操作系统,或者没有基于 Linux 的 API 进行过程序设计,要想看懂每一行代码的确是非常难的事情。所以学习这门课程,可以采取 “先读薄,再读厚,再读薄”这样的三遍学习法。

所谓的先读薄,可以理解成:了解操作系统的原理,一开始不要纠结一城一地的得失。不要死抠每一个代码细节,而重点了解主要的流程和原理。

学习是循序渐进的过程,不要妄想一遍就掌握所有。我自己在学习的时候,经常是秉持着这么一个方法:刚开始接触一个新东西,多去看别人的学习方法,从别人的方法中摸索中“主要矛盾”和“次要矛盾”,每一遍学习都提纲挈领地抓当前的主要矛盾,然后一遍一遍去学这个内容,当然每一遍的主要矛盾可能都不太一样。

第一遍

比如在第一遍学习这门课的时候,你没必要把文稿或书籍中的代码细节当成学习目标,只把它看作一个对操作系统原理的佐证就行了。我学操作系统这个地方是这样做的,你看代码,大概就能看出来,它真的就是这样做的。这样一方面先形成一个大致的印象,另一方面先在心里对原理有一个具象的理解。至于代码中每一行的意思,这一遍不要纠结。

另外,一般文稿或书籍中的代码中有很多注释,如果实在看不懂代码,那你就阅读注释就行了,然后按照注释中的意思,浏览一下代码大概的意思就可以了。尤其是对于汇编语言,更是这样。比如说压栈操作,你看到 push,就理解是正在压栈,然后后面有注释说,压入了哪个栈。这时候,你暂时没必要纠结,为什么这行命令压入的是这个栈。

当你把原理理解得差不多的时候,第一遍基本就完成了。

第一遍相当于咱们打游戏,到了一个新的场景,先到处走走看看情况,不纠结和妖怪的对战。

第二遍

接下来的第二遍,就相当于我们需要完成在游戏里面的任务,碰到怪就打怪,碰到迷宫走迷宫了。这也是把书读厚的方法,就是见山开路,遇水搭桥。

这一遍并不需要你把所有不懂的知识都找到一本砖头厚的书全部看完,这样你会迷失在庞大的知识体系里面,丧失方向,偏离目标,你会忘了为什么要看这本书,甚至会疑惑通过这本书到底能不能帮你理解操作系统的某个知识。

所以把书读厚,还是要以操作系统「或学习其他技术」的知识体系为主线,遇到不懂的知识点的时候,通过搜索引擎,看我的博客「www.aiyc.top」等方式,达到了解这个知识点就可以了。一旦了解到能够帮助你理解操作系统的程度,就不需要再深入下去,马上回到主线,攻克下一个知识点。

这里可以分享一下我的朋友「Alex」学习大量陌生知识方法,就是记笔记,我一般是用 PPT 来记。当读了每篇文章的一个小节的时候,甚至可以更细到几个自然段,就像咱们学语文的时候划分自然段一样,你可以为这一段知识做一页 PPT,PPT 的标题就是这一段的段落大意,能够总结出段落大意。其实你已经知道这一段主要是做什么的,只不过很多细节的知识点还不清楚,这样将来通过 标题浏览 PPT 的时候,就很容易把握整篇文章的总体思路。「我一般是用 Markdown」

接下来在这页 PPT 的正文中,将所有的知识点都列出来,其中不懂的部分编个号。

例如,知识点 17,然后接下来的几页 PPT,我们就以知识点 17 为标题,开始查所有能够帮助你了解这个知识点的文章和书籍,将内容贴进来,直到你发现你已经懂了这个知识点,当然知识点可能还要再套知识点,接着编号就行。当从这个知识点的 PPT 返回的时候,你知道你理解了知识点 17,接下来应该攻克知识点 18 了。当所有的知识点都趟过去,你会发现这是一个特别长的 PPT,没有关系,你把所有的以知识点为标题的 PPT 页都放在最后做附页,再次看整篇文章,就会有一种一马平川的感觉。如果暂时忘了,可以到附页中去查看自己记的笔记,很容易就可以回忆起来。

这个特别长的 PPT 就是起到了把书读厚的作用。

第三遍

第三遍再读薄,是我希望能够达到这样一个效果。经过前两遍的学习,现在你对知识的细节和整体的脉络都应该有了一定了解。因此这第三遍无需面面俱到,你需要把这些知识真正变成你自己的东西。

之后自己对每个知识点做一张图对这些知识做一个总结。这些总结图代表了你对知识的梳理和理解。之后复习你可以先试着看着自己的图来复习,之后,你可以自己尝试去跟别人讲述这些内容。把知识真正装进你自己的脑袋里。等整个操作系统「技术」全部结束的时候,你只需要对着这些图,将整个操作系统的知识串下来,基本就融会贯通了。

4. 做好练习

你应该有感觉,操作系统「任何技术」的知识量非常大。但凡想要讲的面面俱到,都需要一本砖头厚的书籍才行。很多文章不可能和书籍一样「有些书籍也是」,主要是基于某个技术给你讲,作者是怎么理解这个技术的。因而,很多作者讲的肯定是最核心的内容「也有水的,我前老板就是」,很多旁支的东西需要你自己去预习和复习。

每个技术一般都有练习题的,练习题往往都是对当前部分技术的补充,也是对后面要学知识的准备,所以你一定要重视做练习。每个练习题都去认真去做一做题,思考题目背后的知识点。

最后,我想借用陈皓的一句话,“学习不是为了找到答案,而是为了找到方法”。哪怕我已经尽力为你考虑周全,但是没有你自己主动学习,去钻研,去下苦功寻找适合自己的方法,成功是不可能自己找上门来的。希望你可以为自己而努力。

好了,今天我想分享的就是这些。不知道我今天的分享哪个地方对你最有用呢?你在学习技术的过程中还遇到过什么问题呢?

AI悦创·创造不同!
AI悦创 » 学好一类技术,需要掌握哪些前置知识?

Leave a Reply