cwiki_catalog MSSSUG|香港科技大學內地學生學者聯誼會本科部
Cwiki-课程列表

Cwiki


Course Catalog


返回課程列表

[COMP2012H]虽卷但快乐

课程时间:2020年秋季

授课教授:Desmond (TSOI, Yau Chat)

我觉得教授:老好人了

评分标准:Lab(8x1%) + PA(4x8%) + Project(24%) + Final(36%)

这门课的Grade: Grade神/较好

这门课的Workload: 挺大的

(从大一/前OIer的角度简评一下这门良心H课)


​关于内容:

C++基础+OOP+DS,大纲和2011+2012一致,但是讲得更深也更细。作为不带算法的C++课程,竞赛同学以前学的算法基本不会用到,数据结构也只会学较为基础的一部分,并且需要新学OOP(约占50%)。此外,2012H比2012多出了一个group project,比较淘神费力,而且占分比较大,需要尽早准备。

Desmond讲课的重点一般很明显,即 三语教学 + 编译器演示。前者即遇到ppt上重点概念和notice的时候desmond会用国粤英三语一次说一遍,主要关系到对整堂课的总体理解;后者即desmond会掏出编译器对一些重要tips和编译的细节点进行实例演示,这些细节很可能会在考试中考到。因为是两门课合到一起,内容会比较多,建议每次上课后就马上整理复习,重要点拿小本本记一下,不要拖到考试前,不然容易漏掉很多讲过的细节点。


​关于 Prof & TA:

​Desmond老好人了,上课讲得很细,课后问答很有耐心,邮件秒回,另外还会经常群发邮件解释一些上课没讲到或不够清晰的点,这些邮件一定要看,很可能成为考试考点。两个TA也很负责,虽然TA的workload很大,但问他们问题都是会回复的。

