Penn State CS 专业本科毕业后的一些思考

avatar 609699
botcbz
10097
25
这个帖子我其实很久之前就想写了:作为一个大学毕业上不了岸而转读master的一个苦逼,我时常在回想自己的大学时光,思考当时如果自己更加主动一点是不是结果会不一样。这篇帖子摘录的是我对于我大学四年的一些思考,希望能够帮到之后同专业的学弟学妹们。如果你们觉得这个帖子有用的话,还望能够多多加米。

PSU它官网上面有一个suggested academic plan(bulletins.psu.edu),对于那些不太清楚自己选课的人是一个很好的参考。我们按照这个plan,可以把我们的四年学业分成三个阶段:基础,进阶,以及最后的选修课程。

基础课程:CMPSC131(CMPSC121),CMPSC132(CMPSC122),CMPSC360,CMPSC221,CMPEN270
这个阶段大致就是入学一年半到两年中能够接触的计算机的课程了。作为一个刚入学的新生,可能你之前了解到的最深奥的电脑知识就是怎么利用Steam转区成为精神阿根廷人从而买到便宜游戏。但是没有关系,接下来的四年你可以有大把的时间来精进自己的计算机技术,写出多种多样的bug。只要你是一个智力正常的人类,并且你在课程上花费了足够的精力,你都是能够拿到足够满意的分数的。美国学校的特点是往往选课的质量是跟着老师走的,所以ratemyprofessor一定要看起来。

如果你是在主校的话,第一年的时候你会上到131132两门Python入门课程,如果是分校的话则是121122两门C++入门。两个版本的差距其实不是很大,一般来说的话Python入门的话进度会比较快,而C++入门的话难度稍微高一点,但是能够学到pointer的知识,对于后面理解计算机系统会更加有帮助。小道消息说132也有劝退的用处,这节课上完之后会刷掉大批的人转到IST专业(人称:I Stop Trying),不过只要用心去学习,在国内卷了这么久的的各位应该是没什么问题的。

大一结束时的状态:整个大一的进度其实还挺慢的,这可能和你的映像有些出入。但是请记住,你在这一年学到的内容足够你去完成一些基本的项目了。如果你学习的是Python,那么你完全可以按照空余时间来写一两个小项目(例如爬虫)。与此同时,在理论上你也有能力去尝试leetcode了,虽然因为没有学过算法的缘故可能只能解开easy的题目,但是可以提前去感受一下。同样的,学校里面也会有各种各样的club(包括ACM club),趁着大一有空的时候多去试一试,也可以多结交一点朋友。当然,在大一暑假里面上一上summer school冲一冲进度也是一个可选的方案。

在上完132之后就可以解锁360221360是算法入门,整节课的作用就是交你怎么来做算法证明。既然是算法相关的课程,那么笔记就非常重要,同时上课也得好好听。课后作业花费的时间可能会稍微多一点,但是大部分都花在格式上,应该不会太难。221是Java的Object Oriented Programming+web application(一般来说它会分成前面10周的OOP以及最后5周的web design)。前面的10周一定要好好听:如果以后想要进互联网大厂搬砖,这个东西就是基础中的基础。后面的5周一般来说会是Spring,作为你第一个接触的框架(framework),听不懂是很正常的。一个很常见的情况是由于课程安排紧张,学生没有办法理解为什么web programming需要这么写代码。事实上web programming这个东西作为SC中的一个应用方向是很大的一个内容,单单一节课是没有办法涵盖的。web到底是一个什么东西?它到底是跑在什么地方上面的?为什么我们能够连接到一个网页呢?那么基于这样的情况,我们是否有一套标准化的方法来编写web application?想通了这些东西,可能对这节课的第二部分的授课内容有一定的帮助。

除了这些课程之外,还有一门就是CMPEN270。这门课算是硬件入门,可能对于大部分同学未来学业的帮助不是非常大。不过,如果你对于硬件感到兴趣,希望以后做比较硬件的工作的话,可能这节课会给你最基础的入门知识。同时这节课也可以算是CMPEN331的基础之一。

大二结束时的状态:这应该是你能够吃老本来轻松应付学业的最后一年了。你会觉得这两年来没有学到什么,但是事实上你已经可以自己独立做一些项目了。虽然221你只上了一个学期,而且之后你也不会再遇到任何Java课程了,但是个人推荐可以花大二一整年来写一些东西。学校的ACM club一般会在秋季学期教授一些兴趣课程,然后再春季学期开启一个group development event。有兴趣的话可以去试一试,不过春季的小组开发要看人品,要是分到烂的组大家集体咕咕咕也不是不可能。另外一个比较靠谱的东西是可以上网看视频,按照教学里面的方式来写project(网页,游戏等等)。地里面哪些网课值当都已经讨论得很清楚了,这里就不再赘述。自己建一个Github账号,把自己的project放上去,顺便也可以学学该怎么管理自己的workflow。另一边,学校在暑期也会有research opportunity,有兴趣的可以大二的暑假试一试。

