选课的日子马上就要到了,Computer Science专业的同学们,想要紧跟时代变化成为领军人物的同学们,对编程感兴趣的同学们,CS专业里你该选些什么课才能满足你对编程世界的好奇心呢?快来看看吧!
导师介绍
我们请来了以下几位藏龙卧虎的老师为我们详细讲述CPSC的课程设置,课程重难点,推荐教授还有适合学生类型。以下是老师们的介绍:
必修课程规划
以下是LOOK4金牌导师为大家整理的计算机专业大一大二必修课程规划指南,供大家参考:
CPSC 103
Introduction to Systematic Program Design
Language:Python
地位:非CS专业学生的Python基础课。
学习内容:Python入门课程,包括Python基础语法,How to design data,How to design function等,手把手教你如何设计完整程序。难度和课业量远小于CPSC 110。
作业内容:由Pre-lecture assignment, Worksheet, Tutorial, Code review和Project组成。每周Due的数量很多,但实际Workload并不多。Pre-lecture需要预习当周知识点,比较简单;Worksheet只算Participation;Tutorial和Code review则考察当周学习到的对应知识点。Project需要把自己感兴趣的的话题数据,通过Python导入并生成图表展现出来。
个人建议:对于想初步了解编程和Python的同学强烈推荐这门课,是GPA Booster。但对于想进CS Major的同学,没有必要选这门课。
CPSC 107
Introduction to Systematic Program Design
Language:Dr.Racket
地位:CPSC 103+107可以代替CPSC 110。
学习内容:内容和CPSC 110一模一样,除了HTDW这部分没有讲之外。进度比CPSC 110快1-2个章节,考试的时间比110要短,大概是45min,当然题量也会有所减少。作业,Final考试也和CPSC 110几乎一模一样。
个人建议:如果是想进计算机专业的学生可以直接Take CPSC 110,没必要103+107。
CPSC 110
Computation Programs and Programming
Language:Dr.Racket
地位:CPSC专业的必修基础课,是很多课程的Pre-reqs之一,也是Science学生必修。
学习内容:从零开始接触CPSC的第一门课程,因为这门基础课会涵盖CPSC专业的基本概念,比如Data type, Function, Abstraction, Recursion...所以没有CPSC基础的同学们也可以上。
作业内容:偏多(真挺多),需要花费一些时间,真的要跟紧进度。每节课前,需要看大约五六小时的Video(当然你可以Speedup),但这些视频可以作为课下复习的好资源,毕竟上课模糊的概念你可以反复看相关视频来巩固。每周三个小时的Lecture以及三个小时的Lab。每周一个Assignment,对于程序猿小白,部分难度比较大。尤其是最后两次(Search那次真的难)。
教授推荐:Gregor是最主要的教授,讲的还可以,但其实其他教授也可以,主要是自己多练习。
总结:如果你有编程基础,这门课对你来说一般轻松,只要你乖乖听话,一步步按照老师的步骤写,千万别跳步,步步算分,认真做作业和Lab的Task还是需要花费时间的。如果你没有编程基础,这门课对你来说还是有难度的。除了好好听课之外,请务必课前认真看Video(请Speedup以防入眠),以及花费时间好好做课后的复习。每周的Problem set和Lecture一定要掌握熟悉。
个人建议:希望你Trust the natural recursion。
CPSC 121
Models of Computation
地位:CPSC专业的必修基础课,同样是很多课程的Pre-reqs之一。
学习内容:概念性强,主要学习逻辑证明,还涉及Regular expression,Sequential circuits等等,一部分内容和PHIL 220很类似,但课整体比PHIL 220难很多。
作业内容:
每周在Prarielearn上做Assignment和Preclass quiz,每周三个小时的Lecture以及两个小时的Lab:Lab的内容稍微复杂一点,需要理解和实践结合(线上使用软件模拟逻辑电器)。Assignments难度挺大的,主要是题目有的时候比较难读懂,有点脑筋急转弯。考试难度会比Assignment低。但考试一定会设计Lab电路设计,需要对Lab内容有一定掌握。无期中考试,但有3个Examlets。考试形式均为CBT。
教授推荐:现在最主要的教授是Karina,考试出题也是她负责,她很鼓励和喜欢学生在课堂上问问题。还有一个教授是Geoffrey Tien,Patrice有时候可能会带一个Section,教的还不错。
总结:这是一门难度适中的CPSC课程,据我所知有两个极端:有些人觉得很难,有些人觉得很简单。但无论如何,只要你愿意付出努力,这门课都可以取得高分,考试会比Assignment简单,不要害怕,冲!
CPSC 210
Software Construction
Language:Java
地位:第一波需要大量Coding的课程(注意:CPSC 110是这门课程的Pre-requisite)。
学习内容:运用概念在实践中,应用学习的理论知识创建出自己的App(不需要太高端,我的就是个普普通通的Todo app),锻炼你的Practical design and Programming skills。除此之外,这门课还会涵盖Design pattern的各种知识。
作业内容:对于没有太多编程基础的同学们会是一个小挑战。需要自学很多Java知识,别害怕,给自己一个礼拜的时间,熟悉所有语法就好了,需要花费时间完成Project,会有很多Coding的部分。
教授推荐:最主要的Prof是Paul,他超负责,超认真,讲的也很不错。但学的怎么样其实还是靠自己,有问题就问,自己多花时间练习。另一个教授Jessica总的来说是一个很关心学生,会耐心回答Piazza上问题的教授,但出考试题有时会有点偏难,上课气氛可能没有那么有趣。
总结:这是一门相对有一点点挑战性的CPSC课程,可能成为你是否进入CPSC专业的一次小试炼。锻炼个人自学能力,应用实践能力,同时个人Project可以写入Resume。
个人建议:我个人来说CPSC 210是我上的最快乐的Computer Science课,我认为比CPSC 110内容要少很多(虽然我朋友们不是很认可我),并且是一门挺有用的课程。千万不要被Java给吓到,克服恐惧最好办法就是面对它,等熟悉了就好了,我相信大家都能学好。
CPSC 221
Basic Algorithms and Data Structures
Language:C++
地位:非常重要的一门课程,特别是对于要找COOP实习的同学(注意:CPSC 121, CPSC 210是这门课程的 Pre-requisite)。
学习内容:首先,C++的各种知识点。其次,各种Data structure,比如Lists,Queues,Linked lists,Stacks,Heaps,Hashmap等一系列非常重要的内容。除此之外,课程还会涵盖各种Algorithms,比如MergeSort等。这门课程知识点繁多,虽然每个知识点没有非常深奥,但是比较琐碎,需要花时间来理解性记忆。至关重要的是,这门课的内容将会在很多的面试中出现,所以一定要认真学习,打好基础。
作业内容:难度稍微偏难一点,需要大量运用Lecture中的内容。需要学习一些C++ Programming的知识,但是并不会深入所有,需要学习一下Pointer,Reference之类的。Assignment难度较大,需要分配好充裕的时间来完成,建议每周都提前开始,可以找一个Partner。
教授推荐:Cinda是最主要的Prof,我爱她,人超好,超负责,就是课堂有时候过分活跃。另一个教授Geoffrey总的来说是一个很关心学生,会耐心回答Piazza上问题的教授,但出考试题有时会有点偏难,上课气氛可能没有那么有趣。第三个Prof是Tom,他超负责,超认真,讲的也很不错。但学的怎么样其实还是靠自己,有问题就问,自己多花时间练习。
总结:重要的事说三遍,这门课很重要很重要很重要,为你未来找工作的面试之路上打下坚实的基础。很多面试题都会在这门课中涉及。考试主要是考核你如何灵活运用Lecture中讲的Data structure和Algorithm。考试稍微有一点点脑筋急转弯。建议大家考试前充足睡眠,虽然我没有,我惭愧。这门课是我最喜欢的CS课,难度中等,但是很有意思。
个人建议:我大二的时候有纠结过先上CPSC 213还是先上CPSC 221。这两门课会Cover一些类似的内容,我推荐先上CPSC 221因为它是更多大三CS课的Pre-request。并且它也比CPSC 213要简单,会先介绍一些Pointer的内容,打打基础。不过我先上的CPSC 213,虽然痛苦,但起码活下来了,顺序其实没有很重要,一起上也可以。
CPSC 213
Introduction to Computer Systems
Language:C,简易版Assembly(汇编语言)
地位:CPSC大三之前最难的一门课。淡化编程,注重对于栈(Stack)、内存(Memory)、线程(Thread)等抽象概念的理解。对同学们深入理解并掌握C/C++编程、多线程编程有很大帮助。
学习内容:
1. 介绍C语言的重要语法(如Array、Pointer等)
2. 介绍Assembly的核心操作(存储、读取等)
3. 讲解C语言与Assembly之间的相互转化。
4. 介绍输入、输出设备(如硬盘),及其与CPU交互的过程。
5. 讲解多线程编程及Deadlock(死锁)的避免方法。
考试内容:3个Quiz:难者不会会者不难,要是不理解High level concept,考试根本动不了笔;考试时间很紧,90%的同学在规定时间内做不完题,需要对所考察的知识点有较高的熟练度。
作业内容:与Quiz,Final的形式差别较大。作业逐渐变得难且抽象,需要有耐心和较强的分析、理解能力。中后期作业为两人一组(大佬也可以一人一组),作业提交会有最长4小时的冷却时间,需要有一个好队友并且有合理的分工,不然容易在Due之前通宵Debug。
教授推荐:核心教授为Robert和Jordon。
Robert擅长用代码将抽象的知识具象化,在Robert的课上大家更容易理解知识点。Robert是卡耐基梅龙大学计算机专业的本硕连读,拥有超越绝大多数人的编程能力,同时对计算机系统、多线程相关的问题有深入理解,几乎没有问题能难住他。
Jordon是一个胖胖的、很和蔼的老师,对学生非常热情。他讲课的方式更多是根据PPT勾画重点、画图讲解知识点等。Jordon有的时候还客串教CPSC 221,也是相似的讲课方式。
总结:课程内容主是学习基础编程跟计算机系统的关系,并不是直接编程的课程。课程难度较大,作业耗时较长、压力较大,建议不要在同一个Term上CPSC 213和CPSC 221。
CPSC 303
Numerical Approximation and Discretization
Language:MATLAB/python
地位:讲课以理论为主,涉及到MATLAB编程的内容不多也不深,并非CS系的必修课。
学习内容:核心内容是讲解数值计算误差。一开始会由浅入深的介绍误差产生的一些原因,以及误差可能导致的后果。主要内容是讲解各种算法理论上的数值误差,在实际应用当中计算机的算法导致的数值误差,以及根据推论的误差上限,如何调整才能减少误差。这门课到后期内容比较抽象,需要一定的数学功底才能学得比较轻松。
作业内容:与课堂讲义涉及到的内容关系紧密,且需要教科书辅助,作业题涉及到的部分概念会比课上讲的难,建议跟紧课堂内容,如果中途落下到后期比较难补。每周课堂上的Quiz帮助巩固课堂知识,Assignment也都是帮助更好的理解概念。Coding部分不难,即使对于MATLAB不怎么了解的同学,只要有一定的其他编程语言基础,也通过可以上MATLAB官方网站查找需要的Code解决。
教授推荐:最近两年是Yi, Kuwang Moo带这门课稍多一些。他的课程内容比较有趣,他的考试给出的Sample Exam会比较接近真的Exam。其他不同的教授讲的内容会稍有区别,作业量也不一样,但是都以理论为主。
总结:这是一门比较有挑战性的课程,作业和考试都需要理解课程内容才能做。而且Coding的部分不多,主要是学习理论知识,整体更像一门数学课。
个人建议:作为数学系出身的我认为这门课的内容有趣且相对实用。但是CS的朋友多数认为这门课Coding不多,理论深奥复杂,不推荐选。若是对算法相当感兴趣,以后科研方向也想往算法这边深入研究的人,我比较推荐选择这门课。
CPSC 304
Introduction to Relational Databases
Language:SQL,Java或者HTML+CSS
地位:Database基础课程:概念+实践
学习内容:全面介绍了Relational database的基本概念。具体来说,主要涉及到How to design a database(ER models,Logical database design and Normalization),How to query a database ( Formal relational query languages,SQL and other commercial languages),以及最后的Data warehouses。这门课讲到的SQL很大概率会在工作中涉及。
形式:Lecture主要介绍各种概念以及理论知识。Midterm,Final以概念为主,会有Multiple choice,画图题,文字题,写SQL的题等等。Group project会是一个完整的过程,前期的Design会用到理论知识,后期主要是Coding。
作业内容:Tutorial+Group project,难度中等。Tutorial难度不大,按照教授的Slides和Tutorial所给的Instruction做,不会很困难。Group project :需要自己设计并完成一个会用到Database的Application。从Design到创建Database以及Frond end,将会是一次很完整全面的产品编程过程,而且可以放进Resume!具体来讲,对于这个Project,大部分同学有两种选择:APP(Java)或者 Web(HTML+CSS)。虽然大部分同学在CPSC 210中已经学习过Java的部分知识,但是我们还是建议选择HTML写网页的方式,虽然需要同学们自学HTML,但相对更容易完成。还有记得,找几个靠谱的小伙伴一起组队哟!
教授推荐:Rachel真的人超级Nice,而且她的课件非常有用,完全囊括课堂上所有的知识要点,并且辅以很多练习去加深了解,在Piazza上经常回答学生的问题,而且在考试出题上也不会出的很难,304上她的为首选!另外一个最近在教的教授是Raymond,相比于Rachel他的课堂会有些沉闷,考试出题会偏难。
总结:课程概念性较强,但难度适中,还是相对较容易拿高分的CPSC课程。
CPSC 310
Introduction to Software Engineering
Language:TypeScript/JavaScript + HTML/CSS
地位:第二波超多Coding的课程:概念+实践 (小编内心:写Project是真滴痛苦啊)。
学习内容:全面介绍了Software engineering的各种概念以及理论知识。具体来说,主要涉及到Software specifications, Agile development,High and low-level design (各种Design principal, design patterns),Automated testing,Refactoring,Information security,REST,Async development。这门课的理论知识在Software development的Coop,Intern和工作中会有所体现。
形式:210视频中的Elisa是前几年310的常驻教授,上课有趣但语速有点快,最近几个学期变成了BESCHASTNIKH, IVAN HOLMES, REID这两位教授。课前需要看Video和Reading,都是概念和理论知识,看完后在Survey中提出自己不理解的地方和其他问题,教授和TA会收集这些问题并选出一些值得讨论的问题在Lecture一开始时回答。Lecture以概念以及理论知识为主,穿插一些帮助同学们完成Term project的知识点。Quiz(4-5个)和Final以概念为主,都是True/False question,绝大部分是Video,Reading和Lecture中覆盖的理论知识。但是没有太多的Previous practice用来练习,所以想要在考试中拿高分,理解和记忆颇为重要。Coding的部分体现Project中。
作业内容:难度大。Project : 贯穿整门课程,占分40%,第一阶段需独立完成,主要是在正式开始写Function之前先写好Test。之后两人一组,从无到有建立一个Back end,以及Front end和Database的接口(可以说是很完整的用户体验了,让你全身心体验敲代码的有趣和痛苦)。记得,找一个,靠谱的队友。队友真的很重要,因为Project内容较多,基本不可能一个人独立完成,需要两人分配好任务,互相帮助来完成。
教授推荐:210视频中的Elisa是常驻教授,上课有趣但语速有点快。她非常乐于回答学生的问题不论是上课还是在Piazza上。同时,Elisa很喜欢用往年的题库出题。
总结:做好很多Coding的心理准备,有机会的话可以提前自学一点TypeScript/JavaScript。
CPSC 313
Computer Hardware and Operating System
Language:C,Assembly
地位:CPSC 213进阶版。注意:CPSC 213, CPSC 221是这门课程的Pre-requisite。
学习内容:这门课程主要介绍Hardware和Operating system。具体来说,主要涉及到Sequential CPU, Pipelined CPU, Cache,Disk,File system还有Virtual memory这几方面的知识。总的来讲,更偏概念性一些,最重要的是要加强理解学到的概念。这门课程难度适中。
作业内容:每周一次Lab作业,是两人成组的形式。其中一半是填空(一般难),另一半是Coding(比较难)。这门课使用的是C,对于常用Java和Python的人来说会很难用。两个Midterm和Final难度较大,极易翻车。总的来讲,考试中基本没有太多Coding,更多侧重于理解和分析能力。
教授推荐:两个Prof:Norman Hutchinson和Margo Seltze都很不错,给分也比较合理。Margo是从哈佛大学请来的,Norman也教了两年了,所以两位教授都很厉害。相比Norman,Margo会的课堂氛围会更活泼一些,互动性会更强一些。个人更推荐Margo。
总结:偏概念性,需要全面理解知识点。
CPSC 314
Computer Graphics
Language:WebGL, GLSL, javascript
地位:Computer graphics的入门基础课程(注意:CPSC 221,以及MATH 200和MATH 221是这门课程的Pre-requisite)。
学习内容:对于数学基础有一定要求。Midterm之前的重点考察对Rendering pipeline的理解和应用以及以Linear algebra为基础的几何变换和2D/3D的空间转换,后期介绍图形学中的Shading and Lighting(物理光学基础),光线追踪,以及非常基础的Animation等。适合对游戏引擎和游戏行业感兴趣的同学。
作业内容:难度因人而异。Coding assignment和Lecture关联不大,作业会有部分Code给出,有实例作为参考,难度适中。但是对于不了解Shader language的同学可能一开始上手比较难,需要自己花时间去研究文档,如果有问题多去Offiec Hour找TA debug。Coding作业需要和TA面批,所以一定要理解自己的写的每一行代码。考试的话一般来说会有两个Quiz和一个Midterm,难度一般,会有很多Recycle的题目。同时Final占比小,难度同Quiz/Midterm。
总结:算是一门好拿分的课程,基础Computer graphics,适合对于设计游戏感兴趣的同学们。
CPSC 317
Introduction to Computer Networking
Language:Java, C
地位:大三受益无穷的优先选修课。是Parallel Computing和Distributed System等大中厂软件基建技术的前置课程。
学习内容:该课程介绍网络的基础构成和服务的基建技术。内容包括网络的组建方式、网络数据的传输方式、现代通用的协议和特性。课程涵盖现代常见的技术和应用,例如Email、HTTP、TCP/UDP 连接、路由器、用户与服务器的关系等。
作业内容:2023年改版后,课程模式更倾向于CPSC 313。课程由预习、6 个非常实用的作业、6个小测验以及期末考试组成。实际工作量不大,但建议尽早开始作业,因为有许多用例需要逐一对照文档来完成。作业将引导你编写各种有趣且可运行的协议,例如路由器、服务器、TCP连接和Email收发等。
个人建议:在AI和大模型火热的时代,网络基建依然是非常重要且需求量很大的技术。没有网络基建,再好的大模型也无法提供给用户使用。无论你以后的目标是成为SDE、NLP专家或从事其他方向,懂得网络技术将是你的强大技能包。该课程教授的技术都是现代正在应用的技术,能够无缝应用到你的未来工作中,让你轻松掌握工作内容。改版后非常推荐选修这门课程。
CPSC 320
Intermediate Algorithm Design and Analysis
地位:CPSC 221进阶版 (注意:CPSC 221和至少3 Credits from某些特定课程是这门课程的Pre-reqs)。
学习内容:作为CPSC 221进阶版,这门课程将会介绍各种算法,例如Stable matching问题的解法,Graph,Greedy algorithms,Divide-and-conquer algorithms,Dynamic programming以及最后的NP (NP-complete)Problem。这门课的内容难度较大,需要花一定时间来理解和记忆,也需要一定的数学基础,建议认真听课并且读Textbook。这门课讲到的算法很有可能在Interview中出现。Summer的老师Anne的课程更简单,Winter学期上的话难度高但是学到的也相对多。
作业内容:难度偏大。Assignments以两人成组的形式,证明题居多,没有Coding的部分,难度较大。题目Context偏长而且变化较多,需要对上课讲过的算法有较深的理解。Midterm & Final平均分偏低,证明题难度较大,考试题目更加数学化。题目变化比较多,需要对上课讲过的算法有较深的理解。单纯地背算法或套公式,对于做题比较吃力。
教授推荐:Alan考试出题难度大,而且题目多为大段的阅读,很聪明但是会把学生想象的和他一样聪明。Patrice上课深入浅出,课堂氛围较Alan更活跃,会认真回答学生的问题,考试出题也比较中规中矩,不会有特别难的题故意Fail学生。不过最近几个学期320都是几个新的Prof在教带, 作业考试难度和Patrice的大差不差。
总结:这是一门算法进阶课程,难度偏大,考试题目也相对复杂(尤其是证明题)。作业和考试都需要理解上课讲过的算法,如果只是机械的记忆会感觉做题比较吃力。
CPSC 322
Introduction to Artificial Intelligence
地位:AI的入门课程(注意:CPSC 221是这门课程的Pre-requisite)。
学习内容:内容主偏理论知识,主要介绍了如何Represent a problem, 几种Problem type(Constraint satisfaction problem,Query,Planning)以及对应的算法(Search,Arc consistency,Variable elimination)。知识点比较琐碎,需要理解和记忆。
作业内容:难度一般,好拿分。每两周一个Assignment,主要是文字答题,几乎没有Coding。需要将上课讲到的理论知识运用的具体的Context里。好拿分。Midterm & Final:主要是文字答题,Multiple choice (True/false question),会有一两道手写Code的问题。难度一般。
教授推荐:Jordon是一个很会讲课的教授,讲解知识点很细致,但考试出题有些Tricky。
总结:是一门CPSC中比较水的课程,但从今年开始考试更对定义和细节的考察逐渐增多,还是要花心思好好把握细节。
CPSC 330
Applied Machine Learning
Language:Python
地位:Machine learning入门级别,比CPSC 340要简单。
学习内容:内容从Decision tree开始,包括Regression, Recommendation system等等,一直到稍微提到神经网络。但是很多内容不讲具体的Implementation而是教你如何调包,使用Scikit Learn以及别的Package里写好的Machine learning model。
作业内容:难度不高,Lecture slide有点长,偶尔开卷的时候不难,闭卷的话可能要记的东西比较多,每一届不一样。Assignments以2-4人成组的形式,有些Assignment是俩人,后面的是四人。Coding的部分不难,就是根据老师课上的Lecture slide举一反三。Midterm和Final一般都是课上说过的Topic,Lecture slide是最重要的复习工具。
总结:我觉得如果想要一个3 Level的不太难的课可以考虑这个,尤其是开卷的学期,作业不多,考试难度也不是很高。
CPSC 340
Machine Learning and Data Mining
Language:Python
地位:Machine learning入门级别,对于AI和Machine learning是必不可少的课程。
学习内容:内容从简单的概率到卷积神经网络入门,具体介绍了KNN,K-Means,Random tree线性回归分类等理论知识,但理论实践并重,对理解能力有很大要求,对数学统计有很高要求(特别是Matrix)。从某种意义上说,像是一门披着CPSC外衣的深度数学统计课程。
作业内容:难度不算太高,但量大。Assignments以两人成组的形式,Coding的部分数量不多,但需要学生对课程学习的算法彻底理解。Midterm难度一般,平均分不算低,但是有部分学生是研究生,所以拉高了平均水平。Final上一学期的Final出题比较偏门,偏向复杂的统计,很难拿分,平均分也较低。
总结:这是一个第一节课教授就表态说很需要数学统计基础的课程,否则会Ruin your life。这是一个你一定要踏踏实实把每一部分都要理解的课程!因为老师上课很快,注重自己课下的自学理解,而且缺了某一部分的理解,就很难继续下去!总的来说,很Challenging,但上过的同学都说收获很大,很有意思!
CPSC 404
Advanced Relational Database
地位:Database的进阶课程(注意:CPSC 304, CPSC 213/261是这门课程的Pre-requisite)。
学习内容:内容均是理论知识,没有Coding。这门课主要介绍How DBMS is implemented以及How to tune the performance of DBMS。具体来说,CPSC 404会涉及到Storage/memory hierachy,External sorting,Indexing (B+tree & hashing),Query evaluation & Optimization,Concurrency control以及Crash recovery。描述各种Operation (e.g. Insert,Delete,Join Tables etc)的步骤和计算I/O Cost是这门课的重点。
作业内容:难度中等,但是需要非常清楚各种Operation的过程以及各个Index的特征,否则容易混淆。三个Assignment,没有Coding。主要是计算题,文字描述,解释类题以及画图题。需要熟悉并理解每种Operation是如何完成的。Midterm & Final:没有Coding。计算题和画图题较多,会考察各种I/O Cost的计算。需要熟悉并理解每种Operation是如何完成的。
总结:是一门很理论性的课,没有Coding,计算较多。
CPSC 421
Introduction to Theory of Computing
地位:CPSC 221/320的进阶课,介绍基础的计算理论,是比算法课更Formal的理论课。
学习内容:Introduction to theory of computing: CPSC 221 is required, and CPSC 320 is recommended. 主要包括uncomputability, regular language, DFA, NFA, Turing machine, undecidable and unrecognizable problems, 以及P and NP problems。主要目标是介绍各种计算的模型已经经典的计算理论中的问题。
作业内容:难度中等,可以两人组队,找个靠谱队友很重要。问题主要包括计算模型的设计以及相关理论问题的抽象证明。最好有一些数理证明的基础,做题会轻松一些。
考试:Midterm & Final。难度中等,一般均分都比较高。是作业的简化版。作业和往年考试会做几本问题不大。
总结:主要抽象的理论证明和应用,没有太大的应用。
CPSC 425
Computer Vision
地位:是第一门机器视觉的课。会有机器学习的应用。
学习内容:机器视觉的入门课,主要介绍成像和摄像的原理,图片的处理和分析,以及相关的经典算法:Edge detection, Colour analysis, Texture description, Stereo imaging, Motion interpretation, 3D shape recovery, and Recognition。最后会介绍机器学习的基本概念以及简单应用。这门涉及到的知识多而杂,上课也大多会是简单带过。需要课后复习和练习加深对基本的理解。这门课需要先修CPSC 221, MATH 200, MATH 221。
作业内容:主要是在Jupyter notebook中对有关经典算法进行复现。程序的大框架通常会给出,只需完成细节即可。完成复现后也会要求在一些实例中应用,完成参数的调试以及反馈复现。
考试:有Quiz,Midterm & Final。题目基本为单选和填空,主要考察图片生成,分析以及经典算法的底层原理的理解和记忆。有些题目甚至有文科题目的风格。期中和期末考试题量很大,需要合理安排时间。
总结:关键在于机器视觉原理的理解,Coding全部在作业中完成而考试主要考察理解和记忆,无Coding。
CPSC 447
Introduction to Visualization
Language:Javascript (d3.js),Html,Css
地位:有关信息可视化的课程(注意:CPSC 310是这门课程的Pre-requisite)。
学习内容:这门课主要讲述如何将一个Dataset中的Data可视化。知识分为两大块:一方面是信息可视化的理论知识(e.g.应该用什么图表,应该怎么表示各个Item和各个Attribute等等),另一方面是如何用d3.js实现Visualization。
形式:Lecture介绍理论知识。Coding的部分(如何使用D3.js)需要自己看Video自学。
作业内容:
Online quizzes:前七周每周需要看Video来自学d3.js,看完后需要完成一个Online quiz。Foundation exercise:一共6个,考察的是Lecture上讲到的理论知识。大部分为文字答题,有少量的Design题需要画图。Programming exercise:一共3个,考察的是视频里面讲到的d3.js的知识。需要用Javascript (d3.js),HTML,CSS画出要求的图表。Project:3人一组,需要自己选定DataSet,自己设计并完成Visualization。需要结合所学的理论知识和Coding skills(如果设计的Visualization不符合所学的理论知识,会有扣分)。想要拿到高分,需要好好Design自己的Visualization,将所学的理论知识用到自己的Design中,并且保证自己可以用d3.js,Html,Css来实现这个Visualization。Midterm:考察的是理论知识(i.e.Lecture中讲的内容),与Foundation exercise类似。由于是新开的课,没有Practice exam。Final:2019 Term2由于COVID-19,Grading scheme有所调整,加上由于Midterm过后同学们普遍反映Workload too high,所以Final取消了。以后应该是有Final的。
总结:Workload比较大。前半学期理论知识与自学d3.js同时进行。后半学期理论知识与Project同时进行。
关于就业方向
对于CS本科生就业的建议就是:实习!实习!实习!
大家在本科阶段一定要尽早进入实习项目,尽可能的多实习,这样可以大幅度的提高你的简历厚度。
公司所做的项目相比于课程里的小Project有着质的区别,实习多了,简历涉及的广度与深度都会大幅度提高。
这对于大家无论是毕业后就业还是申请研究生都有着巨大的帮助。如果表现突出还有机会拿到Return offer!美滋滋~~
课程上希望大家多多关注CPSC 221和CPSC 320,这两门课程对于同学们面试有着相当大的帮助。请同学们务必重视。并且在学习阶段就开始在Leetcode上刷题。算法与数据结构对于毕业生是面试考察的重点。
关于COOP
COOP是CS学生很好的将课堂所学理论与真正工业中的应用所结合的好机会,在实际的工作的成长速度会远远快于仅仅依靠课堂所学的成长速度,同时可以在相关领域积累经验,为毕业后无论是申研还是工作打下坚实的基础。
进入COOP后在最初的Work term可以多投简历,争取获得面试机会得到人生中第一个岗位,经过一个Term的锻炼以后可以根据未来想选择的发展方向或者过往的经历相对有选择性的投简历去一些中型公司甚至大厂。
COOP不仅可以带来经验的积累,而且所得的工资也可以实现一定程度上的经济独立,减少财政方面的压力!大家可以报名LOOK4 COOP/Intern Career规划,帮助大家在本科期间找到合适自己的大厂实习。
几点建议
想拿好Offer,无非就是两步
1. 好的简历来获得面试机会:
你的简历够亮眼才能打动HR让他给你面试的机会。而有了实习经验,特别是一些大厂的,绝对会大大提高HR对你的评分。【内推也是一个提高获得面试机会的有效方法】
2. 基础过硬才能通过面试:
拿到面试之后就要准备Leetcode。毕竟现在大多数公司面试还是白板写题,如果面试的时候刚好遇到做过的题目,那获得Offer的机会就会大很多。
新生讲座
大一的小伙们马上要开始大学生活啦!
你们一定对UBC有很多问题和疑惑吧?
不要担心!
6月8日晚7点LOOK4新生讲座!
解决大家对注册课程和校园生活的任何问题,
我们不见不散哦!
扫码添加LOOK4客服