由于课程容量较大会频繁出现Desmond传统Additional Class,在空虚乏味的周末,或许能添上一些乐趣哟~~(手动狗头

(昨天 2020/12/31 22:22,就在大家都在欢庆新年的时候,Desmond发了一封邮件说我们这学期没上完的最后亿点内容已经录成additional class发布了,提醒我们winter break看)

(这就是卷王之王吗?爱了爱了)


​​​关于Workload:

​作为一门写作5分读做8分的课,这门课的workload着实挺大的,主要集中在PA和Project上。

由于没讲算法,PA基本是模拟题,可能会有DFS或简单数据结构,题目冗长,编程细节非常多,对以前学过竞赛的同学可能也会比较麻烦。建议在做PA时练习写代码之前整体把控代码布局和细节,以增加代码的一次正确率,这能显著减少debug量,也对考试中手写代码的正确率很有帮助。

大多数组的Group Project都会涉及到学习Qt基础来做GUI,虽然刚开始学可能有些艰难,但用熟了会发现Qt的确很有用,学会了可能对以后做final year有帮助(?雾)。Group Project可以任意选题目,不过建议选新颖的idea,因为最后presentation会耗大半天,到了下午Desmond和两个TA或多或少都会有些困,让人眼前一亮的idea很可能能取得一个比较好的印象分。


​关于Grade:

Lab(8x1%) + PA(4x8%) + Project(24%) + Final(36%)

我:8+30.8+22.86+85x36%=92.26 -> A+

Mean: 7.8+29.1+21.8+65.7x36%=82.352 -> ?

按照传统,H课A range还是比较大的 

本学期因为某些原因没有Midterm

Final High 91.5,有两位上90分,顺便膜拜一下这两位大佬 orz

查看更多/評論

[COMP2012H]Desmond人真的很好

课程时间: 2019年秋季

授课教授:Desmond Yau Chat TSOI

我觉得教授:那不是一般的nice啊

评分标准:由于这一年有特殊事情发生,不具太大参考性

这门课的Grade: Grade神/较好



① 课程内容:C++ Basic & OOP

    用自己的话说叫 Accelerated C++ Programming,C++的入门到熟练。前半部分在讲C++的基础,后半部分讲OOP

    Program Assignment 按部就班问题不会太大, Group Project 选题比较难搞(实话实说Project我得感谢有一个好队友Carry),期中期末手速+别错



② Prof & TA

    Desmond出了名的好人[爱你]。 特别耐心,讲课有趣,三语教学,邮件秒回。 TA也是很负责的,但感觉做这门课的TA真的很累



③ (CS-major) 2011/2012 OR 2012h

    都行,看个人选择。 选2011/2012不会少学到什么重要的,选2012h也没什么极其tricky的所以不用太怕信竞同学, 非CS类专业感觉没很大必要上2012h。


    -2011/2012  分摊到两个sem会轻松很多。大一下上完2011之后有很多课都可以在大二上开始了,时间上比较划算。但是大佬云集且课程总体难度不那么高,所以容错率低,搞不好就翻车了。

    -2012h      容错率相对较高,学习速度更快,group project 感觉会有更强的实用性。但是如果C++没什么基础的话workload可能会有点大(写作5分读做8分)。


    --分享一个有趣的操作:我是在大一下旁听完了COMP2012(没上LAB没做作业没考试wwwww),另外大一一整年我在Robomaster学习啊给大佬帮忙啊之类的,相当于也顺便对C/C++做了一个入门+巩固。所以COMP2012h前期基本没耗费太多精力[嘻嘻]


查看更多/評論

[COMP2012H]人好龟好workload大

課程時間:2018年秋季
授課教授:Desmond (TSOI, Yau Chat)
我覺得教授:很nice
評分標準:attendance 0% + assignment 28% + project 12% + lab 10% + midterm 20% + final 30%
這門課的Grade:Grade神


Desmond大好人,讲课逻辑相当清晰,重点部分还会三语重复,也相当考虑学生,会在assignment任务较重的时候取消lab或者延长ddl。

觉得学好这门课的重点就是及时复习,因为一节lecture的内容真的很多很多,不及时复习的话期末会很痛苦。(这是啥?为什么会这样哇?辣鸡C++!)

好在Desmond每节lecture都会录像上传,期末可以用这个复习,平时只看录像(甚至也不看)不去上课也没什么问题。

个人觉得Assignment workload较大,但是各种bonus加上还是很容易拿满分的。

Final让我成功找回考理综3h连续抽筋手的感觉,除了一些很tricky的题外难度不大,就是挺多的。准备一块好用的橡皮挺重要的。

龟的话Desmond说是50% A range,没有C和D。不过毕竟人少A+应该也就10个左右,认真对待的话A及A以上还是不难的。

如果是在大一上这种其他课workload小的sem上就会比较舒适。就是要注意final的时候要不要把JAVA和C++弄混了。

笔者waiver的时候是被考了几道小题目,if-else嵌套,switch不写break之类的,一些JAVA和C++通用的tricky的语法。

总之是Desmond教的话很推荐。  

查看更多/評論

[COMP2012H]好玩又好grade,就是不簡單

課程時間:2018年F季
授課教授:Desmond
我覺得教授:很好
評分標準:assignment 28% + project 12% + lab 10% + midterm 20% + final 30%
這門課的Grade:Grade神/較好

我覺得這門課:

1. workload, 我覺得其實還行? 

PA1: 寫個數獨游戲,不是很難. 

PA2: 用linked list實現一個數據庫. 内存泄漏讓我放棄掙扎. 個人覺得最難的一個

PA3: 用Qt寫一個接水管的游戲,如果之前沒用過Qt,學起來稍微有點麻煩.

PA4: 用Qt寫一個國際象棋游戲.class有點多,要考慮到各個class之間的關係(我把skeleton code魔改成了自己喜歡的格式)

project: 今年project似乎大家基本上都是選擇的做游戲?這個project是完全由自己設計,個人感覺因爲游戲比較直觀,所以大家都選擇?workload因人而異,完全看你選擇做什麽類型的.(我討厭多綫程)

​2. 難度,我覺得不難. 内容大概就是2011+2012, 感覺上沒有什麽太advanced的地方.但根據Desmond的一貫特點,有非常多很細節的點,考試的時候要考(我涼了).還有,曾經和人討論過一邊學這個,一邊看c++ primer, 我覺得是沒太大必要啦.因爲c++ primer我都是當個參考書,作爲教材來説太厚了(墊桌子正合適,和物理教材凑個對).

3. 考試:midterm和final考了很多很具體的點,考了很多細節. 擧個例子, final在考constructor的時候,考慮了constructor的parameter list的調用順序是從右到左.据TA所説,60多個人就5個人考慮到了...

4. 成績: Desmond真是好人啊. 比Java的成績不知道好到哪裏去了. 

綜上, 强力推薦


查看更多/評論

[COMP2012H]资辞,还算比较良心的课

課程時間:2015年秋季

授課教授:Gary Chan

我覺得教授
吼啊,平易近人,和蔼可亲 (我没找过教授谈话,只是感觉),实力没的说,自己搜他的主页看一下

這門課的Grade:H课应该比较好,其他教授不好说,不过Gary应该不会难为你的
我覺得這門課:

1. Workload大小完全取决于个人基础。如果你只有comp102X的基础的话,学起来自然是要比搞过OI的累很多,不肯花大量时间的话被虐是肯定的,这种情况下建议和comp3711(h)一起上,内容重合度比较多。

2. 课程内容设置还不错,lecture+lab+PA+notes足够帮助快速理解了。 一些很繁琐的东西,语言啊概念啊之类的完全就是看一看notes,练一练就能搞定的,多写写代码总是好的。Gary第一节课说过这学期的12H是11+12而并不是难度升级版,所以别再指望之前CK的12H重出江湖。ps,有人透露11和12比较坑,我没有去考证过,我觉得因人而异吧。

3. Gary的考试有一点好,不会考什么记忆的东西,他喜欢考一些“你不会就说难,你会了就会说水”的题,不知道这样说恰不恰当 (也可能是学CS的人普遍喜欢在学会了xxx之后说xxx很水 233333,这会不会给人一种内定钦点的感觉 0..0,将来报道上出了偏差是要负责任的!)。不过期中之前会写各种递归一定没问题,期末的话我觉得知道概念会用代码表达自己的思路就ok。

4. 作为(唯一)一个大三的学渣,我表示压力很大。大二的孩子们好厉害啊,巨神比我这一届要多。大陆生,local,歪果仁里面都有几个excellent people,我是佩服的。Gary会每次把好的作业上传到网页上让大家膜一发0..0然后学习一个。不过某巨神因为涉嫌暴力膜被TA和谐了作业,看不到他的代码很遗憾TAT。不过能和众多巨(ha)神(si)同堂真的是excited的经历,这应该是11和12很难体会到的。


查看更多/評論

[COMP2012H] 论科大越来越水的COMP Honors课

課程時間:2015年Fall季


授課教授:Gary


我覺得教授
很有亲和力


這門課的Grade:Grade神



这门课的内容:水的一逼,话说看原来前辈们的cwiki,觉得CK的2012H真的很有意思,有Challenge,但是Gary的真的就是2011+2012而已!而且还因为时间关系nerf了好多内容。



评分:有几个Programming Assignment(OOP之类),有一个Written Assignment(一些基础比如Hash,Binary Tree),lab,midterm,final。话说在允许的条件下,PA做得越晚越好,因为后面TA会各种Clarify,让你的同堂去当小白鼠吧(话说我觉得自己当了一学期小白鼠)。WA很简单啦,没什么好说的。



给龟:话说以后来上这课,如果是Gary的,直接选就好了,据说考到mean就有A。



忍不住想吐槽一下,到科大一年半,觉得自己的CS基本没有学到什么新东西,COMP honors真心水,2012H啊,3711H啊,都直接去上就好了。

查看更多/評論

[COMP2012H]新世界的大门

课程时间:2014年秋季
授课教授: Dekai, Wu
我觉得教授 不是太靠谱

这门课的Grade:据说是Grade神

首先自我介绍下. 我是来自THU的交换生...我猜我是上这门课的唯一一个 exchange student 了吧...
虽然我猜不会有后来的交换生会选这门课&&在选课之前会来 CWIKI 上来看课程评价&&prof 仍然是 dekai, 但是还是想说,一定要在课上认识一些同学来交流作业的问题... 原因就是 dekai 的文档总是模糊不清,某些要求会改来改去,导致你看来看去无法下手,改来改去欲仙欲死...


上面那篇把课程的细节说的很清楚了(而且 code 量和我也是几乎一样),而且按 dekai 的套路,如果他接着教下去也不会有什么改动.
所以我就说说感想好了.


这门课给我的感觉完全不同于我在 THU 所上的 CS 课的风格(虽然我不是 CS 的人).感觉课程设置比较先进,而且 dekai 英语真是不错.当时真是脑抽,不谈了.


Assignment 设计的不错,比清华的作业的质量高很多(大多数课).每一步也是有教你如何把所学的东西用到自己的设计当中.另外一个突出的特点是,每个人的设计都会不一样, 这会让你绞尽脑汁地去设计好自己的 code.


你每次提交所写的程序都像是真正的产品的 release, 而不是 OJ 上跑完数据就 AC, 你永远不知道什么样的样例会让你的 code 跪掉, 也不知道你所写的程序的水平(尤其是 dekai 还说要给最先交final version的人加分,不知道最后执行了没有). 所以每次提交程序的时候都巨担心. 我建议选课的大家 share 自己写的 test case. 由于我是 exchange 所以很惨,很少有人可以和我讨论这方面的问题...


还有就是对于 dekai 对于 encapsulation 的执着了...自己写的头文件,不可以看的parse.cpp,还有自己写的 bstmap 和 hashmap... 自己写 STL 真的是学到了很多东西,我觉得 code 量最大的那几天就是写这两个 map (说好的不用写 bstmap 的呢...),对于 template 的理解提高了很多.


课程的进度实际上很慢,上课两个小时我觉得一个小时就可以说完,比较拖沓.
但是 dekai 实际上想教的东西巨多,各种夹带私货, scheme, emacs...这导致每一个方面学的都不太深入,但是每一个都像是无底洞,如果想弄的比较清楚,实在是很痛苦的一件事.不过在这个过程当中,你会学到很多东西.


总而言之,这门课几乎没有上限,如果你想学到更多的东西,这门课就像一个入口,你可以从这里开始学写编译器,自己搭建自己的 emacs,学用Unix-like OS, 等等等等.


说下 grade 吧. papercheck 的时候似乎从 Karteek 那里看到总分50+的同学 Karteek 的建议 grade 是 B+, 所以好好学加上有大腿可抱的话,拿 A 应该不是很难. 顺便膜总分96+的大神...不知道是哪位...不知道是不是最高分...


最后在这里感谢一起上课的小伙伴们,你们都很 impressive, 从你们身上学到了很多. 希望以后有机会再见 :-)

