Quarter 1 Quarter 2 Quarter 3
Freshman Math 19: Calculus Math 20: Calculus Math 21: Calculus
CS 106A: Programming Methodology CS 106B: Programming Abstractions Phys 21: Mechanics
Sophomore Math 51: Linear Algebra Math 52: Integral Calculus of Several Variables Math 53: Differential Equations with Linear Algebra
Phys 23: Electricity ENG 40 CS 109: Introduction to Probability for Computer Scientists
CS 107: Computer Organization and Systems CS 103: Mathematical Foundations of Computing CS 111: Operating Systems Principles
Junior CS 161: Design and Analysis of Algorithms CS 140: Operating Systems and Systems Programming CS 143: Compilers
CS 144: Introduction to Computer Networking CS 124: From Languages to Information CS 142: Web Applications
CS 154: Introduction to the Theory of Computation CS 145: Data Management and Data Systems
Senior CS 108: Object-Oriented Systems Design CS 229: Machine Learning CS 194W: Software Project
CS221: Artificial Intelligence: Principles and Techniques CS 230: Deep Learning CS 155: Computer and Network Security
CS 231N: Deep Learning for Computer Vision CS 224N: Natural Language Processing with Deep Learning

Freshman

Math19 Calculus

Math20 Calculus

Math21 Calculus

Math51 Linear Algebra, Multivariable Calculus, and Modern Applications

CS106AX: Programming Methodologies in JavaScript and Python

Introduction to the engineering of computer and web applications emphasizing modern software engineering principles: object-oriented design, decomposition, encapsulation, abstraction, and testing.

CS106X: Programming Abstractions in C++

CS 41: The Python Programming Language

Sophomore

CS107: Computer Organization & Systems

CS110: Principles of Computer Systems

CS103: Mathematical Foundations of Computing

CS109: Introduction to Probability for Computer Scientists

Junior

CS140: Operating Systems and Systems Programming

CS144: Introduction to Computer Networking

CS161: Design and Analysis of Algorithms

CS154: Introduction to Automata and Complexity Theory

Senior

CS108: Object-Oriented Systems Design

CS145: Data Management and Data Systems

CS155: Computer and Network Security

CS221: Artificial Intelligence: Principles and Techniques

CS194W: Software Project

Particular specialization

Systems

Distributed Systems

Description

分布式操作系统和应用程序问题,强调高级协议和分布式状态共享是关键技术。主题:分布式共享内存,面向对象的分布式系统设计,分布式目录服务,原子事务和时间同步,应用程序足够的一致性,文件访问,进程调度,进程迁移以及存储/通信抽象(关于分布,规模,鲁棒性)面对失败和安全

如一致性协议比如 Raft 算法、分布式存储等

Zookeeper、Raft、

Prerequisites
  • Introduction to Computer Networking

Compilers

Description

编译原理:考的甚少,懂这个的校招面试官也极少。我当初只在网易游戏的笔试题中遇到过,但是那道题也非常非常非常的简单,但是不知道为什么分值给的特别的高。了解好简单的词法分析,语法分析原理即可,会解左递归,知道正则表达式,状态机转换,递归下降分析即可,校招基本上碰不到优化相关的,所谓的寄存器分配等几乎是不可能遇见的。

Prerequisites
  • Mathematical Foundations of Computing
  • Computer Organization and Systems
Readings

参考书籍:龙/虎书

Parallel Computing

Description

并行性和并行编程的介绍。大多数新的计算机体系结构是并行的。对这些机器进行编程需要了解并行软件的基本问题和技术。主题:当前硬件中的各种并行性(例如,快速网络,多核,GPU等加速器,矢量指令集),位置的重要性,隐式与显式并行性,共享与非共享内存,同步机制(锁定,原子性) ,事务,障碍)和并行编程模型(线程,数据并行/流,MapReduce,Apache Spark,SPMD,消息传递,SIMT,事务和嵌套并行性)。

Prerequisites
  • Principles of Computer Systems
  • Compilers

Software Design

  • 系统设计能力,如短链服务、评论服务、Feed流系统、抢红包、秒杀等

Artificial Intelligence

Machine Learning

