Umich ECE专业 2021最新转码经验及课程介绍

avatar 458581
waatm
27260
73
Umich EECS学院分成CSE和ECE两个系,CSE就是CS 专业,ECE则偏向硬件、通信等其它方向。ECE Master学生想要转码,绕不开的就是选EECS本科的CS 相关课程,但填表、选择课程又相当繁琐。本贴主要讲讲ECE Master学生如何转码,有哪些课可以选的问题。转码课程主要集中于EECS 学院的本科课程,SI学院的也会稍作解释。400 level及以下是本科课程,400 level部分课程可以填表申请,获批后排队,排到你就能选上。500 level即研究生课程,没有选课限制。

EECS:
EECS的课程大多比较硬核,我个人觉得一学期选两门有些余裕,选三门就没什么时间刷题找工作了。本科的课程应用性比较强,也就是找工作比较有用,但选课有难度;master的课程其实就是为了给你找phd做准备的,所以workload又大,对于转码又帮助甚小。但在ECE ,转码的路也不算完全堵死,看你自己有多大动力了。Umich大部分课程用的都是C++,我之后不再赘述,除非我特别提及课程用到别的编程语言。

280 Programming and Intro Data Structures/ 281 Data Structures and Algorithms/ 370 Intro to Computer Organization
这三门都是低年级本科课程,肯定是选不了的, 但是都是CS的基础,所以非常重要,也是400 level课程的prerequisite,建议没有基础、有兴趣的同学自学完成。现在转为线上,课程都能Google到,也更方便了。
280:eecs280staff.github.io(需要umich学生账号登陆)
281:281的资料原来是严格把控的。线上教学后281会往Youtube上上传课程视频,可以自行搜索观看。281的project specs不太容易搜到,建议找认识的、正在上281或者上过的看能不能获得,每学期project都不一样,但project对应的知识技能都是一致的。另外281的有些lab也比较有价值,可以一并学习。281也是出了名的workload巨大,但上过了收获多多。
370:eecs370.github.io(需要umich学生账号登陆)主要介绍计算机组成原理的基本知识,学习后对于400 level某些课程很有帮助,比如482和483。

402:Computer Programming For Scientists and Engineers
针对非EECS学生开设的零基础C/C++编程课,ECE学生也能选,不用填表,但不算学分。主讲老师非常专业,条理清晰,从hello world开始涉及C++编程诸多内容,如constructor,pointer & dynamic allocation,operator overloading,templates等。对于编程小白可以迅速了解C++,比较推荐无基础同学上。课程项目对于零基础同学偏难,但完成后起码不怵C++编程了。个人觉得课程问题在于对于inheritance和polymorphism介绍较少,project也没有涉及,算是个遗憾,需要自学。(这部分在280中有详细讲解)。

477/586:Algorithms
这两门课我都几乎没有上过, 477需要填表,586不需要。这两门课讲的不是数据结构及算法,是分析具体算法的。我填过477的表但被拒绝了,听说也是偏理论的课程,虽说算法课在长期上肯定是有帮助的,但没这个机会不上也罢。586是Master课程自然随便选,但任课老师Quentin Stout是个奇葩的老头,说难听点就是“可以入土了”,讲课难以理解,课程内容混乱,我上了一周就退了,不推荐这门课。

482:Introduction to Operating Systems
可能是EECS本科workload最大的CS课程。虽然需要填表,但本人已经获批多次,不过因为个人原因还未上过。之前Peter Chen还没出事的时候由他一手管理选课事宜,如果你的成绩单有281和370课程名称相类似的课、或者证明自己学过281和370应该就可以获批,还是很有机会获批,也很值得上。
这门课会占据大量的时间,非常硬核难度也高。考试将会是3小时的现场coding。就是不知道Peter Chen走后课程质量会不会下降。

483:Compiler Designs/ 583 Advanced Compilers
483这好像是列表里唯一一门ECE Master学生不需要填表能直接选上的CSE本科课程。这门课相当于编译原理,对编译器前端、后端都进行了详尽的介绍,对于后端optimization也涉猎了一部分。
课程project沿用的是Stanford CS143的course project,编写一个Decaf语言的编译器,共有5个project。前两个会使用flex,bison,之后的project会用到大量inheritance和polymorphism函数,所以workload不小,对于C++的能力也有一定要求。
这门课很不错,有趣又有挑战性,问题在于课程花了大量时间和多个project介绍前端设计,但在业界编译器前端已经非常成熟,开发空间不大,而真正有需求的后端优化,这门课并没有深入介绍。所以对于想从事编译器相关的同学我强烈推荐上583,583介绍的就是编译器优化相关的内容。我没有时间上583了,但想必会很有帮助。

484:Database Management Systems
484介绍数据库相关的内容。需要填表,不过负责的Peter Honeyman教授老好人了,课虽然讲的稀碎,但我上的时候他把所有填表的人都放进来了,所以填了表是大概率能上的。
课程前半段非常实用,就是教学、训练你写SQL query。后半段主讲数据库理论,如crash recovery,optimization,storage等,比较抽象。4个课程project,前两个就是写SQL query,第三个是写Mondo db query,最后一个是用C++写grace hash join。课程难度不算大,项目难度中等,老师讲的不咋地,但也没有替代课程了。

