Northwestern University CE/CS整体介绍&不完全课程介绍(NWU, NU, 西北)

avatar 130194
Javic
46126
58
[align="left"]楼主16 Fall入学,在EECS Department的Computer Engineering Division下,现在准备跑路了。[/align][align="left"]个人感觉西北的CE还是很不错的(不接受反驳),很好地完成了LZ转CS申Ph.D的目标,遂来宣传一下,希望西北可以帮更多同学完成人生理想。[/align][align="left"]{:4_86:}{:4_86:}{:4_86:}[/align][align="left"]至于转CS申Ph.D的经历会在决定接哪个offer后写一下。[/align][align="left"]
[/align][align="left"]整体介绍:[/align][align="left"]先说说大家关心的转CS近况:西北转CS需修完六门本科课程然后重新申请,和以后的新生在一个pool里,不保证录取,所以基本上等同于不能转。[/align][align="left"]LZ所在的CE要求修6门算CE研究生学分的课,剩下在EECS department里随便选,别的department的课最多修三门,不另设track。修完12门课号大于303的课并满足CE division要求即可毕业,100&200 level的可以选但不计入12门(计入成绩单)。虽然CE听起来很硬,但在西北,algorithms 、DB、OS、PL、compiler、parallel computing、embedded systems、machine learning foundations、data science seminar/social media mining等茫茫多软课都算CE学分,找CE老师做independent study也算分,再加6门自选,所以基本上可以当一个偏科班的CS来上。[/align][align="left"]西北是quarter制,10周一个学期(quarter),一年上三学期(quarter),个人认为比较适合转CS尤其是申CS Ph.D。我们在这里以以第一年暑假开始为标杆。在semester制的学校,第一个semester上一些入门课,第二个semester修至多4门课。在quarter制的学校,第一个quarter上一些入门课,第二三个quarter修至多8门课。在8门课里找到一个match的老师显然要比在4门课里找到一个的几率要大。而且第一年的课程数量基本上可以给你一个不错的CS基础。有同学可能会担心10周讲不了很深,个人认为不是问题,如果你觉得一门课满足不了你,那么去上更advance的课或者开始research/project就好了。Finer granularity总是好事,而且对于转CS的同学来说,breath要比depth重要一些。[/align][align="left"]Course-based MS一般4个quarter修12门毕业(如3-4-4-1,2-4-4-2),3个quarter毕业也可以。Project-based和thesis-based MS需要在第一学年的5月1日之前找愿意接收自己的老师。找不到也不是大问题,暑假前能找到research就好,没thesis可以拿OPT留下搬砖(比如LZ由于老板sabbatical没法做thesis)。Project和thesis可以往后延长,延长的quarter只收100刀注册费,不收学费。[/align][align="left"]西北full-time的学费是每quarter 1.7万刀左右,选3-4门课。第一个和毕业前的quarter可以少于3门,少于3门算part-time,按照每门约6000刀收钱。生活+租房1500够用。总的而言不是很贵。[/align][align="left"]TA/RA:西北不为MS提供TA,只能在最后一学期当grader,每周10小时,时薪15刀。RA看老板,听说有的MS拿钱,本科一般有REU的funding。LZ一直是活雷锋,搬砖不收钱。好处是想不干就不干,方便跑路。[/align][align="left"]选课没什么压力。如果不满足课程的pre-requisit就要找老师要permission code,LZ都要到了。但今年看到系里发邮件说统一分配permission code,不知道情况变得如何。[/align][align="left"]课程难度适中,没有什么是肝一晚上解决不了的,如果有,那就肝两晚上。大部分同学第二三个quarter都是四门课,情况还好。GPA大部分课给的都比较仁慈,认真上完应该能有A-兜底。课程容量从个位数至300人不等。[/align][align="left"]西北EECS系不大,CS+CE一共30来号faculty吧。但这几年CS一直在扩张,16年的时候计划10年内新招20位CS faculty,主要集中于DS,AI,security,CS+X(Law, Journalism, …)交叉学科等方向。目前而言方向开的还算全,systems这边VLSI,architecture,OS,networking,compiler,PL,DB等每个方向都有多名比较活跃老师。Theory组人也比较多。AI/ML/CV/NLP也有一些人,一部分在CS一部分在EE。西北的CS和medical school,Kellogg,Medill等院系有合作,算是相关领域的一点小优势。[/align][align="left"]EECS的MS没有自己的办公室,但如果跟老师做research可能会被分一个位置。[/align][align="left"]老师介绍:[/align][align="left"]本来打算介绍一下老师,但感觉在下面的课程介绍里已经讲完我知道的了。对某个老师的research有兴趣的同学直接私信LZ吧,systems这边我了解的比较多,其他有一些耳闻。[/align][align="left"]总的来讲老师都比较responsive。大部分衣着得体,很少见套个帽衫挺着肚子就来的。印度老师不很多,东欧的比较多。[/align][align="left"]课程介绍:[/align][align="left"]下面介绍课程,包括上过的(选了XXX的)和听说过的。由于LZ在过去一年半里主要做Parallel Systems,所以信息难免会集中于Parallel Computing&Computer Systems,欢迎补充其他的。[/align][align="left"]Course Listings在这里mccormick.northwestern.edu[/align][align="left"]EECS 213 Computer Systems:CMU 15213的压缩版,如果是Peter Dinda上的话,最后一个Malloc Lab会变成Parallel Lab,用Pthreads干点事情。[/align][align="left"][/align][align="left"]EECS 214 Data Structure:选了Jessie Tov的,基础入门课,讲到Red-Black Tree。作业用Tov自己的DSSL(Data Structure Student Language)写,优点在于好上手,缺点是没法顺便学Java。[/align][align="left"]
[/align][align="left"]EECS 303 Advanced Digital Logic Design:选了Seda Ogrenci-Memik的。Jie Gu的会麻烦一些。介绍数电,memory,FPGA什么的。在国内上过数电的同学也可以上一上,这门课会教一些保证convergence的方法,不像国内只会教人画圈圈。[/align][align="left"]
[/align][align="left"]EECS 322 Compiler Construction:从high-level language开始往下一层一层实现对应的Compiler直到machine code。学期末有competition,写出运行最快的compiler的同学可以进老师的hall of fame。[/align][align="left"]
[/align][align="left"]EECS 336 Algorithm:没两把刷子不要去选Jason Hartline的。课很好但分数不好拿。作业是peer-review,考试不答不得分答错倒扣分,Jason已经把game theory用到教学里了。[/align][align="left"]
[/align][align="left"]EECS 339 Database:选了Goce Trajcevski(now tenure at ISU)的。Project来自Peter Dinda:写一些Query语句;用JavaScript和Perl弄一个基于Google Map的关于选民信息的东西;写个用在simulated disk system上的buffer cache上的B-Tree。Peter的学生Stephen Tarzia在上另外一门DB(EECS 317),不知道他会不会用老板的project(大概率不会,但还是放在这供参考)。[/align][align="left"]
[/align][align="left"]EECS 340 Computer Networking:选了Alexandar Kuzmanovic的,Project来自Peter Dinda:用C/C++实现HTTP Server/Client,TCP Server/Client,2 routing algorithms in an event-driven simulator。Project用的Minet是Peter和几个undergrad花了半个暑假做出来的,所以有bug,主要是提供一个serialized的环境。不过个人还是最喜欢这个project,很锻炼人。[/align][align="left"]
[/align][align="left"]EECS 343 Operating Systems:Fabián Bustamante口音比较重,Stephen Tarzia口音标准。Project用xv6做。之前由于本科生可以pre-register一门课加之OS是必修,所以基本都被本科生选走了。今年Stephen Tarzia新开了winter quarter的应该会分流一些。[/align][align="left"]
[/align][align="left"]EECS 345 Distributed Systems:选了Fabian Bustamante的,project是用Go写个Kademlia Distributed Hash Table。前几节课会review一些Networking,OS懂一点File Descriptor什么的就够了。选之前以为会很难,实际上一般吧。[/align][align="left"]
[/align][align="left"]EECS 348 Artificial Intelligence:大水怪Kristian Hammond上的巨水,今年放话说要加难度结果还是那样,又少布置作业了。Hammond貌似是文科出身,后来开始做AI,上课会用一些比较高级的词汇听不大懂。[/align][align="left"]
[/align][align="left"]EECS 349 Machine Learning:选了Doug Downey的,整体偏overview和数据分析,与吴恩达那种有很大区别。Project自己找题目随便做。HW是用weka分析点数据;写decision tree;补完neural network代码和Char-RNN in TensorFlow的一些实验;一些作业题和做更多实验。语言用Python。Bryan Pardo的ML是Python“习题课”。[/align][align="left"]
[/align][align="left"]EECS 351 Computer Graphics:写3D小风车。[/align][align="left"]
[/align][align="left"]EECS 358 Parallel Computing:选了Gokhan Memik的,介绍parallel algorithms, overhead,communication什么的。HW用OpenMP,Pthreads和MPI写并行算法。考试是在纸上用笔代码,注意不要拘泥于细节,写pseudo code和注释把思路表达完整即可。[/align][align="left"]
[/align][align="left"]EECS 361 Computer Architecture:选了16 Fall Gokhan Memik的。前半学期很轻松,后半学期很累。Project是用VHDL写ALU,Single Cycle Processor和5-Stage Pipelined Processor。15年和17年的final project都是写Cache。有quiz,Gokhan说算bonus(up to 5 points)。但最后是先加bonus再curve,所以根本无所谓bonus,就是105分满分,16 Fall要95才给A。[/align][align="left"]
[/align][align="left"]EECS 368/468 Programming Massively Parallel Processors with CUDA:选了了Nikos Hardavellas的,Nikos口音不是很好懂。上课讲各种并行算法,只在开学的时候讲了一点CUDA Architecture。四个作业就是写CUDA程序,优化matrix multiplication、histograms什么的,468有final project,自己选题目。这课坑点在于不告诉你怎么debug CUDA,学校机子上也没装toolkit,只能靠读代码debug,做了三个作业后实在受不了了,最后一个遂github走起。[/align][align="left"]
[/align][align="left"]EECS 394 Software Project Management & Development: 这个课的project来自老师从外面找的client,接近实战。[/align][align="left"]
[/align][align="left"]EECS 395/495 The Art of Multiprocessor Programming:选了Hai Zhou的(dropped),讲concurrency,很theoretical。每周做几道推理证明题,最后要设计个barrier什么的,基本没有programming。当年LZ考完midterm以为崩盘了就赶在drop ddl前跑路了,结果还是高于average,最后大部分同学都拿了A。[/align][align="left"]
[/align][align="left"]EECS 395/495 Machine Learning: Foundations, Applications and Algorithms:要撸代码,周周有due。Workload其实比Doug Downey的EECS 349大。[/align][align="left"]
[/align][align="left"]EECS 396/496 Code Analysis and Transformation: 选了Simone Campanoni的。这课讲compiler middle end optimization,和software engineering没有半毛钱关系。周周有due。用LLVM实现iner&inter procedure analysis,const propagation,loop unrolling。学期末有competition,写出optimization最多的compiler的同学可以进老师的hall of fame。课程还在完善中所以后续可能会有变化。[/align][align="left"]
[/align][align="left"]EECS 432&433 Computer Vision&Statistical Pattern Recognition: Project组队一定一定一定不要全是男生!!![/align][align="left"]
[/align][align="left"]EECS 446 Kernel and Other Low-level Software Development:选了Peter Dinda的,systems方向的高级课程。每节课讲一个topic,当时还很菜经常听不懂。Project从Peter的list里选,quarter long。这门课是入坑research很好的机会,因为project基本上都和Peter的research有关。看不懂description没关系,想做什么和老师说老师会推荐几个。Peter还是适合讲高级课程,EECS 446 Kernel上完一片好评EECS 213 Computer Systems上完一片差评233333。[/align][align="left"]
[/align][align="left"]EECS 453 Parallel Architecture:旁听了Russ Joseph的,Russ讲得不错。前半学期涉及一些parallelism, cache coherent protocol之类的。后半学期没听,貌似是学生上去讲paper,最后有个project,去听的时候感觉应该是学生选题。[/align][align="left"]
[/align][align="left"]EECS 495 Database:相对EECS 339来说简单点。最后的project好像是写DB的APIs,比较耗时,但不难。[/align][align="left"]
[/align][align="left"]EECS 512 Parallelism Seminar:本来是parallelism group meeting,后来老板觉得开课个能稳定占教室就弄了个seminar。。。不算学分所以不用额外交学费,有兴趣欢迎来听。[/align]


补充内容 (2018-4-10 10:17):
在西北找实习经验的传送门:1point3acres.com

补充内容 (2018-4-23 16:23):
转CS申Ph.D的总结:1point3acres.com

补充内容 (2019-3-14 17:04):
Update: Northwestern EECS现在分成ECE与CS两个独立的department了。新的政策请以官网为准。
58条回复