计算机专业

我主张,在具备基础之后,学习任何新东西,都要抓住主线,突出重点。对于关键理论的学习,要集中精力,速战速决。而旁枝末节和非本质性的知识内容,完全可以留给实践去零敲碎打。原因是这样的,任何一个高级的知识内容,其中都只有一小部分是有思想创新、有重大影响的,而其它很多东西都是琐碎的、非本质的。因此,集中学习时必须把握住真正重要那部分,把其它东西留给实践。对于重点知识,只有集中学习其理论,才能确保体系性、连贯性、正确性,而对于那些旁枝末节,只有边干边学能够让你了解它们的真实价值是大是小,才能让你留下更生动的印象。如果你把精力用错了地方,比如用集中大块的时间来学习那些本来只需要查查手册就可以明白的小技巧,而对于真正重要的、思想性东西放在平时零敲碎打,那么肯定是事倍功半,甚至适得其反。

计算机分层

计算机专业课程之间完全可以用抽象来联系:每一门课想做的事就是利用下层提供的接口,实现功能,然后再给上层提供接口。这样一层一层的抽象就构成了几乎所有的专业课。

问题

程序设计

数据结构与算法

这一层的目的是学习/实现各种算法/数据结构,提供给上层功能。比如排序,问题解决者只要知道这里应该用快速排序,而不是选择排序,而把快速排序的实现留给这一层的开发者,从而使各种优化都可以对上层透明,比如小数组变插入排序、中位数取pivot、三向快速排序等,这些优化调用者完全不必要知道,他只需要知道:哇,这个库提供的快速排序还真快。

语言层

所有的算法都是需要由某一门语言来实现的,不同语言又提供了不同的抽象,像函数式语言就比命令式语言的抽象级高,更高的抽象级意味着更加专注问题本身(不需要考虑内存布局、CPU使用等)以及更少的代码量。

编译器/解释器

我们编写代码是通过高级语言,而cpu执行的是机器码,所以这个层替我们做了转化,本层的好处就是高级代码编写者完全不需要知道这个程序所运行的平台,任何有该语言编译器/解释器的机器,程序都可以跑(从而实现了跨平台)。应用开发者可以不知道这个高级语言到机器码转化具体怎么实现的。

操作系统

OS向开发者抽象了硬件(cpu,内存),并且以syscall的形式向用户提供服务,OS的设计是最能体现抽象的,虚拟内存和进程让程序以为自己独占着内存和CPU,同时隔离了不同进程以防恶意进程;文件系统让用户可以方便地读取存储数据,而不需要直接操作底层的硬盘;文件描述符抽象了底层的设备(pipe/file/device/socket/…)

ISA(Instruction set architecture)软件与硬件的接口

指令集架构,说得简单点就是机器码,也可以理解为一个协议。ISA标准制定者指定一套指令集(比如x86、PowerPC、SPARC),然后编译器开发者需要根据这个标准/协议来编写对应的编译器;CPU制造商需要根据这个标准/协议来制造出支持这套ISA的CPU(比如intel的CPU支持x86/x86_64)。也就是说,软件/硬件都依照这个ISA来设计,那么就可以对接了。

组成原理和体系结构

这一层要做的事情是借助数字电路给它提供的功能(组合电路和锁存器),来设计一个能实现某种ISA的CPU,让编译器生成的指令可以在此CPU上运行。大学里一般会开一门叫“计算机组成原理”的课,一开始学单周期CPU的实现(取指、译码、执行……),为了提高效率又提出了流水线的实现。为了发掘更高的效率,之后又会学一门叫“计算机体系结构”的课,这门课的目的是为了发掘更高的并行,从而制造出更快的CPU。那这一层是如何用数字电路提供的功能?举两个典型例子:一、CPU为了做计算会有ALU模块,而ALU模块正是一个组合电路(输入确定那么输出确定);二、在流水线寄存器中每一个时钟上升沿都会保存输入的值,在这个时钟周期内组合电路会根据这个新值计算出结果传输到下一级流水线寄存器的输入,等待下一个时钟上升沿的到来,这里的流水线寄存器正是某种锁存器的实现,而CPU开发者并不需要这个数字电路模块是怎么实现。

数字电路

这门课的目的是教学生如何利用基本的门电路(与非或门)来实现一些高级的功能(译码器、多路复用器、锁存器、时序电路……),然后给上层提供功能。上数字电路课是一个用砖搭房子的过程,由基本的门电路开始,慢慢构造出复杂的电路。数字电路不需要关心基本的门电路是如何实现的,因为这正是模拟电路向上层提供的功能。

模拟电路

这一层实现了与或非等基本门电路。比如非门、与非门、或非门都可以通过若干个p/n型MOS晶体管构成,而与门可以通过连接一个与非门和非门构成,或门可以通过连接一个或非门和非门构成。很多同学都觉得模电对于计算机的同学不必要学,而我认为相反,它是你构建整个计算机抽象层级的基石。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值