滑铁卢大学啊,常年被人吹捧,说什么CS多么厉害,学生素质多优秀,我呸!今天老学长就给大家展示一下滑铁卢CSmajor的课程及其范畴,把滑铁卢大学的底裤搂出来。还没来的就赶紧避开大坑,已经来了的认真看看,考虑一下如何转学,或者如何发挥这个学校最大的用处。如果本文内容让你感到头痛,疲惫,困,这也许是个转专业的信号,毕竟本文所述都是你大学前两年半天天要面对的内容。
大一必修课:
Calculus,这个是加拿大统一教材,没啥特别的。注意,APCalculus可以换CalculusI的学分,一定要!一定要换!一定要换!滑铁卢的CalculusI是我大学以来分数最低的数学课。
代数Algebra,自编教程,一些基础数论内容。什么线性丢番图方程啊(LinearDiophantineEquation),辗转相除啊(国内应该是小学学的吧),费马小定理啊(Fermat’sLittleTheorem),RSA加密的原理,韩信点兵(ChineseRemainderTheorem),无限集合的可数与不可数。
线性代数LinearAlgebra,也是自编教程(参见我第一篇文章最后的地瓜),这是大一下学期学的。各种Matrixoperation,dotproduct,crossproduct,ChangeofBasis,eigenvector,eigenvalue.
编程课第一学期学的是函数式编程(CS),用的是DrRackets,Scheme语言的一个教学用版本。语法和著名的SICP(StructureAndInterpretationofComputerPrograms)一书基本相同,课程内容高度重合,这个书以前是MIT的教材。学的东西无非是recursion,Tree,List,LambdaCalculation.这个课程内容基本上加拿大也都差不多,UTUBC都会教。个人感觉UBC的CPSC教得更好点.
第二学期就上C语言了,不清楚其他学校怎么安排的。会学习循环,重新学习递归。数据结构除了LinkList和BinaryTree会多学Heap,Self-BalancingBinaryTree.这会儿会开始接触一些简单算法,quicksort,mergesort,bucketsort,还会讲一些算法复杂度的相关概念。除此之外也会接触到你们要头疼一阵子的东西,dynamicmemoryallocation.
到此为止,大一学的东西基本上没有公司需要,一点也不实用,并且和其他学校高度类似,丝毫没有理由让人相信滑铁卢比别人更好。
(没有公司会使用DrRacket,底层硬件相关的工作可能会需要C语言,但是他们需要的不是刚学C的新兵蛋子,用到的也都是你从没见过的黑魔法)。
大二必修课:
概率:二项分布,泊松分布,指数分布,排列组合。都是基础内容
统计:卡方检验,假设检验,最大似然,正态分布,置信区间,GammaFunction
图论:二分图,平面图,非平面图,最小生成树,欧拉回路(一笔画问题),汉密尔顿路径,三色定理,四色定理,五色定理。
计算机课:这时候的计算机课就开始有理论课了,不全是编程课。很多人这会儿就会发现自己理论课和编程课感觉到的压力不太一样,的确有很多人更擅长理论课,一定要记住这个感觉,以后多选适合自己的。
理论课:
一阶逻辑:这门课对我来说很头疼,但是非常有意思。课程内容涉及皮亚诺定理,哥德尔不完备定理,图灵机停机问题,这门理论课可以看作是计算机科学整个学科单独立项的动机和基石。
计算机架构:这门课讲的主要是硬件架构,硬件上的电路逻辑,涉及一点点汇编指令级,我们那会儿用的是MIPS(龙芯使用的就是这种指令集),以后应该改成ARM指令集了。是门大水课,内容还是不如UBC的CPSC教得好。
数据结构:这门课会讲一种严格的算法复杂度证明方法,之后会涉及许多数据结构和算法,像什么binarytree,heap,AVLtree,ABtree,KDtree,HuffmanTree,skiplist,trie,hashtable这些都是面试的时候容易问到的算法方面会涉及KMPalgorithm,BoyerMooreAlgorithm,quicksortwithrandomness,zipencoding.但这几个面试的时候问的不多
编程课:
软件设计(CS):这门课开始使用C++和linuxenvironment,会讲很多软件工程中的standardpractice,正式踏入ObjectOrientedProgramming,学期末会组队写一个没有图形界面的小游戏。这门课是滑铁卢出名的压分/劝退课,期中考试均分50多都是正常的,当然期末是可以找补回来的。许多公司面试软件工程师开发时问的问题基本都是这门课的考试内容。
编译器:这是一个偏理论一点的编程课,整个学期做个编译器,把简单的C语言代码变成可以执行的程序。涉及内容:regularlanguage,contextfreegrammer,DFANFA,ContextSensitiveLanguage.
大三必修:
到了大三必修只剩下两门,你需要决定自己的发展方向了(这个下期再说)。
一门理论课讲算法,算法复杂度证明,贪心算法,动态规划,深度/广度优先搜索,和工作面试的题目非常贴近,除此之外还要讲一下算法中的经典问题P,NP,NP