计算机都要学哪些课程,有什么先后顺序?(上)

经常有大一或者不转码的同学在后台问我,哪些课应该用电脑教,按什么顺序教。

有类似疑问的可以参考Github上的《清华大学计算机科学课程指南》

图像

包括清华CS专业、大一至大四课程、推荐图书资源。链接如下:

截取一些课程目录的截图:

新生:

变大:

大二:

大二:

第三年,专业课程显着增加:

大四主要是实习、实习、毕业,课程不多:

但说实话,本指南只能作为我们大部分学生的参考。课程量有点大,时间不够的话,很难完全跟上。

但是我觉得大三的课程非常好:

操作系统

电脑系统

数值分析

数字图像

存储技术

搜索引擎技术

模式识别

机器学习

可以说大三的这些课程都很好,不管你是去分布式存储、搜索引擎等基础设施方向,还是机器学习等算法方向,还是游戏引擎方向,图形处理等,都是介绍性的。

但说实话,清华的策略虽然不错,但也太过分了。时间不够的同学,想要更精简的List,可以参考网易云课堂的电脑课程图:

我整理了一些我认为是基础的和必须学习的课程,您可以将它们作为参考。

另外,在学习这些课程的时候,一定要多写代码,做一些实验。建议完成操作系统、计算机网络、csapp等课程(国内部分学校可能没有),可以出国找四大名校的lab。.

有的学校最大的问题是OS、网络、数据库等核心CS课程变成了文科!

缺少一些动手实验,大部分都是写实验报告,也就是不写代码。

美帝为何在数据库、操作系统、各种工业软件工程能力上如此强大?

**我认为这与他们强大的CS学校的教育模式有关。**国外,尤其是美国,很多高校都非常重视CS教育。国内有实践教学的优秀高校屈指可数。其他是PPT和作业。只做一个Word项目。. . .

以麻省理工学院为例,6.830 Database Systems:这是一门关于数据库系统的核心课程。前半部分是数据库基础知识,后半部分是分布式数据库

他们的实验是什么?

就是写一个小型的关系型数据库,比如lab1来实现数据库的基本存储逻辑结构,包括:Tuple、TupleDesc、HeapPage、HeapFile、SeqScan、BufferPool等。

我们的数据库教什么?

教SQL怎么写,教数据库原理(这个不错)

大多数大学实验是什么?

使用 Java 编写应用程序以使用 JDBC 连接到 MySQL。. .

国外是如何教授计算机网络的?

实现TCP协议栈~

如斯坦福CS 144、CS144实验室作业-手写TCP-LAB4

我们如何学习?

记得TCP三次握手,四次挥手,记得DNS使用UDP协议….

我们的大工作是什么?

有些是Word作业。. . 有些让您使用套接字 api 编写网络程序。. . 这是计算机网络的原理吗?

操作系统通常是 MIT 6.828,现在已重命名。

直接允许你实现一些基于 xv6 的模块,例如文件系统、多线程。

那我们呢?

记住进程和线程的区别,记住虚拟内存的各种组关联……

当然有些学校会有实验,比如清华ucore,哈工大linux0.11。

这就是为什么美国的大学和大学有很强的编码和造轮子的能力,因为这就是他们的CS学生成长的方式。

CS专业区别于其他专业的一大特点是:

图片[1]-计算机都要学哪些课程,有什么先后顺序?(上)-老王博客

下班后的内容与专业学习的内容密切相关。

例如,您学习了数据结构、编译原理、操作系统和计算机网络。如果你从事研发,你一定离不开这些知识。

主要靠自学

不管是专业课还是非专业课大一c语言程序设计实验报告,要想快速、不断地提高自己的技术水平,就得靠自己去钻,尤其是自学。

其实知乎很多问题都是关于学科班和非学科班的区别。其实我一直想说,如果给自己足够的时间去学习学科课的内容,能有什么不同呢?

可能唯一的区别是缺乏计算机科学学士学位。

也有人把这种自学成才的僧人称为敏克,当然没有任何讽刺意味。

那么计算机专业的学生应该如何自学呢?

其实看了很多,概括如下(以下仅涉及CS专业课程):

计算机入门 + 入门编程语言

算法和数据结构

操作系统

计算机网络

数据库系统

特定领域知识,如:计算机图形学、信息安全、系统方向、分布式

学习方法是:

看一些国内外名校的开放课程+读经典书籍+多写代码!!!

毕竟MOOC、Udemy、B站上的学习资源非常丰富。

仅举几个学科:

一、计算导论

首先,建议从计算机入门课程入手,推荐以下课程:

哈佛 CS50 CS50:计算机科学导论

伯克利的 CS61A CS 61A:计算机程序的结构和解释

麻省理工学院的 6.001 mit-6.001

二、C 语言

那么建议学习一门语言,可以是C、Java或Python。我推荐C语言(当然也可以是Python!这不是重点,重点是上手时多写,增加对编程的兴趣),提到C语言,我推荐Mr.来自中国浙江大学的翁凯。看过了,说的好~

它分为两个课程。第一门课程是为那些想在高考结束前提前学习一点编程的人准备的。它被称为大学预科课程:

C 语言编程 CAP – 大学预科课程

虽然叫必修课,但是涵盖了C语言的主要知识点,也适合大一新生~

第二道门是

高级 C 编程

它将带你完成一些有趣的C语言项目,比如一些图形界面游戏,在先修课程中学习C语言语法的基础知识,在高级课程中带你实践项目。一起用,你就是同学中的大神!

有语言基础后大一c语言程序设计实验报告,建议学习数据结构和算法:

三、数据结构推荐:

斯坦福CS106系列

CS106A:编程方法

四、算法推荐:

6.046(高级)算法设计与分析 – 麻省理工学院

MIT 6.006 算法介绍

Coursera 上的普林斯顿课程

伯克利的 CS61A 和 CS61B

五、操作系统推荐:

CMU 15-213

伯克利的 CS162,

这两个是带有视频和实验室的好课程

还有一个非常经典的 MIT 6.828 with a xv6 lab

课程:6.828:操作系统工程

六、 组成原理和架构:

麻省理工学院的 6.004,

CMU 15-213

伯克利 CS61C

七、计算机网络:

斯坦福的CS144,实验室很有意思

适合初学者的快速自学方法

翁凯先生的一个原则:

学习电脑一定要有很强的精神状态。计算机中的所有东西都是由人制造的。如果别人能想到他们,我也能想到他们。在计算机世界中,没有黑魔法。只是我现在不知道,总有一天我会弄清楚所有的细节,所有内部的东西

这里,也有一个问题,确实大部分的东西,只要不断深入挖掘,说不定就能明白。

但要注意时间成本。软件行业通常并不复杂和庞大。任何领域的知识的复杂性都足以消耗我们的整个生命。因此,一定要把握主线。对于技术和知识,一定要学一般的,通俗的,可以试试面试式的学习。

“破砂锅问到底”的精神虽然可敬,但效率并不划算。

需要在适当的层次抽象出一层,并认清这一层提供的接口,不用钻研内部实现,了解原理即可,不需要钻研内部实现。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论