概述
Stanford cs106L是斯坦福大学讲Standard C++ Programming的一门课,与cs106B/X不同,cs106L专注于c++语言本身,并且讲到了modern c++,涵盖了很多c++11、c++14以及c++17的一些特性,大家可以把它作为一份高质量的学习现代c++的资料来享用。
为什么要学这门课
c++这门课相信大家都是从大一就已经开始学习了,但是大概率其实怎么说呢,大家大部分学的都是c++98的标准,且有的学校老传统了用的还是好多年前的ppt甚至vc6.0,基本上对于c++的理解就是c+cin/cout,可能还多了个面向对象的类。所以对于在大学里对c++只会 c + cin、cout的人来说,这绝对是一个极佳的学习现代c++的机会;
课程大纲
对于CS106L的内容,引入b站上视频up主的评论"课程内容涉及C++五大主题:C++介绍、Stream 和 Types、STL 四大模块、OOP 面向对象、高级特性(RAII、多线程、元编程)"
与cs106B的不同之处
在cs106L的第一节slide中就可以知道cs106L与cs106B的不同之处:
cs106B主要是讲编程范式,语言标准大部分基于c++98,且使用了stanford自己写的一个语法库,所以你大概可以理解为类似于大家大学里面的编程入门课,不过它还涉及到了一些数据结构的内容;
cs106L主要是聚焦于c++语言本身,并且语言标准基于c++17,稍微提到了一点c++20的特性,并且他希望你deep dive into messy c++ details,而且课程的目标是希望give you enough c++ for a job, internship or research.
以下截自cs106L slides:
选择的课程学期说明
讲座由于比较零散,但b站上面有一个cs106L special edition的收录,它是2020 winter和2019fall版本的整合体,都是Avery Wang和Anna Zeng主讲的,也是个人认为目前讲CS106L最好的版本,当然 最新的版本可能也会引入最新的一些C++特性,但是现在的版本视频并没有开源视频到网上,所以对于2020之后的C++特性可能需要自行去了解。
workload
该课程体量相对而言不是那么大,总共就20个lecture左右,且对于该课程的作业我在下面会提到,按每天1-2个lecture,加上slides的理解,以及勤奋地可能自己跟着编写demo代码的速度来看,大概2-3个星期左右就可以完成(本人在暑假期间基本就只有这一件事,所以大概就花了两个星期左右跟完了整个课程),不过他的知识密度是很大的,所以在后期可能还需要时间来温习一下。
个人完成的与cs106L相关的仓库
GitHub website: cscourage/CS106L (github.com)
本仓库收集了CS106L的学习资料,其中包括slides和课上demo的代码,demo代码是跟着视频自己手敲的,方便跟上节奏学习,详情见仓库mylec_code文件夹,如果需要教师代码,见下面课程网站链接; slides根据课程讲座整合对应了每节课的内容,可能会有些许出入但大致相同;
本仓库中没有包含作业,是因为据网上说之前版本的作业文档排版有些问题,IDE是QTCreator,23最新版本好像已经支持vscode了,但配环境过程很复杂,会报各种各样的问题,因此没有人带着配的话可能 会比较挣扎,因此这部分建议寻找其他的c++训练。而且有一个叫做Wiki Racer的作业,据说和cs61b的puzzle solver很像,如果有需求的话,可以试着用c++重写练手;
后续建议
上面提到了,该课程虽然体量小,但是知识密度很大,所以学完之后在日后的工作或者学习中如果不上手练习它,也很有可能会忘记很多messy details以及philosophy(当然如果你不喜欢c++的话,绝对一气之下再也不用c++了那另说😂),因此建议大家可以尝试用c++来练习刷题了,比如你可以用它来刷leetcode或者luogu都可以了;
同时这门课也是斯坦福其他高质量公开课程的语言基础,比如Stanford cs144(require c++17)和Stanford cs143.
相关资料网址
课程网站:CS106L: Standard C++ Programming
讲座视频:【中英双语🎉】CS106L: Standard C++ Programming, Special Edition_哔哩哔哩_bilibili
cppreference: cppreference.com
Compiler Explorer(在线c++等语言转各种指令集汇编网站): Compiler Explorer (godbolt.org)
鸣谢
感谢Avery Wang和Anna Zeng的精彩授课,让我深刻地了解到了一些在学校大概率不会系统性学到的modern c++知识,也感谢Stanford的开源精神,能够让世界各地的人能够接触到如此优秀的教育资源!!!