首页>>新闻资讯>>云计算

「计算机科学与技术」专业是一门什么样的专业?

2023-11-23 09:13:15 11

update:2020/05/13

(更新在末尾

__________________________________________

计算机科学与技术(computer science and technology,CS)顾名思义是学习与计算机相关的科学原理和专业技术的一门学科。计算机广义上来说就是将输入信息经过计算再输出的机器,而计算本身,则可以看成是对信息的处理过程。

因此计算机应该包含输入设备用于输入信息(键盘、鼠标),计算设备用于处理信息(主机),输出设备用于输出信息(显示屏、扬声器)。无论你在计算机上做什么,玩游戏也好,听歌刷剧或者在线学习也好,计算机要做的本质上都是布尔运算,这是计算机上最基础的运算,就像大脑的思考过程本质上是无数神经元之间的信号接收和传递一样。布尔运算可以实现我们熟悉的加法、减法、乘法等简单运算,这便是计算机的指令,大量的指令构成一个集合,能完成一个特定的任务,我们称之为程序(program,比如PPT,QQ,浏览器等等)。把计算机完成的功能分解成指令的集合是最自然的想法,因为这样我们就可以灵活地编写各种各样的程序来完成不同的任务,计算机因此得以应用在方方面面,编写程序的过程就叫做编程(programming)。冯·诺依曼于1946年提出存储程序原理,把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式储存,计算机按照程序顺序执行,这就是冯·诺依曼体系结构(von Neumann architecture)。为了存储程序和数据,上面所说的计算设备应该包含存储设备(主存、磁盘),而为了执行程序的指令,计算设备还应包含实现算术运算和逻辑运算的运算器,以及指挥各部件有条不紊协同工作的控制器

冯·诺依曼体系结构(来源见水印)

计算机素有软硬件之分,下面我将从软硬件的大致分界处先向下(底层硬件),再向上(应用、网络)一一引出计算机科学与技术专业本科涉及的主要专业基础课程,然后再介绍本专业所要求的数学基础课程。

1,软硬件分界面

当计算机同时运行多个程序时,如何有效管理和分配计算机的软硬件资源便成为了一个复杂的问题,因此人们引入了操作系统的概念。操作系统是最底层的软件,向应用程序和用户提供调用计算机资源的接口以及使用计算机的交互界面,需要实现的功能主要有内存管理、进程调度、文件系统等。学习操作系统的理论原理和技术实现的课程就叫「操作系统原理」。

计算机应该包含哪些部件?各部件要完成哪些功能?哪些功能由硬件子系统完成,哪些功能交由软件完成?回答这些问题的课程便是「计算机体系结构」。计算机体系结构是程序员所看到的计算机的属性,即概念性结构与功能特性(1964年,C.M.Amdahl),一般包含数据表示、寻址方式寄存器组织、指令集、存储系统、中断机制、输入输出结构、信息保护等。

2,硬件

当确定了计算机的体系结构后,如何实现各部件的功能以及各部件的连接关系就是「计算机组成原理」。举个例子,当我们确定一台计算机的指令集应当包含乘法指令时,是用加法电路实现还是用加法和移位电路共同实现乘法指令呢?这个问题就属于计算机组成原理的范畴。计算机组成原理包含CPU中指令的具体执行过程、数值的基础运算、存储系统和结构、外围设备、I/O接口等等概念和原理。

在计算机组成原理的理论知识储备下,「微机接口技术」进一步带我们了解它们在工程上的实现,比如现有的通用或专门的芯片认识与实现。该课程将会涉及到具体CPU(如Inter x86系列)的引脚功能、总线周期,I/O端口的地址分配等等细致的工程知识。

搭建CPU、存储器等组件,离不开组合逻辑电路时序电路等基本电路单元,实现基础运算即布尔运算,离不开与或非等逻辑门电路,如何用三极管实现这些电路,是「数字电子技术基础」所学的内容,而三极管的原理则在「模拟电子技术基础」里学到,这门课同时还会讲基本放大电路、波形的发生和转换等等与常用半导体器件相关联的知识。其中,电路的基本概念和理论知识便是「电路分析基础」所讲授的内容,再往下就是单个电子的运动了,这些知识包含在「大学物理」中的电磁场部分。

3,软件

如前所说,程序是大量指令的集合,用于编写程序的语言就叫编程语言,计算机能够直接识别和执行的是二进制的机器语言(机器指令编码),早期的程序员是直接编写机器语言的,显然这样效率极低,后来人们使用助记符代替指令的操作码,用地址符号或标号代替指令或操作数的地址,这便诞生了汇编语言,汇编语言与硬件高度相关,是一门低级语言,再后来又发展出了编写效率和抽象层次更高的c/c++、JAVA、Python这样的高级语言。大多数学校都会开设一门高级编程语言课程作为入门,比如答主所在学校是「程序设计基础(C语言)」,入门之后,还会开设「汇编语言程序设计」这门课程,帮助我们了解编程语言与指令集之间的关系,理解程序执行的本质过程。大多数学校还会选择一门面向对象语言作为面向对象编程的入门,比如答主所在学校是「面向对象程序设计(C++)」。学习了编程语言之后,如何将高级语言翻译为机器能够识别的机器语言?更一般的,如何将某种源语言翻译为另一种目标语言?这就是「编译原理与设计」所要学习的知识了。

当然,能编写出程序还远远不够,计算资源是有限的,如何降低程序运行的时间和空间复杂度便成为了必要,这要求我们学习「计算理论与算法分析设计」,掌握基本的复杂度分析手段、经典的算法思想,以及更加抽象的图灵机、NP完全性等计算理论。在使用算法的时候,往往要求我们按照特定的结构组织数据,这便是「数据结构」的知识,数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,精心选择的数据结构常常可以带来更高的运行或者存储效率。

当软件变得越来越庞大和复杂,无论是开发、测试,还是更新维护,都变得非常困难,研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科就是软件工程,这方面的概念基础课程为「软件工程基础」。将数据与软件独立开来,以一定方式储存在一起,实现多用户共享的统一管理的数据集合叫做数据库,学习相关理论和技术的课程为「数据库原理和设计」。

到此为止我们都是还只是止步于单台计算机,如何将处于不同地理位置的多台计算机连接起来呢?计算机网络就是多台计算机连接起来实现资源共享和信息传递的计算机系统。就像一个城市的交通系统有许多交通规则一样,许许多多的计算机之间要进行通信,也需要制定规范的“交通规则”,这便是协议。人们将计算机网络分为多个协议层,「计算机网络」这门课程学习的主要内容就是每层的协议。

计算机网络不同的协议层次体系

4,数学基础

未完待续……(划掉)

数学是一种思维方式,也可以说是我们人类发明的一种工具,使我们可以更方便地表述和研究问题。工欲善其事,必先利其器,学好数学自然对学习计算机百利而无一害。CS本科必修的数学基础课程不多,包括:「线性代数」、「工科数学分析」、「离散数学」、「概率与梳理统计」、「数值分析」。这些可以说是基础中的基础,也许在你学的时候会觉得不知道学这些有什么用,但以后你就会越来越发现其实用处真的太大了……

以下对上面提到的数学基础课程补充一些简介:

线性代数:线性代数研究的是线性空间以及线性变换(是不是听不懂?没错我也不懂)。然而工科在本科阶段学习的线性代数基本上就是了解一下矩阵这样一种新的概念(就像认识一种新的数据结构一样)。矩阵在计算机领域非常非常有用,请一定好好学!

工科数学分析:也就是高等数学,简单的微积分知识(只是相对于数学系来说简单……)。

离散数学:包含一些十分十分基础的图论、数论、抽象代数等知识,可以说是一个大杂烩。离散数学被称为计算机的核心数学,是因为如今的数字电子计算机本身就是一个离散结构,只能处理离散或离散化的数量关系。

概率与数理统计:开始认识概率。数理统计是归纳、后验的,概率论是演绎、先验的。使用计算机对现实问题建模的时候常常用到概率论的知识。

数值分析:简单来说就是研究如何用计算机对数学问题进行数值计算和求解。如果不太理解的话,你可以试试自己编写代码模拟三体运动

相关标签:

发表评论:

评论记录:

未查询到任何数据!