Skip to content

Commit

Permalink
docs: 添加 OOP 陈翔老师评价 (#194)
Browse files Browse the repository at this point in the history
  • Loading branch information
45gfg9 authored Jul 8, 2024
1 parent 5bd521c commit 20b37ae
Showing 1 changed file with 78 additions and 63 deletions.
141 changes: 78 additions & 63 deletions docs/major_basic/object_oriented_programming/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,22 @@

=== "翁恺"

~~不出意外的话后续几年图灵班 OOP 的预置老师还会是翁恺老师~~。尽管翁恺老师在 21 级风评飞速下跌,大有晚节不保的情况,但作为永平奖获得者和在 OOP 课程组辛勤耕耘 20 余年的老师,翁恺老师授课毫无疑问还是最有水平的,也会做出很多课程外的知识拓展,因此不太推荐更换预置的翁恺老师。
<del>不出意外的话后续几年图灵班 OOP 的预置老师还会是翁恺老师。</del>尽管翁恺老师在 21 级风评飞速下跌,大有晚节不保的情况,但作为永平奖获得者和在 OOP 课程组辛勤耕耘 20 余年的老师,翁恺老师授课毫无疑问还是最有水平的,也会做出很多课程外的知识拓展,因此不太推荐更换预置的翁恺老师。

翁恺老师的 OOP 应该稳定是 8 个实验,20级是七个简单的 OJ lab 还有一个组队的大作业,21级是 8 个 Project ,其中需要手批并且提交报告的三个 project 需要投入的时间较多。

与大二下诸多神仙课程比较,这门课难度不是特别大,但期末考试考纲不定,每个老师教的东西也不定,C++ 的相关规则本来就是很零散的知识点,复习起来也没有想象中那么容易。不过翁恺老师讲的很多比较难的都不在考察范围(上课基本只会讲到 C++98 标准,仅涉及少量 C++11 标准),极大减轻了负担。

翁恺老师给分还是值得信赖的,有补分集可以补满平时分(考虑到有补分集,因此存在期中考让大家巩固一遍春学期的内容其实算是件好事?)。老师会有少数查重,20 级有一次。类似于程算,翁恺老师的点名基本是随机抽一个人随机回答问题,21 级没有全班点名的情况。在 20 级有一次突击 paper work 的小测(时间和题目都与 19 级一致,因此可以参考往年录播); 21 级的小测是在学在浙大进行的且 ddl 设置在了当天晚上。

当然有一个小的雷点就是 oop 部分他的编程题描述不清或者有一些奇怪的测试点,经常会搞人心态(翁老师可能忙着自己的公司对作业的审核越来越不上心了)。

=== "陈翔"

陈翔老师应该是 OOP 这门课体验最好的老师了。老师的 PPT 风格非常简洁且现代,讲课思路也非常清晰,对于 C++ 的语法和面向对象的思想讲解得非常到位,不拘泥于课程大纲,也会讲一些实际的编程技巧。会在学在浙大上放课件和扩展阅读资料,大多都是下面提到的 *Effective C++* 中的章节。老师上课是会用 vim 实际写代码来展示的<del>,看着也非常赏心悦目</del>。

没有任何形式的考勤。平时作业包括 7 次 assignment 和 7 次作业,每周交叉布置。Assignment 类似 lab,不过是主观题的形式由助教批改,无报告,要求比较宽松,自由发挥的空间比较大。作业一般是一或两道填空题或程序填空题,都比较简单。大作业是实现一个序列化和反序列化的库,要求支持二进制和 XML 两种格式(使用 tinyxml2 库)。从历两年来看助教在批改作业的给分上相当慷慨,平时分基本上都是满分(22 春夏大作业在 PTA 上标为 60 分,满分比例是 88/142,55 分及以上比例是 109/142)。

=== "李际军"

考勤:纸质点名/做简单题目,听 21 级学长说是只有一次签到,一次占比 5 分;但是 22 级签到了三四次,第一次签到在第二周就有了,并且事后请假没有用,老师也不怎么看钉钉(有同学是亚运会志愿者,事后请假,还是找了别的老师之后才给算上的,可能是学校没有沟通好?)
Expand All @@ -43,23 +47,79 @@

考试:全英文考试,非常八股文,包含选择题、程序填空题、函数题,不过他的 ppt 很全,考前过一遍就差不多了。很阴间的一个点是函数题的答题框不支持 tab 和自动补全等功能,甚至不如记事本,但是可以用 markdown 渲染显示高亮(我考试的时候甚至打不出英文标点,老师助教过来看半天没解决,最后我用了复制粘贴。。)。

分数组成:期末考试 50%,平时 50%。平时分包括 Pintia 作业 30%,大作业 15%,点名 5%。

总结:虽然大作业确实阴间,”百题斩“ 写起来也很头大,但是平时作业当题库写就行,最后期末考前还会有同学来找 ljj 的题目刷,最后给分也还不错。老师不好说话,所以尽量不要出现错过点到、作业超时等情况,在钉钉大群发言也要注意。另外老师上课有点大舌头听不清,但是可以看 ppt 学,ppt 很全,而且他在第一节课就会放上所有的 ppt,这一点还挺好的、、

=== "许威威"

许威威老师的NA和OOP不能一概而论,虽然很多人选择,但上课的实际效果并不如cx或wk老师,ppt上的东西也常让人一头雾水。松散的平时容易让期末前往火葬场。
考勤:~~许威威似乎只会拿名单点名~~,在24春夏上课时由于人数过多实际上没有进行点名。

考勤:<del>许威威似乎只会拿名单点名,</del>在24春夏上课时由于人数过多实际上没有进行点名。

大许老师的讲课真的很一般,感觉基本没有人在听,建议转向wk或cx的智云课堂。相比于这两个班的好处是平时作业少,没有wk老师的期中考和繁杂的平时作业。对于平时分主要的雷点在于通知不到位,基本都是课堂上的口头通知以及最后才出来的penalty政策。单就给分而言,24春夏助教对平时分还是比较慷慨的,大概有1/4的人可以拿到平时满分,只有在project代码不规范以及边界情况不正确时才会获得(-1)的扣分。

## 分数构成

=== "翁恺"

=== "20 级"
- quiz 5%
- Homework 10%
- 七个 Labs(一次上机期中考试) 15%
- 一个大 Project 15% team work(2 人一组)
- MUD 游戏
- 日记本
- 也可以是自己的题目
- 每个月都要上交进度报告,进度报告一般给 100,结题报告按实际情况给分,四次报告取平均
- 期中 5%
- 期末 50%

=== "21 级"
- quiz 5%(on 学在浙大 or paper work)
- Homework 16%(一周一个习题集,前两周不算分,最后计算所有题目集总分)
- 8 Lab/Project 24%(每个 project 3分)
- 期中 5%(90min,在实验课进行)
- 期末 50%

除此之外还会有补分集(20级3分,21级由于期中考过难有5分),很多同学的平时分都是满分。

=== "陈翔"

=== "22 级"
- 平时作业 50%,具体比例不详,可能是按照 PTA 上的作业分数来计算
- 期末考试 50%

=== "许威威"

=== "22 级"
- 平时 project 50%
- 平时作业:在pta上布置的题目,由人工批改,因此对题目中说的要求一定要认真阅读,写注释,写注释,写注释。
xww的平时作业并不友好,而且要求也很怪,诸如文件流关闭、写注释等细枝末节扣的很迷惑,助教也不甚给力,后半学期批作业毫无进度,有同学错过了ddl而导致了扣分。
- student 1 & 2: 主要考察文件读写输入输出等操作,注意一定要和要求的输出格式*一模一样*
- adventure: 要求是2维的随机迷宫,注意要确保有到公主房间的可行路径
- personal diary: 这个是彻底的依托,竟然强制要求重定向而不允许文件输入输出,导致传入参数很困难,老师的说明也含混不清,同学们问了很多次又改为允许重载输入函数让有限的操作可以读文件
- fraction: 注意分数的初始化,0分母检测(好像要求不能throw还是什么的,总之有特殊要求,注意负数)
- vector: 中规中矩的project
- 大作业:allocator & memory pool,要求在给定内存大小的情况下尽量快的完成功能,但是具体给多大内存不知道,并且要执行的操作也不清楚,速度要求似乎与oop背道而驰。老师发出的测试程序也存在一定错误,需要自己阅读修改。
给分规则(100 分制):功能完成,测试程序通过,得到基础评分 88 分。剩下 12 分按速度排名给分:前1/3得到12分,后2/3按排名线性分配12~0分,四舍五入。

另外xww似乎不是很喜欢发书面的通知,24春夏的几次作业ddl都是课上口头通知,通常来讲是2周一个作业,但是自从某次延期1周之后就含混不清了,直到期末考结束才说明迟交penalty,扣的也比较狠,但是大作业的ddl还是放宽到了考试的前一晚。
- 期末 50%
课程组统一的期末考试。<!-- 期末主观题的给分还挺好 -->

=== "李际军"

=== "22 级"
- 平时 50%
- 考勤 5%
- PTA 作业 30%
- 大作业 15%
- 期末考试 50%

## 课程教材

* *《C++ 程序设计》Intruduction to Programming with C++ (Third Edition)* [] Y. Daniel Liang(梁勇)

课程组指定教材,~~但没有什么用处~~ 比较基础、简单易懂
课程组指定教材,<del>但没有什么用处</del>比较基础、简单易懂

* *《C++ 编程思想》Thinking in C++* [] Bruce Eckel

Expand All @@ -78,51 +138,51 @@
傻瓜式的、从 0 开始的 C++ 教材,有人觉得很面面俱到,个人觉得啰里啰嗦。

* *Essential C++*, [] Stanley B·Lippman

比较基础,分四个部分讲解 C++ 的本质,也可以用作入门读物。比较老了,只到 C++98 标准。

* C++ 之父 Bjanre Stroustrup 的几本书:
* [*Programming: Principles and Practice using C++*](https://link.zhihu.com/?target=https%3A//www.stroustrup.com/programming.html)(《C++ 程序设计原理与实践》)

“适合以前没有编程经验或者已经学完另一种语言,并且希望对现代 C++ 有一个相对温和的介绍的人”,BS 给大一学生写的教材。覆盖 C++11 和 C++14 标准。

* [*The C++ Programming Language* (4th edition)](https://link.zhihu.com/?target=https%3A//www.stroustrup.com/4th.html)(《C++程序设计语言》)

“面向已经了解 C++ 或至少是经验丰富的程序员的人”。覆盖 C++11 标准。

* 如果你想了解 C++ 的历史,请看 [*The Design and Evolution of C++*](https://link.zhihu.com/?target=https%3A//www.stroustrup.com/dne.html)(《C++语言的设计与演化》)。[*Thriving in a Crowded and Changing World: C++ 2006-2020*](https://link.zhihu.com/?target=https%3A//dl.acm.org/doi/pdf/10.1145/3386320) 可以被视为 D&E 的最新后续。
* [*A Tour of C++* (second edition)](https://link.zhihu.com/?target=https%3A//www.stroustrup.com/tour2.html)(《C++语言导学》)

适合去快速了解 C++ 所提供的功能。这本书以 200 页的篇幅介绍了 C++ 及其标准库的主要特性,且覆盖 C++17 标准(及少量 C++20 标准),对于了解新标准特性也不错。

* 关于 C++ 的 STL(标准模板库),想要了解其内部实现细节,可参考侯捷老师《STL源码剖析》,但侯捷老师这本书不适合初学者,而且标准比较老,后面几章有些已经用不上了。另外也可以看 Scott Meyers, *Effective STL*
* *Effective C++*, [] Scott Meyers

讲解一些实际套路和原理,结合具体情况教你如何写程序,写了很多 C++ 各种容易踩坑的点。有些很有帮助,后面有些可能有点难。这本书还有后作 *More Effective C++*,更高深了(×。两本书都只涉及 C++98/03 标准,少量内容有些过时。

* *C++ Without Fear*, Brian Overland

比较老(指 C++98 标准)的入门书籍。

* *Functional Programming in C++*, Ivan Cukic

(给老司机们)了解 C++ 函数式编程

* (给老司机们)进一步探索现代 C++:
* *Modern Effective C++*, [] Scott Meyers

教你怎么用 C++11 和 C++14,既有语法也有实例讲解,带你走向现代 C++。后面有点难。

* [《现代 C++ 快速上手 (Modern C++ Tutoral)》](https://github.com/changkun/modern-cpp-tutorial)》,Ou Changkun,字面意思,快速上手。
* *C++ Templates* (2nd edition),[] David Vandevoorde / [] Nicolai M.Josuttis / [] Douglas Gregor
* *C++ Templates* (2nd edition),[] David Vandevoorde / [] Nicolai M.Josuttis / [] Douglas Gregor

深入了解模板<del>的奇技淫巧</del>。

* 其他,如:《深入探索 C++14(Discovering Modern C++)》《现代 C++ 语言核心特性解析》《C++20 高级编程》等

* 可参考 [The Definitive C++ Book Guide and List](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list),Stack Overflow 上整理的书单。也可以逛逛 [Quora](https://www.quora.com/What-is-the-best-C-book-for-a-beginner)
* C++ 之父 Bjanre Stroustrup 的 [FAQ](https://www.stroustrup.com/bs_faq.html) 很有意思,值得一看!此外他还有 [C++ Style and Technique FAQ](https://www.stroustrup.com/bs_faq2.html) 。十分建议大大多逛逛 [BS 的主页](https://www.stroustrup.com)
<!-- * 一些 C++ 书籍的**电子版资源**:https://www.aliyundrive.com/s/z5hLRAELpPP -->
<!-- * 一些 C++ 书籍的**电子版资源**:https://www.aliyundrive.com/s/z5hLRAELpPP -->
<!-- 这里资源已经远不止 C++ 了, 故在此删除 -->

## 参考资料
Expand All @@ -133,51 +193,6 @@
- 咸鱼暄学长的 [C++ Weekly Tips](https://www.yuque.com/xianyuxuan/saltfish_shop/weekly017)[快速入门 C++ 写题](https://xuan-insr.github.io/cpp/cpp_for_contests/)
- ZhouTimeMachine 提供的作业题整理:[oop-mid-review](https://zhoutimemachine.github.io/note/courses/oop-mid-review/)[oop-final-review](https://zhoutimemachine.github.io/note/courses/oop-final-review/)

## 分数构成

=== "翁恺"

=== "20 级"
- quiz 5%
- Homework 10%
- 七个 Labs(一次上机期中考试) 15%
- 一个大 Project 15% team work(2 人一组)
- MUD 游戏
- 日记本
- 也可以是自己的题目
- 每个月都要上交进度报告,进度报告一般给 100,结题报告按实际情况给分,四次报告取平均
- 期中 5%
- 期末 50%

=== "21 级"
- quiz 5%(on 学在浙大 or paper work)
- Homework 16%(一周一个习题集,前两周不算分,最后计算所有题目集总分)
- 8 Lab/Project 24%(每个 project 3分)
- 期中 5%(90min,在实验课进行)
- 期末 50%

除此之外还会有补分集(20级3分,21级由于期中考过难有5分),很多同学的平时分都是满分。

=== "陈翔"

=== "许威威"

=== "22级"
- 平时 project 50%
- 平时作业:在pta上布置的题目,由人工批改,因此对题目中说的要求一定要认真阅读,写注释,写注释,写注释。
xww的平时作业并不友好,而且要求也很怪,诸如文件流关闭、写注释等细枝末节扣的很迷惑,助教也不甚给力,后半学期批作业毫无进度,有同学错过了ddl而导致了扣分。
- student 1 & 2: 主要考察文件读写输入输出等操作,注意一定要和要求的输出格式*一模一样*
- adventure: 要求是2维的随机迷宫,注意要确保有到公主房间的可行路径
- personal diary: 这个是彻底的依托,竟然强制要求重定向而不允许文件输入输出,导致传入参数很困难,老师的说明也含混不清,同学们问了很多次又改为允许重载输入函数让有限的操作可以读文件
- fraction: 注意分数的初始化,0分母检测(好像要求不能throw还是什么的,总之有特殊要求,注意负数
- vector: 中规中矩的project
- 大作业:allocator & memory pool,要求在给定内存大小的情况下尽量快的完成功能,但是具体给多大内存不知道,并且要执行的操作也不清楚,速度要求似乎与oop背道而驰。老师发出的测试程序也存在一定错误,需要自己阅读修改。
给分规则( 100 分制):功能完成,测试程序通过,得到基础评分 88 分。剩下 12 分按速度排名给分:前1/3得到12分,后2/3按排名线性分配12~0分,四舍五入。
另外xww似乎不是很喜欢发书面的通知,24春夏的几次作业ddl都是课上口头通知,通常来讲是2周一个作业,但是自从某次延期1周之后就含混不清了,直到期末考结束才说明迟交penalty,扣的也比较狠,但是大作业的ddl还是放宽到了考试的前一晚。
- 期末 50%
课程组统一的期末考试。<!-- 期末主观题的给分还挺好 -->

期末复习可以参考这个[课程资料仓库](https://github.com/RyanFcr/ZJU_Course/tree/main/%E5%A4%A7%E4%BA%8C%E6%98%A5%E5%A4%8F/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1OOP)。这门课期末考试不是很友好,除了之前说的大纲不确定外,部分老师命题水平实在有限,也有部分老师出题审核不严格出现漏洞。另外,C++ 语言本身就很复杂,而且考试可能会考到一些很细的语言特性,可能需要平时多注意。

并且自从 2019 级春夏出现大量编译错误后人工批阅的情况后,接下来的学期都采取主观题形式写代码(也是写在 PTA ),然后由老师人工批阅。个人认为平常写代码是认真写的,然后特别注意部分地方的语法(例如 virtual 等)分数都不会差。当然不得不承认的一点是,数据库系统大作业 minisql 是一个复习 oop 的很好的练习。
并且自从 2019 级春夏出现大量编译错误后人工批阅的情况后,接下来的学期都采取主观题形式写代码(也是写在 PTA),然后由老师人工批阅。个人认为平常写代码是认真写的,然后特别注意部分地方的语法(例如 virtual 等)分数都不会差。当然不得不承认的一点是,数据库系统大作业 minisql 是一个复习 oop 的很好的练习。

0 comments on commit 20b37ae

Please sign in to comment.