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

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

off999 2024-12-12 14:21 61 浏览 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. 有了新领悟,继续看书

反复的循环。

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

相关推荐

让 Python 代码飙升330倍:从入门到精通的四种性能优化实践

花下猫语:性能优化是每个程序员的必修课,但你是否想过,除了更换算法,还有哪些“大招”?这篇文章堪称典范,它将一个普通的函数,通过四套组合拳,硬生生把性能提升了330倍!作者不仅展示了“术”,更传授...

7 段不到 50 行的 Python 脚本,解决 7 个真实麻烦:代码、场景与可复制

“本文整理自开发者AbdurRahman在Stackademic的真实记录,所有代码均经过最小化删减,确保在50行内即可运行。每段脚本都对应一个日常场景,拿来即用,无需额外依赖。一、在朋...

Python3.14:终于摆脱了GIL的限制

前言Python中最遭人诟病的设计之一就是GIL。GIL(全局解释器锁)是CPython的一个互斥锁,确保任何时刻只有一个线程可以执行Python字节码,这样可以避免多个线程同时操作内部数据结...

Python Web开发实战:3小时从零搭建个人博客

一、为什么选Python做Web开发?Python在Web领域的优势很突出:o开发快:Django、Flask这些框架把常用功能都封装好了,不用重复写代码,能快速把想法变成能用的产品o需求多:行业...

图解Python编程:从入门到精通系列教程(附全套速查表)

引言本系列教程展开讲解Python编程语言,Python是一门开源免费、通用型的脚本编程语言,它上手简单,功能强大,它也是互联网最热门的编程语言之一。Python生态丰富,库(模块)极其丰富,这使...

Python 并发编程实战:从基础到实战应用

并发编程是提升Python程序效率的关键技能,尤其在处理多任务场景时作用显著。本文将系统介绍Python中主流的并发实现方式,帮助你根据场景选择最优方案。一、多线程编程(threading)核...

吴恩达亲自授课,适合初学者的Python编程课程上线

吴恩达教授开新课了,还是亲自授课!今天,人工智能著名学者、斯坦福大学教授吴恩达在社交平台X上发帖介绍了一门新课程——AIPythonforBeginners,旨在从头开始讲授Python...

Python GUI 编程:tkinter 初学者入门指南——Ttk 小部件

在本文中,将介绍Tkinter.ttk主题小部件,是常规Tkinter小部件的升级版本。Tkinter有两种小部件:经典小部件、主题小部件。Tkinter于1991年推出了经典小部件,...

Python turtle模块编程实践教程

一、模块概述与核心概念1.1turtle模块简介定义:turtle是Python标准库中的2D绘图模块,基于Logo语言的海龟绘图理念实现。核心原理:坐标系系统:原点(0,0)位于画布中心X轴:向右...

Python 中的asyncio 编程入门示例-1

Python的asyncio库是用于编写并发代码的,它使用async/await语法。它为编写异步程序提供了基础,通过非阻塞调用高效处理I/O密集型操作,适用于涉及网络连接、文件I/O...

30天学会Python,开启编程新世界

在当今这个数字化无处不在的时代,Python凭借其精炼的语法架构、卓越的性能以及多元化的应用领域,稳坐编程语言排行榜的前列。无论是投身于数据分析、人工智能的探索,还是Web开发的构建,亦或是自动化办公...

Python基础知识(IO编程)

1.文件读写读写文件是Python语言最常见的IO操作。通过数据盘读写文件的功能都是由操作系统提供的,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个...

Python零基础到精通,这8个入门技巧让你少走弯路,7天速通编程!

Python学习就像玩积木,从最基础的块开始,一步步搭建出复杂的作品。我记得刚开始学Python时也是一头雾水,走了不少弯路。现在回头看,其实掌握几个核心概念,就能快速入门这门编程语言。来聊聊怎么用最...

一文带你了解Python Socket 编程

大家好,我是皮皮。前言Socket又称为套接字,它是所有网络通信的基础。网络通信其实就是进程间的通信,Socket主要是使用IP地址,协议,端口号来标识一个进程。端口号的范围为0~65535(用户端口...

Python-面向对象编程入门

面向对象编程是一种非常流行的编程范式(programmingparadigm),所谓编程范式就是程序设计的方法论,简单的说就是程序员对程序的认知和理解以及他们编写代码的方式。类和对象面向对象编程:把...

取消回复欢迎 发表评论: