写在前面:学期最终成绩 95.725/100, A+ 4.0,之前确实打过一点 OI,但是在这门课上基本用不上。下面的内容写的比较琐碎
课程的 Slides 仍然是沿用传奇学长 gkxx 的课件,基于 C17, C++17 标准。内容从最基础的 main 函数和数据类型之类的内容开始,先介绍 C 相关特性,然后再引入 C++,介绍引用、类、模板、容器、智能指针和其他各种工具。在课件中还有很多码风建议,很不错。
然而授课并不令人满意,或者说,这个课件本身更适合和各家大模型组队,然后自学。比如说对于 “指向数组的指针” 和 “指针数组” 的区别,是我在课后自己跑代码了之后才看明白的。如果在课上遇到这种问题,没有足够时间去理解,我会直接放弃以跟随上课进度,最后也不再会回去看这个内容。大概是授课进度不太符合我的胃口。
习题课还不错,提供了很多课上内容的补充。但是由于放假和正课速度的问题,Lecture 和 Recitation 的进度差出不少,感觉很割裂,而且最终也没好好讲 Cmake。
对我来说,过去的 OI 知识连(*)[]和*[]的区别都解决不了,因此在 C/C++ 语法和特性知识上,可以说没有多少先发优势。同时,虽然我基本没去听课,但是在每节课的课件上花的时间和正课时长基本相当。打 OI 的经历只能起到一个 “推动我学习” 和提供 “我学得会” 信心的作用。要问学 CS100 前的我 C/C++ 标准、类和继承、模板之类的细节,我也不知道。
最终分数包括作业、期中考试、quiz 和习题课出勤。习题课有签到,占 2%;quiz 总共占 4%;作业占比是 7%+7%+7%+11%+7%+11%+11%+11%;期中考试占 22%。
其中,习题课出勤和 quiz 的分数占比很低。作业中,除了 HW4 - 坦克大战和 HW8-PVZ 有严格的评分标准外,其余都直接使用 OJ 进行评测,基本都能拿到。也就是说,你的绩点通常只与两次大作业和期中考试相关。
坦克大战和 PVZ 这两次大作业的 workload 不算大,前者我基本不用 vibe,两天写完了,后者的最后为了赶 DDL,用 vibe coding 写了一些内容:比如说撑杆跳,以及提供的框架在中途退出时,类中装了unique_ptr的static容器会出现内存管理问题,只好让 AI 帮我改代码。不过,即使狠狠 vibe,只要加上的代码你都看过,基本也都能过 check。
期中考试和两次 quiz 的考法很像,是笔试,可以分成 C/C++ 标准和理解 / 完善程序两部分,比较困难。前者我很讨厌,毕竟课上提到的 UB 实在太多,根本记不过来,但是这至少比题目问i+++++i会怎么样好。后者有一些很 tricky 的地方,比如边界和异常情况的处理坑了我好几回。另外,英语题干也坑了我一次,导致 quiz 1 直接放生了一道题。我更喜欢 25Fall 的 SI100B 那种上机考法。
那么该怎么办呢?我的评价无非就是多看代码、留点时间以及善用 AI。课件基本没有大段的代码,知识点不理解的扔给 AI 基本都能看懂,不过要学会确实需要点时间。这方面有点像文科,许多知识点都得死背,因为 C/C++ 语法就在那里。至于大作业的那种代码和结构,我这样的 OI 小废物也没见过成百上千行的代码,那就还是多看看吧。我自己把 Opencode 的界面当一个能读本地目录的 Chat 来用,似乎也还不错。