Overall Rating (3.9 / 5): ★★★★☆
Professor Rating (0 / 5): ☆☆☆☆☆
Lecture Rating (0 / 5): ☆☆☆☆☆
Difficulty (2.3 / 5):
Workload: 10 hours/week
This course is a good one. It seems a little bit random at times, but the professor knows exactly what he’s doing. If you work just a little every week, you’ll have a decent android app development level by the end. As for the workload, be careful: This was my most time-consuming course for the first month. Then, once my mind started to wrap around this android stuff, I did the work relatively quickly. Tip: DON’T neglect the layout part (XML files). Especially “constrained” layouts! The professor trains you on them at the beginning, then hardly ever mentions them again. BUT, you’ll need layouts throughout the course.
Overall Rating (3.9 / 5): ★★★★☆
Professor Rating (0 / 5): ☆☆☆☆☆
Lecture Rating (0 / 5): ☆☆☆☆☆
Difficulty (1.8 / 5):
Workload: 12 hours/week
This class is largely a companion to the textbook. The summer course is very intensive due to the shortened schedule and a chapter of the book is skipped. The homeworks were fairly straightforward from the chapters but the programming assignments were rote copying of algorithms from the text book and were not terribly enlightening. The three contigious hour long final was rather brutal and if it you approach it in the same way as the homeworks it is likely you will not finish in time; I would recommend having programs prepared to calculate some of the more iteration intensive answers. As the only test of the course it was not really possible to get a feeling for what the questions would be like and I did not feel as though it was an accurate assesment of what I had learned. I would go so far as to say that I would need to reread the relavent chapters of the book if asked to implement any of the algorithms in class. The content is good at teaching the fundamentals of reinforcement learning but I do not feel as though I am as prepared to contribute to the field as compared to another course like deep learning. Some experience with a deep learning framework is recommended for the last two programing assignments.
Overall Rating (3.9 / 5): ★★★★☆
Professor Rating (0 / 5): ☆☆☆☆☆
Lecture Rating (0 / 5): ☆☆☆☆☆
Difficulty (1.8 / 5):
Workload: 6 hours/week
8 during Klivan's part of the course, 4-6 after. Material was overall very interesting, but programming assignments were somewhat lacking in depth imo. The workload and level of difficulty in this class will likely depend on your prior exposure to stats, probability, and linear algebra.
Overall Rating (3.9 / 5): ★★★★☆
Professor Rating (0 / 5): ☆☆☆☆☆
Lecture Rating (0 / 5): ☆☆☆☆☆
Difficulty (5 / 5):
Workload: 15 hours/week
Liked the instructors a lot. They did good job explaining the concepts. But I felt it is sitll hard to understand them. The 4 asignments get harder each time and I had very hard time finsihing them. (I was taking Deep learning at the same time and did not put more hours to it. That could be the reason I did not do well in RL.)
Overall Rating (3.9 / 5): ★★★★☆
Professor Rating (0 / 5): ☆☆☆☆☆
Lecture Rating (0 / 5): ☆☆☆☆☆
Difficulty (2.9 / 5):
Workload: 10 hours/week
The name of the game is copy the algorithm. Each homework requires useing pseudocoded algorithms from the textbook that need to be followed to the letter. The nuances are tricky at first, but you'll understand the notation with enough practice. Really interesting course content. Teacher are okay, exam is a bit rough. It gets curved though, don't worry. Definitely take Deep Learning first.
Overall Rating (3.9 / 5): ★★★★☆
Professor Rating (0 / 5): ☆☆☆☆☆
Lecture Rating (0 / 5): ☆☆☆☆☆
Difficulty (2.9 / 5):
Workload: 7 hours/week
I heard lots of praises for the textbook, but I found the writing difficult to understand without having to read it couple of times. Granted, it is an incredibly well structured textbook that builds on from the foundational concepts to build onto somthing pretty complex by the end of the course. The course isn't very demanding - I found myself reading the textbook, answering weekly problems sets, and occasionally doing the programming assignments. The course sets you up with basic vocabularies and concepts to understand maybe more practical work on reinforcement learning happening in the world today.
Overall Rating (3.9 / 5): ★★★★☆
Professor Rating (0 / 5): ☆☆☆☆☆
Lecture Rating (0 / 5): ☆☆☆☆☆
Difficulty (1.8 / 5):
Workload: 7.5 hours/week
Liu's lectures were far more straightforward than Klivan's lectures. I found Klivan's teaching style confusing with the lack of concrete examples. Liu's half of the course was much better because the assignments correlated more directly to the lectures, and it was easier to grasp the concepts this way.
Expanded Grading:
Rating: 2 Klivans, 4 Liu
Overall Rating (3.9 / 5): ★★★★☆
Professor Rating (2.5 / 5): ★★★☆☆
Lecture Rating (3.6 / 5): ★★★★☆
Difficulty (3.6 / 5):
Workload: 15 hours/week
Pros:
1. Was honestly really cool writing a compiler (for a toy, example language though) and learning how a basic one actually works
2. Lectures were surprisingly engaging. Subject is dry but the professor does seem like he genuinely likes to teach
3. No big final project (I hate final projects)
4. You get to practice your Java (you don't need to know it ahead of time, it's very easy to pick up the couple Java-isms needed)
Cons:
1. Professor can come across as an annoying personality especially if you ask questions (I do think he is nice though in terms of how he grades and structures the class. I'll say he averages out as just average then)
2. Midterm and final were okay but seemed sorta pointless, did not learn much from them
3. Pacing of projects was very off. 2nd by far took the most effort. I think they should have spread it out better. Not sure why you had to go all the way up to level 3, when they could have made you go to level 2 first, and call that its own project.
Detailed Review:
Pro #1 definitely holds. Used to get very annoyed by compiler errors, now I get less annoyed :). Makes a lot of sense in hindsight, but I never realized a compiler is really just doing a massive string parse of your entire program. So it now makes sense when an error is thrown because it's not in the format it expects. Again, sounds dumb and basic writing it out, but it was cool for it to actually click.
Advice for actually completing the projects: takes a bit to wrap your mind around the first project and the second one too. For the very first one, they'll post examples on the forums which help a lot. You'll quickly realize you basically always want a space for your return value, then your input variables right at the top, then do your operations on those by first making copies of them, consuming them as you do your operations. Then once you have your final result, go store it to the space you made for the return value, and then pop everything else off. To make your life a whole lot more easier for project 2, make sure that your push and store operations are only the relative ones, not the absolute position ones, and that all the code you write works so long as your inputs are on top of the stack, doesn't matter how big the stack is. So like make sure your concat will, no matter how big the stack is, so long as there is two strings at the very top, once you entire concat code runs, you will be left with just the concatenated string at the very top, the inputs will be consumed and gone. If want to make your life even more easier, make sure any named labels you do use are unique for each function you write. You'll understand why that's needed when you do project 2. Get used to debugging here too by stepping over each line and command. You will definitely need to do that a lot later on
For project 2, I think there a couple ways to do it, as in formatting your code and the overall approach you take. I think the least amount of issues will occur if you are fine with doing the entire compilation in not just one go around (I can't remember if it's this project or the next one, but you will realize that you can use functions before they are declared so you need some way to know whether they exist, which means you need to loop through the program text twice). The hardest thing to figure out is expressions: just remember that it doesn't matter how much spaghetti code you write, and you can definitely take advantage of global variables since you are writing java code, all you have to make sure is you return a correct program that passes all the test cases. It's useful to have a temporary file that you can write example test cases on and try to compile that with your code often. For the documentation they give you, all you really need is the one page that shows you the token type and all the commands you can call on it. It's useful to find the actual Java class code that does this and have it open in a separate page in your IDE and get used to the various functions you can use. Finally, making a recursive function for each grammar/language line that will return a string of compiled code is definitely the best way to structure your compiler.
If you can do the above project, you will be completely fine for the rest of the class. You have quite a bit of time to get it done, just be sure to start early and really think about it how to do it, and take it one grammar rule at a time. It's pretty satisfying when you get it all working.
Midterm/final were kinda annoying with some tricky questions. Make sure to watch and rewatch the lectures. Midterm was mostly just multiple choice and fill in the blank, but final actually required paragraph answers. Again, if you understand the practice tests given to you (and carefully read the diagrams and/or understand the question being asked) and really understand the concepts being discussed in the lectures, you will be fine.
Overall Rating (3.9 / 5): ★★★★☆
Professor Rating (0 / 5): ☆☆☆☆☆
Lecture Rating (0 / 5): ☆☆☆☆☆
Difficulty (2.9 / 5):
Workload: 10 hours/week
Need to do a fair amount of reading to really understand how to complete the projects properly. Follow the course readings and the additional documentation for the homeworks. It's dry, but worth your time. If you don't know C, you should be able to get up to speed just by completing the assignments. You'll probably start to feel more comfortable after the first few. Had a light C++ background, a bit of assembly knowledge, and a Computer Architecture course under my belt before taking this class.
Overall Rating (3.9 / 5): ★★★★☆
Professor Rating (0 / 5): ☆☆☆☆☆
Lecture Rating (0 / 5): ☆☆☆☆☆
Difficulty (3.9 / 5):
Workload: 22 hours/week
Interesting material, but I had a really tough time with it. Lots of works getting your model in the proper shape. I know its the only class available in the summer, but I wouldn't recommend it. Seems like too much work for such a compressed schedule.