CMU JIE 选课心得(偏软件)

update:

  1. 2016-05-14,更新了转码套餐,专门针对从别的专业转向编程的同学进行推荐。
  2. 2018-01-23,更新了18660相关。

前言

我是中大卡内基梅隆联合工程学院第一届的一名学生,在此记录下自己选课的一些思考和对某些课程的评价,希望能对大家有所帮助(其实就是跑程序的时候没啥事干写着玩。)

特别提醒

这里我要特别说下我的观点,刷题不是一切。虽然刷题很重要,甚至某些公司的面试主要考的就是算法题,但是算法题充其量只是进入软件公司敲门砖一个比较大的部分(并不是全部,不说国内软件公司面试考很多操作系统,多线程,网络之类杂七杂八的东西,就是外国公司,也会问你简历上各种项目的细节,你总不能在简历上面全写你在刷题吧)。

另外,真正的软件公司工作中,也不可能全是算法,更多的是对现实问题的抽象理解和解决,以及更需要的是你平时良好的代码习惯(代码的可读性),如果你只会刷题,很可能应付公司日常工作都会很困难(对说的就是美国亚马逊)。


我对workload的评分是按照cloud computing五星来算的,仅做参考

基本原理

我们学院属于ECE department,关于ECE的毕业学分要求可以看 这里。简单来说就是总共修96学分,其中60学分的核心课程(来自ece学院18600以上或者cs学院15700以上),剩下36学分中,24分可以修其他学院的研究生课程,12学分可以修其他学院的本科课程。

按照我们项目的正常设定,在国内的一年每一个学期修1门cmu课,来到美国,每个学期3门cmu课,就可以毕业了。

注意事项

  1. 托福过了才能选cmu的课程(因为没过的话不会给你id选课)
  2. 在美国的每个学期都必须选至少三门课(这是政策规定的,因为必须保持在美国一年full time student)。
  3. 你修的所有课程总学分貌似不能超过120(不太确定超过了会怎样)
  4. 在JIE修的,中大老师教的课程有些是可以转学分当做ECE核心课程学分用的,转了学分就可以让你选课有更大的余地(可以好好地去别的学院带妹(划掉))
  5. 每个学期只能选一门完全online课,详情请咨询学院老师

课程介绍


入门算法课程

专门针对入门初学者,或者是从别的专业想要转cs专业的同学。这些课程都是难度不算大,也不需要太多理论基础(特指数学、统计等理论)。换句话说,如果这些课程(特别是08671+08722)你都不能独立完成的话,我认为你想要转入cs专业将会是一件比较困难的事情。

08-671 Java for Application Programmers

Java入门课,从Java基础语法一直讲到多线程、swing、异常处理。老师是Terry Lee,上课十分有趣,值得一上。上完这门课,你的java基础绝对能入门🤔。

08-722 Data Structures for Application Programmers

对应国内的数据结构与算法,全程使用Java。主要就是如何花式实现各种数据结构,linked list,array list,hash map,Binary Search Tree等,对于没有系统的上过数据结构的同学会很有帮助。

这门课就是一周一个作业加一个lab,还有一个quiz,事情比较多显得麻烦,而且作业里面会有很多corn case,interesting😯.

11-601 Coding Boot Camp

这门课基本上就是纯粹的刷题课,强迫刷题。老师讲的一般(甚至一般都不到)。但是因为这门课是cs学院的必修课之一,所以在这里你能认识不少cs学院的同学,也是一个选择。

95-771 Data Structures and Algorithms for Information Processing

来自亨氏学院的一门数据结构课,不过因为是亨氏学院的课,workload会显得稍低


chef recomendation

18-660 Numerical Methods for Engineering Design and Optimization

更新:这门课在18 spring换了老师,已经不再是水课,名字也改成了optimization,下面的介绍看看就好。

很多人都说这门课是水课,但其实只是给分比较松,学到的东西其实还是蛮有用的(如果你想继续在这个方面研究的话),workload不大