Other tips:
1. 如果你想学好这门课, 可以先看一看 SICP,可以 cover 掉 dekai 关于 scheme 的所有解释,而且很多他没解释的东西也可以从这里参考. 我就是使用了一个错误的设计导致无法做出 list-sort ,但此时已是期末,再想改也是有心无力了.简而言之看看此书就可以做 TA 了,哈哈.
2.  Midterm 和 Final 都考了 constructor 和 destructor 的执行顺序,尤其是 member initialization list 中的执行顺序,期末直接跪在这里...
3. 其实我上了一段时间的课有打算去 dekai 的科研组,但是 google 一下会发现很那啥的东西,直接把我吓退... 后来去找 Karteek 聊天,感觉...不说了,免得被查水表.希望有高人可以说说看真实情况...



查看更多/評論

[COMP2012H]小伙子,愿圣光指引你的道路

课程时间:2014年Fall季
授课教授:Wu,Dekai
我觉得教授:不知道该怎么评价

这门课的Grade:dekai自己说是龟神,不知道事实如何。


等了那么久没有等到大神们来发表一下评论,权且抛砖引玉一下好了。
传说中的2012H到了我这一年就变成了dekai来教 = = 

Your grade will be determined by a combination of factors:
Midterm exam  ~20%
Final exam  ~25%
Participation  ~5%
Homework  ~40%
Labs  ~10%

可是lab的时候根本没有做什么啊 = = 不知道这一项到最后会怎么算分。
Participation那一项估计除了孙神@sys这种被dekai看上的,其他的人应该也差不多。


Midterm就是各种写C++程序,虽然我跪了但是真真心不难,没有奇奇怪怪的命名,没有奇奇怪怪的写程序时候根本不会用到的方法,没有奇奇怪怪的概念选择题。我水平不够,不好评价这样的出题方式好不好,但是起码这样让我舒服一点,没有小伙伴问我2011题时候的那种蛋痛的感觉。

Final也主要都是在写code,槽点很多,首先就是课程后半段的数据结构那里并没有怎么考,其次就是scheme的量占得略多。这么说好了,final有20分是给你scheme语句让你输出结果,这些scheme语句都是自己assignment里面做出来的。还有20分是拿scheme写一个merge-sort出来,一共三问一步一步引导着你做。
Final的mean是72,sd是24这样 = =,midterm的统计数据没有问到。
 
着重说下Assignment,字面上来说一个用9个assignment(其中2个optional),先结论一句,这个课的coding量比起CK版2012H就是很少(虽然比起其他课还是很可怕),assignment看似数量多但是单个assignment根本没有那么大的工程量。
 
