Stanford CS106B/X: Programming Abstractions in C++
课程简介
- 所属大学:Stanford
- 先修要求:计算机基础 (CS50/CS106A/CS61A or equivalent)
- 编程语言:C++
- 课程难度:🌟🌟
- 预计学时:50-70 小时
Stanford 的进阶编程课,CS106X 在难度和深度上会比 CS106B 有所提高,但主体内容类似。主要通过 C++ 语言让学生在实际的编程作业里培养通过编程抽象解决实际问题的能力,同时也会涉及一些简单的数据结构和算法的知识,但总体来说没有一门专门的数据结构课那么系统。
课程资源
- 课程网站:CS106B, CS106X
- 课程教材:https://web.stanford.edu/class/cs106x/res/reader/CS106BX-Reader.pdf
- 课程视频:https://www.bilibili.com/video/BV1G7411k7jG
Stanford CS106B/X: Programming Abstractions in C++
Descriptions
- Offered by: Stanford
- Prerequisites: CS50/CS106A/CS61A or equivalent
- Programming Languages: C++
- Difficulty: 🌟🌟
- Class Hour: 50-70 hours
CS106B/X are advanced programming courses at Stanford. CS106X is more difficult and in-depth than CS106B, but the main content is similar. Based on programming assignments in C++ language, students will develop the ability to solve real-world problems through programming abstraction. It also covers some simple data structures and algorithms, but is generally not as systematic as a specialized data structures course.
Resources
- Course Website: CS106B, CS106X
- Textbook: https://web.stanford.edu/class/cs106x/res/reader/CS106BX-Reader.pdf
- Recordings: https://www.bilibili.com/video/BV1G7411k7jG
CS106L: Standard C++ Programming
课程简介
- 所属大学:Stanford
- 先修要求:最好掌握至少一门编程语言
- 编程语言:C++
- 课程难度:🌟🌟🌟
- 预计学时:20 小时
我从大一开始一直都是写的 C++ 代码,直到学完这门课我才意识到,我写的 C++ 代码大概只是 C 语言 + cin/cout 而已。
这门课会深入到很多标准 C++ 的特性和语法,让你编写出高质量的 C++ 代码。例如 auto binding, uniform initialization, lambda function, move semantics,RAII 等技巧都在我此后的代码生涯中被反复用到,非常实用。
值得一提的是,这门课的作业里你会实现一个 HashMap(类似于 STL 中的 unordered_map), 这个作业几乎把整个课程串联了起来,非常考验代码能力。特别是 iterator 的实现,做完这个作业我开始理解为什么 Linus 对 C/C++ 嗤之以鼻了,因为真的很难写对。
总的来讲这门课并不难,但是信息量很大,需要你在之后的开发实践中反复巩固。Stanford 之所以单开一门 C++ 的编程课,是因为它后续的很多 CS 课程 Project 都是基于 C++的。例如 CS144 计算机网络和 CS143 编译器。这两门课在本书中均有收录。
课程资源
- 课程网站:http://web.stanford.edu/class/cs106l/
- 课程视频:https://www.youtube.com/channel/UCSqr6y-eaQT_qZJVUm_4QxQ/playlists
- 课程教材:http://web.stanford.edu/class/cs106l/full_course_reader.pdf
- Assignment1下载网址:https://github.com/snme/cs106L-assignment1
- Assignment2下载网址:https://github.com/snme/cs106L-assignment2
- 课程作业:具体内容见课程网站,我做的时候一共是两个:
- 实现一个 WikiRacer 的小游戏
- 实现一个类似 STL 库的 HashMap
资源汇总
@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 PKUFlyingPig/CS106L - GitHub 中。
CS106L: Stanford C++ Programming
Descriptions
- Offered by: Stanford
- Prerequisites: better if you are already proficient in a programming language
- Programming Languages: C++
- Difficulty: 🌟🌟🌟
- Class Hour: 20 hours
I've been writing C++ code since freshman year, and it wasn't until I finished this class that I realized the C++ code I was writing was probably just C + cin/cout.
This class will dive into a lot of standard C++ features and syntax that will allow you to write quality C++ code. Techniques such as auto binding, uniform initialization, lambda function, move semantics, RAII, etc. have been used repeatedly in my coding career since then and are very useful.
It is worth mentioning that in this class, you will implement a HashMap (similar to unordered_map in STL), which almost ties the whole course together and is a great test of coding skills. Especially after the implementation of iterator, I started to understand why Linus is so sarcastic about C/C++, because it is really hard to write correctly.
In short, the course is not difficult but very informative which requires you to consolidate repeatedly in later practice. The reason why Stanford offers a single C++ programming class is that many of the subsequent CS courses' projects are based on C++. For example, CS144 Computer Networks and CS143 Compilers. Both of these courses are included in this book.
Course Resources
- Course Website: http://web.stanford.edu/class/cs106l/
- Recordings: https://www.youtube.com/channel/UCSqr6y-eaQT_qZJVUm_4QxQ/playlists
- Textbook: http://web.stanford.edu/class/cs106l/full_course_reader.pdf
- Assignment1 Download: https://github.com/snme/cs106L-assignment1
- Assignment2 Download: https://github.com/snme/cs106L-assignment2
- Assignments: refer to course website
Personal Resources
All the resources and assignments used by @PKUFlyingPig are maintained in PKUFlyingPig/CS106L - GitHub.
CS61A: Structure and Interpretation of Computer Programs
课程简介
- 所属大学:UC Berkeley
- 先修要求:无
- 编程语言:Python, Scheme, SQL
- 课程难度:🌟🌟🌟
- 预计学时:50 小时
伯克利 CS61 系列的第一门课程,也是我的 Python 入门课。
CS61 系列是伯克利 CS 专业的入门课,其中:
- CS61A: 强调抽象,让学生掌握用程序来解决实际问题,而不关注底层的硬件细节。
- CS61B: 注重算法与数据结构以及大规模程序的构建,学生会用 Java 语言结合算法与数据结构的知识来构建千行代码级别的大型项目(一个简易的谷歌地图,一个二维版的 Minecraft)。
- CS61C: 关注计算机体系结构,让学生理解高级语言(例如 C)是如何一步步转换为机器可以理解的 01 串并在 CPU 执行的,学生将会学习 RISC-V 架构并自己用 Logism 实现一个 CPU。
CS61B 和 CS61C 在本书中均有收录。
回到 CS61A,注意这不仅仅是一门编程语言课,而是会深入到程序构造与运行的原理。最后你将在第 4 个 Project 中用 Python 实现一个 Scheme 的解释器。此外,抽象将是这门课的一大主题,你将学习到函数式编程、数据抽象、面向对象等等知识来让你的代码更易读,更模块化。当然,学习编程语言也是这门课的一大内容,你将会掌握 Python、Scheme 和 SQL 这三种编程语言,在它们的学习和比较中,相信你会拥有快速掌握一门新的编程语言的能力。
注意:如果此前完全没有编程基础,直接上手 CS61A 需要一定的学习能力和自律要求。为避免课程难度过高而导致的信心挫折,可以选择一个更为友好的入门编程课程。例如伯克利的 CS10 或者哈佛大学的 CS50。
课程资源
- 课程网站:https://inst.eecs.berkeley.edu/~cs61a/su20/
- 课程视频: 参见课程网站链接
- 课程教材:http://composingprograms.com/
- 课程作业:课程网站会有每个作业对应的文档链接以及代码框架的下载链接。
资源汇总
@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 PKUFlyingPic/CS61A - GitHub 中。
CS61A: Structure and Interpretation of Computer Programs
Descriptions
- Offered by: UC Berkeley
- Prerequisites: None
- Programming Languages: Python, Scheme, SQL
- Difficulty: 🌟🌟
- Class Hour: 50 hours
This is the first course in the Berkeley CS61 series, and my introductory course to Python.
The CS61 series is composed of introductory courses to the CS major at Berkeley, where
- CS61A: Emphasizes abstraction and equips students to use programs to solve real-world problems without focusing on the underlying hardware details.
- CS61B: Focuses on algorithms and data structures and the construction of large-scale programs, where students combine knowledge of algorithms and data structures with the Java language to build large-scale projects at the thousand-line code level (such as a simple Google Maps, a two-dimensional version of Minecraft).
- CS61C: Focusing on computer architecture, students will understand how high-level languages (e.g. C) are converted step-by-step into machine-understandable bit strings and executed on CPUs. Students will learn about the RISC-V architecture and implement a CPU on their own by using Logism.
CS61B and CS61C are both included in this guidebook.
Going back to CS61A, you will note that this is not just a programming language class, but goes deeper into the principles of program construction and operation. Finally you will implement an interpreter for Scheme in Python in Project 4. In addition, abstraction will be a major theme in this class, as you will learn about functional programming, data abstraction, object orientation, etc. to make your code more readable and modular. Of course, learning a programming language is also a big part of this course. You will master three programming languages, Python, Scheme, and SQL, and in learning and comparing them, you will be equiped with the ability to quickly master a new programming language.
Note: If you have no prior programming experience at all, getting started with CS61A requires a relatively high level of learning ability and self-discipline. To avoid the frustration of a struggling experience, you may choose a more friendly introductory programming course at first. For example, CS10 at Berkeley or CS50 at Harvard are both good choices.
Course Resources
- Course Website: https://inst.eecs.berkeley.edu/~cs61a/su20/
- Recordings: refer to the course website
- Textbook: http://composingprograms.com/
- Assignments: refer to the course website
Personal Resources
All the resources and assignments used by @PKUFlyingPig in this course are maintained in PKUFlyingPic/CS61A - GitHub