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

大学计算机专业要学什么?

2023-12-18 09:27:20 33

目录

2021.11:一口气更完吧~

2021.01:更新了部分出来给大家当新年礼物

2020.04:首发

本人南大计科,方向人工智能+计算机视觉,简单谈谈我眼中大学本科计算机专业会学些什么。希望能让其它专业或者正在选择专业的朋友们有个大概的了解。

本人分享的内容会受到学校、方向和个人理解的影响

总览

我所认知到的计算机本科知识框架

从上图中我们能看到五个大块,分别是

① 数学

数学是计算机的理论基础。数学不仅对于将来准备科研的同学及其重要,对于准备就业的同学来说,数学没学好,一些工作中遇到的概念就会很难理解。

离散数学(研究离散量,如整数,的结构、相互关系)在计算机科学

中十分重要。由于计算机平台本身是离散的(基于 01 二进制),离散数学在传统算法设计、分析和平台架构设计等方面都起到了重要作用。

分析(以广义的微积分等研究工具,对”比较连续“的函数等进行研究)和代数(先定义数学结构,再研究该数学结构)中的内容也是作为理科生必须知道的,无时无刻不在用到的知识。以上分法只是为了方便梳理课程,事实上相当不严谨。离散是数学中的一类对象,分析和代数是数学中的种方法论,相互之间都有很多重合

② 算法

算法本质上也属于数学。高中里常见的数学题有计算和证明。为了计算,课堂上会学习到很多问题的解法。算法就是对问题提出解题方案。

③ 系统

想要运行程序/软件,需要一个平台/系统(计算机、服务器、手机、嵌入式系统

等)。每个系统从低向上构建,复杂而精美。

在系统的设计中,为了防止过于复杂,大牛们引入了抽象层,把功能较为独立的部分单独抽象出来设计,下层支持上层的实现,上层利用下层的接口(按规则即可使用的功能)。收益于此,我们在学习时也可以非常有层次地层层递进(图中从微电子到数据库、计算机网络等)

All problems in computer science can be solved by another level of indirection.

计算机科学中的每个问题都可以用一间接/抽象层解决 ——Jay Black

④ 语言

语言也算作系统的一部分(语言甚至可以看作是一个抽象层,下层由编译器支持,上层支持算法的实现)。将语言单独列出主要因为语言是因为,作为程序员,语言是我们最常用的工具。

此外,我把如何维护我们写出来的程序也放在这里。这是很工科的一个部分,就像造房子时如何维护整个工程。这样分类确实有问题,但语言和软件工程作为我们书写程序时的工具,可以一起学习。

⑤ 应用

在算法和系统的支持下,我们可以把计算机技术应用到各个邻域。计算机的应用自然有许多,这里只大概介绍了几个计算机的方向。

数学

① 离散

集合论(大一)

- 内容:将高中学过的集合公理化

,研究集合这个数学对象。由于我们是计算机专业,学习的集合论内容可谓皮毛,与数学系的没有可比性。

- 举例:罗素悖论- 应用:几乎其它数学的基础,微积分、抽象代数等等都要用到集合的概念

数理逻辑(大二)

- 本校:特色的专业核心课

- 内容:在简单的逻辑运算(与、或、非等)和集合论的基础上,用公理化的方法定义一阶逻辑高阶逻辑时序逻辑

(这里逻辑可看作由字母表、公式组成的一个系统。每个逻辑/系统可以有自己的语言、语义和语法,当然同样是用数学方法定义的),并研究逻辑这个数学对象

- 举例:选择公理- 应用:在系统方向(程序形式化验证)、程序语言设计

、人工智能(自动推理)等领域有广泛应用

- 研究前沿:证明论(研究语法),模型论(研究语义),公理集合论(研究与数学基础有关的一阶理论的模型),递归论(研究可计算性),非经典逻辑(对数理逻辑的扩展与修正),非形式逻辑(对形式化方法反叛的新道路)

抽象代数(大二)

- 本校:又称近世代数离散数学

