记在一门课消逝之后
課程:COMP2012H [原課號:COMP152H]
作者:stanab [12级 CSE]
創建於:2013-06-13 17:21:45
更新於:2013-07-04 21:20:45
課程:COMP2012H [原課號:COMP152H]
作者:stanab [12级 CSE]
創建於:2013-06-13 17:21:45
更新於:2013-07-04 21:20:45
课程时间: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的来报个名
宇神求组织= =
Comments
[4 L]ywangbc [11级 MAEC]
@ 2013-06-14 09:51:28
我叫王宇.......
从引导的角度来说这篇写得真挺好的,尤其是对于我这种完全没有engineering天赋的人T T
还有努力很重要那里,像我这种hea得一b的这学期果然被虐爆了...下学期果断走学术路线了要不东西学不完了啊啊啊啊啊啊!
关于2711h八月20号左右把那孔神之前封邮件翻出来咯,过两天我给那个教授发封邮件,现在他们还都在度假。然后tan shu hao da shen你有没有问过h堂的local们有没有兴趣?或者你可以翻出一封以前发给全堂的邮件reply all问一下也行
另外建议cwiki加一个回复的功能,然后被回复的人在首页上有消息提示
[7 L]ywangbc [11级 MAEC]
@ 2013-06-14 22:28:44
那你不如写封信给CK,看他能不能帮你forward email或者把list给你,他的课刚悲剧过说不定他非常愿意帮咱们呢
[10 L]stanab [12级 CSE]
@ 2013-06-29 22:52:20
@宇神 肿么办,前几天系里发了欢迎邮件,我就顺手问了一下2711H会不会再有,他们发了一个邮件带链接说是之后的课....然后表示没看到有2711H
[11 L]ywangbc [11级 MAEC]
@ 2013-07-01 00:52:34
但本来咱就知道2711h被取消了呀?所以现在情况完全没有变得更糟得说。那还继续你去找cktang要list我去给教授写邮件咯
Write a comment
請登錄後再評論
請登錄後再評論