Prerequisites
  • Introduction to Probability for Computer Scientists
  • Linear Algebra, Multivariable Calculus, and Modern Applications

Natural Language Processing with Deep Learning

专注于深度学习方法:针对各种语言理解任务的理解,实施,培训,调试,可视化和扩展神经网络模型。探索自然语言任务,范围从简单的单词级别和句法处理到共指,问题解答和机器翻译。对代表性论文和系统进行检查,并完成将复杂的神经网络模型应用于大规模NLP问题的最终项目。

Prerequisites
  • calculus and linear algebra
  • Machine Learning

Computer Vision: Foundations and Applications

Prerequisites

Students should be familiar with Python, Calculus & Linear Algebra.

Convolutional Neural Networks for Visual Recognition

Prerequisites
  • Computer Vision: Foundations and Applications
  • Machine Learning
  • calculus and linear algebra

Information

From Languages to Information

Prerequisites
  • Programming Abstractions in C++
Prerequisites
  • Computer Organization and Systems
  • Introduction to Probability for Computer Scientists
  • Design and Analysis of Algorithms

Cloud Computing

Readings

Summary

类别 归属 编号 课程
Programming Abstractions Stanford CS 106X Programming Abstractions in C++
Computer Systems CMU 15-213/513 [Introduction to Computer Systems]
Data Structures and Algorithms
Operating Systems
Operating Systems CMU 15-410
Computer Networks
Computer Networks CMU 15-441
Database Systems CMU 15-445/645 [Database Systems]
Compiler CMU 15-411
Database Systems CMU 15-721 Advanced Database Systems
Distributed Systems
Distributed Systems CMU 15-440/640
Cloud Computing CMU 15-319/619 Cloud Computing
Cloud Computing CMU 15-719 Advanced Cloud Computing
Information Retrieval Stanford CS 276 Information Retrieval and Web Search

CMU

15-112 Fundamentals of Programming and Computer Science

15-121 Introduction to Data Structures

15-122 Principles of Imperative Computation

15-150 Principles of Functional Programming

15-210 Parallel and Sequential Data Structures and Algorithms

15-211 Fundamental Data Structures and Algorithms

15-213 Introduction to Computer Systems

15-237 Special Topic: Cross-Platform Mobile Web Apps

15-251 Great Theoretical Ideas in Computer Science

15-312 Foundations of Programming Languages

15-313 Foundations of Software Engineering

15-322 Introduction to Computer Music

15-323 Computer Music Systems and Information Processing

15-349 Introduction to Computer and Network Security

15-351 Algorithms and Advanced Data Structures

15-354 Computational Discrete Mathematics

15-359 Probability and Computing

15-441 Computer Networks

15-451 Algorithm Design and Analysis

15-462 Computer Graphics

基本编程课:讲一讲变量,条件判断,循环,数组,排序一类的基础内容

函数编程课程:让学生熟悉函数式变成并能够通证明一些函数式编程的属性。

系统编程入门:介绍一些比较底层的系统原理,比如内存,缓存,位运算,程序优化,多线程等等。

计算和数学理论课:内容很杂的数学加理论课,包括排列组合,自动机,加密,多项式,概率,图论等等。

数据结构和算法:讲一些常用的数据结构和算法。

高级算法课:也是讲算法,但是会涉及到很多的算法分析内容。

操作系统:操作系统的原理和实现,一般会实际实现一个操作系统,内容涉及虚拟内存,驱动,进程调度等等。

大量选修课

大量选修课:计算机图形,程序语言,系统,机器学习,自然语言,机器人,计算机视觉,网络等等。

Advice from Ivan

· 学好英语

· 能不去的课就可以不去了

· 但是基础还是要打牢的,特别是OS,编译,网络,数据库

· 国内的本科教育已经炸裂了,得靠自己

· 光看书真心没有用

· 多动手实践

· 不知道怎么做怎么办?去Google,找公开课

· 学会用Linux or OS X

· 学一门函数式语言,lisp也可,haskell也可。

· 熟练掌握一门脚本语言,Python or ruby

· 精通用C

· 学会debug

· 学会debug

· 学会debug

· 如果本科出身不错(985),就不要弄什么ACM啦,投入产出比太低

