本帖最后由 ryantao2010 于 2014-2-21 19:31 编辑
在下不才,在这里写一下对CS课程的心得,希望学弟学妹们能够参考,少走一些弯路。虽然关于CS系的帖子已经有不少,但是因为这个系的课每年的变动都很大,所以我觉得我在这里写的东西也是有一定的参考价值的。
首先介绍一下我自己。本人在2011年sem2入学,读过两个summer school,所以两年半就毕业了,今年开始读CS的honours,感觉压力山大。
关于难易度 难易度我采用雅思的评分标准。由于每个读奥大的人都有6分,所以我把6分作为标准难度。 5到5.5:5是完全不上课也能轻松达到的难度,5.5需要上一下课做一下assignment。 6到6.5:上课听讲,做作业一般就能达到的程度。6.5需要稍微花点工夫 7到7.5分:颇有难度 8到8.5分:相当难。 9分:基本不可能。
Stage 1
Compsci 101 Compsci第一门core paper,必选。如果有编程经验的话,这门课非常非常简单,没有的话就是一般难度了。我们当年教的是Java,会教你一些编程很基础的概念,如data type,variable,flow of control之类的东西。还会教你面向对象编程的概念和图形界面的设计。据说今年开始就改学Python。个人用过Python,确实非常容易学,而且代码简洁,赏心悦目,但是个人还是喜欢Java。 每周会有一个lab,算入总成绩里面的。Pass不难,拿A+也不难,基本上花了工夫就能拿A+。如果你考完后觉得这门课很难,虽然很残酷,但我还是建议你立即转系,因为后面的课都比101难很多。 Pass难度:5~5.5,A+难度:6.5
Compsci 105 Compsci的第二门corepaper,难度大约上升了一倍。105会教你怎么样I/O(input/output),还会教你一些很经典的算法和数据结构(譬如各种排序算法,搜索算法,stack,queue,linked list,heap,tree)这门课是220和230的基础,如果这门课学好了,220和230会很简单,但这门课号称CS的第一门杀手课,每年都有人死在它手下,很多人觉得101简单105就不怎么花时间,最后欲哭无泪的例子并不少,所以我建议在S1或S2读这门课。 这里提一下,奥大CS在summer school基本是捞外快的性质,师资很水。我当年就是summer读的105,第二个老师是个Master刚毕业的学生,相当不负责任,出的assignment又很难,可谓深受其害,105的内容又特别重要,导致stage2的课学得特别吃力。所以可以的话,101和105尽量不要在summer选 Pass难度:6.5,A+难度:7.5
Compsci 111/111G CS的GE课,非常简单,介绍计算机的历史,构造,各种办公软件的使用,我觉得最有用的还是教你用Latex。想凑学分或凑A+的人可以读,但是如果你有一定的志向,想多读一点其它的课,我不建议你选这个。这门课可以在summer读。 Pass难度:5,A+难度:5.5~6
据说今年有个Compsci 107,是给有编程经验的人读的,具体怎样就不知道了。
就像我上文所言,第一年的课的老师基本上都是最好的,其中
Stage 2: Stage 2的课可以自由选择,但是实际上6门课里面有5门都是stage3的各种prerequisite,所以其实选择余地也不大。
Compsci 210 硬件课,内容包括计算机的基本构成,二进制,逻辑电路,汇编语言,还有C或C++。这门课不算很难,但是汇编的assignment难度非常高,是用一种类似于汇编语言的叫LC3的东西写一些程序。总体来说,背的东西偏多,但是也有一些计算,是313,314,340,373的prerequisite。 我们当年是James Goodman教第一部分,这老头算是CS最NB的教授,但是教学水平堪忧,看了主页今年S1似乎也是他教,所以自求多福吧。另一个老师Mano倒是很好。 Pass难度:6,A+难度:7.5
Compsci 215 210的进化版。我们当年是分三部分:OS,UNIX,还有networking。OS和networking纯背,Unix估计会要你记一些终端指令,总的来说还是背的多。难度倒是不高,只是210和215读完后感觉什么都没学会。这门课只有S1有,是313,314和340的prerequisite。看主页是Aniket和Mano教,Mano很好,但Aniket是个新来的老师,教得也是很水,而且很懒……就不知道今年怎么样了。 Pass难度:6,A+难度:7
Compsci 220 算法,算是stage2最难的课。内容包括算法的数学基础(big O,big theta,big Omega),排序,搜索,栈(stack),队列(queue),链表(Linked List)等数据结构,还有图论。这门课的exam基本上是有题库的,只要把去年的exam全部做会,A+很简单,但这门课的难度在于assignment 以往是由教算法的那几个老师教的(Michael Dinneen和Mark Wilson),近两年换了Ulrich和其他几个老师教,就不大清楚了,据说今年是轮着教。如果是前者,估计是两个手写两个programming的安排,最后一个编程assignment如果是跟图论有关的话会比较难,前3个就挺简单。如果是Ulrich教,可能assignment难度不高,但是要读懂他的assignment估计要花点时间。 这门课确实不大简单,但是是最容易拿A+的课,因为exam和test有题库,很有可能碰到原题。由于算法是computerscience的灵魂,所以我建议尽量花点工夫在这门课上。 Pass难度:6.5,A+难度:7
Compsci 225 离散数学,跟220有点交集,但是是纯粹的数学课,没有任何编程。内容有逻辑,数学推理,图论,还有密码学等内容,是stage2最有意思的课,对数学好的人而言也是stage2最简单的课,easy A+。看主页是Bakhadyr Khoussainov教,这是个非常好的老师,虽然出的assignment可能会有点难度…… Pass难度:6,A+难度:6.5
Compsci 230 Stage2 比较有用的课(我不说最有用是因为我没读过280)。我们当年是把Java的各种特性深入地讲,包括封装,继承,Swing等内容,是Radu教的(一个口音很重的老师,但是教的很好),第二部分是软件工程的理论,纯背,有点无聊。这门课每个老师教法都不一样,所以不能一概而论。如果你105学得很好,这门课基本上就是复习而已 Pass难度:6,A+难度:7
Compsci 280没读过就不说了,但我看过slide,内容是数据库操作和一些C#,数据库的内容很少,就一351 tutorial的内容,C#的内容也不多,因为跟Java很像所以也是将内容重复一遍而已,估计很简单。
Stage 3 Compsci 313,345,350,367,369本人没读过,不知道详细情况。据说313,369比较难,345略坑(去年背的东西很多,但考的东西很少,很多人考完觉得感觉良好,但最后挂了)。350纯理论,是Computer Science的数学理论基础,跟图灵机有些关系,喜欢数学的可以读,不过读过的朋友都不推荐读,说没用。367是AI,要自学Prolog,但读过的朋友也不推荐读。
Compsci 314 网络课。传说是stage 3最简单的课,我读的时候,与其说是简单倒不如说是老师很水。总的来讲就是背,背下来了就是A+,但是对网络还是一窍不通。所以我建议如果真心想学到东西的同学去读Infosys 322和339,虽然都是杀手课但是比读这门课浪费时间要好多了(我当年是Ulrich,Nevil和Aniket三个人教,Ulrich还好,后面两个,呵呵) Pass难度:6,A+难度:6.5
Compsci 320 算法课,220的升级版。大致有几个category:greedy algorithm,divide and conquer,dynamic programming还有network flow。最后还会讲NP complete。 很多人都说是stage 3最难的课,但是跟220一样,pass不简单,但是如果你有把握pass,你就很容易拿A+。如果是Michael和Mark Wilson教的话,会有6个assignment,3个写的3个编程,只需各做一个就能pass。Past Exam会比较吓人,尤其是2010年以前的,读完题目毫无头绪是很正常的事,但是近年的趋势是越来越简单。Test和Exam之前的最后一次课最好去,因为老师可能会放水告诉你出题方向。 但这门课难归难,个人觉得是3字头最重要的课。编程语言谁都能学,但这只是“招式”,算法才是CS学生的“内功”。你只懂语言不懂算法的话是很难有所作为的。但是话说回来,这门课教得实在是不怎么样,所以需要你花大量的时间去阅读textbook理解算法的本质。如果你能够扎扎实实啃完这门课,你的思维会大大扩展,很多本来看起来完全没头绪的问题都不至于束手无策了。 Pass难度:7,A+难度:7.5
Compsci 335 230的升级版。会讲各种网络编程的东西,比较大杂烩。有C#(去年好像没有),网络基础(跟314有点交集),XML,F#,functional programming,MVC。我是2012年读的,当时的assignment是做一个代理和MVC,去年是MVC+一个app,感觉这门课的内容是跟潮流的,所以推荐最后一个学期读。一般是Radu和Mano教,都是很好的老师。花点时间学,会比较有收获。 Pass难度:6,A+难度:7
Compsci 340 操作系统。老师是Robert Sheehan,我认为是CS最好的老师,讲课很有趣很幽默。内容很多,有操作系统的历史,虚拟机,process scheduling,多线程,文件系统,内存分配,系统安全,还有移动设备等等。这门课也是以背为主,虽然老师很好,但是他开头说“I don’t want you to memorize anything, I just want you to understand”is totally bullshit. 有一个Assignment有可能会比较难,但总体来说Pass难度不大(因为可以不做assignment也能pass),不过A+很难,我很多很厉害的同学都只拿到A- Pass难度:6.5,A+难度:8
Compsci351 数据库。去年是Gerald Weber和Sebastian Link教,好像都是德国人。前者教得一般般,后者很不错。内容是数据库的基础(relational algebra,relational calculus,还有对数据库的修改的concurrency问题等等),不过不教SQL,要自己在Lab自学。这门课每年的难度差异很大,前几年据说是最简单的课之一,但是近两年都比较难。 Pass难度:6.5,A+难度:8
Compsci 373 Computer Graphics。一般由3个人教:Patrice Delmas,Burkhard Wuensche,Georgy Gimel'farb。内容也大致分3块:Patrice会教基本的图形几何,譬如点,线,面的交集,颜色理论,射线反射等等;Burkhard会教OpenGL;Georgy会教Computer Vision。Assignment的话,Patrice和Georgy的会比较简单,Burkhard的会非常难,但是因为Burkhard很喜欢用原来的assignment,所以你运气好可能会搜到solution……总的来说这门课可以算是数学课,数学很好的人会觉得很简单,数学不好就会挺吃力。Test和Exam难度不大,只要把past exam弄懂就没太大问题。这门课的内容其实非常非常少,读完可以说对Computer Graphics还是一窍不通。老师也教得不怎么给力(Burkhard还行,Patrice是个很幽默的老师但是在教学方面很懒,只会挑简单的东西讲敷衍了事,不过出的assignment和exam也简单,好不好见仁见智了,他的课堂很有趣但纯粹是浪费时间,Georgy是个俄罗斯老头子,年纪比较大,讲课也没什么精神)。不过这门课pass不难,拿A+也比较简单,属于拉高GPA的课。如果想在图形方面学到东西,就得读7字头的图形课了。 Pass难度:6,A+难度:6.5(数学好的话)
结语:其实写了那么多我觉得都没什么太大用处,因为Computer Science是一门完全靠自学的学科。就算是最好的学校也只能引导你入门,更何况奥大CS的教学水平实在是不敢恭维。在这里经验第一,成绩第二,建议在读书期间找一下做part time的机会,这样在毕业的时候找工作就容易多了(不过说容易做起来难,assignment和复习test,exam确实很花时间)。最好尽快找到自己喜欢的方向然后花大力度在这方面有所发展,这样就不会迷茫了。 |