A0是自己实现一个链表。当时刚学C++什么都不会,然后就做的十分困扰,加上dekai说不仅看输出结果还要看code还要看注释,当时简直就是改了好几天代码的可读性和注释的简洁易懂。
A1是用staticOO的思想写一个s-expression的解释器,基本就是+-*/那些东西。初次接触这种东西当时写起来真是力不从心,经常是在lab憋了半天觉得写不出来然后就去写数学了==。
A2就用了dynamicOO,虚函数,继承那一套东西重写一遍,然后多实现几个操作符。这个assignment是我花时间最多的一个assignment,当时对继承机制的不了解导致花了许多无用功,也一度很沮丧。【一位跟我十分要好的朋友告诉我说,这个东西不像你做数学题,能不断地做出来,写这些东西就是要有很多无用功的啊。】在这里发出来共勉。
A3加了异常处理类的使用和用stlmap来存储变量。异常处理这种东西。。就是写了一遍再写的时候就简单了,于是我第一次写的时候就写了high长的时间。
A4开始做procedure和lambda,dekai推广scheme的野心终于暴露出来= =
A5是自己写一个基于二叉搜索树的map。(这是optional的)
A6是自己写一个基于哈希表的map,写完了上面那个的话这个就很好办了,而且这个的工程量要比上面那个更小一些。
A7是完全用scheme写一个快排出来,好痛苦的经历= =
A8是最后dekai说,“If you are impressed with Scheme, then try to write somescheme to impress us. Then I will give you extra credits.”于是跪掉final的我就苦苦写了一些东西交了上去。后来的感想就是Functional这种东西真的挺神奇的,但我可能是刚刚入门,所以并不是非常的习惯。
 
之前也提过了,这个课虽然今年被提升到了5分,但是根据之前的cwiki描述,workload完全比不上CK版的,到最后的版本我的解释器也只有3500多行,加上那些scheme的code,加上那些用不同的方法实现解释器的code(后来删了的),也顶多到5500。虽然课程中间因为dekai各种要求不明确导致坑来坑去,不过一学期下来,着着实实是学会了一些东西的。包括dekai一再强调的代码可读性,可维护性,这些都给我留下了深刻的印象。刚开学的时候,我的习惯是“不管怎么样先实现了功能再说”,然后就陷入了debug的无尽旅程和总是被孙神骂“你这里太丑了”。然后到课程的最后已经训练出了写code之前慎重思考慎重落键盘的习惯。


关于这个课的workload和难度,确实完全取决于你的program经历,我作为一个初学者,大概14-20h/week吧,周围也是有大神经常是一下午干完一个assignment,(对说的就是你@sys)所以workload这件事也是仅供参考。难度的话确实没有多难,跟math2131比真是不知差到哪里去了==


上这种课嘛,更重要的是旁边的小伙伴,在lab的时候变了一个属性的孙大神@sys,提前别人两个assignment进度的@qy,被TA钦点当这门课TA的@yxy,以及debug时候print出奇奇怪怪东西的@dzh。相比起这门课的notes和上课,这些人教给我的明显更多。
 
打字好累不想打了,总之,dekai确实有很多的不好之处,但是这门课的dekai没有坑到极致。虽然这门课的代码已经没有那么多了,可如果不上这门课,这些代码的量在初级CS课里还有哪门课有呢==。

查看更多/評論

[COMP2012H]记在一门课消逝之后


课程时间:2013年Spring季授课教授:Chi-Keung Tang
Grade:很好

Update: 据CK的消息,2013-2014学年的2012H由dekai教....好自为之好自为之

虽说课程已逝,以后再有的机会怕是很少了,但总归是科大CS系的具有标志性的一门课,还是老老实实地将所见所闻胡乱发泄一通吧。


先说龟,这门课的龟是很好的,虽说之前见到fb上有若干local提出质疑,认为本来就是若干大神凑在一起写code的课,龟自然坏不下去。对于这种说法我需要指正一番。以课上某位童鞋wd为例(顺手一黑,本文将多次以该具有代表性的童鞋为例,请当事人不要往心里去),该童鞋这学期才刚转CS,之前的专业与CS风马牛不相及,可以说是鲜嫩的菜一枚。然而在课程最后,该童鞋获得A的评定。不是我要故意黑,私以为该童鞋在学期甫一开始时没有体现出任何CS天赋,然而学期末获得A的成绩,我认为不是该童鞋隐藏大神属性,也不是CK看在最后一次课手下留情,而是该童鞋发奋努力的结果。因此,认为此课龟好在于课上多大神(虽然我承认课上是有某local大神血虐全场)的谬论可以平息了,龟好龟坏,不在于教授(LANG除外),不在于其他人(HUMA除外),私以为更在于自己。


下面结合wd童鞋的实际进步史谈谈这门课的各项内容
课程评分按照project(50%), lab(5%), midterm(15%), wriiten assignment(5%), final(25%)来给分。课程的难点在于50%的project,常规的project5个,另有一个拉龟用project。


midterm之前主要讲OOP,内容目测与隔壁2012差不多,只是速度快了不少。OOP这边个人感觉工程性较强,思想性偏弱,切入点偏向语言特点而不是思路。感觉是教会你使用OOP,而没有探讨使用OOP的原因。或许是我以前POP写多了,所以会有这样的疑问。但其实OOP是个很自然的想法吧,但是个人觉得了解一下程序设计思路的变迁是一件很有意思的事情。
midterm之后开始涉及Data Structure,同时介绍了一下Algorithm。这些内容还是比较浅显的,算法分析也没有太过深入(留至3711H了),介绍了一些基本的数据结构和算法,对于以前没有接触过CS的童鞋来说确实有入门效果。


CK讲课非常有特点,首先是很快,这个快仅限语速,并不指内容,因为CK讲话喜欢夹杂40%的er....en...
其次是各种兄贵闪瞎氪金狗眼,上学期上了papa的1004已经被各种兄贵闪瞎,这学期又上了ck的课,让我不禁感觉这俩是多么好的基友啊


