If you care about your time, mental stability, and or fairness do not take this class.
I have taken many hard classes in my time at this school and by far this was the worst experience I've experienced in any of them.
However, critically, for all the WRONG reasons.
For context I have taken ECE 545 (ML), EECS 470 (Pre two semester breakup), several advanced math classes, often combining these into the same semester, and this is the first time (and probably the last time) i will write a review like this because i feel the need to prevent future students from making the same mistake i did.
But before I dive into what makes this class awful and unreasonable let me start by mentioning what is good and why you may actually want to take it.
- You learn a lot
If you make it through (without cheating!) you will be much better at writing c++, and have a much better grasp of OS concepts.
- The lectures and lecturers are very good at teaching LECTURE content
If you like great interactive lectures I had Huang and he was engaging and quite excellent, however as we'll get to later this probably won't matter much for your performance.
And that's about it.
---
Now for everything that makes this class utterly horrible.
- The specs are ambiguous
This was my number one frustration. On the projects the spec is your golden reference, since the IA's don't have access to the test suite 99% of the guidance you'll get is "read the spec". This would be fine if clear semantic requirements and behaviors were outlined, but at least 25-35% of the last two projects points are totally ambiguous.
You might think, "i can just take the statements in the spec and extend those concepts into the limit and I should be good". WRONG, many of the statements or metrics can conflict with each other, or call into question how optimistic your implementation should be.
Additionally much of what is enforced in the autograder is ordering, and semantics. Despite your program being correct and even performant, you can still fail the autograder for completely esoteric reasons.
- 1 Attempt in the autograder per day
Following from the last point, because much of what is tested is semantic and not behavioral, you may write great test cases, that stress many behaviors and have no means to tell whether the reference output of those test cases is autograder compliant until you have run it through the autograder.
But hold your horses! you only get 1 attempt per day. Why, you might ask? "because we don't want you leaning on the autograder to debug your programs as this is not how it works in the real world."
I have worked for several top tech firms. When you write a program in the real world you look at the output, the artifact to determine correctness. Then you look at performance using profilers, perhaps writing inline code to fix hot paths, and build up a test suite over time to catch regressions. Almost never are you debugging arbitrary semantic requirements blind, even in highly constrained situations with microcontrollers or drivers. This is complete nonsense.
So effectively your only resource for determining correctness is extremely limited, if you don't get lucky with your test cases, your probably screwed.
- IA's and piazza are near useless
So now your struggling on getting the final points on your project because you keep guessing at what the instructors want and missing the mark. What is the only other guidance beyond the spec, I know! of course, its office hours!
Well guess what, they can't help you either. Your best shot is going there so that other groups that perhaps did hit the cross section of the autograder you are failing can tell you what is likely wrong (tribal knowledge). But if your plan was to get help in isolation, good luck.
These events are staffed by students perhaps 1 year further in their degrees than you are, and don't possess any unique knowledge about what the autograder wants. They are guessing, just like you are, so don't be surprised when it feels like the blind leading the blind. They can only help with general concepts or speculative interpretations, but once again due to the extreme constraints around backtesting against the autograder, those speculations don't really resolve your problem much.
- Professors don't want to help you
Im being a little facetious here, i'm sure the professors actually do want you to learn but have this philosophy that you cannot learn if they give you too much of an answer. They seem to think you can only learn if you eventually guess correctly on your own with the spec at your disposal.
Perhaps it is true that by struggling more, guessing more, you inherently think about the system to a greater extent. But humans prune bad guesses from their learning once they reach a correct solution regardless, and in the space of solutions to OS problems, there is a notion of optimality.
One can learn how operating systems work by being presented with optimal solutions after recognizing the pitfalls of others, at which point the struggle against totally uninterpretable autograder output is an offensive abuse of our time and energy. It certainly follows a pattern of diminishing returns.
The analogy I would draw is when studying a math problem, practicing for an exam. You should struggle for a good amount of time, but not a indefinite amount of time. The successful guidance is typically think for 15-20 minutes about the solution and if you can't crack it maybe expose the next step and the next time you encounter a similar problem you'll probably get it faster. This obviously depends on the class of problem your trying to solve, but this is a systems introductory course. It should be somewhat contained, not open ended research.
- Little to no practice materials
Okay so the project didn't go so great what about the exams? Well there's some good news here, you probably don't have to worry too much if your projects don't go perfectly because they are not worth a incredible amount of your grade. Get 50% on one, you can still probably do well in the class.
Ah but wait, what are the exams worth? 30% each! you might be cheering or crying at this news, and you should probably be crying because prepping for these exams is just as bad or worse than the projects.
I have heard it was different in the past but at least the semester I took this class, we were given 1.5 practice exams to prepare with for the midterm and 2 exams for the final. First of all this is not enough, other classes get this right, physics and early math classes (calc 1,2,3) have practically infinite practice material between homeworks and past exams they give you.
First, the practice exams given in this class had questions with missing context from previous semesters i.e. a link referenced that you couldn't click which provided important context.
But beyond not having enough practice exams/problems and or malformed content and missing context, these exams have NO provided solutions or even a list of requirements or grading rubric.
The instructors reasoning behind this is that if they provided the solutions we would just look at them and ruin our learning. However, we are not children, and I don't understand why they insist on treating us as such. For years my method of self study has been to take a hard problem, try it on my own, compare my answer to the solution, work backwards correcting details then try a different problem. No such luck in this class, your on your own.
Additionally when you reasonably ask, how are we supposed to check if our solutions are correct once we have earnestly attempted the exams. Well they hold a review session, run by the same IA's from office hours, but guess what, they DON'T have the solutions either. I am nearly certain that some solutions presented by IAs during the review sessions were flat out wrong.
They also recommend going to office hours, but as before, the IA's don't have any more certainty than you do.
And before you think as a result the actual exams must be graded somewhat leniently due to the ambiguity in expectations, they are certainly NOT. Produce a solution that isn't perfect and be prepared to lose half or more of your points on any individual question.
- Complete disconnect from lecture content and exam expectations
This one is simple. The lectures teach concepts well, but your not going to be tested on that content. You will be tested on your ability to quickly interpret some random variation of a system that may or may not reflect anything someone has or would build, and write a implementation to solve this problem using contextual knowledge from the class.
It might be reasonable to test this, kind of like testing your ability to prove something, but just know you won't have a lot of study material, and you can be totally blindsided during the exam. You may also just get unlucky even if you do know the class content, and go down the wrong path or misinterpret some small detail. The design space is big on these problems and they are not lenient in their expectations.
- Reverse AI psychosis (AI derangement syndrome)
I am putting this here because I think from previous semesters this class may have regressed further and further into insanity. The instructors (one in particular - not huang) don't just not allow AI they hate it, they are ideologically against it. I think many of the things listed above are poor and misguided attempts to combat AI usage. Taking the exam on paper is a reasonable defense, making the spec impossible to follow deterministically is not.
In fact, it probably indirectly encourages students to use AI because of their frustrations and potential feelings of incapability. Don't provide solutions to practice exams? well students are far more likely to go ask gemini to walk them through it and probably reveal the answer prematurely while doing so.
At least if the IA's had solutions in office hours they can hold you accountable to working the problem before revealing it as is the case in many mecheng classes.
Additionally it would be infinitely better if the instructors used some AI to improve their website and autograder design to fix annoying quirks and reporting (for example showing the commit hash on submits, or not automatically retracting a view if you dont close the tab immediately after submit). But they won't because as I mentioned they are ideologically against it.
---
I have filed one or two of these complaints with the teaching staff however in case one of them is reading this post, I would strongly encourage the following, despite how sure I am you will not listen.
- Provide the previous years practice exams with solutions
- Provide clear grading rubrics and exam expectations
- Add more requirements checklists to the spec, explicitly state tradeoffs that should be prioritized and what each test in the test suite measures if it is beyond just correctness.
- Actually answer piazza questions (or if not yourself allow IAs to do so), instead of insisting that the student must read the spec more.
Yes these things would make the class easier. They would also make it far more efficient, fair, and a productive use of time. Otherwise I would never recommend this class to anyone who perhaps doesn't want to waste their time guessing and groveling in office hours.
---
I took this class because I wanted to take the core rigorous CS classes in addition to the prestige due to what I perceived to be a fair but difficult class.
My friend who had taken it in a previous semester warned me that it was less interesting and more busywork, but he should have slapped me across the face and shaken me awake.
All I can say is do not fall into the trap of taking this class for prestige or with the expectation that within a deterministic time bound you can get full points. It is true that with more hours you will do better but after a certain point it is like stochastic gradient descent with far too high of a learning rate (constantly overshooting the solutions).
Truly it is not worth it. I hope this helps. To the rest of you who take it regardless, good luck, i hope you have a better experience than i did.
This has been my TED talk. End of rant.