# 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.  

Some very basic but practical data structures and algorithms: 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. Additionally, some very useful techniques, such as how to use a debugger to troubleshoot, and how to escape from an initialized maze by reading the content in the debugger in assignment 8.

Like CS61A, code frameworks and test programs are provided. Although not as detailed as the CS61A tests, the assignments also require you to add your own test cases. Each assignment comes with a detailed document that guides you step-by-step to achieve each milestone. In the end, you can observe the results of your data structures and algorithm implementations in the GUI provided by the starter code, which is very rewarding. Each assignment corresponds to very interesting and practical cases, such as the final task of implementing Huffman encoding to compress and decompress files.

## Resources

- Course Website: [CS106B](https://web.stanford.edu/class/cs106b/), [CS106B 2022 winter](https://web.stanford.edu/class/archive/cs/cs106b/cs106b.1224/), [CS106X](https://web.stanford.edu/class/cs106x/)
- Textbook: <https://web.stanford.edu/class/cs106x/res/reader/CS106BX-Reader.pdf>
- Recordings: <https://www.bilibili.com/video/BV1G7411k7jG> <https://www.youtube.com/watch?v=FIroM06V2MA&list=PL-h0BZdG_K4kAmsfvAik-Za826pNbQd0d>
- assignments: [CS106B 2022 winter](https://web.stanford.edu/class/archive/cs/cs106b/cs106b.1224/) 9 assignments

## Complementary Resources

@Andy-xiaokang All the resources and assignment implementations used in studying this course are compiled in [Andy-xiaokang/CS106B - GitHub](https://github.com/Andy-xiaokang/CS106B)  
about the incompatible libray you can refer to [readme](https://github.com/Andy-xiaokang/CS106B/blob/master/README.md#postscript) and I recommend the video [youtube spring 2015](https://www.youtube.com/watch?v=FIroM06V2MA&list=PL-h0BZdG_K4kAmsfvAik-Za826pNbQd0d)