lab挺简单的,主要是教怎么用qt,一般project1的时候lab就要做到7了,个人觉得那还不如直接batch mode在第三个星期前把所有lab都写掉比较好。


written assignment个人觉得其实可以是加深数据结构和算法理解的大好机会,可惜有些题目实在有点没意义


midterm在前一天会有preview session,今年在良好的组织下当晚把所有答案都弄出来了,所以基本都是满分,除了某童鞋= =。final会提前告诉你每道题的title和分数。CK号称会有道谁都做不出啦跌题,实际上题目都很naive,但结果我看错一道题做败了= =


project可以说是这门课的亮点,code量巨大。而且每个project都可以玩出花巧(当然相应地code量进一步增大)
CK有个非常有意思的late credit系统,每个人五个,所有project一共可以迟交5天。听说以前credit一个值一顿饭,可惜了今年没有交易,就连wd童鞋都没用完,真是呜呼哀哉。
project1是写一个小画家,结构可以写得很简单,但是code量绝对不少,而且是第一次用qt写GUI,可以说是五个常规project压力最大的project。典型的工程性编程任务,很多coding非常机械,但是又非常繁琐。值得一提的是sample有很多很多不合理之处....其实我们是有义务去修的...结果我修了不少,还是遵从了一个sample behaviour结果被TA痛下杀手= =然后requirement里面提到了对QT designer有一些额外的功能要求,虽然我没用designer,但是觉得有几个比较好玩顺手实现了。
project2是俄罗斯方块,这个project雨巷大神只用了一个下午(含休息)就做完了https://www.youtube.com/watch?v=3lYvRE_1GbE...令人发指啊令人发指...我感觉我还要提高一下我的姿势水平。这个project是最regular的,做出来的成品不会有大的区别,但是背后的设计上可以做得很优雅,也可以做得很糟糕(某童鞋在deadline前三天时都还只有一个cpp)。
以上两个project我都在AGM上给写完了,诚如涛爷所说...AGM写code效率果然不一般
project3个人觉得是最精华的一个project,虽然可能很多人都很primitive的就给implement完了,但是不是这样的!让我们仔细阅读一句话
The point is that your program should not crash if this exception occurs.
这是一件很疼的事情,因为你的数据结构是支持Iterator的。所以设想一个Iterator还留在那里,但是你的container已经被destory了,最好情况是dangling pointer,最坏情况就是crash。查阅了STL的我发现STL是直接撒手不管,dangling pointer就dangling pointer呗。但是当时非常蛋碎的我鼓捣了很久很久,弄出了一套绝壁不会crash的设计,即reference count+lazy deletion。写的过程万分痛苦与纠结,还要考虑各路神奇的behaviour,最后写完交上去(这次的sample还是有一个bug),TA倒没认真查我的数据结构,认为我写对了。结果我在project4,project5时重用了这份代码(代码重用是很重要的思路!),到project5才把这两个数据结构改到没bug。
project4很水,真的很水,非常直接的计算几何。开始我以为要自己想算法,结果翻到下面居然直接给了算法,那么工作就很简单直接了。在这里再次膜拜雨巷大神一万次,这个project的官方sample是雨巷大神亲情提供的= =速度快得惊人,我优化了好几天才稍微和他的速度靠拢一点....
project5是非常综合性的一个project,而且可以玩出非常多花巧。我个人就把这个project写得非常generic,还模仿qt做了event系统和pre-compile过程(虽然是手动的),然后sample生成的网页非常之丑,跟CK交涉过了以后他同意可以写自己的样式,于是我又果断写了一套html generator(非常原始啊非常原始)。为了console的显示高大上,写了一个terminal环境的套件(主要是各种第三方库不让用嘛)。为了做数据验证,写了一个regular expression engine(众人皆表示这个最令人发指)。最后code写出来大概有4000来行吧(不计注释)
project6因为没有提升龟的需要所以没写,但其实非常有意思!我给过非CS的人看这个project的paper,众人皆惊呼:“太神奇了!”果然还是哪天写来玩一玩


做project,好的编程习惯非常重要,千万不要像某童鞋那样把所有实现堆到一个h/cpp里面,后来想分割都不好分了。源文件的分割和设计应该是在一开始整个project的设计时就要做好,因为这个分割相当于功能模块的分割,也相当于逻辑关系的分割。然后valgrind是个很好的工具,写完程序一定记着用valgrind查一下,当时查某童鞋的project5程序,先拿valgrind跑一下...一查2000个错误,我霎时就不想看了= =内存方面管理不当的错误绝对不要犯,不然信不信晚上Gan Dashen托梦吓死你= =


今年是一个新TA,看起来十分面善,可惜我很早做完了lab后来再也没见过他= =但是给project给得很松,第一个project还额外送我1分,简直大好人。


