| 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++
Information Retrieval and Web Search
Prerequisites
- Computer Organization and Systems
- Introduction to Probability for Computer Scientists
- Design and Analysis of Algorithms
Cloud Computing
Readings
- OpenStack实战
- OpenStack设计与实现
- https://www.coursera.org/specializations/cloud-computing
- “openstack” “kvm” “ceph”
- https://azure.microsoft.com/ru-ru/blog/new-multi-tenant-patterns-for-building-saas-applications-on-sql-database/
- https://docs.microsoft.com/en-us/azure/azure-sql/database/saas-tenancy-welcome-wingtip-tickets-app
- https://github.com/microsoft/WingtipTicketsSaaS-DbPerTenant
- https://www.saas-tenant.com/white-paper/Convert-your-web-application-to-a-Multi-tenant-SaaS-solution-using-SaaS-Tenant-Framework.html
- https://www.codementor.io/@pauloscardine/15-minute-guide-to-secure-saas-multitenancy-with-django-and-let-s-encrypt-ijtlarca8
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
- Tracks of Stanford University Undergraduate Major in Computer Science
- Paper Forms and Spreadsheets of Stanford University Undergraduate Major in Computer Science
- Stanford Flowcharts and 4-Year Plans
- Computer Science Program Requirements
- Stanford Program Sheets
- https://exploredegrees.stanford.edu/schoolofengineering/computerscience/#bachelortext
- https://ughb.stanford.edu/handbooks/handbooks