中有群论基础,数学系开设。

- 内容:主要是研究群、环、域等数学对象,高屋建瓴的提炼了数学中的诸多共性,学起来可谓赏心悦目。

- 举例:用群理解魔方5 次以上方程无解- 应用:在密码学、组合数学、程序设计理论计算机通信和分布式系统等方向上有广泛应用。课程上,线性代数中线性空间定义就要用域的概念。

图论(大二)

- 内容:定义了

(由点和边构成,地图上的城市与道路就可以抽象成图)这个数学结构,研究图的性质和图上的算法。

- 应用:算法设计(比如高德地图的导航,就要用到图论的算法),在计算机课程和应用中无处不在。

组合数学(选修)

- 本校:本校尹一通老师的组合数学

课讲得很棒

- 内容:组合数学是理论计算机研究时强有力的工作。内容上主要分为计数和证明。计数在高中学习的排列组合基础上,进一步学习计数的方法;证明则是讲解如何利用概率证明存在性。

- 应用:作为研究工具,在科研时都有可能用到值得一提的是,南京大学计算机系拔尖班和匡院计算机方向特殊课程《问题求解》(Problem Solving) 这门课持续四个学期,将程序设计、算法分析与设计数据结构、离散数学等打通,一起教学,使得效率提高,可以讲更多的内容。

② 代数

线性代数

(大二)

- 内容:定义了线性空间这个数学结构,研究线性空间中的对象、变换并用矩阵表示。

- 举例:线性空间- 应用:作为最基本的数学工具,几乎无孔不入。在编码、机器学习等方向更是重中之重。

矩阵论

- 内容:在线性代数的基础上,进一步研究矩阵的性质,如果高效的进行矩阵的运算和分解。

- 应用:用到矩阵的地方都有用。

③ 分析

微积分(大一)

- 内容:在高中导数的基础上,严格定义导数等概念,并学习积分(可看做导数的逆操作,Riemann 积分)和级数等内容。

- 应用:计算机中与微积分打交道并不多。但随着深度学习的兴起,微积分由变得常用了起来。

实变函数

- 内容:在微积分的基础上,为了弥补 Riemannn 积分的缺点,引入了测度和 Lebesgue 积分。

- 应用:现代概率论的基础(暂时感觉没什么用)

概率论(大三)

- 本校:计算机系的概率论一般与数理统计

合开

- 内容:定义概率,学习概率的计算和不加证明的大数定理、中心极限定理

- 举例:大数定理中心极限定理- 应用:可谓现如今机器学习的基石

数理统计(大三)

- 内容:概率论的一种应用,包括统计决断、估计、检验

信号分析与处理

- 本校:南大计科好像没开这门课,可能在电子系有开。但是在很多课程中都有应用。

- 内容:学习使用傅里叶变换等工具处理信号

- 举例:通俗理解傅里叶变换- 应用:计算机通信、数字图像处理

信息论

- 内容:在概率的基础上,定义熵,用于衡量不确定度/信息量

- 举例:- 应用:计算机通信、密码学、机器学习等

计算方法

- 内容:又名数值分析,也可以算是算法的内容。用计算机进行数学问题的计算,而不会出现过大的误差

④ 物理

大学物理

(大一、大二)

- 本校:计算机系的学生要上物理实验一学期,理论课一学期。拔尖班则理论课两学期,包括力、热、电、现代物理四个部分。与物理系相比,我们只是简单的科普。

- 内容

力:在高中力学基础

上,进一步学习各种力的分析,以及相对论的基础理论

热:讲解三大热力学基本定律(包括第零)

电:在高中电磁知识的基础,用麦克斯韦方程组

统一电与磁

现代:从黑体辐射等经典实验开始,讲解量子力学基础

,了解基本粒子。

- 应用:很多人认为计算机系学物理

没必要,我现在觉得不然。物理作为从实践走向理论的经典学科,一定程度上与现在的机器学习相似。此外,还可以提供跨学科研究的基础。