project算有点难度,但其实所有的步骤在ppt里面都会说到,就是实现起来会有各种坑,如果你不会怎么优化matlab代码的话,跑起来会相当慢(哪怕你在cmu的16核机子上面跑)。project里面涌到的东西大概有:__花式解线性方程组、用离散余弦变换做图像复原、实现svm分类器__等。

workload:★★☆☆☆ 推荐度:★★★★★

18-645 How to Write Fast Code

并不是教你怎么快速写代码

这门课就是学习怎么样优化你的代码(其实就是强行并行+程序局部性),使用到的技术主要是openmp,cuda,hadoop(cache blocking)。每学一个新技术就要你用这个新技术对程序做优化。hadoop那里是真的使用amazon云平台跑程序(每个小组100刀)。workload对有计算机基础和编程基础的同学来说不算大(对说的就是我)

这门课里面hadoop还算比较实用,openmp基本我用不到,cuda可能在某些研究领域会有用

workload:★★★☆☆ 推荐度:★★★★☆

18-640: Foundations of Computer Architecture

最好上过15213csapp再来

这门课主要是介绍cpu的原理,涉及到___流水线、超标量cpu、分支预测、为了保持并行cache一致性的协议___等。这门课也会使用到cache blocking 和cuda,和18645有一点重复。

并不推荐没有计算机基础的同学选这门课,因为上课真的就会像听天书那样(当然如果你找到大腿带你而且你也真的有毅力去学就当我没说过这话)

workload:★★★☆☆ 推荐度:★★★☆☆

15-513(15-213): Introduction to Computer Systems

神课
因为是研究生所以只能选15513(15213是这门课的本科版本,但其实全都一样)。是一门完全online课。两个考试七个lab没有作业。

简单的来说就是计算机组成原理+部分操作系统

神课,无法解释,推荐转专业来软件的同学选,就算你drop了也可以继续自学做Lab的。而且有好多课的前置都是15513,选他你绝不会吃亏

workload:★★★★☆ 推荐度:★★★★★

15-619 - Cloud Computing (Online)

神课 勇敢的少年啊快去创造奇迹

人如果没有梦想,那和咸鱼有什么区别

先提醒一下,team project最后不会给出正确答案,就是你做出来多少算多少,问ta或者老师他们都不会告诉你要怎么做才会有提高(除非你申请当TA),自己掂量吧。

神课之一,听说多年以前是水课,我最后一个学期选。

开始是个人作业,过了中段考就会有团队project(听说是hell难度)。一队3个人,这个学期同班有两个大神带着一位同学做project,把他们累得半死😊

今年这门课用了azure和aws,有自己写代码开虚拟机啦,写代码开auto scaling啦,写cache啦,mysql hbase啦,bash grep awk。以及各种主流数据库的简介使用。

这门课涉及的方面实在是太多了,对个人能力是真正的考验

workload:★★★★★ 推荐度:★★★★★

15-637 Web Application Development

听说你要当全栈工程师

下学期选,听说workload比cloud computing小但也小不到哪里去(我好方again)

想要学web的同学可以一试,注意有组队project。

workload:★★★★☆ 推荐度:★★★★☆

10-601B Machine Learning

靠做作业就能学

第一次碰到上课听不太懂,但是下课靠着做作业能学会的课

这门课主要是讲machine learning各种分类器的原理,感觉比较偏理论

期末team project是做个图像十分类

考试大坑,我要拿B了😭

workload:★★★★☆ 推荐度:★★★★☆

15-214 Principles of Software Construction

神课,内容神,workload也神。今年的授课教授是effective java的作者,强烈建议就算你没选这门课也要去旁听, 内容涉及各种设计模式,主要是教你(其实没怎么教)涉及好整个软件架构,我学到的最有用的就是“针对接口编程”。

workload和cloud computing接近,但是真的是好课
workload:★★★★★ 推荐度:★★★★☆