下面谈一点个人的想法
学期开始时就有传言说这门课以后就不再有了,那时CK还得意满满地跟我们说没有这回事,要是没了这门课他spring sem就没课教了。但是在final前的那个星期,他还是告诉了我们,这门课果然是以后不再有了。我不知道当时他是什么心情,但我想,如果是我,一定是落寞吧。我选择上这门课,很大程度上是因为看了cwiki上面诸多评论,或许是佩服CK作为一个教师的操守和坚持吧。然而这样的一位教师,终究敌不多体制。或许是因为课上的人数太少(这学期10人),或许是以前的SFQ评价不好,学校终于取消了这门课。从行政的运作和民主的理念来看,或许这是个正确的选择。然而作为学生的我,却感到有些心寒。我不知道,当科大的课程越来越简单,越来越肤浅,越来越贴近学生,当学生只知道稍微学学就开是hea,视学术为限制个人兴趣(我承认单纯的学术不利于个人发展),认为上大学就是刷龟,这样的变化究竟是好是坏,这样的大学教育是否成功。我不知道其他人怎么看学术,但我认为学术就是很简单的用时间换结果,雨巷大神会写编译器,Gan Dashen会写操作系统,恒爷上PG课横扫一片,我同样记得他们为得到这些付出的努力。如果只有水课,每个人都很好龟,学生怕是会失掉上进的动力吧。我感到很幸运,上学期遇到了SH Song这位professor,他说,上大学是为了跳出comfort zone,去挑战自己不知道的,不熟悉的东西。我认为,如果认为一门课很难,完全搞不定,professor在搞笑,是不是要去想想是自己没有相应的付出,是不是自己安于comfort zone而不思进取呢?当然你可以举出dekai之流来反驳我,但平心而论,我认为COMP2012H必然是不属于残害学生一类的。
其实我很佩服上面提到的wd童鞋,可以说他就是跳出comfort zone的典范。虽然他到课程最后code还是写得很糟糕,但是仍旧可以看出他的努力。记得写project1和project2时,他天天追着我想看我的code,最后他还动用了late credit才搞定。但是到后来,他已经能自己写code,而且按时交project了。这说明,只要有心学术,课程根本就无所谓难易,无所谓烂龟好龟。
考完final,去找SH Song聊了下天,他告诉我,ELEC2600以后也要缩短学时和内容了,fall sem暂时不变,要上的童鞋我建议赶紧了。他觉得科大把课程变简单的做法其实是一种戕害,我深以为然
或许再没有以前恒爷那届壮观的2012H队伍了
雨巷大神告诉我,科大以前还有门COMP104H,但也被时间裹挟而去
COMP2012H R.I.P.


-----分割线-----
为了防止因课程消失而造成课程不再留于人间,我特地备份了这门课的课程网站
http://johnmave126.github.io/comp2012h-backup/

以后有志于CS的童鞋可以试着做做project锻炼一下
然后我自己的project源码也开源出来供参考(虽然觉得参考价值不大)
https://github.com/johnmave126/comp2012h-paint

https://github.com/johnmave126/comp2012h-tetris

https://github.com/johnmave126/comp2012h-queues

https://github.com/johnmave126/comp2012h-patterns

https://github.com/johnmave126/comp2012h-register

最后打个广告,有没有谁想2013-1014 fall想去尝试重开2711H的来报个名
宇神求组织= =

查看更多/評論

[COMP2012H]OOP&DS

课程时间:2011年Spring
授课教授:CK
Grade:mean > A

我也来凑个热闹。

关于workload,拿好龟的workload确实不大,但是想学好是没有尽头的。尤其是OOP这种关乎设计的东西。

关于Prof,CK人很好,但讲课还是比较水的。回邮件的速度基本取决于问题的质量,如果是发比较扯淡的邮件那可能在三四天后才有回复。

关于TA,TA人也很好,给分还算公正,因为大小写什么的扣分还是应该接受吧,计算机傻,多一个空格都可以是严重的bug,所以像大小写这种东西还是应该严肃对待。TA的问题在于评分几乎只看Functionality,所以似乎和OOP扯不上什么关系....

关于project,project们的傻逼之处在于spec中给出了太多的细节,每个project都还给了sample,所以我们大都参照着spec模仿sample后写出了相类似而毫无特点和风格的东西。最后那个extra看似是从PG课上搬来的,但其实只是读篇paper然后implement一下其中的算法,除了知道paper长什么样子外好像也没学到什么..

课程的设计还是很不合理的,lectures分为OOP和DS两块被midterm分开,可lab和project都只是OOP的东西,lab严重滞后于project(做完project one几乎已经用到lab中所有的东西了)。而DS那块像是把OOP压缩后插进去的,讲的也比较粗略。notes还是用151和171的旧notes,所以刷notes需要比较快而深度却不够。

CK自己也说在334的改革之下这门课不太可能幸存下去,但其实相比较而言这门课还是不错的。所以推荐EE的同学们考虑一下去上这门课,上的时候顺便关照一下year0的CS学弟们。

(小提示:如果在上课前面那个winter多写完几个projects,上这门课的时候可以非常hea)

查看更多/評論

[COMP2012H]OOP/Datastructure and algorithm

课程时间:2011年春季
授课教授:CK.Tang
Grade:Grade神
COMP152H自去年开课起就以workload大而闻名。看了诸多大神对着门课的评论,我诚惶诚恐的写下我的看法。。。

我觉得这门课给我最大的帮助就是养成了去看技术文档的习惯。这门课主要用的GUI library是Qt这是一个跨平台的应用程序框架,现在由诺基亚开发,当然随着诺基亚的式微,这个框架恐怕前景惨淡。。。好吧,扯远了。

我们有三个project都是用Qt写的,其中第一个基本就是辛苦的调用这个框架的各种接口,无技术含量,纯属苦力活。但是,CK整个学期基本没有给我们讲Qt怎么用,Lab有讲那么一点,但进度严重落后于project。所以,一切都是靠我们一页页的翻Qt的技术文档。。。(参见这里)。

在做的时候觉得很虐,但回头想想,看技术文档是学计算机十分重要的一门技能。在计算机中,各种语言的各种程序框架成百上千,不可能每一种都有人来教你,看documents是掌握和应用这些东西最基本的要求。