力:游戏引擎 热:熵、退火过程、玻尔兹曼分布

等概念在计算机不同领域有很多推广和启发

电:电路基础,计算机通信上利用电磁传播信号,计算机视觉中对光的分析等

现代:量子计算基础

电路分析(大一)

- 本校:电子系单独开课,计算机系与微电子合开

- 内容:在高中电路分析的基础上,进一步学习电路分析工具和技巧

算法

算法设计与分析(大一)

- 内容:如何设计算法解决问题,如何分析算法的性能(时间复杂度

,空间复杂度);如何评估问题的难度(P, NP 等复杂度概念)

- 举例:如何学习算法设计与分析

数据结构(大一)

- 内容:如何高效的将数据存放在计算机中(占用更小的空间,更快的存储)可以把数据结构看做是一个抽象层,现实中计算机文件系统/数据库提供实现的支持,向算法提供可调用的接口。我们将学习和分析常用数据结构(红黑树、哈希表等)

高级算法(选修)

- 本校:尹一通老师的高级算法,原名随机算法- 内容:对比较难的问题,或是现有计算比较慢的问题,可以牺牲一定的精度获得近似解,牺牲一定的确定性利用随机构造算法。高级算法这门课教我们如何设计好的随机近似算法解决问题。

人工智能(大四)

- 内容:计算机的人工智能,其实就是针对人才能处理的较难问题,设计高效的算法达到人的处理结果。其具体实现的方法多种多用。该课概览式地学习了人工智能的算法,包括搜索、推理、概率图模型和机器学习相关的算法。

机器学习(选修)

- 内容:作为实现人工智能的方法之一,与利用规则逻辑的符号主义不同,机器学习用数据或以往的经验指导计算机解决问题。其中,具体的机器学习问题和方法也有很多,这门课概览式的学习了一些基本概念和常用的模型(如 SVM,决策树神经网络等)

深度学习

- 内容:作为机器学习目前最火热的方法,深度学习(往往是深度神经网络)在各个领域得到了应用。网络结构、优化算法、损失函数等是入门者需要学习的基本对象。

量子计算

(选修)

- 内容:有一说一,这节课我现在回想起来感觉都还给老师了,可能从中更多的是巩固了一些数学知识,了解了一些前沿方向。这门课不会关注物理层面的量子特性(薛定谔方程

等),而是给定了一些量子的物理特性作为公理,在此基础上设计算法。

首先会复习线性代数,傅里叶变换和群论的基本知识,然后给出量子的性质和定理,接着会构建一些基本的量子算子和门。在这些基础上,会简单介绍一些经典的量子算法,量子密码学量子纠错码和量子复杂度理论。其中精彩的一个是如何用量子计算机线性时间分解大素数。

系统

微电子(大一)

- 搭建整个计算机系统的基础。这门课包含两个部分,一方面是基础的电路分析技术(比较浅),另一方面是简单了解基础的电子部件,宏观上了解芯片如何从沙子一步步制作出来,并简单了解二极管,晶体管等的原理、特性和作用。

数字逻辑电路

(大一)

- 本校:本校数字逻辑电路分为了理论+实验两个课程,放在两个学期进行。理论课程也有实验,就是插面包板。实验则是在 FPGA 上进行的,用 Verilog 编写一些简单的程序,综合出一些电路。实验课最后的大实验完成了一个支持部分 MIPS 指令集的带终端的 CPU,可以说很有成就感。

- 内容:首先是一些基本的数制数码理论和逻辑电路理论,接着是介绍组合电路的设计和实例,最后是时序电路的基本原件和设计。

计算机基础

(大一)

- 本校:本校的 ICS (Introduction to Computer Science,计算机基础)可谓是一个经典课程了,用的是本校袁春风

老师教材《计算机基础》,可以说是从理论知识和代码功力两个方法对新生进行了”特训“。为了增加同学的代码能力,PA (Programming Assignment) 作业要求大家在提供的简易框架代码上实现支持 x86 指令的虚拟机,最终可以将仙剑奇侠传跑在其中,可以说是很奇妙了。

