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.
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 (4.3 / 5): ★★★★☆
Lecture Rating (4.3 / 5): ★★★★☆
Difficulty (3.6 / 5):
Workload: 16 hours/week
Pros:
1. Exposure to a broad range of topics in ML
2. A few theoretical ML topics are covered (PAC-Learning)
3. Exams that challenge your understanding of the material
Cons:
1. Unevenness of homework difficulty/effort
2. Overly simple assignments in the 2nd half of the course
3. The course does not dive as deeply into the material as compared to other ML courses from top programs
Detailed Review:
This course will take you from a beginner-intermediate level of understanding in ML to an intermediate-advanced level. I would say a prerequisite is to already have an understanding of basic concepts in machine learning in order to get the most out of this course. In other words, I don't think it would serve as the best intro course into ML since a level of mathematical maturity is assumed and are very much required for the first few homeworks. The first two homeworks serve as weed-out assignments and are much, much more time consuming than the rest of the assignments in the course. Programming assignments are generally easier and help you develop a better understanding through implementations, however they do not ask you to go very deep in the material.
Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (4.3 / 5): ★★★★☆
Lecture Rating (3.6 / 5): ★★★★☆
Difficulty (4.3 / 5):
Workload: 20 hours/week
Pros:
1. Very interesting class - you'll learn a lot
2. Fun (but challenging) assignments
3. Good instructors and TAs
4. Local grader!
Cons:
1. Frustrating problems setting up PyTuxKart racing game
2. Handling of final project left much to be desired
3. Sometimes poor instructions for HW assignments
Detailed Review:
I really enjoyed this class. I liked the way it was structured and built on each homework assignment. That being said, the first 2 HW assignments were quite straightforward and then HW3 just about killed everyone. Then the next 2 built so heavily on HW3 they were a cakewalk.
The TAs were very helpful on Piazza, but I feel like office hours were not utilized enough. It's called an office HOUR and each session only lasted 30 minutes, so not everyone was able to get their questions answered each time. Piazza was swamped with students asking the same thing in different ways 20x for each assignment. I also think some of this could have been mitigated by clearer instructions for each homework.
The local grader was probably the best thing about this class and saved me a lot of time trying to figure out how the starter code worked. Discrepancies between the local grader and the Canvas grader were annoying, but not a deal breaker or grade destroyer.
The final project was the weakest part of the class. I thought the idea of it was really great, really fun, but the grader was obviously not designed to handle 70+ final projects from 200+ students. That created a lot of frustration when trying to submit our work early for results and feedback. The final project was also WAY more time consuming than originally advertised. It was supposed to be twice as long as the hardest assignment. The teams were also "strongly suggested" but should really have been required. I can't imaging completing that project on my own or even with a pair. I was in a group of 4 and we worked around the clock for about 2 weeks to finish the project. I lost a lot of sleep. We got it to work at the last mock tournament by some stroke of luck.
Last thing - don't take this over the summer if you value your sanity.