Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (4.3 / 5): ★★★★☆
Lecture Rating (3.6 / 5): ★★★★☆
Difficulty (1.4 / 5):
Workload: 8 hours/week
Pros:
1. You will end up learning a lot and gaining some new skills. You will need some of this course to pass most job interviews.
2. Tons of help is available, office hours and Piazza support were plentiful
3. You will get good at testing your code
Cons:
1. Lectures felt a little disjointed at times, but they are pretty engaging to watch.
2. Opaque grading makes it hard to know how exactly you messed up
3. Pretty limited starter code or pseudo-code
4. Textbook examples are in Java
Detailed Review:
# My background
My background is that I studied aerospace engineering in undergrad and took Java CS classes in high school. I've also been using Python at work for a few years now, mostly for analysis and data engineering. I also took one CS class that was in Java during undergrad, along with a few MATLAB scripting classes.
# This semester's changes
Before taking this course I had heard about the previous iterations being rough around the edges. I believe a lot of the problems with this course were addressed such as how now the development environment is pretty simple to set up (don't need to fuss with linux or anything like that), submitting your code is through github and canvas. Only one package is needed (pytest).
A lot of TA office hours were available this semester, more than any other class I've taken. I'm pretty sure no matter the work schedule or time zone you are in you could find some office hour to attend within a couple of days.
Not sure if this was the case in the past, but you get up to six "slip-days" where you can submit your code late.
# Preparation
It's hard for me (or anyone) to give a non-biased review of this course. It is very much "your mileage may vary" and the syllabus says just as much. If you are familiar with tackling programming problems, especially with Python, then you can probably do the assignments without breaking much of a sweat. This is pretty close to where I am.
On the other hand, if you have never used Python or a similar object-oriented language before and have never heard of programming concepts like recursion, classes, methods, or loops then this course could be a complete black hole sink of time. Dr. Lin goes over these concepts during lectures, but it is so high-level that should be treated as review.
I think people who get real lost in this course get confused that learning Python is the same thing as learning problem solving. You need to enhance both of these skills at the same time in order to do the assignments. There is no magic built-function in Python that will solve any of these assignments in a few lines of code.
So, if you are trying to prepare for this course, I'd make sure you can do some pretty basic coding challenges to enhance your problem solving skillset and make sure you brush up on Python so you can enhance that skillset. If you feel good on these, then you should be on the right track to do well in the course.
Some ideas:
Coding Bat: https://codingbat.com/python
Advent of code is fun, too: https://adventofcode.com/
Also, I'd mess around a little on Pytest if you have the time.
# Warning on group work
They allowed for group work on the first three assignments, that can be helpful but also a crutch at the same time. The first 3 assignment were worth only 21% of my final grade, while the last 3 were worth 49%. If you are copying your teammates code in the the first three you will be real lost on the individual assignments. I'd treat it as a way to bounce ideas of teammates and create test cases, not as a place to learn how to code or problem solve.
# Grading and test cases
You are graded by an autograder that will run a series of test cases of which only a small subset are provided to you. The rest remain inside a black box and you will only know if you passed or failed these after the submission window. This is done to encourage you to create your own test cases and to think about edge cases where your implementation may fail.
I think this idea was on the right track, but the autograder feedback does not provide a ton of detail. You'll get a timed out error but have no idea that was a requirement, or really have any way to know how to test for that. The autograder doesn't give you accurate enough feedback to go back and fix what was broken, even if you wanted to. Also, because of the long submission window due to the six slip days, you won't get your grade until it's about time to submit the next assignment.
# Conclusion
I think this course is pretty decent and has definitely improved my coding and understanding of data structures. I don't know what the grade distribution will be like, but I doubt many will fail this course. I'm sure many more dropped it.
Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (5 / 5): ★★★★★
Lecture Rating (5 / 5): ★★★★★
Difficulty (3.6 / 5):
Workload: 20 hours/week
Pros:
1. lecture covers a lot of cut-edged ML technologies
2. hands on project applied what you have learned
3. fair work load even you don't have professional background
Cons:
1. fast paced learning
2. not easy exam
3. MATH MATH and MATH
Detailed Review:
it is a good course for you to get into ML area even though you don't have much ML experience. Heavy math in the later part of lecture, need to understand it to have a good performance in final. You need to really understand the concept of algorithms and will be tested on it. TAs are excellent, they will be very helpful to explain the algorithms.
Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (4.3 / 5): ★★★★☆
Lecture Rating (3.6 / 5): ★★★★☆
Difficulty (2.9 / 5):
Workload: 10 hours/week
Pros:
1. Excellent range of topics, explained in a detailed and easy-to-digest fashion
2. Implementation-heavy course, hands-on work with C & kernel development
3. Exams are reasonable and high-level.
Cons:
1. VM setup can be very tricky without a guide from TA's
2. Grading is very slow, and not automatic.
3. Advanced topics are very high level, sometimes difficult to comprehend without hands-on experience.
Detailed Review:
Excellent course, I really enjoyed it and felt that I learned a lot. Time commitment and projects were reasonable. Exams were short answer with no invasive proctoring software. I highly recommend this course.
Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (5 / 5): ★★★★★
Lecture Rating (5 / 5): ★★★★★
Difficulty (0.7 / 5):
Workload: 3 hours/week
Pros:
1. Course material is well put together and taught effectively
2. Expectations for all aspects of the course clearly defined
3. Instructors and TAs are very responsive and knowledgeable
Cons:
1. Peer grading is used with a very lenient rubric
2. The participation component of the grade made Piazza difficult to use
Detailed Review:
This course is very well put together and likely one of the easiest in the program.
Every week, lecture videos on two topics taking about an hour each to watch are posted. The lectures always start with a conceptual overview followed by a practical application of the topic in R. Almost every topic is accompanied by an interactive worksheet, which provides an opportunity to work hands-on with R and explore the concepts more if you would like.
There are 5 homeworks and 5 projects in this class. Homeworks are essentially completion grades and very low stakes taking less than an hour to complete. Projects are short reports focused on a dataset and a question about that dataset. The format and rubric for the projects remains the same throughout the semester, though projects get more open ended later in the course. Example projects and sample solutions for earlier projects are provided such that the expectations for content are very clear.
Outside of the homeworks and projects, a small percentage of the grade is from contributing in any form on Piazza. It appears they lowered the minimum requirement from previous semesters, but I still felt that people were posting/commenting just for the sake of the participation credit which heavily cluttered the Piazza feed. However, the TAs and instructor were very responsive on Piazza and tried to answer questions to the best of their abilities.
A controversial aspect of this class is the peer grading, which is used for all assignments, but I felt that the peer grading system is fine as is. The rubrics are broad and lenient enough such that you can get a good grade with minimal effort. Your grade is the median of three peer's opinions, combatting against potentially unfair peer grading. I never had an issue with peer grading, but I assume the course staff is responsive and open to handling grading disputes. Peer feedback is encouraged but not required, so self-reflection on your work compared to the provided solutions is likely your best bet for improvement. I assume the course staff are also open to giving feedback on assignments if you feel you need more.
Overall, this class is a solid introduction to data visualization and Wilke's lectures will help give you a great foundation for thinking about what makes visualizations more or less effective in conveying their information. He provides a simple start to many different aspects of R, but it is up to you to expand more on the content since the assignments closely followed the lectures and worksheets and don't really challenge you to try harder if you don't want to. Regardless, this class sets you up for success in data visualization, a key component of this field.
Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (4.3 / 5): ★★★★☆
Lecture Rating (3.6 / 5): ★★★★☆
Difficulty (3.6 / 5):
Workload: 5.7 hours/week
Pros:
1. Great build up of material throughout the course
2. Feels very updated and in touch with modern RL
3. Class material is top notch for understanding RL
Cons:
1. Last part of the class gets dense and complex
2. Tedious, manual calculations
3. Wished for more experience
Detailed Review
Pros:
1. Before I started this class, Reinforcement learning was just a vague idea in my mind. I didn’t know what is referred to or how it was implemented. But Professors Stone and Niekum (and the textbook) do a great job of building your understanding from scratch. They start from simple ideas and slowly build upon your understanding over time. They also do a good job of framing the course so you don’t ever feel like you’re just learning new material for the sake of learning new material. It’s all cohesive and flows smoothly.
2. The professors do a good job of making this class feel up to date and providing modern commentary. For example, the professors had a live Q&A session near the end of the course where they answered any questions we had about RL. They also added commentary when the textbook was “out of touch” or didn’t provide enough detail. And they gave a good framing of future concepts that are a focus of the most modern RL research.
3. Lastly, the class material was very engaging. The whole course is a flipped classroom where you read the chapters and watch professor commentary videos intermixed between the book sections. The commentary videos usually consisted of re-affirming important topics or giving numerical examples. Since the textbook is very straightforward and the professors are in touch with modern RL, I found both types of learning valuable and enjoyed the format of the course.
Cons:
1. As I mentioned, the build up of this class over time is one of its strengths, but the very end of the course (especially the last lecture, Chapter 13) kind of drags on. The concepts are a bit dense and it add a whole new layer of complexity (although it is related in some ways). I feel like you hit the climax of the course RL right around Chapter 12, and I feel the course should have ended there. The information in Chapter 13 is interesting, but it would be more beneficial in a part 2 of this course.
2. This con comes from the fact that RL is built upon an iterative, complex learning scheme. In RL, learning “agents” encounter experience and constantly perform calculations to update their perspective on their environments. The science behind this is truly fascinating, but the calculations can be tedious, especially when you do them by hand for the application homeworks. Thankfully, the HW’s have unlimited attempts, but it can be hard to get the calculations correct, especially on later homeworks.
3. This course has a lot of great theory and some interesting homework assignments to implement the theory, but, I’m left wishing there would have been more active application. For example, I would have loved a final project where we have a new scenario and need to come up with our own agent to solve it. Something like that would have been a fun and creative way to apply all we’ve learned. This could even have been in place of Chapter 13 at the end of the course or could have been baked into the course. But, either way, at the end of the courseI still feel like I’m missing a personal connection with RL.
Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (3.6 / 5): ★★★★☆
Lecture Rating (3.6 / 5): ★★★★☆
Difficulty (3.6 / 5):
Workload: 12 hours/week
This course was mostly the same material you would see in an undergrad level Algos course with some more advanced topics and a little more in depth on certain proofs or complex data structures. The problem sets were similar problem difficulty to an undergrad Algos class, but maybe with a little more critical thinking involved. For me this was the part that made it time consuming. If you like sitting there with a whiteboard and figuring out edge cases and small sample algo problems trying to break your methodology then this is a great course for that. It also reinforces some of the problem solving techniques you might see in coding interviews at the beginning of the course. The later part of the course is a little beyond what you would typically see in a coding interview.
Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (5 / 5): ★★★★★
Lecture Rating (4.3 / 5): ★★★★☆
Difficulty (3.6 / 5):
Workload: 15 hours/week
Pros:
1. Great professor, knows what he's talking about
2. Low/Medium workload
3. Very lenient grading
Cons:
1. The lectures for the most part are unrelated to the projects
2. Steep learning curve with xv6
Detailed Review:
In my opinion, this is a great first course.
The professor is great and the TAs were reasonably helpful. The setup for the assignments was a little painful and there was some confusion around which Ubuntu version would be used for grading.
It takes some time to understand the xv6 codebase but after that, the assignments themselves are not the most challenging things.
The mid term exam was not easy, there were questions which tested the understanding of fundamental concepts like paging however grading was very lenient.
The final exam was very easy.
Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (3.6 / 5): ★★★★☆
Lecture Rating (3.6 / 5): ★★★★☆
Difficulty (3.6 / 5):
Workload: 15 hours/week
Pros:
1. Homework nicely complement the lectures. Doing the homework greatly improved my understanding of the topic.
2. Some exposure to Bayesian statistics.
3. A deep dive into regression will help you become a more well-rounded data scientist.
Cons:
1. No textbook to refer to -- you'll have to go just off the slides and lectures. The instructor says the course is "self-contained" but it really isn't.
2. The example code is just plain bad -- no comments, non descriptive variable names, etc.
Detailed Review:
I enjoyed this course and I now have a greater appreciation for how deep a topic regression really is. There was a good mix of theory (although there weren't any proofs per se, the mathematics was very much a central theme throughout the course) and application (you will implement Newtons method a few times, you'll be exposed to EM algorithm, you'll work with R, etc). This is not a course where you blindly import some Python/R package and run "fit" on a data set and have no idea what's going on under the hood.
Although I was happy to get some exposure to Bayesian statistics I think there should be a Bayesian Statistics course pre-requirement. Not because the Bayesian sections were particularly difficult or anything but because it felt like Bayes was kind of just "tacked-on" when really it deserve much more attention than this course is able to provide.
Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (3.6 / 5): ★★★★☆
Lecture Rating (2.9 / 5): ★★★☆☆
Difficulty (2.9 / 5):
Workload: 10 hours/week
Pros:
1. Monotinically decreasing difficulty and time commitment
2. Fair homework assignments and generous peer-grading rubrics
3. Generous optimization curve and forgiving online learning midterm
Cons:
1. Unnecessarily difficult optimization midterm
2. Lack of responsiveness on Piazza from the TAs
3. The grading and exams feel like one giant black box
Detailed Review:
The first half of the course is full of math-heavy proofs and requires more work than the second half of the course. Students can expect to spend 10-15 hours a week on the optimization of the course, while online learning is 5-10 hours per week. The professor does a good job at explaining the algorithms and is responsive on Piazza. The optimization exam is fully multiple-choice with 8+ answer choices and required the most detailed understanding of the algorithms. The professor did an excellent job of detailing what types of questions would be on the midterm, but I still felt there was no meaningful way to prepare for it. Even though this exam was curved at the end of the course, students were never given an opportunity to discuss the exam questions, leaving a learning gap in the content. The exam was never disclosed, but it was likely in the F grade range. It was so difficult and never reviewed that I question if I really learned anything. Also, the TAs left several Piazza posts unanswered throughout the course but more so after the first midterm for some reason. The TAs were great and helpful when they did respond.
The online learning portion of the course, by contrast, skipped over all the proofs in lectures and the comparison between algorithms was clearer. The second half of the course includes many optional topics and there are weeks where students get a break from weekly homeworks which was nice. The online learning midterm was generous in its format (multiple choice with 4 answer choices) and its grading rubric, but the exam did an excellent job of allowing the students to really learn the topics in the course. There was also a very helpful exam review by the TA prior to the second midterm. I thoroughly enjoyed this section of the course.
Overall, it was a fair to generous course and parts of it was fun. It felt like two distinct courses oddly put together in a Frankenstein fashion with sporadic TA support, but there are optimal lectures that tie the two courses together. It is a good class to take early in the program, and optimization is not required as a prerequisite and is not needed to get an A. While I wish there was more grading transparency, the instructors took care of the students in the end.
Overall Rating (4.3 / 5): ★★★★☆
Professor Rating (5 / 5): ★★★★★
Lecture Rating (4.3 / 5): ★★★★☆
Difficulty (3.6 / 5):
Workload: 18 hours/week
Pros:
1. The material was generally explained clearly in the lectures and there was an emphasis on practical concepts that are useful for programmers to understand.
2. The assignments were more time consuming than I would like but they definitely helped me improve my programming skills.
3. The TA support on Piazza was excellent.
Cons:
1. The instructions/requirements for the first three assignments were far too vague, though some steps were taken to improve the clarity of the requirements for the last three assignments.
2. I had no idea how to properly study for the quizzes as they regularly tested material that was not covered in the lectures.
3. This class will likely be a miserable experience for you if you have no prior experience programming in Python.
Instructor Comments:
I enjoyed Professor Lin's teaching style and found his lectures to generally be engaging and informative. He made effective use of the chalkboard during lectures but I wish he also provided his lecture notes as a supplemental reference, especially since his handwriting was sometimes difficult to read and there were occasional errors in what was written on the chalkboard. On a personal level, I found Professor Lin to be likable and I appreciated his often self-deprecating sense of humor.
TA Comments:
The TAs played a critical role in this course and regularly provided important clarifications on assignments via Piazza. In particular, Matthew was incredibly helpful and clearly put in a great deal of time to make this course a better experience for the students. His intro videos for the last few assignments, along with Prachi's video for the last assignment, were very helpful and provided a nice overview of the assignments. Finally, Leo's interactions with Professor Lin during the lectures were entertaining and made the lectures more engaging and informative.
Course Comments:
Although this course required more hours per week than I had initially expected, I generally had a positive experience and felt that my programming skills improved significantly. I loved that there was such a strong emphasis on completing programming assignments as I find implementing, testing, and debugging algorithms to be far more engaging and useful in the long-term than a purely theoretical approach.
However, one major criticism I have is that the instructions on the programming assignments, especially the first three assignments, were far too vague and prone to misinterpretation. I found myself needing to spend hours on Piazza reading through every student question and TA response just to fully understand how I was expected to implement the methods required in a particular assignment. Some effort was made to address this issue for the next three assignments, by providing some test cases to check the correctness of your implementation and intro videos to provide an overview of the assignment, but I believe improving the clarity and completeness of the instructions for each assignment is the single most important improvement that needs to be made for future iterations of this course.
Another criticism is that I never really knew how to prepare for the quizzes and I regularly found myself asked to solve a problem that was not discussed in the lectures. Given that the quizzes were only worth 30% of the grade, compared to the 70% from assignments, I spent the vast majority of my time on the assignments and just hoped I didn't do too poorly on the quizzes. Some of the quiz questions were also worded poorly and seemed to have answers that were somewhat subjective. I would have appreciated some practice problems or additional guidance to help prepare me for the quizzes.
Finally, I think it's important to keep in mind that I started this course with considerable prior experience in Python and program in Python professionally. Many of my fellow students who were not experienced with Python had a much more negative experience in this course and I know several students ultimately dropped the course because the workload was simply too much for them to manage. Aside from being incredibly thorough in reading the instructions for every assignment, I believe having prior experience programming in Python is the single greatest determiner of whether or not a student will be successful in this class. I think it's unreasonable to expect a student to learn Python solely during the duration of the course to a degree sufficient to complete the assignments, even if they have experience programming in another language. I believe either more time should be spent reviewing Python fundamentals in the first few weeks of the course or the instructors should communicate to future students that there is an expectation that they have prior experience with Python.