- 内容:计算机中数的表示,汇编语言,编译过程,总线、内存,控制流,内存管理,上下文管理,中断等知识。

操作系统

(大二)

- 内容:操作系统也是一个软件。围绕并发、持久化和虚拟化 (Concurrency, Persistence, Virtualization) 展开,讲解了并发的知识、并发编程,存储设备、文件系统和日志,任务调度、空间管理、进程空间等知识。同时还完成了一个玩具级别的操作系统。

编译原理

(大三)

- 内容:编译器可以让我们把高级语言程序翻译为机器语言让计算机执行。在计算机基础中我们已经了解了 C 代码变成可执行文件的过程。本科中将进一步学习编译器知识,同时完成一个 C-- 编译器(部分支持 C 语言)。认识编译器的处理流程,前端(词法分析语法分析,语义分析)到后端(中间代码生成,机器无关代码优化,代码生成,机器相关代码优化)以及各阶段的产物。

到这里,我们已经体验过书写自己的(玩具级别的)CPU,虚拟机,操作系统和编译器了。理论上,我们都可以编写一台给自己用的计算机了,我觉得这是很有成就感的事情。当然,实际上我们玩具级别的程序根本没法放到一起用,因为玩具级别的,没有优化,性能可以说是相当差了 Orz

数据库(大三)

- 内容:数据库的知识,包括理论层面的数据模型、关系的定义和演算,实际中数据集的安全性、完整性等。实验是学习了 SQL 语言。

计算机网络(大三)

- 内容:层次性的介绍计算机网络结构,根据七层协议层次,从低向上分别为:物理层 - 数据链路层 - 网络层 - 运输层 - 对话层 - 表示层 - 应用层。每层涉及一点的基础上,主要集中在数据链路层的以太网 IEEE 802.3,网络层的 IP 协议和传输层的 TCP 协议(TCP-IP)。

数据通信

(大二选修)

- 内容:与计算机网络互为补充,主要集中在数据链路层及其以下的内容,包括物理层下物理上实际存在的媒介。主要讲解了数据传输理论、编码技术、差错校验和纠错,以及各种媒介的特性。

计算机图形学

(大三)

- 本校:感觉本校的计算机图形学内容比较过时,下面内容主要是本校课上的内容,主要集中在二维图形绘制的算法。像三维渲染,光线追踪(ray tracing

)等内容都没涉及到。建议上 B 站大学补课哈哈哈

- 内容:如何绘制图形,包括生成直线、曲线的算法,几何变换、剪裁的算法。最终实验完成了一个类似 Windows 画图的小程序。

语言

由于笔者在拔尖计划,没有修专门的语言课。基本上基础的 C 语言教学时在问题求解这门课上完成的,在 ICS 的 PA 中提高的。此外,问题求解课上有一节专门谈论了函数式编程、数据流编程等不同编程语言的介绍和区别。

汇编(大一暑假)

- 计算机基础的前导课,学习汇编语言和基本的计算机内部表示。

程序设计基础

(大一)

- 似乎就是学 C 语言。笔者没上过。

面向对象程序设计- 内容:面向对象设计(OOD)的基本内容,包括继承、接口等等。同时也会讲一些面向对象编程时可以用到的设计模式。

软件工程(选修)

- 内容:编写程序中、前、后应该注意的保证程序高质量的内容。理论上有软件过程的理论模型,编写程序前如何分析软件需求,如何进行软件设计;写代码时遵守设计模式;写完后要有软件测试、文档和验证。最后如何维护软件等。

特定语言的学习

- 本校:开有 Java, Scala 等语言的课程,但语言只是工具,一般还是在语言基础上学习新的内容。感兴趣的可以学习。

最后,想要了解更多学习内容的话,可以直接看教学计划。

都看到这里了,还不双击支持一下吗 (◡ ‿ ◡)

相关标签:

发表评论:

评论记录:

未查询到任何数据!