你好,我是悦创。

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

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. 做好练习

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

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

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

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

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

  1. 一篇文章指明做JavaWeb项目需要的前置知识+完整项目初解读(萌新必看,十分友好)

    前言 过了web这个阶段了,项目也完成了的我想给各位后来者总结一下我整个项目从开始到结束的经验,当然,也不是一帆风顺,报错有时候折磨的要死,废话不多说,现在就开始吧. 本文一共分为两个部分:纯理论科普 ...

  2. 学好WindowsServer技术的几大秘籍

    作为一名介于优秀和不优秀之间的51cto论坛WindowsServer版块版主,我很惭愧,最近没有为大家带来有价值的WindowsServer分享技术文章,希望这篇文章能为更多希望学习WindowsS ...

  3. 03-1 手敲八千字,认识垃圾收集器必须清楚的前置知识【垃圾收集器的内存分配策略】

    03-1 50问!了解垃圾收集器必须清楚的前置知识--垃圾收集器的内存分配策略 author:陈镇坤27 创建时间:2021年12月27日01:58:45 字数:7932 文章目录 03-1 50问! ...

  4. 【软件创新实验室2021年暑假集训】Java技术培训——Java前置知识学习

    [软件创新实验室2021年暑假集训]Java技术培训--Java前置知识学习 文章目录 [软件创新实验室2021年暑假集训]Java技术培训--Java前置知识学习 前言 一.了解计算机 1.计算机的 ...

  5. 【软件创新实验室2021年寒假集训】Java技术培训——Java前置知识学习

    系列文章目录 [软件创新实验室2021年寒假集训]汇总篇 20级Java培训 第一天:[软件创新实验室2021年寒假集训]Java技术培训--Java前置知识学习 第二天:Java基础(一) 第三天: ...

  6. MQ消息队列之前置知识

    目录 一.前置知识 二.MQ前置知识 1.MQ作用 2.MQ对比 3.MQ的缺点 4.产品选型 一.前置知识 当今互联网项目微服务架构成为主流,使用微服务架构,在高并发场景下,服务之间的通信问题是我们 ...

  7. 从零开始学WEB前端——前置知识以及环境搭建

    ??项目介绍 先做个自我介绍,本人是一个没人写前端所以就自学前端的后端程序员??.在此项目中我会和大家一起从零基础开始学习前端,从后端程序员的视角来看前端,受限于作者的水平本项目暂时只会更新到前端框架 ...

  8. 如何学好计算机应用,怎么样才能学好计算机应用技术

    怎么样才能学好计算机应用技术 怎么样才能学好计算机应用技术?对于任何一门学科的学习都是没有技巧的.因为计算机应用技术是一门实践性很强的学科,不仅需要理论知识的支持,还要多进行实践,这样你的技术能力才会 ...

  9. netty入门前置知识-NIO

    netty入门前置知识-NIO Netty简介 Netty 的介绍 Netty 的应用场景 互联网行业 游戏行业 大数据领域 其它开源项目使用到 Netty Netty 的学习资料参考 Java BI ...

最新文章

  1. iptables基础——链与表
  2. LIVE 预告 | 快手宋洋:千亿特征,万亿参数,快手推荐精排模型的发展史
  3. ping的实现和代码分析
  4. 角色操作-角色添加代码实现
  5. 基于USB通信的开关量输入输出板
  6. [读码时间] 记住密码提示框
  7. QSrcollBar样式表设置
  8. 想搞定大厂面试官?4面阿里拿到P7Offer通用流行框架大全
  9. dbeaver 视图有一个x_《工程制图》——视图、剖视图、断面图、局部放大图
  10. linux密码特殊字符识别
  11. 实习踩坑之路:Mybatis写的sql语句有<符号的问题导致项目启动失败以及count(*)怎么对应到某个实体类的字段
  12. Java 静态代理
  13. 程序员王不留到底干了啥?!
  14. candence的图纸大小设置_Candence基础知识1(CADENCE从原理图到PCB步骤 )
  15. USB网卡收发数据分析
  16. 物理隔离与数据交换-网闸中的核心技术
  17. FDC2214学习笔记
  18. 是否每个大学生都有一段被学校强制实习,当作廉价劳动力的经历
  19. JAVA结合AE(Adobe After Effects)实现类似于传影(视频DIY)的核心功能,程序也可以是艺术。
  20. 【dotnet】dotnet命令创建一个console

热门文章

  1. bzoj5144 [Ynoi2018]末日时在做什么?有没有空?可以来拯救吗?
  2. 为什么通证经济系统设计如此重要 | 报名
  3. 基于MyEclipse+Tomcat+SqlServer+JSP开发得网上招标系统
  4. 基于JSP的网上招标系统的设计与实现(含论文)
  5. 人脸识别/车牌识别系统视频智能分析平台EasyCVR如何配置在按需模式下只拉取子码流?
  6. C语言16位定标,DSP定标方法
  7. 3dMax 螺旋线桌子
  8. 在生活当中过得不如意也就算了
  9. 7成居民以为房价高难承受 出资志愿上升
  10. 半导体设备中制冷系统的压力和温度准确控制解决方案