485: Web Systems
485主讲网络应用开发。只面向本科生开放,没有填表机会。但485的课程资源,比如tutorial和project spec在疫情前就对全校学生开放(eecs485staff.github.io)。现在lecture也变成线上后相当于获得了全部资料,也就没有必要选课。建议转码同学不要看见选不了的课就放弃,像485给你全栈开发打基础的课程,所有资料一应俱全,选上了也是远程上网课,那没选上自学和选上了有什么区别呢?
课程项目难度偏难,个人觉得算很适合放简历上的那种了。5个课程项目中,前3个完成简易Instagram社交平台设计,后2个完成简易Google搜索引擎设计。Lecture讲的也不错,大头还是在写项目。注意项目是使用Python完成的,不是C++。

489:Computer Networks
489即计算机通信网络课程,系统介绍OSI模型每层协议,运行方式等诸多细节,需要填表,但很容易进,算是很大把握能选上的CS课程。课程有公开github.com,PPT、project specs等都能找到,可以自己先了解了解。
个人觉得workload不算大,前半程比较扎实,期中考试后上课就比较水了,4个project难度、码量也比较适中。具体内容都公开在Github repo里了。

491:Introduction to Distributed Systems
491本人没有上过,需要填表,prerequisite为482,但上过482应该就能进,好像是我听说唯一一个用Golang的课程。

500 level有一些和ML/CV相关的课程,但其实和转码也没什么关系了,比如505:Computational Data Science and Machine Learning,504:Foundations of Computer Vision, 545:Machine Learning。这类课基本没,或少有编程部分,都是用Jupyter notebook搞数学模型的。另外500 level也有一些和CS相关的课程,比如548:Information Visualizaiton,549 :Information Retrieval,但我没有上过,也不是和CS核心领域直接相关,就不推荐了。

SI:
之前也看到前人的帖子里有对SI学院CS相关课程的推荐。我也上过两门,个人感觉就是如果你是为了凑学分,减小workload花精力去找工作,又想选个和CS有关的课,那还是可以的,体感SI学院课的workload也就是EECS课的一半吧;如果你有很高的期望,或者有个具体目标,比如通过664学会Django,我觉得除了上课自己还得多多努力才有可能。另外SI学院的课也是要填表的,不过基本都能进。

506 Programming I
我本人没有上过这门课,但听说是从hello world开始教学Python的。如果你已经有一定Python基础,上这门课可能真的是毫无收获又浪费时间,不是很推荐。

507 Intermediate Programming
这门课承接SI506,使用Python进一步教学、训练编程技能。课程内容还是和web application development比较接近,会介绍比如如何使用web API,如何用beautiful soup做web scraping,Python如何调用数据库, 怎么用Flask(664用的是Django)等等。
课程平时有3 个小project和一些简单的homework,最后有一个由你自己决定内容的final project。Final project有具体要求,比如要从多个网站扒取数据,在数据库要创建多个表,数据来源也要不止一种等等。如果你的简历缺少项目,我个人觉得这个项目好好写也能登上你的简历。
我对507的感觉比664稍好,毕竟对于无基础同学有正经的lecture教学。难度和workload同样不大,凑学分还是很好用的。

664 Database Application Design
简单来说,这门课就是教你如何使用Django框架设计网络应用。课程内容和老师自己公开网站上的(dj4e.com)一模一样,每周的线上lecture就是介绍这周的module作业是什么内容,再回答些问题,因此我连lecture recording都一次没有看过。
转到线上后每周的作业就是几个module,不会的话每周花几个小时也能搞定。期中考试是写一个简单的web application,和sample midterm一模一样。Final不需要写代码,看code的功能给出答案就行,也比较简单。这门课可以申请自己写一个project代替final,如果你简历缺少项目,又有雄心壮志写一个比较复杂的Django项目的话是个不错的机会。
可能按我的描述这门课非常水,不过因为我上这门课前已经学过EECS485和484,对SQL,AJAX,Python,HTTP template都有经验,所以比较简单。但我觉得如果你想扎实掌握Django,还得靠自己多钻研。

最后总结一下:
疫情到来,其实对于Umich转码学生是个很大利好。Career fair和job interview都是远程的,onsite没有了,找工作要到处跑的劣势消失了。本地公司确实偏少,得通过自己多搜索,多投递来解决。
总结一下我觉得大概率能上的转码课:483,484,489,分别对应了比较重要的几块知识:编译原理,数据库,计算机网络。另外485我已经提及是完全开源的。当然转码的困难同样存在,比如缺少了两块知识,数据结构只能靠自己学281或其它学校的课程解决,操作系统上不了482就只能自学15213之类的课程解决。而且Umich确实不是U of leetcode,有专业课程和转码课程要学,学期里就很难再兼顾投简历和刷题。你若决心转码,如果有其它选课自由的名校可以去,Umich ECE可能确实不是最合适的选择,但也决不是转码非常困难的学校。
欢迎来Umich读ECE专业! Go Blue!

补充内容 (2022-04-04 10:27 +8:00):
最近又看了一下我的帖子,感觉有点biased,贴一个tl;dr:
如果你还没入学,想好了转码,建议去别的转码友好的学校,Umich一来学费昂贵没有性价比,二来转码有用的课有填表限制不一定选得上,三来你的必修课多半很硬核占据你的转码时间。
如果你已经入学ECE Master项目才想转码:如文中所言,有不少困难但是是有可行道路的。500+课程对转码都没什么大用,能选的400 level课程就选,选不了有很重要就自学。
73条回复