进阶课程:CMPSC311,CMPEN331,CMPSC465,CMPSC464,CMPSC461,CMPSC483(or CMPSC431W)

这个阶段大概是从入学一年半开始后到第三年结束。恭喜你朋友,在这个阶段你应该是正式进专业了。接下来你就可以体会到这个专业真正残酷的地方,体验数不清的bug和做不完的作业了。与此同时,你也可以稍稍思考一下自己未来的出路了:是去学系统?还是学AI?还是说要去写compiler做programming language?亦或是去写游戏?要知道CS的出路不仅仅是去做SWE,还有其它很多的方向。如果不清楚到底有哪些方向的话,找一找各个学校开设的Master项目总是没错的(对,尤其是CMU的)。当然,在这个阶段你所学到的每一节课都会为你之后的计算机生涯打下重要的基础。课程也变难了,一般来说每上一个小时课程就要花上一个小时来写作业/复习,所以要有heavy workload的准备。

首先讲讲311331吧。这两节课都算是计算机系统的入门课程,311是通过软件的角度来讲述,而331则是通过硬件的角度来说明。强烈推荐学习能力强的同学一学期里双修,这两节课对互相的帮助真的非常大。当然,在这两门课程上所花费的时间也是巨大的,所以记得上的那个学期可以夹一点水课调整一下。311有两个版本,一个是用著名的CSAPP来教学,另外一个则是用Penn State教授自己的教材,可以说是两个版本两门课了,有想法的可以去多打听打听。311是C语言教学,对于用Python入门的选手来说不太友好,可能前几个礼拜会感受到极大的心理压力。但是你要知道的是大家也都是这么过来的,而且老师最后也会给上Curve,所以说千万不要气馁。还有,一定一定一定要早做作业,早去office hour!!晚去的话可能连debug都排不上!!抱紧老师和TA的大腿可以有效提高自己过的几率。331则是用Verilog写硬件,讲的都是硬件方面的知识,对于那些未来会和硬件打交道的CS专业学生会比较有帮助吧。这节课也很困难,所以office hour的人也非常多。一般来说要是在晚上呆在CSE building里的人不是上311,331的,就是后面上473的了。

接下来是465,算法和数据结构。这节课一般来说是两个老师上的,一个讲算法,一个讲数据结构。计算机铁三角(算法和数据结构,系统,网络)中的一个,没什么好说的,好好学。一般来说这节课好好听课记笔记写作业都不会混得太惨。当然,这节课的内容也是你之后刷lc的一个重要的帮助。

接下来是464461。这两门课程属于计算机里的通识教育课程,不算简单,对于未来的工作可能没有很大的帮助,但是可以充实你的理论基础。464是一节纯的理论课,教授关于computability的内容。大概的pace会和465差不多,总之好好听课写作业就能过。461是计算机语言,讲的是计算机的编程语言是如何设计的,作业大部分会是理论,少部分会有Lisp。作为通识教育来说还是挺有意义的,workload也不大,也是好好听课写作业就能过。这两门总的难度还是看老师。

最后就是毕业必须的capstone课程,483和431W。483是那种group project课程,就是把大家组成小组来完成一个industry级别的project。要注意的是这节课是可以上不知一个学期的(曾经就有我的同学一个project上了一整年)。这节课workload一定是大的,而且涉及组队,所以说选人要慎重。但是优点是绝对值回票价,这节课的内容完全可以放在简历上面,并且里面团队合作的经验也是可以拿来在面试里面吹的。本人上的是431W,这节课讲的是database,一般来说中期会要求你写一个关于某个dummy project的project analysis,最后project是用flask写一个带db的网页,非常简单。想水的话就上这节课。

大三结束时的状态:按照地里面的说法,大三怎么着也要找实习了,这也意味着从第三年一开始就要关注起来。同时,第三年又无法避免的要接触很多硬课,所以说整个第三年的节奏会非常的赶。之所以把capstone提到第三年来说就是因为这样的课程可以写在简历里面,同时你在大一大二写的内容也可以加在里面。到底是找工作还是考研?这个问题在这一年里也要好好决定了。如果是考研的话,那就和老师多勾搭一下,多去office hour,节日里也问候问候,这样便于拿推荐信。同样的,学校里面也会有research的机会,如果自己感兴趣也有能力的话也可以多参加。如果是决定找工作的话也要多努努力,去蹭一蹭career fair,多来地里逛一逛。本人在这块经验不多,也就不献丑了。

