# 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 the course website

## Personal Resources

All the resources and assignments used by @PKUFlyingPig are maintained in [PKUFlyingPig/CS106L - GitHub](https://github.com/PKUFlyingPig/CS106L).
