混沌学堂
...
第一期
第一节
- 我们到底该如何学习?
- 我们需要梳理出一个主脉,站在一个大的视角看待问题,也许这样我们才知道路在何方
- 我们讲究推理,讲究溯源
- 闻到有先后,术业有专攻。
- 图灵模型是一个状态机?
- 计算机中的二进制解决的问题是信息的表示,只不过二进制表示容易被计算机解析罢了
- 冯洛伊曼开创了另外一个01世界
- 提供容错空间
- 计算机是我们与这个异世界的通道
- 类比思维很重要
- 不知道概念的时候,直接打开一本书
- 了解下层的东西,有助于学习上层的东西
- 知识的组织结构就和一颗树一样。
- 新的东西出现,因为你没有其底层基础,找不到入口点,就无从下手。
- 抓住本质,学习轮廓(了解概念,了解历史,了解为什么) (对于下层的东西的学习思路)
主要的内容
这一节的主要内容大概可以分为三个部分,一个是聊聊为什么会出这个系列,一个是对计算机世界的推理,一个是分享自己的学习思路。 老黄出这个系列的原因就是希望我们能够抓住整个计算机的主脉,能够拥有一个计算机的上帝视角,为我们指出一条前进的道路。对计算机世界的推理如下: 图灵的一个想法(希望机器可以代替人完成一些工作)让他想出了一个抽象的计算模型(图灵机),而冯洛伊曼在此基础上利用电学和数论的知识对其进行了一个具体的实现即冯洛伊曼体系结构。也开创了一个"新的世界"(我称为01的世界),在这个世界中用于信息的表示,信息的传递用的都是0101的数字串,也就是我们常说的二进制。为了给信息进行加工,以及能够对现实世界产生影响,冯洛伊曼指出了计算机的体系结构,也就是计算机由哪几部分组成?计算机由运算器,控制器,存储器,输入输出。其中运算器,控制器,存储器都是用于信息的加工,而输入输出是能够与现实世界产生交互。我们依据冯洛伊曼体系结构实现了真实的计算机(一个控制01世界,与01世界交互的一个窗口)计算机的组成完全按照冯洛伊曼体系结构制造,比如CPU就是控制器与运算器,内存和硬盘就是存储器,外部设备(比如,鼠标,键盘,显示器)就是输入输出设备。
感触的内容
- 闻道有先后,术业有专攻。你现在没有到达一个高度,不代表你之后到达不了。
- 存在即合理,任何东西的存在都有其原因,有其作用。我们需要了解这部分内容。
- 之所以采用二进制作为"01世界"信息交换和传递的媒介,只不过是因为我们利用电学和数论创造的"01世界"更加容易解析二进制所表达的信息而已。
- 知识犹如一棵树,我们需要先掌握主干,到真正需要的时候再去了解细枝,了解细节。
- 了解下层的东西,有助于我们学习上层的东西,越是在下面的东西变化就越小,越是上层的东西变化就越大。
- 我目前的工作处于一个高度抽象的环境中,所以我需要了解更多底层的内容。
- 只有跳出来看全局,才能深进去学细节。
相关的问题
暂无...
第二节
- 攻乎异端,斯害也已。 方向和努力都很重要
- 要有点自信,自信很重要
- CSAPP 是进入计算机世界的九阳真经
- 基础至上
- 这个东西不是我不懂,是我还没有学。我学了我一定会
- 抓不变应万变
主要内容
先回顾了一下第一节的内容,从计算机的硬件(CPU,内存,硬盘,外设)出发,引出了第一门研究计算机如何工作的第一门学科,计算机组成原理,通过查看经典的计算机组成原理的书籍,发现计算机组成原理与计算机体系结构,以及嵌入式开发密切相关,你中有我,我中有你。并且我们知道了在整个计算机科学的体系中,计算机组成原理这个学科是最基础,最根本的学科。然后我们开始思考一个问题,"我们应该如何控制计算机?",根据第一节的内容我们知道,CPU充当着控制器的角色,所以如果我们可以操纵CPU,那么整个计算机我们就可以控制了。就类似于,我们控制了一个帮派的老大,这个帮派的其他成员也得听命于我。那么接下来的问题是,我们如何控制CPU呢?其实和我们开发后端程序差不多,都会提供一些方式来操作CPU,而这些操作方式由制造CPU的人来指定。人们把操作CPU方式的合集叫做ISA指令集架构。指令的特点:利用二进制来表示指令。所以直观上,我们看到的就是一堆0101的数字。正是因为这些0101的数字,导致我们在编写程序的时候极其容易出错,而且排查错误也非常难。于是人们发明了汇编语言,通过更加贴近人类的方式编写程序,由汇编器将汇编语言转换为机器语言(就是上文提到的0101的数字)
感触的内容
- 具体的技术其实是每个领域的实现,比如Java后端,Go后端,但是终归是Web后端,用到的领域知识都是一样的,唯一不同的就是实现这些领域内容所用的开发库,开发语言,开发工具不同而已。但是领域知识占80%,具体的技术实现只占20%
- 在计算机的世界中,分层的架构遍布整个世界。计算机世界中有句很厉害的话:在计算机中,没有什么问题是不能加一个中间层来解决的。
相关的问题&待做的事情
- 梳理出计算机的主脉,并标记出需要哪些学科的知识,以及我所知道的好书。 ✅ 2025-01-31
第三节
- 从下类比往上
- 学底层不需要学上层,因为底层的内容放在上层一样适用,只不过额外增加了一个网络栈
- 很多东西都是想通的,有了相关的领域知识,其他的内容都很简单,因为领域知识是核心,实现只不过是次要的
- 书籍的前言非常重要
- C语言,抽象出底层的计算模型,屏蔽掉CPU的计算细节
主要的内容
这一节的内容,继续第二节的内容,在第二节中我们引出了CPU是整个计算机的核心,而CPU的制造厂商提供了ISA指令集来操控CPU,不同的CPU制造厂商提供的ISA指令集不同,目前分为两大阵营,一个是复杂指令集(CISC),具体的代表是Intel,一个是精简指令集(RISC)具体的代表是ARM。而ISA具体是如何控制CPU的呢?如果我们将视角限制在CPU内部,会发现CPU其实已经实现了冯洛伊曼体系结构,基于此,我们可以认为CPU其实就是一个小的计算机。在CPU内部,有充当控制器的控制单元,有充当运算器的运算单元,有充当存储器的寄存器单元以及缓存。CPU的控制单元读取我们的写的机器码,将寄存器单元的数据放入运算单元中CURD,然后将计算后的结构返回寄存器中,并在后续放回缓存和内存中。 在第二节的时候,我们知道汇编语言只是对机器语言做了一个简单的映射,由此我们可以知道,因为CPU的不同,指令集也会不同,对应的汇编语言也会不同。于是人们开始抽象出CPU的计算模型,屏蔽计算细节,创造出了C语言。C语言可以适配不同的CPU平台,而具体的实现就是C语言的编译器,根据不同的CPU不同生成不同的汇编代码以及机器语言。
感触的内容
- 如果你处于计算机行业中,无论是软件开发还是底层开发,你都需要对计算机的领域知识有一定的掌握,因为这些知识才是核心,由这些核心才能推演出我们正在使用的这些东西。
- CPU的计算模型很简单:就是输入一个数据,然后进行运算,然后输出一个计算结果
相关问题&待做的事情
- 补充这一节所涉及的计算机树