第二呢,这门课的project还是比较精髓的。事实上着门课的精髓也就是他的6个project(今年比去年多了个extra)。
第一个写个画板,因为从COMP104写着那些toy program过来的我们对GUI没有任何了解,写这个project需要大量的时间去学习Qt,本身coding又十分繁琐,大概需要2000-2500行左右的代码吧。。。哪个大神在1500以下的,求膜拜。。。。
第二个,写个俄罗斯方块。。额,我写这个的时候参考了不少网上的资料,搞明白原理之后其实很简单,大概700-1000行代码可以拿下,我是开AGM的时候搞定的(PS.AGM写code效率非常不错)
第三个,这个是最坑爹的,其实不难,就implement一个vector一个linked list就完了,关键是这个project的description不清不楚,TA改得各种纠结(关于这个TA,下面还会详细讲)。结果这个project的grade各种悲剧。。悲剧啊。。。。
这个project也用不了多少代码,没统计过,不到1000
第四个,implement两个算法,给出一组点的坐标,找出共线的。两个算法,一个暴力破解,一个用了排序的。算法描述都给你了,写一遍就是了。不难,不过debug挺纠结的,需要不输出重复。1000行左右吧。。把算法写出来,剩下的据不难了。。。
第五个,写个小小的课程注册系统,用哈希表(hashtable),这个是比较考验程序设计的,如果结构不好会产生各种麻烦,我自己就重写了好多次。而且如果有更高的追求,要写出可扩展性更强的东西代码量还是非常繁重的,比如某大神写了4000行,这里我只能表示膜拜。。。我自己最后是接近三千行吧。。。
第六个,额外的,写了可以提升一个subgrade经济实惠,写一个根据原有的texture产生新texture,看起来挺吓人,但其实算法都给出来了,代码也不十分繁重,我两个下午写完的。效果十分神奇,值得一试。

这些project的workload其实个人认为之前的传闻有点夸大了,除了第一个和第五个外,其他的其实coding都不算太沉重。OOP本身就是为提高大程序的可维护性和可理解性提出的一种编程概念,没有一个足够大的project个人认为理解起来比较困难。我之前就一直不理解要object来干什么,object能干的事情procedure都能干。

至于使用C++嘛,有位大神(再次膜拜下)说C++太繁琐,但也因此C++的效率比较高,所以熟练掌握C++还是十分有必要的。有了C++其他的语言相对都容易得多了。对于计算机入门的语言向来有很多争论,比如ust从明年开始CS入门的课就是java和python了(斯坦福用的是java,而MIT用的是python),但个人还是比较倾向于由C++入门的。

下面来讲将CK,其实我是十分喜欢这个教授的,他效率十分高,写程序的时候有抽筋般的手速,回邮件的效率非常高,刷notes的效率高到了极致,一节课一百多页的notes轻松秒杀。教授人很好,热心详细解决每个问题,我在邮件中向他请教过各种问题。。。他自己的水平是很高的,但是讲的课说实话不是非常好,英语有很重的香港口音,而且基本是念notes,所以要学明白,自己看书是王道,话说这门课用的教材Data Structure and algorithm analysis in C++被誉为20世纪最经典的计算机科学教材之一,十分值得一看。CK个人感觉算法和数据结构部分过得实在太粗糙,这种内功的东西还是值得仔细探讨的。

话说我们今年的TA简直就是极品TA,把我们辛辛苦苦写的project当一坨屎一样来改,各种函数名的大小写问题,少些了几行comment啦都扣分。把我们写的死去活来的东西改得千疮百孔。。坑爹啊。。。。

再说说grade,这门课的grade还是相当不错的,这学期除了有个B-外全都在A range。只要老老实实写好每个project拿A range是妥妥的。

查看更多/評論

[COMP2012H]C++以及数据结构

课程时间:2011年春季
授课教授:CK Tang
Grade:较好

上这个课嘛...实际意义其实很一般。
我个人认为,这个课的主要意义在于它是一个符号。有趣并且有爱的教授,一学期6000-8000loc的C++,严格的TA,这些都是以前没有见识过的。
上这个课来长见识,我觉得还是不错的。

————我是胡言乱语的分割线————

pros:
- yr0就能上,而且挺有趣
- 小班教学,能认识了解好多同学
- C++是一门相当繁琐的语言。上了这门课写了几千行C++之后,再学其他语言就容易了
- C++是如此的繁琐以致于你会想用metaprogramming(不,这里指的并不是C++的template metaprogramming)来降低coding的复杂度

cons:
- 课名是OOP和数据结构可是教的是C++这门繁琐至极的语言
- project都比较消耗时间
- 上课时并没有深入讨论数据结构和算法
- 上课的时候会被[i]兄贵[/i]教授的肌肉闪瞎硬化氪金狗眼(?)

总之是第一门H课,也是唯二两门教你做码农的H课里的第一门,好好的享受吧...

查看更多/評論

[COMP2012H]OOP and Data Structure (Honor Study Track)

课程时间:2010年春季
授课教授:
Grade:很好

CK Tang的COMP152H是科大工作量最大的课程,没有之一。 想上好这门课,每周需要进行大量的思考进行程序设计,投入大约二十小时时间去写

程序。

课程主要内容:
1.lecture讲解两部分知识:面向对象的程序设计;数据结构。使用的notes为旧年的COMP151H和171H所用的PPT,这说明它是一门浓缩了两个Honor

course的course。上课的时候CK会用非常迅猛的速度过notes,曾经创下一天讲100页的记录。这也就意味着考试之前有很多notes需要复习,这也

就意味着纯靠考试前复习是不可能的。尤其是下半学期的数据结构部分,很多算法需要反复仔细地悟。

2.lab做一些很废的小程序练手。

3.最考验人的是五个大的程序设计。第一个是做一个小画板,第二个是写俄罗斯方块游戏,第三个是泛型函数设计,第四个要求设计快排算法,

第五个类似软件工程,设计一个小小的选课系统。总计下来一学期写了6000行代码,不包括那些写了又删掉的语句。所有的设计的要求都写得云

里雾里,需要自己想程序的结构,这进一步加大了写程序的工作量。更郁闷的是身边有骥华哥这样喜欢精益求精的人,搞得我也不得不学着精益

求精,把程序代码改了又改……由于这些程序作业太变态,所以每一个作业的deadline日期都有着非同寻常的意义,所有上COMP152H的同学这学

期的生活都被这些deadline齐刷刷分成了5份……

