# Stanford CS106B/X: Programming Abstractions in C++

## 课程简介

- 所属大学：Stanford
- 先修要求：计算机基础 (CS50/CS106A/CS61A or equivalent)
- 编程语言：C++
- 课程难度：🌟🌟
- 预计学时：50-70 小时

Stanford 的进阶编程课，CS106X 在难度和深度上会比 CS106B 有所提高，但主体内容类似。主要通过 C++ 语言让学生在实际的编程作业里培养通过编程抽象解决实际问题的能力，同时也会涉及一些简单的数据结构和算法的知识，但总体来说没有一门专门的数据结构课那么系统。  

课程内容包括很多基础但实用的数据结构和算法以及相关概念：collections, ADT, recursion, BFS, DFS, backtracking, sorting, hash, pointer, linked list, BST, OOP, pass by value, pass by reference, stack allocation, heap allocation, memory management。此外课程还会教授一些实用技巧，比如如何使用 debugger 排错，在 assignment8 中你会通过阅读 debugger 中的内容逃出迷宫。  

和 CS61A 一样提供代码框架和测试程序，虽然没有 CS61A 测试的那么详细，但是作业中也有要求可以自己添加测试用例。每一个作业都会给出一份详细的文档，一步一步地实现每一个 milestone, 最后便可以在 starter code 给出的 GUI 中观察到自己的数据结构和算法实现的效果，非常有成就感。每一个作业都对应非常有趣又实际的案例，比如最后的任务是实现 huffman encoding 来压缩文件和解压文件。

## 课程资源

- 课程网站：[CS106B Latest](https://web.stanford.edu/class/cs106b/), [CS106B 2022 winter](https://web.stanford.edu/class/archive/cs/cs106b/cs106b.1224/), [CS106X Latest](https://web.stanford.edu/class/cs106x/)
- 课程教材：<https://web.stanford.edu/class/cs106x/res/reader/CS106BX-Reader.pdf>
- 课程视频：[youtube spring 2015](https://www.youtube.com/watch?v=FIroM06V2MA&list=PL-h0BZdG_K4kAmsfvAik-Za826pNbQd0d), [bilibili 2018 winter](https://www.bilibili.com/video/BV1G7411k7jG)
- 课程作业：详见 [CS106B 2022 winter](https://web.stanford.edu/class/archive/cs/cs106b/cs106b.1224/), 最重要的是9个 assignment

## 资源汇总

@akun0311 在学习这门课中用到的所有资源和作业实现都汇总在 [akun0311/CS106B-X-CS106L - GitHub](https://github.com/akun0311/CS106B-X-CS106L-) 中。  
@Andy-xiaokang 在学习这门课中用到的所有资源和作业实现都汇总在 [Andy-xiaokang/CS106B - GitHub](https://github.com/Andy-xiaokang/CS106B) 中。

关于 assignments 中版本不兼容的问题可以详见 [readme](https://github.com/Andy-xiaokang/CS106B/blob/master/README.md#postscript)  
课程视频我推荐 [youtube spring 2015](https://www.youtube.com/watch?v=FIroM06V2MA&list=PL-h0BZdG_K4kAmsfvAik-Za826pNbQd0d) 这个版本，授课激情，并且可以看到老师和学生之间在提问环节的精彩交互（几百名优秀 compiler 的观察总会提出一些有趣的问题）