选修/upper level课程:(to be done)
这个阶段应该是你大学最后一年的时候了。选一点自己喜欢的方向的课程吧!与此同时,必修课里面也还剩下了最后一节课:473。作为311的进阶课程,这门系统课的难度可谓是惊天地泣鬼神。不过这个时候你也是身经百战,见得多了。总之一个字,就是干!

(下面会介绍473以及一些我上过的一些electives,各位可以参考一下。先占坑了)

PS:给各位Penn State的CS,CE以及EE的童鞋们推荐学校里的一个超值去处:Lion Surplus。这里面是处理所有学校淘汰下来的旧货,从那种Optiplex台式机,0几年的笔记本,macbook,一直到那种R720,甚至是服务器机架应有尽有,绝对是一个休闲时的好去处。重点是价格公道,并且捡漏机会巨大(前几年有人低价买到过加了单条128G内存的服务器,直接原地起飞)。当然,它也处理家具和其它用品,包括也卖淘汰下来的二手车和学校里面无人认领的自行车,所以有空去逛逛总是不会吃亏的。学校里面的那种蓝白色小巴就可以载人到那里,有兴趣的话可以打听一下。

补充内容 (2021-10-06 15:47 +8:00):
睡不太着,索性就继续更新文章了。

来讲一下CMPSC473吧。这门课的难度一定是在你大学四年中碰到的数一数二的课程,也是你在计算机系统的基础课程中的最后一块拼图。当时个人上的是Timothy的课,主要讲的是Concurrency, memory management以及IO。当时课程的作业总共有三个project和两场考试,但是后面改成了两个。本来的三个project是Malloc lab(CSAPP上的),Concurrency lab(message channel)以及最后的thread library。作为CMU来的PHD,Timothy讲课的水准还是可以信任的,但是要把知识点和作业结合起来还是要花费不少的精力。两场考试总体偏难,并且由于平常不布置书面作业,复习/预测题型也会非常的困难(但愿老Zhu之后改了吧)。上课:学习的时间至少要放在1:2,并且同311一样,需要早去office hour。

接下来简单说说我上过的,或者我朋友上过的一些选修。

MATH484,MATH486 。水课,如果是想用数学来满足elective和department list的话就选这个。认准老师Christopher Byrne,课简单到起飞。可以拿来抚慰因为473/311/483受伤的心灵。严格来说的话里面的知识点会对AI 学习时有一丢丢的帮助。

CMPEN362 Communication Networks。又一门计算机通识课,讲那些计算机网络的protocol。上课念PPT比较多,会有一个手撸protocol的一个extra credit,平时作业也不难。老师有时候会在课上点明会考什么,所以认真听课认真写作业应该就能过。
CMPSC410/DS410 Big data Programming。挺有意思的课,会交怎么用MapReduce,Spark以及Hadoop文件系统。有Quiz有homework project,但是workload其实并不多。毕竟是Data Science的课程,所以说难度控制得也不高,算是半门水课了。
CMPSC 475 Application Programming。事实上这门课应该叫做IOS programming,讲的是SwiftUI。上这门课的话手上得有台苹果作为环境,不过可以去Surplus或者网上淘一个二手的。教这门课的一般是副主任Hanna,挺好的一个老头。没有考试,但是每周一个project,所以时间花费还不算少。个人属于那种没有deadline就不会去学的菜鸡,所以个人感觉选这门课还是挺幸运的。(PS:如果自学能力强的话也可以试试stanford的CS193P,这个每年会更新)

补充内容 (2021-10-06 15:58 +8:00):
最后是450 Concurrent Scientific Programming。妥妥的硬课,上课:学习时间比至少得1:2,慎选。这两年应该是William 在上,所以一定是早8。这门算是一门科学计算的通识课了。课程内容从如何单核单线程加速计算,到shared memory(thread, OpenMP),然后是多核心,多CPU(MPI),最后会讲到如何利用多个CPU进行模拟运算,以及一点点CUDA的知识。加上期末三场考试,几乎每一个课题都会有一个lab,会用到学校里面的那个超算来做运行环境,最后会有一个mini-project来展示自己探究的 scientific computing或者high-performance computing的内容。个人感觉要是对于system感兴趣,但是又不知道自己是想做scaled system还是embedded system的话完全可以来选这门课体验一下(量大管饱,可以说算是很超值了)。
  • 51
25条回复