很多人都因为这几个程序作业对COMP152H望而却步。要求是变态了一点,但是确实这样的训练能极大地提高人编程的水平,而且我们还练熟了

linux系统的操作以及linux下Qt图形界面的开发。总之益处多多。如果你想在COMP的course里面学一些实在的东西,那么CK Tang的COMP152H是你

最好的选择。

4. In addition to 上面这一切,还有6个written assignment,从下学期开始每周做四五道算法题,有些还是蛮challenging的。因为CK很喜欢

用LaTeX来排版,所以通过做这些算法题,我还学会了用LaTeX。

5.另一个好处就是,考试占的比例特别少。期中10%,期末25%。期中考试的时候还允许提前看卷子。在考试团团长鸟哥的带领下,大家期中考得

都不错。期末考试也不是太难,最后一个题还让我提前猜中了。


说些题外话。
在我看来,CK Tang是一个悲剧英雄。CS Department里面,他教过的课程得到学生的评价是所有教授里最低的,原因已经陈述如上:工作量

太大。十年前他刚刚来到的时候,科大还没有像样的Computer Graphics研究。是他开创了这个领域,而且让科大达到了很高的水平。但是他现在

也只是一个associate,很大一部分原因就是学生给他的评价太低。在科大这个地方讲课,好grade和少workload是让学生说好话的最好方式。现

在人人都是想要个好grade,至于能从上的课里面学到什么他们完全不管。你可以感觉到,科大的课程越上越简单,教授和学生都越来越喜欢用省

事的方法互相蒙混过关。在这个grade至上的功利学校里面,CK Tang和他变态的COMP152H真是一个难能可贵的组合,只有他的课真正教人学到了

东西。多年以来CK始终秉承这样的思想,他教过的所有课都有过COMP152H而无不及。当然,也被学生骂得很惨。

CK说他曾经想过离开。这学期开始前他去另外一所知名大学面试,人家愿意给他Chair Professor的职位做,而且酬劳远高出他现在职位的

薪水。你应该能从这个事情中窥到一些问题:一个人有能力做Chair Professor,但因为在科大得不到学生的好评,所以只是一个associate

professor,这是谁的问题呢?经过了一些艰难的抉择之后他还是选择留在科大,原因他不愿意说,他只说“I fliped a coin”(我拿硬币决定

了去留)。但是我觉得背后他另有自己的想法,也许他期望有一天科大的学生不要只是为了拿好grade而学习?期望有一天科大的教授不会为了讨

好学生而把自己的课讲得像是给SB听一样?

总之我深为之感动。倘若有朝一日我成为一个professor,定当如CK Tang一样,就算被人骂成SB也不会把自己的课讲成SB。


查看更多/評論

[COMP2012H]OOP and Data Structures (Honors Study Track)

课程时间:2010年春季
授课教授:Chi-Keung Tang
Grade:很好

COMP152(H)是将原先COMP151和COMP171合并后的新课程,内容比较多,上课节奏很紧凑,要跟上需要付出一定努力。不过152H不论homework还是exam都不难,仔细准备便会有好结果。
这门课的难点集中在占总分50%的5个project上(5*10%)。工作量巨大(有的project需要千行以上的代码),而且需要很多课程并不包括的知识,比如linux系统操作,用Qt进行window programming之类的,对自学要求很高。做第一个project(用Qt写一个类似windows画图板的程序)时,由于完全没接触过Qt,有一些手足无措,很是辛苦,上手以后便轻松多了。想要take这门课的同学不妨先自学一下Qt。
教授的讲课水平很一般,口音很重,基本是照本宣科。不过除了这点以外他还是一个很不错的教授。性格很有趣(上课时各种卖萌动作...);亲自上tutorial;回邮件飞快,有问必答;还有各种方便学生的政策,比如做project有10天的delay credit,mid-term preview(考试之前把试卷给我们看...)等等;给分也比较松。grade极好(honor track course的惯例),只要能跟上基本就有A range。
在COMP104H取消之后,这应该是泛CS系接触到的第一门honor course,不管怎样都值得尝试一下。

查看更多/評論

[COMP2012H]Object-Oriented Programming (Honors Study Track)

课程时间:2008年春季
授课教授:dekai
Grade:一般(仅仅是我觉得,有人认为grade很好)

对于CS人来说,究竟take COMP151还是COMP151H主要是看教授。个人而言dekai教COMP151(H)是很有一手的。这恐怕是所有有对应H Course的COMP课里,H和非H相差最大的一个课程,而课程内容与教授直接有关,与是否H无关。

正常的COMP151通常教QT,而dekai流的COMP151(H)会教BT(-_-b)。如果大家翻查以前的记录的话,有一年dekai主理COMP151-COMP251这个一年course,其中COMP151最后一个assignment的分数分布呈变态分布,基本上就是一个y=1/x曲线。究其原因,是因为dekai的每一个作业都需要正确地完成之前的所有作业才有可能完成,往往在后面的作业才会发现前面的作业的问题。因此当年的source奇少,0分都不会below mean一个SD。

但我还是强烈推荐上dekai的COMP151(H),原因主要是dekai本身是个很自傲(乃至有点自负)而很有思想的人。在他的课堂上你可以学到很多书本上没有的东西。毕竟COMP151的OOP所教导的是一种思想,一种理念,一种已经被普遍承认的工业标准,有时只是看书的话感触没有这么大。

dekai经常在课堂上面展示新闻,踩微软(在COMP526更是如此),和教导了我们很多CS应该知道的词语的来源,比如foobar和RTFM。虽然我是个逃课狂,但COMP151H在我上过的课里出席率算是比较高的了。

要学好COMP151,thinking in C++是很值得一看的一本书,还有那个叫做 C++什么FAQ lite的也应该看看。这是一门可以受用终身的课。插播一个个人观点,OO是用来编程的,不是用来生活的——用OO来看待事物有时会有不太好的后果。

查看更多/評論