转cs项目犹他大学msd就读体验与详细介绍

avatar 392206
nerdlee
34291
73
我是犹他大学msd项目19fall的在读学生,通过本帖想向大家提供一些关于这个项目比较全面的信息。

Overview
犹他大学msd项目全称Master of Software Development, 属于school of computing, 这个一个面向本科非cs的,纯就业导向的硕士项目,项目从17年开始开设。从名称就可以看出毕业之后找sde是最对口的方向,课程也主要以system和软件开发为主(下文会详细介绍)。犹他大学在美国大学排名大概在60-150左右,在国内知名度很低,在美国也不是名校,但是cs ranking排名大概是40多名左右,而且在计算机图形领域算是在全美排名很靠前的,所以utah cs在工业界还是有一定的reputation。所以如果是想要在美国拿一个好的大学的硕士学历然后回国,犹他大学可能不是一个很好的选择,但是如果是想要在美国转cs找到一份工业界的工作,我觉得还是有一定考虑的价值。另外这个项目因为是纯就业导向的,所以没有科研机会(当然也可以自己去联系教授做ra,但是几乎全体学生的目标都是找工作,而且都是转专业的,所以目前没有听说去跟教授做研究的),课程也偏向于速成与实用,对于之后想要读phd的同学来说,这个项目可能不能提供足够的training。
课程情况
这个项目一共4个学期,暑假那个学期也算一个上课的学期,所以时间线是8月fall入学,第二年12月毕业。每个学期的课程都是固定的,自己没有选择的自由。课程都安排在早上,8:30开始,可能需要早起。而且大家所有课都是在同一个教室上,所以类似于中学班级上课的模式。每个学期的课介绍如下:

第一学期:
一共三门课,模式是每门课上5个星期,然后一门课上完上下一门课,所以这学期每隔三周就有一次考试。由于这学期的目标是快速入门编程,所以每天几乎都有作业,对于有编程基础的同学还是不太难,但是对于之前没有接触过编程的同学,还是有一定的挑战
第一门课:Introduction to Software Development :主要是学习c++,入门编程,每天的作业基本就是练习当天所讲的内容,没有太多好说的。课程project是用c++写一个有用户界面的小游戏,例如贪吃蛇,俄罗斯方块之类的
第二门课:Computer Programming: 前两三周是学习java和面向对象编程的基础,然后会用javaFX写一个具有用户界面的声波合成小软件,主要是练习和巩固oop. 之后是学习java网络编程以及html,css,js前端的一些东西,最后的project是要写一个聊天软件,包含一个multithreaded server(用java写而非框架)和前端的东西,然后会让你另外再写一个与之对应的android聊天软件,并且要部署到azure上面。
第三门课:Data Structures and Algorithms: 用java,没啥好说的。不过个人觉得这门课讲的不太全,比如dynamic programming和union find算法都没讲。个人建立来美国之前先自学ucb cs61b或者普林的那门算法课。

第二学期:
一共三门课,从这学期开始就是正常的所有课并行上的模式。
Systems 1 (Computer Arch + Operating Systems):把cpu架构和操作系统糅合到一起的课。不会学的太细,但是重要的东西基本都涵盖了,作业设计也都挺基础。至于深入学习assembly,unix shell和concurrency这些的,可能还需要自己下去钻研。不过个人觉得对于sde而言是一个不错的os introduction。
Systems 2 (Computer Networks + Security): 前5周计算机网络,5-10周讲密码学基础和network security,后5周讲computer security。都只是比较粗浅的把网络和安全领域的重要的内容讲过,但是作业比较有用,比如一个是用java写一个dns server, 一个是写一个简化版的TLS protocol。根据已经工作的学长学姐反馈,这门课教的东西虽然不算深,但是都蛮实用的,在工作中都会碰到,尤其是网络的部分,好好听好好学,配合教材看,收获还是蛮大的
Software Engineering: 这门课涉及到软件开发的测试,design pattern,documentation这些东西。课程project是从一开始做到课程结束,不断更新,内容是在c++的基础上开发一个command line tool,可以evaluate用户输入的计算表达式和一些更高级的内容,有点像开发一个简易般的“编程语言”。做这个项目的过程,会巩固oop,编程语言基础,garbage collector,pointer,以及应用内存的知识,跟下来收获还是挺大的,特别是对于编程语言有一进一步的认知。ps.教授这门课的老师是matthew flatt是racket编程语言的主要开发者之一,所以这门课的设计目标可能也是让我们对编程语言的开发过程有个浅显的了解。

第三学期(暑期学期)
一共两门课。
Database Systems and Applications: 因为我还没有上,所以无法详细的作出介绍,主要是数据库的基础知识
Data Analytics and Visualization: 用python进行数据分析的课程,会设计到基础的库,数据可视化以及ml知识

第四学期:
Application System Design:讲系统设计的课程,但是根据学长学姐反馈,和面试中会碰到的系统设计还是有一定的差异。内容包含mvc,mvvm, singleton这些东西,可能偏design pattern之类的。
Master of Software Development Project:这门课是做一个capstone project。可以自己做,可以和其他同学组队做,也有机会和犹他当地企业合作做(类似于做个实习项目?)。不过和企业合作做项目的机会不能保证有,所以得做好自己做一个toy project 的准备。但是课程负责人说,他们现在在考虑把这门课改成一门”实习课“,也就说有可能会让学生去企业做part-time实习,然后用实习的东西作为这门课的考核依据。但是现在没有一个准确的消息,后续有的话会在这个帖子里面更新。
本帖隐藏内容需要登录后才能查看。

总结
关于其他的项目介绍在官网上面都有 msd.utah.edu ,包括老师,学费这些。我觉得这个项目就转码学知识的角度来说还是适合的(不过个人觉得少了讲分布式和云计算的课,所以学有余力的话建议再上上分布式和云计算的相关网课,比如mit的分布式,uiuc在cousera上面的云计算),就找工作的来讲的话,比不上neu align,usc 37,宾大这些转码项目的就业资源,这确实是比较客观的评价,但是找工作的这件事最终还是看自己以及看运气。希望我提供的信息能够对地里的朋友有所帮助,也希望疫情早点结束:)
  • 145
73条回复