Fall 2021 课程记录

前天考完了大二下所有的期末考试,意味着大二这一年就完全结束了。因为想要尽可能快地掌握基础知识,这两个学期自己全部选的都是专业课,一门通识课都没有上。事实上到现在为止,自己的major requiement已经完成的差不多了,实质性的专业课基本上就只剩下了函数式编程和抽象代数这两门。这也就意味着接下来大三这一年,自己的课表实际上相比大二是要来得轻松许多的,因为一半以上的课都会是满足distribution requirement通识课。

既然已经完成了大部分的专业课,自然感觉到有必要把这一年来上的课程做一个记录与评价——既可以作为对自己一年学习的一个总结,也可以为后人在选课时提供参考。因为转学的缘故,大二上其实是来到康村的第一个学期。这学期初看课有点多,实际上压力并不是很大——CS 2800和CS 3410这两门课是因为转学没法换学分才重学的,而因为高三的时候就自学了一点数学分析,MATH 4130也不感觉有很大的困难。下面从内容、难度和工作量把这五门课简单做一个回顾。

Fall 2021 课程表

CS 2800 Discrete Structures

这门课名称是离散数学,但感觉其实是在向CS major的人普及一些数学基础知识,由于大多数美国学生数理基础参差不齐,实际上最后并没有讲多深的离散数学。前一半学期讲集合、映射、关系的基本定义;普及了一下充分性、必要性、存在/任意、命题取反这些基本逻辑知识;然后介绍一下数学归纳法和反证法(如果普高的话,大部分这些都应该学过)。后一半学期讲的是基础的数论(六年级)、排列组合(高中)、概率(高中)。最后一周讲了DFA有限自动状态机(是唯一一块之前没有接触过的内容)。除了DFA外其他的内容里面当然偶尔也会小部分东西高中没有接触过(集合的势、可列性、关系、概率的公理化定义、费马小定理、RSA加密),但总的来看这些东西不是很值得专门开一学期的课去学。如果是数学double major还上过一两门数学专业课的话,那这门课的数学训练就真的比较浪费时间了。所以说我一直是希望cs department能够给有一些数学背景学生在这门课上有一些灵活性,学期结束的时候甚至还给director of undergraduate studies专门发了封邮件去解释这个问题,不过后来也没有收到回应,估计还是要照顾大多数学生。不过如果之前对这些内容接触不多的话,学好这门课还是比较重要的,毕竟都是比较基础的东西。因为没有去上过课,所以也不知道教授讲得怎样。

(ps:另外一件比较令人费解的事情是,寒假时我申请这门课的ta竟然被拒了。技不如人似乎是一个合理的解释,但听说office hour有学生拿着一道常规的作业题连着难倒了五个ta,便又让技不如人那个解释不大站得住脚了。)

CS 3410 Computer System Organization and Programming

与CS 2800不同,这门课设计得相当好,Anne Bracy讲课清楚,而且节奏很快并兼具广度和深度,是相当好的一门计算机系统基础课(相比之下后续的CS 4410反而显得有些平庸)。尽管转学之前在NYU学过一节计算机组成原理的课,但在这门课上自己还是学到了许多新的东西。

CS 3410相比于其他学校的Computer Systems Organization来说,硬件部分讲的相对比较多。学期从最底层的电路门开始,一层一层往上讲,到处理器设计,到汇编,再到cache,再到multicore,最后到virtual memory和exceptional control flow,干货满满。这门课的5个project也比较费时间。课程的前两个project是用logism来做出一个single cycle processor。 然后project 3是缓冲区溢出,project 4是riscv解释器,project 5是cache simulation。总之学好这门课对于后续系统方向的进一步学习具有重要的意义。

CS 4740 Intro to Natural Language Processing

这门课的教授是Claire Cardie,课程还是比较充实的,基本上把NLP领域内该讲的都给讲到了。从一开始的n-grams到Naive Bayes和HMM,再到后面的word embedding,神经网络,RNN,Transformer,当中穿插介绍了NLP领域中的各种任务。如果对NLP不太熟悉的话上这门课还是能够学到很多的。Claire Cardie人非常好,讲课也过得去,不过最重要的部分还是project。这门课我上的时候一共是3个project(正常是应该有4个不过我们那学期因为时间来不及砍掉了一个)——project 1是n-grams和Naive Bayes,project 2是HMM,project 3是RNN。project的代码量都是比较多的,然后写完代码后还要写report,所以每个project都要花上很长的时间。总之这是一门中规中矩的NLP入门课,上完这门课之后应该能对NLP整个领域有一个比较大概的了解了。

CS 4780 Intro to Machine Learning

我上这门课的时候教授是Kilian Weinberger和Anil Damle。Kilian是搞机器学习,Anil是搞计算数学的。两位教授都很会讲课,能够把概念解释得非常清楚。如果每节课都去听的话,内容理解起来基本不会有什么难度。机器学习近年的火热导致了CS 4780现在貌似是除了Core以外最热门的一节课了,基本每一个计算机系的学生都会选修这节课,而CS Department也不得不把这门课从一年开一次增加到一学期开一次。这门课主要的内容就是机器学习的各种算法——上半学期会涉及到KNN,Perceptron,Linear Regression,Logistic Regression,Naive Bayes;下半学期讲Bias Variance Decomposition,Kernel Methods,Bagging and Boosting,Neural Network。要学好这门课的话数学是比较重要的,因为各种算法背后其实就是一些数学推导,把那些推导都搞会了这门课也就过关了。这门课的workload也比较ok,就是八次作业和八个project,不会很难,最后的分数基本就是由考试决定。

MATH 4130 Honors Intro to Analysis I

这门课尽管课名带了个Honors,但不管从难度还是工作量上来说,最多只能算是一节中规中矩的数学分析入门课。教材是Robert S. Strichartz的The Way of Analysis的前7章。内容基本就是一元微积分的严格化:实数系的构造、R上的拓扑、极限、连续函数、求导、黎曼积分、数项级数和函数项级数。教授是周鑫老师,在数学上造诣颇深,但丝毫没有为难学生的意思,每周作业就是七八道证明题,两次考试都是take home,难题也都给了hint。周教授讲课也讲的很棒,证明都解释得非常清楚,确保大多数学生能够理解。总之,上完这门课虽然不能说数学分析能够学得有多么好,但该掌握的还是都能够掌握了。如果想要学习数学的话,这门课是基础中的基础且必须要学好的一门课。如果不以数学作为主要学习目标的话,通过这门课也能培养出一些的数学成熟度、熟悉一下数学的思维方式,对其他专业的学习起到促进作用。

课堂之外,周教授恰好也成为了我的数学的major advisor,有一次在食堂碰到他便直接说起了中文。感觉周鑫是一个很好的人,和他聊起天十分有意思。

Leave a Reply

This Post Has One Comment

  1. jadenidgyvu234

    BTC may be the latest or last chance to get rich in this era. It will reach $200000 next year or the next year.

    BTC has increased 20 times in the last year, and other coins have increased 800 times!!!

    Think about only $2 a few years ago. Come to the world’s largest and safest virtual currency exchange Binance to Get free rewards. Don’t miss the most important opportunity in life!!!

    https://hi.switchy.io/91xl