滑铁卢大学啊,常年被人吹捧,说什么CS多么厉害,学生素质多优秀,我呸!今天老学长就给大家展示一下滑铁卢CS major的课程及其范畴,把滑铁卢大学的底裤抖搂出来。还没来的就赶紧避开大坑,已经来了的认真看看,考虑一下如何转学,或者如何发挥这个学校最大的用处。如果本文内容让你感到头痛,疲惫,困,这也许是个转专业的信号,毕竟本文所述都是你大学前两年半天天要面对的内容。
大一必修课:
Calculus,这个是加拿大统一教材,没啥特别的。注意,AP Calculus可以换Calculus I 的学分,一定要换!一定要换!一定要换!滑铁卢的Calculus I 是我大学以来分数最低的数学课。
代数 Algebra,自编教程, 一些基础数论内容。什么线性丢番图方程啊(Linear Diophantine Equation),辗转相除啊(国内应该是小学学的吧),费马小定理啊(Fermat’s Little Theorem), RSA 加密的原理,韩信点兵(Chinese Remainder Theorem),无限集合的可数与不可数。
线性代数 Linear Algebra,也是自编教程(参见我第一篇文章最后的的瓜), 这是大一下学期学的。各种Matrix operation, dot product, cross product, Change of Basis, eigen vector, eigen value.
编程课第一学期学的是函数式编程(CS 135), 用的是DrRackets, Scheme语言的一个教学用版本。语法和著名的SICP(Structure And Interpretation of Computer Programs) 一书基本相同,课程内容高度重合,这个书以前是MIT的教材。学的东西无非是recursion, Tree, List, Lambda Calculation. 这个课程内容基本上加拿大也都差不多,UT UBC 都会教。 个人感觉UBC的CPSC 110教的更好点.
第二学期就上C语言了,不清楚其他学校怎么安排的。会学习循环,重新学习递归。数据结构除了Link List和 Binary Tree会多学Heap, Self-Balancing Binary Tree. 这会儿会开始接触一些简单算法,quick sort, merge sort, bucket sort,还会讲一些算法复杂度的相关概念。除此之外也会接触到你们要头疼一阵子的东西,dynamic memory allocation.
到此为止,大一学的东西基本上没有公司需要,一点也不实用,并且和其他学校高度类似,丝毫没有理由让人相信滑铁卢比别人更好。
( 没有公司会使用DrRacket,底层硬件相关的工作可能会需要C语言,但是他们需要的不是刚学C的新兵蛋子,用到的也都是你从没见过的黑魔法)。
大二必修课:
概率:二项分布,泊松分布,指数分布,排列组合。都是基础内容
统计:卡方检验,假设检验,最大似然,正态分布,置信区间,Gamma Function
图论:二分图,平面图,非平面图,最小生成树,欧拉回路(一笔画问题),汉密尔顿路径,三色定理,四色定理,五色定理。
计算机课: 这时候的计算机课就开始有理论课了,不全是编程课。很多人这会儿就会发现自己理论课和编程课感觉到的压力不太一样,的确有很多人更擅长理论课,一定要记住这个感觉,以后多选适合自己的。
理论课:
一阶逻辑:这门课对我来说很头疼,但是非常有意思。课程内容涉及皮亚诺定理,哥德尔不完备定理,图灵机停机问题,这门理论课可以看作是计算机科学整个学科单独立项的动机和基石。
计算机架构:这门课讲的主要是硬件架构,硬件上的电路逻辑,涉及一点点汇编指令级,我们那会儿用的是MIPS (龙芯使用的就是这种指令集),以后应该改成ARM指令集了。是门大水课,内容还是不如UBC的 CPSC 121教的好。
数据结构:这门课会讲一种严格的算法复杂度证明方法,之后会涉及许多数据结构和算法,像什么 binary tree, heap, AVL tree, AB tree, KD tree, Huffman Tree, skip list, trie, hash table 这些都是面试的时候容易问到的【1】 算法方面会涉及 KMP algorithm, Boyer Moore Algorithm, quicksort with randomness, zip encoding. 但这几个面试的时候问的不多
编程课:
软件设计 (CS 246):这门课开始使用C++ 和 linux environment,会讲很多软件工程中的standard practice, 正式踏入Object Oriented Programming,学期末会组队写一个没有图形界面的小游戏。这门课是滑铁卢出名的压分/劝退课,期中考试均分50多都是正常的,当然期末是可以找补回来的。许多公司面试软件工程师开发时问的问题基本都是这门课的考试内容。【2】
编译器:这是一个偏理论一点的编程课,整个学期做个编译器,把简单的C语言代码变成可以执行的程序。涉及内容: regular language, context free grammer, DFA NFA, Context Sensitive Language.
大三必修:
到了大三必修只剩下两门,你需要决定自己的发展方向了(这个下期再说)。
一门理论课讲算法,算法复杂度证明,贪心算法,动态规划,深度/广度优先搜索,和工作面试的题目非常贴近,除此之外还要讲一下算法中的经典问题P, NP, NP complete。 课本是大名鼎鼎的算法导论
还有一门编程课讲操作系统,存储管理,多线程,lock, cv, semaphore等同步问题。
至此,全部的必修课完毕。基本上加拿大的计算机专业必修课内容差得不太多,我个人认为真正拉开差距的,对今后职业发展有帮助的,是选修课部分。
如果你坚持到这儿了,少年,呆在这吧,你的毅力和对无聊的耐受程度很适合滑铁卢。
【1】:微软面试实习生的时候最喜欢问数据结构相关的问题,面过4次,次次都有binary tree, heap, hash table, trie。大二好好学习,微软就是你家。
【2】:246 这门课常年有个instructor, Brad Lushman, 如果期中均分超过55分他就会不开心。 246这门课的内容充斥了我大二以后的所有工作面试,job description 里面如果有 OOP experience的要求就赶紧复习一下这门课的笔记准没错
文章来源:本文由滑铁卢大学在读留学生Tom Feng首发于名校之星APP,如需转载,请务必注明出处,否则将追究法律责任!
声明:壹贝网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,版权归原作者wangteng@admin所有,原文出处。若您的权利被侵害,请联系 756005163@qq.com 删除。
本文链接:https://www.ebaa.cn/30932.html