这份课程总结主要是基于作者个人感受,比较适合未来目标是算法方面的工作或者研究的本科非相关专业学生参考。
经常有学弟学妹咨询各个课程的内容、难度等方方面面,所以我写下了这个总结。
本文汇总了我两年来所选的各课程的特点和自己的感受,希望能对学弟学妹的选课和学习有所帮助。
这学期的四门课程都是IT coursework的必修课(部分本科学过类似课程的可能可以免除其中的某几门),因此每个学期都会开。一般上下学期的老师会不一样,不同老师的课程设置和考查风格会有一定的变化,所以这篇总结对于同样是上半年入学的同学来说参考价值可能会更大一些。另外据说之后某些课程名字会改得更加容易理解一点,但如果课程编号不变的话内容应该不会有太多变化。
必修课当中唯一和数据库相关的课。对于没有学过SQL的同学(比如我)来说是很好的一个入门课。课程当中比较硬核的部分就是写SQL的语句以及画database schema (ER diagram),集中于上半学期。下半学期多是一些介绍性的内容,包括NOSQL等等。老师上课逻辑很清晰,tutorial上主要是练习SQL和小部分的ER diagram。
作业的话一份是根据一个案例画ER diagram的小组作业(3人),另一份是根据要求写SQL语句的个人作业,工作量都不大(一天内可以完成),给分比较高并且可以争取满分。考试的话SQL和ER diagram也有不小的比重,并且难度不低。至于其他的概念部分的考查就比较依赖于考前的背诵(和天生的瞎扯能力)了。
整体墨大IT中和数据库相关的课并不多,后续的课程有advanced database和data warehouse,都是著名水课(道听途说)。但个人觉得所谓的水课只是意味着平时工作量不大,学习内容不难,不容易挂科,但是往往不容易拿高分。所以还是尽量凭自己的兴趣和目标方向选课才能更值回学费。
其实就是学习JAVA的课,稍微涉及了一点UML diagram。对于没有学过JAVA的同学(比如我)也是很好的入门课,但是如果之前没有学过任何一门编程语言的话课程难度可能会有点高。老师是一位华人lecturer,中式英语所以很好懂,课程内容基本都是按照给的参考书absolute java上的内容讲的,所以如果能根据课程进度自己同时看书的话会清楚很多。Workshop基本上就是自己写代码tutor答疑的形式。
三个作业都是个人作业,环环相扣,难度是第一学期的课中最大的,每个作业基本都要半周的时间完成,可以争取满分。考试的话也是第一学期的课当中最恶心的,都是比较客观的题目,但是语法考得非常非常细节。而且作为唯一一门考试时间只有2小时的课,题量反倒是最大的,最后似乎大部分人都没有做完。不过最终的成绩会有scale up(所以大家不用担心某某课程考试考得太难,如果整体成绩都很低的话会提分,所以最终显示的成绩反而未必低)。
JAVA在后面的一门必修课distributed systems的作业当中会用到,其他课程好像都不再需要了。可能因为我选的算法相关的课程比较多,之后主要用的编程语言是python。
介绍各种算法和数据结构的课。没有讲得很深(考试和作业几乎不要求算法有效性的证明),最难的部分到简单的动态规划和贪心算法。算法的实现只需要伪代码,所以不涉及到任何的具体编程语言语法。老师课讲得非常好(查了一下是给其他lecturer培训怎么上课的大牛),算法的解释清楚直观。参考书用的是Introduction to the design and analysis of algorithms,书写得也非常棒。
作业的话基本就是写伪代码,可以争取满分,推荐用latex,不会的话也可以学起来,之后很多课的报告和作业用latex写会干净清楚很多。考试难度普通,只要课上涉及到的算法流程很清楚,大部分题目就都没问题,最后可能会有两道较难的写伪代码的题目,其中一道会是动态规划题(leetcode上的easy难度)。
如果打算回国找工作或者进大厂的话,算法题是笔试面试中绕不过去的,**从这个角度来说这门课的重要性可能是所有课程当中最高的了。**在学完这门课和COMP90041后,就可以愉快地在leetcode上自己用JAVA刷题啦。
介绍计算机网络的导论课。内容很庞杂,参考书computer networks,每周都会讲半章到一章的内容。介绍性和概念性的内容居多,夹杂一些小学数学应用题。老师乌大爷口音有点难懂,讲得中规中矩(也没办法因为内容实在太杂而且没什么内在逻辑关系)。Tutorial上主要就是讲那些应用题的做法以及涉及的一些公式啥的。
课程中的小作业题很多和参考书后面的习题类似,很容易拿满分,一份作业一般也就一天的工作量。最后的小组作业(2人)需要选一个题目写一个report,给分不错,但不太可能拿满分。考试就是课上的概念以及讲过的一些计算题,不会特别tricky,毕竟乌大爷出考卷出了名的良心,但是要拿很高的分的话(90+)还是需要考前背诵很多内容。
计算机网络相关知识应该也是国内相关岗位笔试面试经常会涉及到的内容,个人感觉这门课的内容还是很重要的,同时第二学期distributed systems也和这门课的不少内容有重叠。但是因为涵盖太多所以讲得都比较浅,而且理论居多和现实生活中的使用场景离得还是有点远。
第二个学期可以选三门必修和一门选修。
knowledge technologies是很多算法课的前置,distributed system需要用到JAVA,**所以建议这学期选完。**而SPM其实可以挪到后面的学期选,因为学的内容没什么用而且也不是其他课的前置课程,所以也可以选两门必修两门选修。
选修课的选择也比较关键,特别如果想读博的话最好这学期就选感兴趣的方向的课补充一下相关知识,这样summer term或者第三学期就能做proj了。因为读博需要proj的成绩,如果最后一学期才做proj的话很有可能后续的phd就要延后半年入学。
如果想要趁着假期在国内机器学习算法岗实习的话建议这学期选修Statistical machine learning,这门课覆盖到了挺多的机器学习岗面试可能问到的问题。
看课名就是话不多说就是背。没有参考书,老师课上基本就是在解释PPT上的内容。相对来说这门课的Tutorial会更有用一点,涉及到许多SPM的工具和图表的绘制使用,tutor讲的内容更具体更贴近实际一点。
作业有两个。第一个个人作业很难拿高分,我得到的作业反馈基本都是正面的最后只拿到了70%的分数,要求remark之后说没什么大问题但这个分数已经给得挺高了,被打太极过去了。反正这类课的作业成绩还是放平心态,随缘吧……第二个小组作业(4-5人)是要用项目管理的流程开发一个网站,网站可以用现成的模板所以不需要码很多代码,重要的是各种报告啊会议记录啊,毕竟主要是体验项目开发的各个阶段。考试准备就是听recording背PPT,然后tutorial上强调的一些图表要会画。概念上考得有些点还挺细节的,但最后给分还可以。
听说澳洲这边的开发工作挺强调Agile的,但是我个人感觉是没从这门课上学到什么东西。
一开始看课名会比较迷茫,因为planning和目前最热的深度学习方向的AI还是有不小的区别的。学的内容主要是从classical planning包括启发式搜索和Lecturer之一 Nir自创的Width search,到强化学习、q-learning和MCTS。最后还会涉及到简单的博弈论和纳什均衡。两位Lecturer讲课水平都非常高,下半学期的Lecturer Tim更是不用PPT直接徒手在Note上讲下来。几本参考书也写得非常棒,可以在视频
两个作业都要用python,第一个个人作业就是考查基本的启发式搜索的理解,可以争取满分。第二个小组作业(3人)形式非常有趣,是写一个Pacman的AI然后互相比赛。最后的分数有一部分和比赛的排名挂钩,剩下的是看wiki和视频的质量。虽然比赛要赢很难毕竟是要互相残杀,但是其他部分老师的给分还是比较厚道的,只要花足够的时间结果一定不差。最后考试不难,考的都是课上讲的重点内容,老师给分也非常的宽松。
这门课强烈推荐大家选,本身内容非常有意思,老师授课逻辑清晰,能学到很多东西(是对强化学习一个不错的入门),最后给分也不错。
推荐指数:5/5
Information Retrieval和Machine learning入门课,涵盖面非常广,ml方面聚类方法SVM决策树推荐系统都有讲到,但是后果就是每个部分讲得真的非常浅显。老师讲课水平极差,思维很跳跃没有逻辑,英语感觉也不太好的样子,最最蛋疼的是老师也不给个参考书,所以不懂的内容可能只能靠google了。但是我们当时的head tutor是个很好的补充,他代上的几节课就讲得非常清楚。在这种情况下选个好的tutorial就非常重要了,tutorial上的题目覆盖的也基本上是考试会考到的内容。
作业两个报告给分比较随缘,第一个我很认真地构思写程序并且写了将近一周拿到了87/100,第二个我一天不到就写完了拿了83/100……期中考试可以争取满分,但问的许多是概念性的问题并不是很好回答。期末考试概念性的内容和数学内容差不多对半开。
**这门课是web search和statistical machine learning的前置课程,内容也相当于这两门课的简化缩水版。**不过实在太浅了,上完这门课后国内机器学习岗的面试问题还是一个都答不上来(别问我怎么知道的)。
又是一个课名和内容严重不符的课。分布式系统只在概念上略微涉及,实质上是用java进行socket programming和multiprocessing programming。老师上课就是按照参考书distributed systems concepts and design的顺序,上得普普通通,和自己看书差不多。Tutorial上大多数是讲解一些概念性的问题,和最终考试考到的问题比较像,也会有少量的programming的教学。
作业是两个编程项目(用java进行多线程的socket programming),第一个个人项目,第二个是四人组队的团队项目,都是比较花时间的。除了程序之外都要写一份对应的文档。给分都还行,满分比较困难,想得高分要在程序的细节和功能上精益求精,至于文档我也不知道怎么写才能拿高分。考试有概念题也有代码题,难度中等,题目和覆盖范围和样卷差不多,给分还不错。
**这门课也是学了Java之后唯一一门用到的课程。**内容还是比较实用的,至少可以编出一个有点实际意义的程序了。只是感觉现在工业界主要也不会用这些技术……但总的来说对于没有很多开发基础的同学(比如我)来说这门课还是挺友好,能学到不少东西的(主要是socket和多线程),并且自己能从无到有开发出一个程序也是很有成就感的一件事。
如果打算申请phd的话这个学期要选computing project,占了两门课的学分。如果这样的话选修课建议不要选大作业很花时间的课,容易崩盘……比较好的节奏是summer term选一到两门课,然后选project加一门课;或者干脆summer term把project做完。
**在两年中我个人认为的最好的课,没有之一。**主要分为Information Retrieval和Nature language processing两块,前面一块是kt的进阶版。两位老师的语速很快,每节课信息量都很大,甚至会有两到三个不同的topic。但是老师的讲解思路非常清晰,每个新的算法或者技术都会从motivation开始讲,到直观的理解,最后再是数学化的表达或者公式。每节课老师也会给出对应的参考书的章节,推荐在课前预习一下这样上课的时候可以跟上老师的节奏。
有若干个小作业是在jupyter notebook上补完代码,一个小作业大概半天到一天能够完成,可以争取满分。大作业是在kaggle上打一个课内的比赛,最后成绩和report以及排名挂钩,最后给分比较宽松,但是需要花的时间和精力很多。最后考试难度比较大,因为整个课程覆盖范围很大,然后各种小细节也都有可能考到,概念和算法都有涉及,并且试卷最后会有一道论述题,时间很紧很难拿高分。
在学过这门课之后,基本的NLP的知识就已经足够了,不管以后想做NLP方面的研究还是求职国内NLP的岗位都是非常有用的。这门课的代码要求主要集中在算法部分,大作业也不一定要并行运算,但是如果能在服务器上使用各种最新的NLP的包,最后效果会好很多,毕竟现在流行的深度学习技术对于算力的要求都比较高,这点对于没有基础的同学是个难点。另外,课上教授的知识肯定是赶不上the-state-of-art,想要在这个领域深入还是需要去读最新的文献。
推荐指数:5/5
和Web Search形成鲜明对比的一门课,大概是我上过的最差的一门课了。课上没有什么干货,教的内容都是蜻蜓点水并且没有一个系统的框架,不同内容之间完全看不到联系。老师课上就是念PPT外加回顾一下他的光辉历史。中期每节课都会介绍一个新的工具然后tutor简单的介绍一下怎么用,最后三节课是抽小组展示大作业。所以这门课基本上就是在不到20小时内要学习包括ansible,spark,docker等全套开发部署工具。参考书当然也是没有的(不完全归纳,没有参考书的课都会比较坑),全靠自己看文档自学。
两人小作业的要求比较简单,也不需要用到各种部署开发工具,在服务器上跑python script就行了,但是给分就emmm……我们一开始拿到7.5/10,但是tutor给的反馈都没什么道理,然后我们发邮件逐条反驳给老师之后,老师改到了8/10并且表示这个分数已经是H1了,老师还说完成全部要求并不能拿到满分,因为有些大佬额外加了各种酷炫的功能所以要拉开差距……之后的五人大作业工作量就更大了,基本上是每个人负责一部分,包括前端,数据库,爬虫,算法和后端部署,大部分需要用到的工具课上都蜻蜓点水地提过,不过还是需要自己看文档才能实际上手使用,最后给分也和小作业差不多,但我已经无力argue了……最后的考试还会考部署代码的格式(纠错题),除了学习JAVA的COMP90041,这也是头一遭了。
这门课的内容是很贴近现在industry的开发环境和要求的,但是课程本身由于种种原因完全无法做到让一个不怎么懂开发的小白入门,课程本身能起到的作用就是告诉你“这个东西很有用快去自学吧”。外加给分很玄学,所以我个人不推荐选,除非满足如下条件:打定主意要走开发路线 and (能找到有开发经验的大佬一起组队 or 自己本身就是有开发经验的大佬)。并且由于工作量很大,要选这门课的话这学期其他课还是选任务少一点的例如密码学这类课。
推荐指数:1/5
Note: 最后一学期不管是找工作还是申请PhD都要在学期一开始就着手准备了。
这门课对于找工作的同学非常有用,因为可以提供一个本地的实习机会,装饰简历并且体验真实的工作环境。每个人会被分配到一个Mentor,这位Mentor负责在学期中和你定期开会交流以及大部分作业的给分。所以最终这门课得分如何很取决于Mentor的喜好和仁慈程度。因为实习大部分都会要求每周工作至少三个全天,外加这门课本身需要写很多报告以及进行Pre,所以如果同一学期还选了两门课的话会非常累,因此学校也推荐在这门课之外选一门课比较合适。
这门课要求的报告和其他课要求的学术写作很不一样,因为它希望看到的是实习过程中比较主观的感受和学到的东西 (descriptive),基本上都要套用DIEP model。不过最后一学期如果打算工作的话分数也没有那么重要,认真实习并且增加自己的职场经验才是这门课最大的收获。
听说在有些公司表现好的话会直接提供全职的offer(存疑)。
KT的另一个进阶版本,会介绍各种Machine Learning的技术和原理,deep learning介绍的不多(只详细说了CNN)。课上会有不少数学推导,但是老师非常贴心地把哪部分不考都标识出来了。参考书是大名鼎鼎的PRML(Pattern Recognition and Machine Learning),对应的部分在深度和广度上都超过了课上的内容。Tutorial也同时有python代码和数学理论推导,内容非常充实,很有帮助,建议在tutorial前自己先过一遍,不然可能跟不上节奏。
课程的第一个作业是三人组队的大作业,和web search类似也是在kaggle上打一个比赛,最后写一篇报告。这个作业需要花的时间比较多,很难拿满分但是给分整体还是比较宽松的。第二个作业是在jupyter notebook上补全代码,不需要花很多时间但是很难拿高分,需要注意代码规范和运行效率,写好注释,甚至有一些在python上显得很奇怪的要求比如input check,而这些在作业要求里也语焉不详。最后的考试主要是概念和一些数学推导,给分比较宽松。
**这门课对于有志于机器学习方向研究和国内互联网公司的算法岗的同学基本上是必修课了。**回想起来如果先学这门课,之前的算法实习岗的面试也不会那么惨了……
推荐指数:4/5
这门课是一个本科生课,master阶段对应的是Advanced Theoretical Computer Science,但是需要这门课前置。所以master也可以直接选这门课。课程是用离散数学和集合论来研究计算机科学中的一些可计算性问题,前半部分是介词逻辑和一阶谓词逻辑,后半部分是集合论和有限自动机等。另外,课程还有一部分内容是用Haskell在Grok上进行函数式编程。Tutorial基本就是做题,有一点高中时候的感觉。
课程的考核一部分是Grok上的编程,很容易拿满分。两个小作业有一部分是数学推导或者回答问题,另一部分也是在Grok上,都是可以争取满分的。最后的考试也基本都是Tutorial上见过的题型,也会有用Haskell写程序的题(小的语法错误会被忽略),最后几道题会略有难度。
这门课作为本科生课比较好拿分,也是理论计算机科学的基础课程,不过如果毕业后打算工作的话实用程度不高。
推荐指数:3/5
这是一篇干货满满、充满诚意的选课指南,感谢 Polaris 无私分享给墨尔本大学未来的学弟学妹们,希望对大家有所帮助~
打赏金额将全部转交作者~