Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (4.3 / 5): ★★★★☆
Lecture Rating (4.3 / 5): ★★★★☆
Difficulty (2.9 / 5):
Workload: 12 hours/week
Pros:
1. Fun projects using relevant technologies (Python, PyTorch, Colab)
2. Broad coverage of topics meant a lot was covered without too much prerequisite knowledge required (math = basic probability, matrix multiplication, and taking a derivative is all you need. programming = basic python, see note about pytorch below)
3. (Most) of the TAs were very helpful
Cons:
1. Parts of homeworks end up as time-consuming trial-and-error hyperparameter tuning that can take hours to finish. Not too difficult to get a high grade though.
2. Final project much more time-consuming (at least 2-3x, probably more) than the rest of the homeworks
Detailed Review:
Highly recommend this course, it was a well put together and interesting hands-on exploration of Deep Learning. I would also recommend taking the time to go through the basic tutorials provided by PyTorch, with a couple hours of investment will make the HWs a lot easier. Anything outside the basics is covered well enough in the lectures.
Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (1.4 / 5): ★☆☆☆☆
Lecture Rating (5 / 5): ★★★★★
Difficulty (2.9 / 5):
Workload: 10 hours/week
Pros:
1. You will learn a lot about how fundamental computational linear algebra algorithms work
2. Excellent material coverage in lectures and book
3. Take-home exams second exam and final with plenty of time to complete
Cons:
1. First exam was stressful and a time crunch
2. Class was way too big for the number of TAs
3. Professor was almost completely absent
Detailed Review:
The professor honestly may as well not have existed. Maybe there was something he did behind the scenes, but even there it seems like the TA Jeffrey Cochran ran the show. The lectures were 100% just the lectures from when this course was taught by the previous professors, and I doubt anything at all was changed.
The TAs were mostly absent except Jeff, without whom this course would have been impossible to complete. He provided just about all clarification for the course and personally answered a truly impressive number of posts given how large this class was. I thought he did a great job.
This course seriously suffered due to the size of the class. Grades took a woefully long time to receive, if ever. We never even got a grade for the final, and we didn't receive grades for homework from the first half of the course until the last week of class. I wouldn't say this is a fault of the staff for the course, I think they were just overwhelmed by the number of students.
The first exam was stressful with a lot of material covered, pure theory/proofs, and initially closed book and closed notes. The professor did ultimately permit us to use handwritten notes during the exam. The exam was also proctored, which I never appreciate out of principle. The grading was quite generous, however.
The second exam was take-home and was mostly implementation based. I think you would have to really drop the ball to not complete it in the time given, which was just over a week. The questions were also formatted such that it was very easy to know if you got the answer right.
We were given a whopping 1 month to complete the final, and it was no more difficult than exam 2.
Most implementations are in MATLAB and you barely scratch the surface of MATLAB for the assignments/exams. I do not think MATLAB is a difficult language to pick up, especially if you have ever worked with Python (particularly numpy and matplotlib). I would not be worried if you have no experience with MATLAB for this course.
This was a good class by and large mostly thanks to the previous professors' efforts and Jeff. I recommend taking this course prior to delving into the ML or AI based courses in the curriculum, if for no other reason than to brush up on your math skills and linear algebra vocabulary and concepts.
--- BE WARNED ---
The first week was an absolute nightmare. I spent an ungodly amount of time (over 30 hours, easily) on the massive amount of material and homework problems, and was pretty sure I was going to have to drop due to the time commitment along. Unfortunately, you really shouldn't skip any of the homework problems in the book either, because they build on each other and many contained knowledge required for the first exam. However, if you get through this first week, no subsequent week even reaches the 50% mark of time required compared to this first week. Some (several) weeks I spent less then 5 hours on total.
Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (5 / 5): ★★★★★
Lecture Rating (5 / 5): ★★★★★
Difficulty (3.6 / 5):
Workload: 20 hours/week
Pros:
1. Fun but challenging homeworks
2. Awesome lecture content
3. Learned a lot of practical stuff
Cons:
1. High bar to get an A
2. Not enough time for final project
3. Final is a group project.
Detailed Review:
Overall this was a good course. I was challenged, learned a lot, and got inspired by the content. It is definitely possible to get a very high score on the homeworks if you put in the hours.
The final project is very open ended and challenging. The lack of guidance and time constraint sucked a lot of the fun out of it, and made it stressful.
The team aspect can be hit or miss. In our case, one teammate did absolutely nothing which was frustrating, but is what it is.
This is a great intro to deep learning, and you will gain some practical skills, but I feel like it is just scratching the surface. To get a really deep understanding of many of the topics covered I think will require a lot more time.
Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (3.6 / 5): ★★★★☆
Lecture Rating (4.3 / 5): ★★★★☆
Difficulty (4.3 / 5):
Workload: 8.5 hours/week
Pros:
1. Great lectures: clear and easy to follow
2. Projects have good test cases to verify correctness against
3. The course load has been adjusted from previous iterations
Cons:
1. Some of the lectures come before they are necessary in terms of the projects
2. Lectures are quite high level theory in contrast to actual implementation of projects or the problem sets
3. Midterm and final were difficult and seem to go beyond what lectures provided
Detailed Review:
I took the summer version of this, which is only 10 weeks instead of the standard 16. I wonder if the normal semester-long version might be more difficult or have additional topics. Project 1 is straight-forward and fun. Project 2 felt like being thrown in the deep-end of the swimming pool after only having some time wading around in the shallow-end. As others have mentioned, definitely implement an AST for this portion. I find the theory parts of this class boring. It was a drag to get through the lectures even with them being clear and easy to follow. Be careful with Project 3 - the implementation lectures mislead and required clarification on Piazza.
If you're wondering how to budget time, this was my breakdown per week:
- W0: 6.25 hours [3 hours (lectures); 3.25 hours (PS1)]
- W1: 6.5 hours [2.75 hours (lectures); 1 hour (PS1); 1.25 hours (PS2); 1.5 hours (project1)]
- W2: 6.25 hours [3.5 hours (project1); 1.5 hours (lectures); 1.25 hours (PS3)]
- W3: 16.75 hours [2 hours (lectures); 2.5 hours (PS4); 12.25 hours (project2)]
- W4: 11.25 hours (project2)
- W5: 7.75 hours [0.5 hours (PS3/PS4); 1.5 hours (OH); 2.75 hours (midterm prep); 3 hours (midterm)]
- W6: 6.75 hours [2.25 hours (W6 lectures); 4.5 hours (W8 lectures)]
- W7: 0 hours
- W8: 2.75 hours [1 hour (lecture); 1.75 hours (project3)]
- W9: 18.5 hours [13 hours (project 3); 1.25 hours (PS6); 1 hour (PS7); 3.25 hours (W9 lectures)]
- W10: 3 hours [0.75 hours (final prep); 2.25 hours (final)]
Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (4.3 / 5): ★★★★☆
Lecture Rating (3.6 / 5): ★★★★☆
Difficulty (4.3 / 5):
Workload: 23 hours/week
Pros:
1. Deep dive into how algorithms work.
2. TAs are very responsive and high community engagement on Piazza for troubleshooting.
3. Challenging but will push your programming knowledge
Cons:
1. Lectures are more so theoretical and less practical. Math side can be overwhelming.
2. Quizzes and assessment questions can be highly technical and specific.
3. High volume of material to master for exams.
Detailed Review:
This course is a challenge, but it will make you a better programmer. It helps you understanding the logic and efficiency behind the code. If you enjoy the "why" behind the code, you'll find this really rewarding, even if the workload is high.
The first half focuses heavily on trees. You’ll spend a lot of time on AVL and Red-Black trees, specifically looking at how they balance themselves and their "worst-case" heights. It’s a lot of theory to wrap your head around, so don’t fall behind on those early modules. Once you move into graphs, the pace picks up significantly.
Piazza was a lifesaver for me. Because the assignments and quizzes are so technical, someone has almost always asked the exact question you’re stuck on. The TAs are great at pointing you in the right direction without just giving away the answer. Go to office hours and find the TA that explains things in a way that works for you.
Overall, it’s a rewarding course if you enjoy the mathematical and theoretical side of computer science, but be prepared to put in the hours to really learn the concepts. One thing I would have liked is to have more coverage on application applications rather than just the theory.
Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (5 / 5): ★★★★★
Lecture Rating (5 / 5): ★★★★★
Difficulty (1.4 / 5):
Workload: 10 hours/week
Pros:
1. No exam
2. Lectures and slides are well explained and organized
3. A pretty easy course in general
Cons:
1. Part of the grade depends on Piazza participation
2.
3.
Detailed Review:
Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (4.3 / 5): ★★★★☆
Lecture Rating (3.6 / 5): ★★★★☆
Difficulty (1.4 / 5):
Workload: 5 hours/week
Pros:
1. Limited workload allowed managing busy life and work
2. TAs and Prof were responsive
3. Final project was team based
Cons:
1. FCs are due each week
2. Video lectures are useless outside of FCs/HWs
3. A particular FC required us to share our Google API key in plaintext
Detailed Review:
I liked this course and after being 5 years in this field I can say this is the closest you will be to an SDE experience at MSCSO. You can take this course to gauge if you will like it or not.
The course itself was easy and manageable, and the frequent deadlines were easy to manage especially if you work with somebody else. Prof Emmett is the coolest Prof in this program and has a personality, and frequently answers questions on ed discussions, which is something I have not seen any other prof do.
My only gripe is that this course felt a bit too underwhelming to be a part of the master program (on campus version is offered to undergrads).
Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (2.9 / 5): ★★★☆☆
Lecture Rating (2.1 / 5): ★★☆☆☆
Difficulty (2.9 / 5):
Workload: 15 hours/week
Pros:
1. generous grading
2. interesting and useful assignments
3. some lectures are interesting
Cons:
1. not so useful textbooks
2. the lectures and assignments diverge after lab 2
3. heavier workloads
Detailed Review:
The assignments can be fun and useful to do. but they started to be not so relevant to the lectures in the latter half of the term. The grading is generous, I think people get 100s as long as they try to do a decent job. Overall worth the time.
Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (5 / 5): ★★★★★
Lecture Rating (5 / 5): ★★★★★
Difficulty (2.9 / 5):
Workload: 7.5 hours/week
Pros:
1. Very well organized and administered course
2. Optional problem sets help understand material
3. Professor is really interested and passionate about the material which comes across in the high quality of the lectures
Cons:
1. Occasional mistakes in lecture slides
2. Assignments can be a grind
3.
Detailed Review:
Breakdown of time: (HH:MM)
Assignment 0: Setup 0:36
Assignment 1: SaM string library 7:21
Assignment 2: LiveOak 2 40:32
Assignment 3: LiveOak 3 21:41
Final Exam 2:01
Final Review 3:02
Lectures 15:26
Midterm 2:15
Midterm Review 4:48
Problem Set 1 0:57
Problem Set 2 0:40
Problem Set 3 1:00
Problem Set 4 0:49
Problem Set 6 0:46
Problem Set 7 0:27
Problem Set 8 0:11
Problem Set 9 0:25
Total 103:02
Note: I paired this course along with Android Programming.
This was an excellent course from start to finish. The professor is clearly very knowledgeable and passionate about the subject and also cares deeply about providing clear, cohesive lectures. This was one of the most well-organized courses I've taken to date.
The lecture content is generally pretty interested and is supplemented with optional problem sets to help reinforce concepts. you can submit the optional problem sets if you want, and there is some potential benefit to your final grade if you choose to do so. It is unclear and undefined what that benefit it, so I mostly just reviewed the problem set solutions when they were released. The exams are fair and mostly aligned with the lecture material. It definitely helps to have some prior systems background (like AOS) before taking this course.
The assignments are something. The first one is fun and easy and gets you familiar with the SAM instruction set and architecture. The second assignment is a massive undertaking where you build out a compiler for LiveOak0,1&2 language features. The 3rd assignment extends your code from assignment 2 and you build out LiveOak3 language features. The assignments build off of each other which is really cool because you're working in the same code base for the whole semester. It's also scary though because there is no solution released, so if you get stuck on assignment 2, you're not going to have much fun doing assignment 3. The projects are HUGE. You have a lot of time to complete them. DO NOT procrastinate and start them late. Also keep in mind that because they build off of each other, it makes sense to think about keeping your code extensible as you're working on the earlier assignments.
The course could be a grind at times, but overall it was really solid.
Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (2.9 / 5): ★★★☆☆
Lecture Rating (2.9 / 5): ★★★☆☆
Difficulty (2.1 / 5):
Workload: 10 hours/week
Pros:
1. Learned a metric ton about parallel systems that I have already applied many times over
2. Excellent exposure to several languages I otherwise would likely never have used
3. Top-notch projects which really drive home concepts
Cons:
1. Learned little from the lectures
2. Lost interest in the second half of the course
3. Second project was really time consuming (but it was fair)
Detailed Review:
The first half of the course, I learned a really impressive amount of parallel systems. For the wealth of applicable material you can learn from this course alone, I recommend this course. Most of this knowledge was gained by working with the projects and Piazza, I honestly think I could have gotten by without ever watching the lectures.
The professors were fine, although completely absent on Piazza. The lectures weren't bad, I just found them unnecessary. The book they tell you to get is just a plug for one of the professors, who is one of the authors. I think I opened it once for like 30 minutes. In their defense, they never outright claim it is required for the course.
The second project was an absolute BEAST. Probably the number one thing I wanted to learn was what it means to "use the GPU" and boy does the second project teach you that by trial by fire. There is no sugar coating on this, on day one we were warned this project will be really hard and long, and we had plenty of time to work it. Just do NOT procrastinate. You will not finish it if you do not get started early. I found this project to be the best part of the course because I thought it had the best time invested to information learned ratio.
All the projects focused on different languages, which I thought was really cool and novel. Coming out of Advanced OS and SIMPL it was really cool to see parallelism embodied in all these various languages. Practically speaking, this course really has revolutionized how I write code on the day-to-day by picking on various tips and tricks by just exposing myself to these new languages.
There were no exams, only projects which were graded generously. Just put the work in (i.e. even put an real attempt in to complete the projects) and you will do very well in this course.
Probably the only major downside is I really lost interest in this course by the second half, and didn't watch most of the lectures (at least, not seriously). I had already learned most of what I personally was interested in learning. This is mostly on me, though, because the whole course is pretty self-motivated, not just the second half.