
经常有大一或者不转码的同学在后台问我,哪些课应该用电脑教,按什么顺序教。
有类似疑问的可以参考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专业区别于其他专业的一大特点是:
下班后的内容与专业学习的内容密切相关。
例如,您学习了数据结构、编译原理、操作系统和计算机网络。如果你从事研发,你一定离不开这些知识。
主要靠自学
不管是专业课还是非专业课大一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,实验室很有意思
适合初学者的快速自学方法
翁凯先生的一个原则:
学习电脑一定要有很强的精神状态。计算机中的所有东西都是由人制造的。如果别人能想到他们,我也能想到他们。在计算机世界中,没有黑魔法。只是我现在不知道,总有一天我会弄清楚所有的细节,所有内部的东西
这里,也有一个问题,确实大部分的东西,只要不断深入挖掘,说不定就能明白。
但要注意时间成本。软件行业通常并不复杂和庞大。任何领域的知识的复杂性都足以消耗我们的整个生命。因此,一定要把握主线。对于技术和知识,一定要学一般的,通俗的,可以试试面试式的学习。
“破砂锅问到底”的精神虽然可敬,但效率并不划算。
需要在适当的层次抽象出一层,并认清这一层提供的接口,不用钻研内部实现,了解原理即可,不需要钻研内部实现。
请登录后发表评论
注册
社交帐号登录