百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

后悔大学没看到这个 Github 仓库

ztj100 2025-01-17 14:39 19 浏览 0 评论

经常有大一的学妹或者非科班转码的学妹在后台问我,计算机都要学哪些课程,有什么先后顺序。

有类似疑问的小伙伴,可以参考Github上「清华大学计算机系课程攻略

img

里面包含了清华CS专业,大一到大四的课程以及推荐书籍资源等,链接如下:

https://github.com/PKUanonym/REKCARC-TSC-UHTgithub.com

截取一些课程目录:

大一上:

大一下:

大二上:

大二下:

大三,专业课明显多起来了:

大四主要是实践、实习、毕设,课不多:

不过说实话,这份攻略对于我们大部分同学来说都只能参考,课程量有点大,时间不充足的话,很难完全跟下来。

但是我觉得这里面大三下的课程非常棒:

  • 操作系统
  • 计算机系统
  • 数值分析
  • 数字图像
  • 存储技术
  • 搜索引擎技术
  • 模式识别
  • 机器学习

可以说大三下的这些课程铺垫非常不错,不管以后走分布式存储、搜索引擎等基础架构方向还是机器学习等算法方向,亦或是游戏引擎、图形处理等方向,都算是入门了。

但是说实话,清华这份攻略好是好,就是太多了,对于时间没有那么充裕的同学,想要一个更加精简的 List,可以参考网易云课堂上的计算机课程图:

我把几门我觉得基本必学的课程用红线框起来了,大家可以作为参考。

另外,学习这些课程的时候,一定要多写代码、做一些Lab,建议把操作系统、计网、csapp这些课程 lab做完(国内有些学校可能没有),可以去国外找计算机四大名校的Lab。

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

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

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

**我觉得和他们 CS 强校的教育模式有关,**国外,尤其是美国,很多高校 CS 教育极其注重实践,国内也就少数不错的高校有实践教学,其它都是念 PPT,课后作业就是做 Word 项目。。。。

就拿 MIT 来说,6.830 Database Systems: 这是一门数据库系统的一门核心课程。前半部分比较基础的数据库的知识,后半段主要在讲Distributed Databases 的东西

它们的实验是什么?

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

我们数据库教什么?

教 SQL 怎么写,教数据库原理(这个还算好的)

大多数高校实验是什么?

用 Java 使用 JDBC 连接 MySQL 写个应用。。。

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

实现 TCP 协议栈~

比如斯坦福 CS 144,CS144 Lab Assignments - 手写TCP - LAB4

我们是怎么学习的?

记住 TCP 三次握手、四次挥手、记住 DNS 使用 UDP 协议....

我们大作业是什么?

有些是 Word 写作业。。。有些是让你用一下 socket api 写个网络程序。。。这是计算机网络原理吗?

操作系统比较典型的是 MIT 6.828,现在改名了。

直接让你基于一个 xv6 去实现一些模块,比如文件系统、多线程。

我们呢?

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

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

这就是为什么美国高校有很强的编码能力、造轮子的能力,因为他们的 CS 学生成长环境就是这样的。

CS 专业区别于其它专业一个很大特点就是:

  • 工作后的内容是和专业所学的内容强相关的。

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

  • 主要靠自学

不管是科班还是非科班,想要快速持续的提高技术水平,就得靠自己去钻,尤其离不开自学。

知乎上其实很多问科班和非科班的差别在哪,其实我一直想说,你给自己充足时间去把科班的内容学习一遍,到底还能差在哪呢?

可能唯一差别就是少了一个 计算机学士学位。

也有人把这种自学出家的叫做民科,当然没有任何的讽刺意思哈。

那么计算机专业同学该如何自学呢?

其实看着很多,概况起来就是(下面只涉及CS专业课):

  1. 计算机导论 + 一门编程入门语言
  2. 算法与数据结构
  3. 操作系统
  4. 计算机网络
  5. 数据库系统
  6. 特定领域知识,如:计算机图形学、信息安全、System方向、分布式

学习的途径就是:

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

毕竟现在MOOC、Udemy、B站上学习的资源都是很丰富的。

比如:[CS经典课程][https://mp.weixin.qq.com/s/bkLpjLxqQHaBTwCiz3VwBA]

简单列举几个学科:

一、计算机导论

首先建议从计算机导论课程开始,推荐下面这些课程:

  • Harvard的CS50 CS50: Introduction to Computer Science
  • Berkeley的CS61A CS 61A: Structure and Interpretation of Computer Programs
  • MIT的6.001 mit-6.001

二、C 语言

随后建议学习一门语言,可以是 C、Java、或 Python,我推荐 C语言(当然,也可以是Python!这不是重点,重点是要多去写,入门时提高对编程的兴趣),提到C语言,我这里推荐国内浙大翁凯老师的课,看过的都说好~

分为两门,第一门是面向高考结束想提前自学一点编程的,叫大学先修课:

  • C语言程序设计CAP-大学先修课

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

第二门是

  • C语言程序设计进阶

会带你用C语言完成一些有趣的项目,比如一些图形界面小游戏,先修课学习 C 语言语法基础,进阶课带你项目实操,搭配使用,你就是同学中的大神!

有了语言基础之后建议学数据结构与算法:

三、数据结构推荐:

  • Stanford CS106系列
  • CS106A: Programming Methodologies

四、算法推荐:

  • 6.046(进阶) Design and Analysis of Algorithms - MIT
  • MIT的6.006 Introduction to Algorithms
  • Coursera上的Princeton课程
  • Berkeley的CS61A 和 CS61B

五、操作系统推荐:

  • CMU的15-213
  • Berkeley的CS162,

这两个都是有视频有lab的好课

还有一个非常经典的 MIT 6.828,附带一个xv6 lab

课程:6.828: Operating System Engineering

六、 组成原理、体系结构:

  1. MIT的6.004,
  2. CMU的15-213
  3. Berkeley的CS61C

七、计算机网络:

  • Stanford的CS144,lab 很有意思

新手快速自学的方法

一个原则,来自翁凯老师:

学计算机一定要有一个非常强大的心理状态,计算机的所有东西都是人做出来的,别人能想的出来,我也一定能想得出来,在计算机的世界里没有任何的黑魔法,所有的东西只不过是我现在不知道而已,总有一天我会把所有的细节、所有的内部的东西全搞明白的

这里,也有一个问题,确实大部分的东西,只要你一直深挖下去,可能都能搞明白。

但是要注意时间成本,软件行业已经不是一般的复杂和巨大,任何一个领域的知识的复杂性都足够耗费掉我们一生的时间,所以一定要抓住主线,对于技术和知识,要学通用的、流行的,可以尝试面向面试学习。

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

要在适当的层次上抽象出一层,并且认可这一层提供的接口,不去深究内部实现,了解原理即可,不必深究内部实现。

比如学习 HTTP,那么就先认可 TCP 提供的稳定可靠传输,而不继续深挖 TCP 的内容。

新手,一定不要一直看书,保持看书的时间不超过 50%。

  1. 看书学习基本的理论
  2. 编程练习
  3. 有了新领悟,继续看书

反复的循环。

来源于编程指北 ,作者编程指北

相关推荐

Whoosh,纯python编写轻量级搜索工具

引言在许多应用程序中,搜索功能是至关重要的。Whoosh是一个纯Python编写的轻量级搜索引擎库,可以帮助我们快速构建搜索功能。无论是在网站、博客还是本地应用程序中,Whoosh都能提供高效的全文搜...

如何用Python实现二分搜索算法(python二分法查找代码)

如何用Python实现二分搜索算法二分搜索(BinarySearch)是一种高效的查找算法,适用于在有序数组中快速定位目标值。其核心思想是通过不断缩小搜索范围,每次将问题规模减半,时间复杂度为(O...

路径扫描 -- dirsearch(路径查找器怎么使用)

外表干净是尊重别人,内心干净是尊重自己,干净,在今天这个时代,应该是一种极高的赞美和珍贵。。。----网易云热评一、软件介绍Dirsearch是一种命令行工具,可以强制获取web服务器中的目录和文件...

78行Python代码帮你复现微信撤回消息!

来源:悟空智能科技本文约700字,建议阅读5分钟。本文基于python的微信开源库itchat,教你如何收集私聊撤回的信息。...

从零开始学习 Python!2《进阶知识》 Python进阶之路

欢迎来到Python学习的进阶篇章!如果你说已经掌握了基础语法,那么这篇就是你开启高手之路的大门。我们将一起探讨面向对象编程...

白帽黑客如何通过dirsearch脚本工具扫描和收集网站敏感文件

一、背景介绍...

Python之txt数据预定替换word预定义定位标记生成word报告(四)

续接Python之txt数据预定替换word预定义定位标记生成word报告(一)https://mp.toutiao.com/profile_v4/graphic/preview?pgc_id=748...

假期苦短,我用Python!这有个自动回复拜年信息的小程序

...

Python——字符串和正则表达式中的反斜杠('\')问题详解

在本篇文章里小编给大家整理的是关于Python字符串和正则表达式中的反斜杠('\')问题以及相关知识点,有需要的朋友们可以学习下。在Python普通字符串中在Python中,我们用'\'来转义某些普通...

Python re模块:正则表达式综合指南

Python...

Python中re模块详解(rem python)

在《...

python之re模块(python re模块sub)

re模块一.re模块的介绍1.什么是正则表达式"定义:正则表达式是一种对字符和特殊字符操作的一种逻辑公式,从特定的字符中,用正则表达字符来过滤的逻辑。(也是一种文本模式;)2、正则表达式可以帮助我们...

MySQL、PostgreSQL、SQL Server 数据库导入导出实操全解

在数字化时代,数据是关键资产,数据库的导入导出操作则是连接数据与应用场景的桥梁。以下是常见数据库导入导出的实用方法及代码,包含更多细节和特殊情况处理,助你应对各种实际场景。一、MySQL数据库...

Zabbix监控系统系列之六:监控 mysql

zabbix监控mysql1、监控规划在创建监控项之前要尽量考虑清楚要监控什么,怎么监控,监控数据如何存储,监控数据如何展现,如何处理报警等。要进行监控的系统规划需要对Zabbix很了解,这里只是...

mysql系列之一文详解Navicat工具的使用(二)

本章内容是系列内容的第二部分,主要介绍Navicat工具的使用。若查看第一部分请见:...

取消回复欢迎 发表评论: