cs-self-learning/docs/编程入门/cpp/CS106L.md
Yinmin Zhong 4979ddabbe
[UPDATE] Reorganize the intro to programming section (#593)
* reorganize intro to programming

* nits

* nits
2024-04-14 00:55:13 +08:00

32 lines
2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CS106L: Standard C++ Programming
## 课程简介
- 所属大学Stanford
- 先修要求:最好掌握至少一门编程语言
- 编程语言C++
- 课程难度:🌟🌟🌟
- 预计学时20 小时
我从大一开始一直都是写的 C++ 代码,直到学完这门课我才意识到,我写的 C++ 代码大概只是 C 语言 + `cin`/`cout` 而已。
这门课会深入到很多标准 C++ 的特性和语法,让你编写出高质量的 C++ 代码。例如 auto binding, uniform initialization, lambda function, move semanticsRAII 等技巧都在我此后的代码生涯中被反复用到,非常实用。
值得一提的是,这门课的作业里你会实现一个 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>
- 课程作业:具体内容见课程网站,我做的时候一共是两个:
1. 实现一个 WikiRacer 的小游戏
2. 实现一个类似 STL 库的 HashMap
## 资源汇总
@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS106L - GitHub](https://github.com/PKUFlyingPig/CS106L) 中。