计算机专业学习路线
对计算机科学有追求的同学(读研、想进大厂或工作之余想提升自己),非常推荐你按照本学习路线花两三年的时间去深入学习,这对你今后的发展大有裨益;不过,如果你急于找工作(只有一年以内的时间),这种“科班式”的学习方式并不适合你,建议你按照“培训班式”的方式围绕企业招聘岗位去选择前端JavaScript、Java后端、Go等方向。
关于本学习路线
计算机专业、或转专业、或自学成才、或培训班、或其他专业辅修的童鞋,应该如何循序渐进地掌握系统而扎实的计算机科学知识,让自己拥有名校科班的实力,无论是从事科研抑或找工作都具有竞争力。从目前大厂招聘来看,掌握本学习路线核心课程的童鞋能够很容易拿到ssp offer。
本学习路线主要参考美国四大CS名校(卡耐基梅隆CMU、斯坦福Stanford、加州伯克利UC Berkeley、麻省理工MIT)以及哈佛Harvard、普林斯顿Princeton等6所计算机名校的课程安排与内容。而这六所名校也恰好是图灵奖得主最多的前六所,排 名依次为:斯坦福、MIT、伯克利、普林斯顿、哈佛、CMU。世界上那些最优秀的IT名人可能都学过这些课程,耕耘其中,尽享奇妙。本学习路线会尽可能列出配套的视频、书籍、作业、项目等相关资源,而且会不断更新。
尽管在Github、知乎等平台上,有不少国外名校优质课程的推荐文章,但是大都比较零散、杂乱,让那些想系统学习的同学也难以入手,因此本学习路线会尽可能地:
- 从基础到进阶 :本学习路线充分参考了美国多所名校的先修课程关系、难易程度、重要程度将课程分成大一、大二、大三、研究以及选修多个部分;
- 中文化的推荐资料 :考虑到网络原因,大多数学生访问国外资源速度会比较慢,同时很多同学的英语水平比较有限,因此会尽量采用国内的视频资源比如B站,列出每个课程参考资料相应的中文教材,以及尽可能将资料做到国内的学生都可以访问;
- 中文社区 :本学习路线配有一个微信社群,欢迎大家加入
为什么要按这个学习路线来学?
国内不同院校在计算机专业的课程内容、进度的安排上有着非常大的差异,相比美国CS名校的课程而言,存在着诸多不足,比如:
- 国内院校更偏向于使用C语言作为入门的编程语言,而美国CS名校则都是采用Python,无论是在知识的循序渐进上、项目的实践上以及计算机系统的分层教学上,Python都比C更为友好;
- 国内不少院校的计算机教学还停留在“黑板教学”、“PPT教学”上,这让学生死记硬背理论,却无法真正理解;而国外相关的作业、项目、Lab等实践性的资源十分丰富,比如大一阶段就能够进行全栈项目的开发;
- 国内不少院校在课程内容的安排上,大学物理、数电、模电、电子实验、通信、信号等都是必修,而这些课程在国外通常属于“EE”课程,而不是“CS”课程,计算机专业的学生可以根据自己的爱好来进行选修这些课程,应该把更多精力放在计算机专业的核心课程上;比如2023年普林斯顿大学明确表示物理方面的课程不再归为计算机专业的课程;
- 国内不少大专院校的课程安排过于偏向技校,而一些211、985院校的课程过于杂而不精,学校的教学内容十分陈旧且脱离企业生产实践,导致不少计算机专业的学生毕业之后达不到企业的用人需求;
- 这6所大学都是非常强调实践的,大一就要求独立开发出各种项目(学生自己可以选择实践方向),比如Web全栈、移动端开发、小游戏开发,也非常强调软件工程,写好代码...而且课程内容非常新,这些是国内不少学校比较缺乏的;
这六大顶级名校的课程由浅入深、循序渐进,让学生更加容易接受和理解;课程包含大量作业与项目实践,让学生不仅能够熟练的编写代码,而且还教如何写好代码;课程内容与时俱进,符合当前大厂对学生技能的需求;教学内容十分深入,即便是国内985名校的学生也强烈推荐学习。
关于学习内容
什么是计算机科学?伯克利将计算机科学广义地定义为包括计算理论、算法的设计与分析、计算机体系结构与逻辑设计、编程语言、编译器、操作系统、科学计算、计算机图形学、数据库、人工智能和自然语言处理。计算机科学知识不应仅限于计算机专业的学生学习,跨学科跨领域的结合也是大势所趋。
计算机专业应该学习哪些内容?6所CS名校对学生应该掌握哪些核心课程都有一个非常清晰的说明,本学习路线将这些学校对本科毕业生的要求以及课程的分类、顺序、重要程度等课程体系进行了一个说明。不过,由于计算机的课程十分庞杂,分的方向很多,比如斯坦福大学就针对不同方向(赛道)推出了不同的课程学习要求,这里没法一一都列出来,因此对这些课程进行了一定的筛选。
- 本学习路线将必修的课程按照难易程度以及参考六大名校的教学学习顺序,分成了《大一·基础必修课》、《大二·进阶必修课》、《大三·专项必修课》以及《深入进阶必修课》,必修课是计算机专业的基础核心,建议花大量精力在这些必修课上;
- 每个学校都会在必修课之外,提供一些拓展学生视野的选修课,这些选修课涉及的范围比较广,虽然不是必修,但是建议按照兴趣选择几个方向、几门课程去学习,这也是这六所学校的毕业要求;
- 机器学习、人工智能不再是CS必修课程,考虑到人工智能的重要性,这里单独列了一个《人工智能》的栏目;
- 有些课程不是所有计算机专业方向都必修的,比如计算机网络、数据库、分布式系统等,不过这些课程也都是几乎所有这6所学校的核心选修课,而且这些课程对国内找工作比较有好处,所以都罗列了下来;
- 离散数学、微积分、概率统计、线性代数都是必修课,这里单独列出了一个《数学》的栏目,建议在大二前学完相关课程;
我应该学习哪个路线?
大家在学习的时候,可以参考单个学校的课程体系,但是更加建议大家紧紧的围绕核心课程来展开学习,选择核心课程比如计算机系统下资源最为丰富,认可度最高的课程。为了大家的学习方便,我会:
- 在有视频的课程前面标上 📺
- 推荐大学学习的课程后面标上 ⭐️
关于名校课程里的一些名词
-
Handouts:这通常指的是教师分发给学生的资料,可以是课程大纲、讲义、实验指南或者其他参考材料。这些资料可以帮助学生理解和学习课程内容,也可以作为学生完成作业或复习考试的参考。
-
Assignments:这指的是教师布置给学生的作业,可能包括阅读、写作、计算、实验、项目等等。这些作业的目的通常是让学生应用所学的知识,提高他们的理解能力和技能。
-
Lectures:这指的是教师给学生的讲座或课堂讲解,通常包含了课程的主要教学内容。讲座可能是面对面的,也可能是通过视频或者网络直播的方式进行。在讲座中,教师通常会讲解新的知识、概念或者技能,学生则需要认真听讲、记笔记,并在课后复习和思考。
-
Gradescope:是一个在线评分平台,它被设计用来帮助教师和教育工作者更有效地管理和评估学生的作业和考试。这个工具可以用于多种类型的作业和考试,包括编程作业、数学和科学问题、以及其他需要手写答案的问题。
-
Syllabus:也就是教学大纲,是一份详细的课程指南,它为学生提供了关于课程的重要信息,课程描述、教师信息、课程安排、评分规则、课程规则和期望、学习资源等。