· 但是数据结构和算法一定要掌握好

· 可以适当做做题

-————————————————— 来点real world的:

· CSAPP不管做什么是一定要看到的,google一下做掉习题

· lisp可以google 6.037有惊喜,haskell可以google CIS 194或者CS240h有惊喜

· SICP可以不看,google CS3110有惊喜。

-————————————————-

· 尽早确定自己想做什么

· 科研 or 工程?

· 尽早定下一个方向

· 大二可以开始朝着这个方向打基础了

-—————————————————

· 有自制的话可以多上上知乎

· 不为别的,知乎上码农多,各种PhD多

· 增长见闻

· 但是别让他占据太多时间,毕竟这不是获取知识的方式

· 很多人只给你世界观,方法论需要你自己去实践

· 实践

· 动手

· 现在开始

学习C++建议

C++的语法其实不难,主要难在坑太多,要多写。

花两三天看完书,然后做完书上的习题,做一部分。

CS106X: Programming Abstractions打开这个网站,看掉slides。把assignment都做掉!

操作系统: MIT 6.828 Stanford: Pintos UCB: Nachos THU: Ucore Harvard: OS161 以上均为开源,自己学。

编译: UCB CS164,强推 MIT 6.035 OCW上的project是开源的,现在的貌似不开放了 Upenn的PL方面的课程 CMU 15-411

以上所有课程的lecture notes 基本约等于一本好书,并且assignment project均开放下载 还有更多我推了也没用,毕竟精力有限,很多我自己都没看完

-> Follow: Berkeley 的 CS 61A..B..C..+ Stanford CS106, CS 107 把 计算机系统,程序设计,数据结构入个门,顺带熟悉了 Python, C, Java, C++, MIPS汇编语言 -> Follow: MIT 6.046J, MIT 6.828[Berkeley CS162], Stanford CS143 把算法 操作系统 编译器三个核心再分别入个门 -> Follow: MIT 6.042J 离散数学入个门。线性代数,概率论相似 。人工智能机器学习也入门了解一下 -> 试一试 Topcoder or ACM..等所谓的「编程」比赛。 -> 学一点基础的Web开发

UW:The Hardware/Software Interface 非常好,老师讲课非常清楚,发音咬字都非常标准。并且我是正好在看CSAPP这本书,感觉效果很好,听UW的老师讲了以后更容易理解吧。并且最精彩的是UW把他们课程上学生要做的5个LAB几乎原封不动的搬了过来,不得不说非常的良心。 UW:Introduction to Date Science。非常有趣的一门课,老师很有水平,但是课程比较有难度,需要花很多时间在上面。这门课的几个lab和assignment都非常有趣。 不得不说UW是非常有良心的大学啊,看他们开的课程几乎都快是CS的大部分课程了。

大S:algorithm。老师讲的非常细致,非常非常细,并且老师的语速很快。。经常跟不上啊教练。但是这门课的作业啊什么的感觉就不够精细了,可能也是跟这门课有关,毕竟算法这个东西不直接交流没法很好的评估。 大S:cryptography。老师很有水平,并且很联系前沿,讲了很多最新使用的密码。课程比较难,作业也不简单,需要花不少时间的。 大S:Machine Learning。这门课时很早之前学的。记不太清了,比较基础吧。 大S的课有一个非常大的特点就是每个礼拜的课的时长都非常长,但是作业方面做得不是很好吧我觉的。

Rice:Python。由于之前学校里有Python课,所以有一定的基础。Rice这门课主要就是围绕着做一个游戏来讲的,老师非常有趣,讲的也很清楚,但是相应的,比较基础吧,有点像技能培训的样子。

你可以继续花时间在寻找更好更专业专业的学习方法和资源上。

Reference

  1. Tracks of Stanford University Undergraduate Major in Computer Science
  2. Paper Forms and Spreadsheets of Stanford University Undergraduate Major in Computer Science
  3. Stanford Flowcharts and 4-Year Plans
  4. Computer Science Program Requirements
  5. Stanford Program Sheets
  6. https://exploredegrees.stanford.edu/schoolofengineering/computerscience/#bachelortext
  7. https://ughb.stanford.edu/handbooks/handbooks